Poľský rádioamatér SQ2BVN vyvíja open-source dekodér CW, ktorý kombinuje klasické DSP spracovanie audio signálu s konvolučnou neurónovou sieťou na báze TensorFlow. Cieľom projektu nie je nahradiť operátorovo ucho v čistých podmienkach – na to postačí Goertzelov detektor s adaptívnym prahom. Neurónová sieť má pridanú hodnotu tam, kde zlyhávajú klasické metódy: pri silnom QSB, QRM od susednej stanice, atmosférickom QRN a nepresnom ručnom kľúčovaní.
V článku sa dočítate
Jednotný front-end ako základ
Celý systém stojí na princípe jediného zdroja pravdy pre DSP parametre. Konfigurácia v súbore config.py definuje všetky konštanty – rozsah mel pásiem (400 – 1200 Hz), počet mel filtrov (32), dĺžku okna (2,56 s pri 128 snímkach po 20 ms) a decibelovú škálu s pevnými hranicami DB_MIN a DB_MAX. Všetky nástroje – generátor trénovacích dát, tréner, vizualizácia aj živá cesta – volajú rovnakú funkciu frontend.to_net_image() a produkujú identický výstup. Tým sa eliminuje typický problém ML projektov, kde trénovacia a produkčná cesta používajú rôzne normalizácie.
Dôležitý detail: projekt zámerne nepoužíva normalizáciu na maximum klipu (REF=np.max), ktorá by spôsobila závislosť výstupu na zvyšku nahrávky. Decibelová škála je absolútna, čo zaisťuje reprodukovateľnosť – rovnaký tón pri rovnakej úrovni dá rovnaký pixel bez ohľadu na okolie.
Model rádiového kanála
Generátor trénovacích dát simuluje reálne podmienky šírenia na KV pásmach vrátane šiestich efektov: QSB (kolísanie amplitúdy), QRM (rušiaca stanica v prepustnom pásme), QRN (atmosférické výboje), nepresné ručné kľúčovanie s odchýlkou ±0 – 25 %, frekvenčný drift ±8 Hz na klip a spektrálne sfarbený šum s plávajúcou úrovňou. Efekty je možné zapínať jednotlivo, čo umožňuje merať, ktorý z nich model zvláda najhoršie. Tréningová sada prázdnych klipov (trieda 0) obsahuje aj QRM – sieť sa tak učí, že energia mimo tónu nie je znak.
X-Ray – vizuálna kontrola dát
Nástroje xray.py a xray_all.py vykresľujú trénovacie vzorky ako PNG dlaždice 128 × 32 pixelov so zdieľanou dB škálou. Pod každou dlaždicou je biely pás označujúci hranice označeného znaku a farebné indikátory aktívnych efektov (QSB, QRM, QRN, kľúčovanie). Predvolené zoradenie –sort contrast začína od najťažších vzoriek. Vizualizácia odhalí problémy s časovaním, presahom znaku cez okraj okna alebo príliš vysokým šumovým pozadím skôr, než sa prejavia na presnosti modelu.
Architektúra siete a embedded nasadenie
Predvolená architektúra (–arch dpu) používa výhradne konvolučné vrstvy s približne 624 000 parametrami a veľkosťou modelu okolo 1,5 MB. Referenčná architektúra s obojsmerným GRU existuje na porovnanie, ale pri testovaní dosiahla rovnakú presnosť 97,51 % – rekurencia nepriniesla zlepšenie a bola štvornásobne pomalšia. Receptívne pole konvolučnej siete pokrýva 110 snímok (2,20 s), čo postačuje na najdlhší znak vrátane medzier.
Konvolučná architektúra je zvolená s ohľadom na nasadenie na FPGA platforme AMD Kria KV260 s akcelerátorom DPUCZDX8G a nástrojmi Vitis AI. DPU nepodporuje rekurentné vrstvy, preto GRU variant nie je nasaditeľný. Pre mel front-end na embedded cieli existuje čisto numpy referenčná implementácia (melref.py) pripravená na port do C. Kvantizácia na int8 pre Vitis AI profituje z pevnej dB škály – kalibračný rozsah nezávisí od obsahu klipu.
Aktuálny model trénovaný na 1,6 milióna vzoriek (RTX 3050, 120 minút) dosahuje validačnú presnosť 98,95 % a dekóduje rýchlosťou 10 – 30 WPM. Obmedzením zostáva úzky frekvenčný rozsah 670 – 830 Hz – ladenie na správny tón je nevyhnutné a zabezpečuje ho modul tune.py. Verzia 0.9.2 je dostupná ako Windows inštalátor, ktorý nevyžaduje administrátorské práva a pracuje s USB zvukovou kartou transceivera alebo mikrofónom.
