Transmitting an efficient AM Stereo radio signal – Part 3
Let’s have a look at the radio signal I transmitted in part 2 – you’ll recall I used the QT GUI Frequency Sink and QT GUI Waterfall Sink to visualise the signal:
In these two visualisations you can see, at the top, a waterfall of the signal. A waterfall is a flowing graph of time vs frequency. ‘Right now’ is at the bottom of the waterfall, and the horizontal axis shows frequency. The top of the waterfall is ’20 seconds ago’. When I execute the flowgraph, the waterfall actually flows upwards.
In the graph, you can ‘see’ me talking in a signal that occupies 5 KHz either side of the carrier signal. Occasionally you see just a triple line. That’s the 1 KHz tone in the audio file on each side of the carrier wave, again showing that the frequency spread is based on the highest audio frequency being modulated.
The lower graph is frequency vs. power – that is, how much radio signal strength is spread across the signal’s transmission frequencies. In the centre is the ‘tall’ carrier wave and, either side (mirror-imaging each other) are the two sidebands containing the audio information.
How does this sound on the air? Let’s have a listen:
<ol> <li><a href='https://lansley.com/wp-content/uploads/2016/08/monoam.mp3'>monoam</a></li> </ol>
Try reducing the strength of the modulated sidebands by adding a Multiply Const block after the stereo-to-mono Add block and set the Constant value to 0.5. This halves the loudness of the audio – see if that improves transmitted audio quality.
Now let’s move from mono to stereo:
I have adjusted the flowgraph to look like this:
It took me a while to get this right (and I’m sure there are other ways to do it) but the essential part of my design is that I use two multiply blocks to multiply each of the two stereo channels by a signal source of 5 KHz. The result, for both channels, is that I get two sidebands stretching from 0 KHz to 10 KHz. Since I want to transmit the Left channel on the lower sideband I then apply a Band Pass Filter to only allow 0-5KHz through (removing the upper sideband). I want the Right channel on the upper sideband so I let only 5 KHz to 10 KHz through (removing the lower sideband). I then add the output from the bandpass filters plus the 5KHz signal together to create the finished signal that stretches from +0 to +10 KHz. A side effect of doing this is that I also get a mirror effect signal on -0 to -10 KHz too, so I apply another band pass filter which filters in only 0 to 10 KHz and a FIR Type of Float->Complex (Complex Taps) (Decim). Finally I use a Rational Resampler to change the sample rate from my working 48000 to 2000000 samples per second to send to the HackRF ONE for transmission via the Osmocom Sink block.
Stereo? Let’s take a look:
Yes! We can see, from the waterfall and frequency graphs, the upper and lower sidebands clearly transmitting content in the left and right channels respectively. The carrier is still there but those sidebands are clearly no longer mirroring each other. Stereo!
Some interesting side-effects though: The signal has now shifted 5 KHz upwards. Why did I design it like that? The Band Pass filters in GnuRadio don’t work that well when filtering ‘minus’ frequencies unless you are using Complex numbers (I used ‘orange’ Float numbers). The trouble with complex numbers is that I found some unexpected side-effects causing poor stereo separation. Switching to float and ‘lifting’ the audio so that everything is in positive numbers above zero seemed to cure the problem and give sensational stereo separation. Indeed, listening on my amateur radio transceiver which can receive single-sideband (SSB) signals, I get just the ‘Right’ channel on upper sideband (USB) and just the ‘Left’ channel on lower-sideband (LSB).
Right.. so now we need to find a way of receiving this most marvellous stereo AM signal. That’s for the next part…