Décodeur CW avec un ESP32

Décodeur CW avec un ESP32

Désireux de participer (un jour) au QSO des Piou-Piou organisé par F5NWY sur la région de Strasbourg dans la bande des 2m, j’ai décidé de commencer par me réaliser un décodeur CW basé sur un Microcontrôleur ESP32 et utilisant l’algorithme de Goertzel.

Cet algorithme a été inventé par Gerald Goertzel en 1958 pour détecter les tonalités DTMF utilisées dans l’encodage des touches des claviers téléphoniques. Il s’agit d’une analyse spectrale simplifiée d’un signal (DFT = Discrete Fourier Transform) qui permet de mesurer la présence d’une fréquence donnée dans un échantillon de mesures d’un signal.
Voir cette page : https://en.wikipedia.org/wiki/Goertzel_algorithm pour plus d’informations sur cet algorithme.

L’idée est de faire brutalement l’acquisition par l’un des convertisseurs Analogique-Digital d’un ESP32 d’une centaines de mesures du signal BF sortant d’un TX qui écoute du Morse. L’application de cet algorithme sur l’échantillon va permettre de dire si le signal échantillonné contient, ou pas, une fréquence de l’ordre de 640Hz (Fréquence audio d’un signal morse produit par le TX).
Si OUI, on dira qu’on a entendu un signal HAUT, sinon, on aura entendu un signal BAS.
Cette succession de signaux HAUT / BAS sera interprétée comme une série de Points / Traits d’un code Morse à décoder.

Je me suis inspiré de cette vidéo YouTube de G6EJD qui décrit un tel décodeur, mais qui prend son entrée depuis un Micro relié à l’ADC plutôt que de se connecter directement sur la sortie BF du TX, et utilise un écran LCD de deux lignes pour afficher le texte décodé.

J’ai adapté ce programme pour l’utilisation d’un écran TFT 4″ avec la librairie rapide TFT_eSPI https://github.com/Bodmer/TFT_eSPI et j’ai fait un diviseur de tension entre le +3.3V et la masse, sur lequel j’injecte en son point milieu, à travers un condensateur de liaison, le signal BF en provenance du TX. Le programme ESP32 écrit en langage C se charge ensuite de faire l’acquisition des échantillons du signal, puis applique l’algorithme de Goertzel sur cet échantillon, et décode ensuite le Morse qu’il affiche sur l’écran TFT.

J’ai aussi ajouté un encodeur rotatif qui permet de modifier certains paramètres de l’algorithme :
– Fréquence recherchée
– Nombre d’échantillons acquis
– etc…

J’ai également ajouté un potentiomètre numérique, piloté par l’ESP32, qui lui permet d’adapter automatiquement le niveau du signal mesuré.
Voici un exemple de décodage produit par l’écoute d’un QSO des Piou-Piou :

Vous trouverez sur mon Github le projet correspondant : CWDecoder
Il contient le programme source pour l’ESP32, ainsi que quelques photos montrant la réalisation sur une breadboard du montage décrit.