Shortly after I published the first post on a simple VHF SDR, Brady KC9TPA started making suggestions about optimising the code. So I encouraged him to have a look into the transmit side. How can we take a baseband modem signal (like GMSK) and convert it up to a HF IF frequency like 10.7 MHz using the STM32F4 DAC?
After a busy month (and not much sleep) Brady has done it! The following figures explain how it works:
Normally we would use a baseband DAC, mixer, LO, and crystal filter to generate a signal at HF (top). However Brady has shown it is possible to use a much simpler architecture (bottom).
So with the STM32F4, some clever software, and a buffer amplifier, he has generated a 10.7MHz HF signal. The DAC runs at 2MHz, which creates images (aliases) spaced every 1 MHz. The Band Pass Filter (BPF) selects just the image you want, e.g. 10.7 MHz in our case. The BPF doesn’t have to be very demanding like an Xtal filter, as the other images are 1MHz away. It is possible to tune the exact frequency a few hundred kHz in software.
Compared to a baseband IQ design this architecture doesn’t need two DACs, and doesn’t have have any IQ balance issues.
He used a GMSK modem signal as the baseband signal, however it could have easily been SSB, analog FM, or FreeDV. This is basically a baseband to HF SSB exciter. With a suitable BPF it could easily be tuned to anywhere on the lower HF bands. Software could then be used to tune the tx frequency within that band.
Brady received and sampled the 10.7MHz signal using an off the shelf SDR and it demodulated perfectly. Here are few photos showing his experimental set up, just a STM32F4 Discovery board and a buffer amplifier connected to the DAC. Note the sharp edges on the scope plot – this indicates lots of juicy HF content that we can tune to. He hasn’t added a BPF yet. The last plot is the GMSK signal as received by our demodulator running in Octave.
Our next step will be to mix this signal to VHF and add a PA to produce a 1 Watt 2M signal, to support our VHF FreeDV work. Please contact us if you can help us with a VHF PA design!
This design and the previous post that demonstrated the HF rx side suggests that the SM1000 could be modified to be a HF SDR transceiver. It already has a microphone and speaker amplifier, and even runs FreeDV out of the box! We would need to add a BPF, PA, and some gain on the rx side.
There is still a question over the STM32F4 internal ADC, e.g. it’s inter-modulation performance when used in over-sampled mode (thanks Glen English for pointing this out). Some more work required there. However this architecture is not limited to the STM32F4 – any uC connected to a few M-sample/s DAC and ADC (internal or external) will do. That’s the great thing about radios based on gcc C code and nearly no hardware!