Call Search
     

New to Ham Radio?
My Profile

Community
Articles
Forums
News
Reviews
Friends Remembered
Strays
Survey Question

Operating
Contesting
DX Cluster Spots
Propagation

Resources
Calendar
Classifieds
Ham Exams
Ham Links
List Archives
News Articles
Product Reviews
QSL Managers

Site Info
eHam Help (FAQ)
Support the site
The eHam Team
Advertising Info
Vision Statement
About eHam.net

   Home   Help Search  
Pages: [1]   Go Down
  Print  
Author Topic: Decoding multiple Morse code signals automatically on a noisy RF band  (Read 4747 times)
AG1LE
Member

Posts: 137


WWW

Ignore
« 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.

Are there any interested parties to take this forward and perhaps integrate this type of  functionality to one of these open source packages?
« Last Edit: April 16, 2012, 03:40:15 AM by AG1LE » Logged
N4OGW
Member

Posts: 303




Ignore
« Reply #1 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 Smiley

Tor
N4OGW
Logged
AG1LE
Member

Posts: 137


WWW

Ignore
« Reply #2 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
Logged
N4OGW
Member

Posts: 303




Ignore
« Reply #3 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 Sad

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




Logged
AG1LE
Member

Posts: 137


WWW

Ignore
« Reply #4 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
Logged
N4OGW
Member

Posts: 303




Ignore
« Reply #5 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
Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!