eHam

eHam Forums => Computers And Software => Topic started by: AG1LE on April 15, 2012, 07:18:08 PM



Title: Decoding multiple Morse code signals automatically on a noisy RF band
Post by: AG1LE on April 15, 2012, 07:18:08 PM
I have been looking at open source software like FLDGI,  XDEMORSE etc. but haven't found a robust Morse decoder functionality that could track and decode multiple CW stations simultaneously on a noisy RF band.

Has anybody written any open source software packages that would have this kind of capability to automatically track and decode multiple CW stations, similar to what CW Skimmer does?  

I did some experiments with excellent Octave (Mathlab) scripts from Rob Frohne, KL7NA. The scripts include automatic detection of CW station frequencies, matched filter to dramatically improve signal-to-noise ratio  and Morse decoding software.
I documented the results in my blog http://ag1le.blogspot.com/2012/04/experiment-decoding-multiple-morse-code.html (http://ag1le.blogspot.com/2012/04/experiment-decoding-multiple-morse-code.html).

Are there any interested parties to take this forward and perhaps integrate this type of  functionality to one of these open source packages?


Title: RE: Decoding multiple Morse code signals automatically on a noisy RF band
Post by: N4OGW on April 16, 2012, 06:28:54 AM
I do wide-band peak detection in my contest logging program SO2SDR. It has a skimmer-like bandmap display which does signal detection but not decoding. It is open source and you are welcome to look at what I did:

http://code.google.com/p/so2sdr/

I am not particularly interested in adding CW decode to my program as I don't want to operate in assisted classes in contests. But even without that, you can do some neat tricks once you detect all CW signals (or carriers): for example, you can easily compute the "best" open frequency to call cq on :)

Tor
N4OGW


Title: RE: Decoding multiple Morse code signals automatically on a noisy RF band
Post by: AG1LE on April 17, 2012, 05:37:45 AM
Thanks Tor
I looked  SO2SDR briefly and will install it during the weekend.

I did not find code for " spectrumProcessor" part, is that in one of the included libraries?

73  Mauri


Title: RE: Decoding multiple Morse code signals automatically on a noisy RF band
Post by: N4OGW on April 17, 2012, 06:27:02 AM
Thanks Tor
I looked  SO2SDR briefly and will install it during the weekend.

I did not find code for " spectrumProcessor" part, is that in one of the included libraries?

73  Mauri

Yes, that is where all the peak detection is. It is all in spectrum.h and spectrum.cpp. Look in the function "detectPeaks". Sorry, the code could be a lot clearer and better documented :(

I do something like this:


1) for each spectrum from the FFT, do some smoothing (a running average in frequency). Also average several recent spectra together in time.

2) look for peaks in the averaged spectrum, computing the center frequency. Store this in a list, along with the number of times this frequency has been found.

3) once a peak has been detected several times with the same (within some delta_frequency) center frequency, count it as an active "signal". Otherwise remove peaks after a certain time interval has elapsed. Keep active signals in the list for somewhat longer.


#3 is important for distinguishing peaks from noise- otherwise it is easy to find peaks in a noisy band. But a CW signal will have a frequency that is constant.

Tor
N4OGW






Title: RE: Decoding multiple Morse code signals automatically on a noisy RF band
Post by: AG1LE on April 17, 2012, 01:54:34 PM

Quote

I do something like this:

1) for each spectrum from the FFT, do some smoothing (a running average in frequency). Also average several recent spectra together in time.

2) look for peaks in the averaged spectrum, computing the center frequency. Store this in a list, along with the number of times this frequency has been found.

3) once a peak has been detected several times with the same (within some delta_frequency) center frequency, count it as an active "signal". Otherwise remove peaks after a certain time interval has elapsed. Keep active signals in the list for somewhat longer.


#3 is important for distinguishing peaks from noise- otherwise it is easy to find peaks in a noisy band. But a CW signal will have a frequency that is constant.

Tor
N4OGW


Tor

This is brilliant...I downloaded the software and did a quick test using laptop built-in microphone.
The waterfall spectrum window  works smoothly and your user interface is very nice and clean. 
Thank you so much for replying to my post.  This enables to experiment with different algorithms
on Octave and  write an optimized version with C++. 

73  Mauri


Title: RE: Decoding multiple Morse code signals automatically on a noisy RF band
Post by: N4OGW on April 18, 2012, 06:06:14 AM
Glad it worked for you. There are definitely some challenges with locating and decoding CW signals efficiently. You want both good frequency and time resolution, but increasing one of those criteria decreases the other.

Tor
N4OGW