About 20 years ago I was building various SDR receivers and I needed a signal generator to test their performance. I decided like most hams to build my own using the latest Analog Devices 8 bit DDS chip AD9850. The unit was controlled by a simple Atmel ucontroller, was battery powered/portable and worked up to 25MHz (Fig.1). Flash forward to now, and I was talking to a fellow ham who told me he was going to use the HRF1 as a signal source for his project. I suddenly realized the potential of this device as a signal generator for amateur radio applications due to its wide bandwidth of 1MHz to 6GHz.
Figure 2 shows a simplified block diagram of the HRF1 (Ref.1). Operation is half duplex, meaning you are either receiving or transmitting, but not both. The wideband front end has a fixed gain amplifier of 11dB in both rx/tx. In the IF stage, there is a 0-47dB gain block in the tx path. I purchased my HRF1 about four years ago. I have only used it in receive mode. It really came in handy when receiving ADS-B signals, because the wider sampling range of 10Msps gave a much clearer AM decode of the received packets as compared to the RTL-SDR. When I purchased the unit, I set it up using Pentoo Linux and the tutorials of the developer Michael Osmann (Ref.2).
I decided to update the firmware. Rather than using Pentoo Linux, I simply used my RaspberryPi4 as it had GNU radio installed with the libhackrf and hackrf_tools. Figure 3 shows the hackrf_info command used to determine your firmware version. The documentation of upgrading the firmware is excellent.
Figure 4 shows the test setup. The HRF1 is connected to a Signal Hound Spectrum analyzer using a 10dB pad and DC block (protection just in case, only the paranoid survive!). The Signal Hound uses the Spike program for measurement and the HRF1 can be controlled either from GNU Radio or SDRangel.
GNU Radio Control
Figure 5 shows the GNU Radio Companion schematic used to drive the HRF1 transmitter (Ref.3). The Osmocom Sink block controls the HRF1 transmitter. Two range variables are used. The first one “freq” sweeps the amateur radio band of interest, in this case the 20m band. The second variable is the IF Gain “if_gain”. In order to create a cw signal, the input to the Osmocom is a baseband carrier at 0Hz generated by a complex constant = 1.
When you open SDRangel, by default there is an rx device R0. Make sure you don’t select the HRF1 as this device, because it is half duplex and you will be using it as a sink. Select local input instead. Then add a Sink Device and then select the HRF1 from the list of detected devices/options. Set the frequency for 20m 14.2MHz. Then add a channel module. The NBFM works well. Since we are working in cw mode, you don’t have to enable the FM tone modulation, just leave it off. Then start the HRF1 and you will see the transmit red line. You can vary the IF gain up to +47dB.
Measurement Results 160m – 70cm
Figures 7 – 10 show the HRF1 performance over the ham bands of 160m, 20m, 2m, and 70cm. Power output is ideal for receiver testing at approx -20dBm. Frequency accuracy is good compared against the Signal Hound. Output is slightly higher by about 1dB using GNU and there is a slight power gain as we go up in frequency.
#1. – “HRF1”, Great Scott Gadgets
#2. – “Software Defined Radio with HackRF”, M.Osmann
#3. – “GNU Radio”
#4. – “SDRangel”