After being licensed as a ham radio operator since the early 2000s, you tend to start thinking about combining your love for the radio with other talents. In a 20-minute talk at Hackaday Supercon 2022, [Mooneer Salem] tells the story of one such passion project that combined software and radio to miniaturize a digital ham radio modulator.
[Mooneer] works as a software developer and contributes to a project called FreeDV (free digital voice), a digital voice mode for HF radio. FreeDV first compresses the digital audio stream, then converts it into a modulation scheme sent out over a radio. The appeal is that this can be understandable down to very low signal-to-noise ratios and includes metadata and all the other niceties that digital signals bring.
Traditionally, this has required a computer to compress the audio and modulate the signal in addition to two sound cards. One card processes the audio in and out of your headset, and another for the audio coming in and out of the radio. [David Rowe] and [Rick Barnich] developed the SM1000, a portable FreeDV adapter based around the STM32F4 microcontroller. However, flash space was running low, and the cost was more than they wanted.
[Mooneer] loved the open firmware and open hardware model of the SM1000 and wanted to revisit the idea. Make it easier to use, add newer features, and, most importantly, reduce costs. The ESP32 was an obvious choice as it was cheap and ticked all his boxes. He ultimately settled on an ESP32-S3 as the standard ESP32 didn’t quite have the performance needed to run in real-time. A TLV320 dev board was expensive, so he rolled his own for the experience, an attitude many of us can relate to.
After days of dealing with I2S woes, he respun the board to try and address an audio issue where only 60 Hz noise could be heard. Assuming it was EMI problems, he rerouted traces, tuned components, and added more vias. However, even after the respin, the issue was still there, and he realized the TLV320 had a loopback mode, making it a software problem after all.
The result is the ezDV which has all its code and board files on GitHub under a TAPR Open Hardware License and the GNUv3 license. It supports three of the five modes of FreeDV (it doesn’t support 2020 or 700C). Not supporting 2020 makes sense as 2020 uses an LPCNet neural network to turn 8 kHz of audio into just 1600 Hz. This requires a rather beefy computer that has AVX support.
[Mooneer] presents a beautiful story about the journey to create something well-documented and reproducible. If you’re looking into digital radio, maybe this is an excellent place to start.
(Editors note: corrected the spelling of David Rowe and FreeDB, thank you [Drone]).
Awesome build.
Very nice to see a design with _AVAILABLE_PARTS_ to do what SM1000 did.
And as hams are never satisfied, M17 support when?
@Matthew Carlson, two small but significant typos in paragraph-3. Excerpting the original: “[David Roew] and [Rick Barnich] developed the SM1000, a portable FreeDB adapter based around the STM32F4 microcontroller.”
A. I believe [David Roew] should be spelled [David Rowe]; or precisely [David Grant Rowe], one of the developers of Codec 2 [1][2] and FreeDV [3] at Rowetel [4].
B. FreeDB should be spelled FreeDV.[3]
* References:
1. Codec 2 – Overview
https://en.wikipedia.org/wiki/Codec_2#Overview
2. Codec 2 – Rowetel
https://www.rowetel.com/?page_id=452
3. FreeDV
https://freedv.org/
4. Rowetel
https://www.rowetel.com/
Thank you for pointing it out. You are 100% correct it is David Rowe and FreeDV not freeDB. I’ve added a little footnote at the bottom explaining the change.
That looks to be a very interesting CODEC. Low power, dual DSP and i2S! I can see some sort of breakout Dev board project coming up using this. Thanks Salem!
A dev board would be ideal and save allot of time and frustration
I used the SGTL5000 codec with CODEC2 (https://github.com/LieBtrau/digital-walkie-talkie/tree/master/firmware/tests/audio/sgtl5000-codec2-decoding_newI2S).
The SGTL5000 IC is slightly more expensive than the TLV320, but there’s a cheap (€16) breakout board (Teensy Audio Adaptor board : DEV-15421) and Paul Stoffregen’s accompanying library works out of the box.
Anyway, in the future I would use the ESP32-A1S module, which has a built-in audio codec and is even cheaper. There’s also a cheap development board for it.
I have no issues with running Codec2-1200bps real-time on ESP32 (https://github.com/LieBtrau/digital-walkie-talkie/tree/master/firmware/tests/audio/esp32-codec2/lib/Codec2) : 40ms of audio takes 16.8ms to encode and 15.2ms to decode.
I haven’t focused on more computationally expensive lower bitrate modes (e.g. 700bps) because I found out (during tests running codec2 on my linux pc) that the produced audio is nearly unintelligible, so useless for a practical application.
Hi, I focused on these modes, tested in practice on satellite channels https://youtu.be/2qat3EseruU and came to the same conclusion as you. Therefore, I rebuilt the project for channels with a low bitrate.
Hi, Christoph. I tested this in practice through satellite channels and came to the same conclusion as you. Therefore, I rebuilt the project to work on channels with low bandwidth https://www.youtube.com/watch?v=q8EAK4VTuso&list=PL8uzLy6YKznmBBvGsYomXoyo7XLHRKuUa&index=1
Or maybe FreeDATA support??
Hah, I started designing an open source handheld radio not too long ago and also settled on the ESP32-S3. Good to see I’m not heading in the wrong direction. Will have to take an indepth look at this later.