In my last post (Polar Modulation - A Deep Dive Into Phase Calculations) I proposed a change to Guido's phase-calculation algorithm. Here I describe the tests I conducted to check what impact the changes would make. The short answer is that for typical voice transmissions the IMD products are significantly reduced.
My tests compare Guido's phase-calculation algorithm:
if (deltaPhase < 0) deltaPhase = deltaPhase + 2*PI
Against mine (which in this post I will call the shortest-path algorithm):
if (deltaPhase <-PI) deltaPhase = deltaPhase + 2*PI // take the shorter pathif (deltaPhase > PI) deltaPhase = deltaPhase - 2*PI // take the shorter path
The polar modulator used in these tests calculates phase/frequency and amplitude at a 12ksps rate; the si5351 is updated at this rate, and the amplitude is linearly interpolated at x12 this rate.
In my test setup the polar modulator transmitter output fed via an attenuator into my kiwiSDR. The kiwiSDR is excellent for these tests because I can record its waterfall data to a file for offline IMD analysis. The waterfall is 1024 frequency bins wide and each bin is represented by a single byte. Each line updates approximately 20 times/second. I've independently characterised the waterfall data to confirm:
- Each byte is a dB representation of the received power, with a linearity of at least 80dB
- The kiwiSDR has excellent dynamic range such that a very low level signal retains its correct dB setting even when an interfering signal 80dB larger is just 1kHz away.
These measurements show the kiwisdr is up to the task of capturing any out-of-band IMD products. Some python code to analyses the recorded waterfall data.
The main test I've done is to replay an audio track (Hershberger's ssbdemod.wav CESSB audio track - see https://www.arrl.org/files/ file/QEX_Next_Issue/2014/Nov- Dec_2014/Hershberger_QEX_11_ 14.pdf ) from my PC into the transmitter, whilst simultaneously recording the waterfall results - first with Guido's phase algorithm, again with my shortest-path algorithm, and finally an FTDX-10. Each recording is for approx. 20 seconds.
Here are waterfall plots I've created from the recorded data. You can see the voice, followed by the single tone beep, and then the audio looping around again for a total of about 40 seconds:
Polar-modulation - Guido's algorithm:
Polar - modulation - shortest-path algorithm:
I've done some further analysis of this data as follows:
- sum the total power in each waterfall bucket (the dB values are converted into arbitrary power units), and to plot it.
- From this vector, sum the total power across the entire waterfall spectrum and the total signal power inside the SSB "channel" of 3kHz width (highlighted in green in the charts below). Crudely, the noise power = Total power - signal power
- Calculate a signal-to-noise ratio = 10log10(signal power / noise power).
Guido's algorithm:
Shortest-path algorithm:
snr = 10log10(signal power/noise power) = 24dB
FTDX10:
Conclusions
This test setup and analysis shows a few interesting things:
- The "shortest path" algorithm makes a non-trivial improvement to the IM products (compared with Guido's algorithm) when transmitting typical voice.
- An aggregate snr of 24dB for the "closest path" polar modulation is pleasingly close to 28dB snr of the FTDX10.
- The -40dB IMD products at about 7.170MHz are unexpected and warrant further investigation.
No comments:
Post a Comment