convert signal to morse code

3 views (last 30 days)
as part of my self project, I'm trying to do morse encoder and decoder from sound,
I'm at the part before the decoder, I'm receiving the signal from the spectrogram and I convert it to a "digital signal" that is equal to the morse code but I don't know how to convert it to dash, dot, and space between words
I received a signal (for example) after some counter manipulations to filter the spectrogram signal
this plot its vector of [1x1499 values]
and the value of code after: - . . . . -
isn't good enough because I want it exactly like this: - . ... -
- . ... - = test (t=- ,e=. ,s=... ,t=- )
and of course, I want to do it generic and not specific for this example morse combination code.
  1 Comment
dpb on 9 Nov 2021
That's a fairly clean-looking signal -- I think I'd try findpeaks to locate the peaks and the time delay between each. The peak magnitude >~80 --> dash and >~40 --> dot look to to be a good selection level. Finding the delays longer than the (illegible) time between peaks would appear to be all needed for the spaces.

Sign in to comment.

Accepted Answer

John D'Errico
John D'Errico on 9 Nov 2021
As @dpb suggested:
  1. Use findpeaks to locate each peak. (Ignore the tiny ones. So anything that is significantly above the baseline.)
  2. The value of the peak will indicate if it is a dash or a dot. high peaks indicate dashes. Low peaks indicate dots.
  3. Next, check the time between each successive peak. You can almost think of this set of times as a new series. The time between peaks is fairly uniform, except when there is a space. A space is indicated when there is a large chunk of time between successive peaks.
Easy enough. Your job to write the code though.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by