The best description that I’ve found of PSK31 decoding is actually in the WinPSK Technical Manual. Its remarkably informative.
WinPSK Technical Manual
This isn’t really all that amazing, but I thought I’d place it here anyway. As part of my experiments in decoding PSK31, I recorded a minute of the 40m band and saved it out as an uncompressed 8000 samples/second WAV file. This morning, I dusted off the fftw library, and wrote a 30 line stub program to convert the one minute of audio into a graphical interpretation of the spectrum. If you click the link, you can see what that looks like:
Audio Spectrogram of the 40m band
Frequency increases from 0 to 2khz from left to right, time increases downward. Each scanline represents about 1/50th of a second. Horizontal, fuzzy lines are usually temporary bursts of static. The strong vertical lines are each individual transmitters, all operating the PSK31 mode (except for one brief unmodulated tone of undetermined origin, see if you can spot it). When the trace separates into two distinct lines, the transmitter is in a pause state: the person at the keyboard is typing slowly. One person obviously types quite a bit slower than PSK31 can transmit.
There is also some fairly clear indication of fading, and when the unmodulated carrier comes on, you can see that it is so strong that it might be desensitizing the receiver.
Anyway, I just thought it was fun. The demodulator requires some filter design and digital PLL design that I don’t completely understand, but this was a first step. Incidently, the amount of time to do the FFTs here is so close to trivial as to be not worth mentioning.
Technorati Tags: Amateur Radio, Digital Signal Processing, My Projects
Addendum: Above you can see the total power over the entire minute, scaled logarithmically. In it, it isn’t hard to see that around 0.4 (corresponding to 3.2khz), the background noise ramps off considerably. This is just the crystal filter in the Drake ramping off background noise. You can also see its response below about 300hz is quite low, and can easily recognize peaks which correspond to the carriers and PSK31 signals in the spectrum that I linked above. Neat.