Let’s examine how an Arduino Morse Decoder works, and look at some popular solutions available.
Here is how an Arduino Morse Decoder works. Basically, its converts audio from the receiver into text on a screen. There are six sequential steps involved in making this happen.
- Digitize the audio. Computers need data, not signals. Convert the audio signal into data. This is called analog-to-digital conversion, or ADC. An example of an ADC is the input side of your computer’s sound card. Sound goes in, data comes out.
- Threshold. A Morse Code tone exists in a sea of noise. Even with automatic gain control, the signal level varies. Also, you need to ignore the broadband noise and select the narrow band tone. Normally, the tone is stronger than the noise. You set a signal threshold so the detector can differentiate between tone and noise. One approach is to set the threshold manually with a knob. The other is to use software to adjust the threshold automatically.
- Detect the tone. A strong signal at the right frequency indicates a tone. The detector is like an on-off switch. If a signal at the right frequency exceeds threshold, the switch is turned on.
- Filter the data. Since you will be detecting the tones faster than they are actually being sent, you need a filter to smooth out the data between samples. Filtering is also used remove noise spikes in the audio.
- Decode tones to characters. This is all about timing. The duration of Morse elements, and the spacing of letters and words, follows a standard pattern, as explained on Wikipedia. This pattern holds relatively steady regardless of the speed. By understanding this pattern, your software converts on-off data into characters. Machine generated Morse decodes perfectly; human sent code, not so much.
- Display the results. Finally, after the characters are decoded, they are displayed on a screen.
That’s the algorithm for a Morse decoder. Math is used for implementation. In some solutions, steps 1-3 can be done using external hardware, such as the LM567 tone detector. In other solutions, software does it all.
Arduino Morse Decoder – Choices Available
Here are some choices for “ready made”, open source solutions. It makes more sense to reuse rather than reinvent.
- Danish ham, Hjalmar Skovholm Hansen, OZ8SMA provides a Arduino Morse Decoder that does not require external hardware. Rather, it uses the Arduino analog input to sample audio from the receiver. Then, digital signal processing detects and filters the tones. The details are on his web site. Here is a video demonstration.
- Budd Churchward, WB7FHC has another popular solution. You can find details on his web site, or watch this video for a demonstration.
- WV2YAU uses the LM567 external tone decoder together with Budd’s software, as described in this video.
I am going to start by building the Danish solution next.