Since getting my amateur radio license a while back I haven’t made much use of it, so yesterday I decided to try and do something about that. Unfortunately the handheld Yaesu VX-6E I ordered four weeks ago hasn’t arrived yet, so I decided to go an alternate route: figure out how to transmit narrowband FM using the HackRF One. The goal of the evening would be to get a conversation (QSO) going via the local VHF repeater on 145.650 MHz.
Some digging around on the Web showed that this is possible, but only as a transmit-only thing. Two-way communication is still tricky. GRC might not be a good enough tool for switching between TX and RX on a simplex device like the HackRF.
I eventually managed to cobble together a reasonable GNU Radio flow graph. After some poking around, with SA2KNG listening for my attempts at reaching the outside world, we figured the transmit power was too low, since even something very narrow like CW (Morse) was barely making it through the ~5 km distance from my location to Umedalen.
More digging around revealed that the RF amplifier on the HackRF may have some issues, and that there is an IF amplifier as well. Changing the IF amplifier setting from the default of +20 dB to the maximum of +47 dB made my signals go through quite well. It was time for the next part of my plan: activating the local repeater.
Activating the repeater simply means transmitting a 1750 Hz tone, which was relatively simple to extend the flow graph to do. The result was people on IRC noting that there’s a hell of a lot of beeping going on on the repeater. But I wasn’t hearing it. Why?
The answer turned out to be that the RTLSDR USB stick I was using for listening (via gqrx) was not picking up the repeater, but only my outgoing signal. A quickly constructed antenna (from a piece of TV coax) fixed that problem, and I was now able to repeat the experiment. I also added some courtesy features to the flow graph (push-to-talk, tone generator on/off). The end result was a successful (if noisy) QSO with SA2KNG. Success!
GNU Radio notes
Some random notes about GNU Radio while I’m at it:
There doesn’t seem to be an easy way to implement a push-to-talk feature. For now I have hacked one together using a GUI slider that controls a “multiply const” box. The slider can only have the values “0″ or “1″, so it can be moved by tabbing to it in the UI and pressing the left/right arrow keys. I implemented a similar slider hack for enabling the 1750 Hz tone generator. Another problem is having to use an RTLSDR dongle for RX. I suspect this may be possible to fix by setting up a flow graph with both an RX and TX part, then enabling/disabling the relevant parts using some python code. The same python code could also read the keyboard, and maybe switch channels.
Here’s my code here in case someone else finds this interesting: nbfm-tx.grc. I’ve also attached a picture of the flow graph below: