RSCW is a Linux/Unix program for decoding morse signals using the computer's sound card. It has been written/optimized for digging weak signals out of the noise. However, it can only handle signals with perfect timing, which in practice means machine-sent signals. Furthermore, the user must specify the speed (words per minute); the program cannot (yet) determine this automatically from the received signal. As a final inconvenience, RSCW introduces quite a bit of delay: the decoding lags the reception by about 2 seconds. As a consequence, RSCW is not a general-purpose morse decoder that can replace a skilled operator in say a contest. However, it is quite useful for e.g. the automatic reception of telemetry from amateur-radio satellites.
If you are interested in contributing ideas, algorithms and/or code to make the program more generally usable, you're welcome; source code and a description of the algorithms used are available, see below.
The letters RS in the name RSCW stand either for "receive" and "soundcard", or for "radio sputnik". The latter is a reference to the original goal for which RSCW was written: decoding the telemetry from the RS-12 amateur radio satellite.
First, download the .tgz-file here.
Then type Make to compile everything.
Note: you'll need to install the FFTW library first, if it is not already on your system; for the rscwx program, also the GTK library is needed.
The result should be following four programs, which you can copy to any directory in your path, e.g. /usr/local/bin:
The present version of RSCW is version 0.1c. It only differs from the original version 0.1 in supporting FFTW v3 and a few minor fixes; the decoding algorithms have not changed.
Above, a screen shot of RSCW in use is shown, decoding a pre-recorded piece of RS12 telemetry. Three windows are shown: an xterm in which RSCW is running, and two (optional) graphical windows. One of these shows the spectrum (in green), with a red line indicating the carrier frequency RSCW has chosen. The other window shows graphs of several internal "signals": the green line is the magnitude of the signal, the red line the threshold, the yellow line is a signal used for regenerating the bit clock, and the cyan line shows the signal after sampling. Finally, at the bottom the decoded characters are shown, both as text and as dots and dashes.
For more details, read the description of RSCW's algorithm.
To illustrate the performance of RSCW, here is a .wav-file
(note: about 300 kB long!)
containing a morse code signal at 12 words per minute, 800 Hz carrier frequency,
with Eb/N0 of 12 dB
(Note: Eb is defined here as the energy in one dot, while N0 is the noise power spectral
The transmitted text is ABCD EFGH IJKL MNOP QRST UVW XYZ.
RSCW decodes this almost without errors: AABCD EFGHEIJKL MNOP QRST UKW XYZNGT.
To try such experiments for yourself, command lines like the following can be used:
sox example_12_12.wav -t ub - | rscw -w 12 -f 800
echo " some test message " | noisycw -w 24 -f 1200 -e 20 | rscw -w 24
The first of these examples invokes the sox utility to convert the .wav-file to the format rscw needs. The second example generates the noisy morse code signal itself, in this case at 24 wpm, at 1200 Hz, with 20 dB Eb/N0.
I'd be interested in comparisons of RSCW's abilities with those of other similar programs (for other operating systems, since as far as I know, RSCW is the only such program for Unix/Linux), and with the capabilities of good CW operators. Listening to the above 12 dB .wav-file, I think I would recognise only a few of the characters if I didn't know what was being sent; even knowing that, I repeatedly lose track. But better trained CW operators will probably do better than I, though I doubt that they would outperform RSCW on machine-sent signals in the presence of just white noise...
I'm interested in your comments on and experiences (both good and bad) with RSCW. I can be contacted by e-mail at firstname.lastname@example.org.
Back to PA3FWM's amateur radio software page