Obsah:

Morder dekodér Binary Tree: 7 krokov (s obrázkami)
Morder dekodér Binary Tree: 7 krokov (s obrázkami)

Video: Morder dekodér Binary Tree: 7 krokov (s obrázkami)

Video: Morder dekodér Binary Tree: 7 krokov (s obrázkami)
Video: When Student use phone in class #shortsyoutube #shorts #students #comedy #jennyslectures 2024, December
Anonim
Image
Image
Schéma zapojenia
Schéma zapojenia

Tento návod vysvetľuje, ako dekódovať Morseovu abecedu pomocou Arduino Uno R3.

Dekodér, ktorý sa automaticky prispôsobuje rýchlosti odosielania, je schopný dekódovať morze až do rýchlosti 80 slov za minútu.

Prichádzajúci kód sa zobrazí ako text na vašom sériovom monitore Arduino (alebo obrazovke TFT, ak je k dispozícii)

Tónový oscilátor bol zahrnutý, ak by ste si chceli precvičiť odosielanie morze.

Vlastnosti dekodéra:

  • zobrazovací modul 320 x 240 TFT [1]
  • digitálny pásmový filter Goertzel na oddelenie nechcených signálov.
  • „binárny morseov strom“na dekódovanie signálu
  • automatické sledovanie rýchlosti
  • počuteľný výstup pri cvičení morze
  • zobrazuje sa prichádzajúci aj odchádzajúci text.

Rozoznávajú sa nasledujúce znaky a symboly:

  • [A.. Z]
  • [0..9]
  • [., ? ' ! / () &:; = + - _ " @]

Odhadovaná cena štítu dekodéra Morse bez TFT displeja je 25 dolárov. [1]

snímky

  • Na titulnej fotografii je úplne zmontovaná jednotka
  • Video ukazuje, ako dekodér funguje

Poznámky

[1]

  • Modul displeja TFT je voliteľný, pretože všetok text je odoslaný do vášho „sériového monitora“Arduino.
  • Modul TFT je popísaný v mojom pokyne

Krok 1: Zoznam dielov

Nasledujúce diely boli získané z

1 iba prototyp štítu pre Arduino UNO R3, rozteč 2,54 mm

Nasledujúce časti boli získané lokálne:

  • 1 iba duálny operačný zosilňovač LM358
  • 1 iba LED zelená
  • 1 iba LED klip
  • 1 iba elektretová mikrofónová kapsula
  • 1 iba normálne otvorené tlačidlo
  • 1 iba 8-kolíková zásuvka DIP
  • 2 iba odpory 330 ohmov
  • 2 iba odpory 2K2
  • 5 iba odpory 10 K ohmov
  • 2 iba odpory 56K ohmov
  • 2 iba 1uF kondenzátor
  • 1 iba 10uF kondenzátor

Nasledujúce diely sú voliteľné:

  • 1 iba 2,2 palcový modul TFT SPI LCD displej 240*320 ILI9341 so slotom pre kartu SD pre Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • Morseov kľúč / tlačidlo
  • 1 iba tranzistor BC548 NPN
  • 1 iba 1 palcový reproduktor
  • 1 iba odpor 33K ohmov
  • 1 iba 3,5 mm mono zástrčka (pre morzeový kľúč)
  • 1 iba 3,5 mm mono zásuvka (pre morzeový kľúč)
  • 3 iba 9 mm závitové nylonové rozpery M3
  • 1 iba plastový box ABS 130 x 68 x 44 mm
  • 5 iba 2-kolíkových pravouhlých konektorov

Odhadovaná cena štítu dekodéra Morse, mínus voliteľný TFT displej, je 25 dolárov. [1]

Poznámky

[1]

Zoznam dielov pre voliteľný modul displeja TFT 320 x 240 je uvedený v mojom pokyne

[2]

Ak chcete odosielateľa použiť, je potrebný morzeovský kľúč alebo robustné tlačidlo.

Krok 2: Schéma zapojenia

Schéma zapojenia
Schéma zapojenia
Schéma zapojenia
Schéma zapojenia
Schéma zapojenia
Schéma zapojenia

snímky

Fotografia 1 zobrazuje schému zapojenia dekodéra Morse. Rezistor 330 ohm v sérii s morzeovým kľúčom obmedzuje výstupný prúd D4 v prípade náhodného skratu k zemi … zvýšenie jeho hodnoty zníži výstup zvuku z reproduktora. Z tohto dôvodu som ho nepridal k štítu, ale pripevnil som ho priamo k konektoru morzeového kľúča, aby sa uľahčilo nastavenie

Fotografia 2 zobrazuje zodpovedajúci štít. Štít je z môjho pokynu https://www.instructables.com/id/Arduino-TFT-Grap…, do ktorého som pridal zosilňovač mikrofónu a tónový oscilátor. [1]

Fotografia 3 zobrazuje dokončený štít pripevnený k Arduinu. Na zobrazenie textu na vašom „sériovom monitore“Arduino nie sú potrebné žiadne ďalšie komponenty

Na fotografii 4 je dekodér čiastočne zabalený. Vo veku je vyrezaný otvor na sledovanie displeja. Reproduktor a mikrofón boli na puzdre prilepené za tepla. Pred montážou reproduktora vyvŕtajte do krytu niekoľko otvorov pre reproduktory. Stredová zásuvka na veku slúži na rozšírenie mikrofónu … bez toho musí byť dekodér umiestnený v blízkosti reproduktora, čo nie je vždy možné

Na fotografii 5 je obrazovka TFT. K okrajom displeja je pripevnená čierna elektrická páska … táto páska zabraňuje úniku svetla a maskuje akékoľvek nesúososť medzi displejom a otvorom vo veku

Dôležité

[1]

Arduino s veľkým konektorom USB vyžaduje vrstvu elektrickej pásky medzi konektorom USB a štítom Arduino. Náhodné šortky sú možné bez pásky, pretože voľný priestor je malý. Páska nie je potrebná pre Arduino, ktoré majú malé konektory

Krok 3: Teória

Teória
Teória
Teória
Teória
Teória
Teória

Každé písmeno morzeovky obsahuje sériu krátkych a dlhých tónov nazývaných „bodky“a „pomlčky“.

  • bodka (.) je 1 jednotka na dĺžku
  • pomlčka (_) má dĺžku 3 jednotky
  • medzera medzi písmenovými prvkami je 1 jednotka
  • medzera medzi písmenami je 3 jednotky
  • medzera medzi slovami je 7 jednotiek

Môžeme určiť, či je prichádzajúci tón bodka alebo pomlčka, porovnaním jeho trvania s referenčným tónom s dĺžkou 2 jednotky.

  • bodka je menšia ako 2 jednotky
  • pomlčka je väčšia ako 2 jednotky

Existujú dve zreteľne odlišné metódy na dekódovanie prichádzajúceho vzoru bodiek a čiarok:

  • lineárne vyhľadávanie
  • binárny strom (známy tiež ako dichotomické vyhľadávanie)

Lineárne vyhľadávanie

Jednou z bežných metód je vytvoriť pole znakov a ich zodpovedajúce morzeovské vzorce. Každý z nasledujúcich znakov by bol napríklad uložený ako:

  • A. _
  • B _…
  • C _. _.
  • 0 _ _ _ _ _
  • 1. _ _ _ _
  • 2.. _ _ _

Každé písmeno vyžaduje 6 buniek… 1 pre samotné písmeno a 5 pre (.)’A (_)’ s. Na to potrebujeme pole znakov s písmenami [36] [6] s celkovým počtom 216 buniek. Nepoužité bunky sa normálne vypĺňajú nulou alebo prázdnym políčkom.

Na dekódovanie prichádzajúcich bodiek a pomlčiek musíme porovnať vzor bodiek/pomlčiek každého prichádzajúceho písmena s našimi vzormi referenčných znakov.

Aj keď táto metóda funguje, je veľmi pomalá.

Povedzme, že máme 26 písmen („A“,.. „Z“) a číslice („0“,… „9“) uložených v poli, potom musíme vykonať 36 vyhľadávaní, každé s až 5 čiastkovými vyhľadávaniami, čo je celkom 36*5 = 180 vyhľadávaní na dekódovanie číslice „9“.

Binárny strom

Binárne vyhľadávanie je oveľa rýchlejšie, pretože nie sú potrebné žiadne vyhľadávania.

Na rozdiel od lineárneho vyhľadávania, ktoré vyžaduje ukladanie vzorov znakov a morsy, binárny strom ukladá iba znaky, čo znamená, že veľkosť poľa je menšia.

Svoj binárny strom (foto1) som rozdelil na dve polovice (fotografie 2 a 3), aby bol čitateľnejší.

Aby sme našli postavu, posunieme ukazovateľ doľava vždy, keď počujeme bodku, a posunieme ukazovateľ doprava vždy, keď počujeme pomlčku. Po každom ťahu znížime vzdialenosť ukazovateľa na ďalší krok na polovicu… odtiaľ pochádza názov binárny strom.

Na dekódovanie písmena „9“(pomlčka, pomlčka, pomlčka, pomlčka, bodka) je potrebných 5 ťahov … 4 doprava a 1 vľavo, čím sa ukazovateľ dostane priamo nad „9“.

Päť ťahov je výrazne rýchlejšie ako 180 vyhľadávaní !!!!!

Pole binárnych znakov je tiež menšie … 26 písmen a 10 číslic vyžaduje iba riadkové pole 64 x 1. Rozhodol som sa vytvoriť pole so 128 znakmi, aby som mohol dekódovať interpunkciu.

Krok 4: Poznámky k návrhu

Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu

Morse je ťažké dekódovať v prítomnosti rušivých signálov. Nežiaduce signály musia byť odmietnuté … to vyžaduje nejaký druh filtra.

Existuje veľa možností:

  1. Fázovo uzamknuté slučky
  2. Filtre induktor-kondenzátor
  3. Aktívne filtre s odporom a kondenzátorom
  4. Digitálne spracovanie signálu, ako napríklad Fast Fourierova transformácia, alebo Goertzelov filter.

Metódy 1, 2, 3 vyžadujú externé komponenty, ktoré sú objemné.

Metóda 4 nevyžaduje žiadne externé komponenty … frekvencie sa zisťujú pomocou matematických algoritmov.

Rýchla Fourierova transformácia (FFT)

Jednou z metód detekcie prítomnosti tónu v komplexnom priebehu je použitie rýchlej Fourierovej transformácie

Fotografia 1 ukazuje, ako FFT (Fast Fourierova transformácia) rozdeľuje zvukové spektrum na „zásobníky“.

Fotografia 2 ukazuje, ako „zásobníky“FFT reagujú na signál … v tomto prípade 800 Hz. Ak by bol prítomný druhý signál, povedzme 1500 Hz, videli by sme dve reakcie … jednu pri 800 Hz a druhú pri 1500 Hz.

Teoreticky môže byť dekodér morzeovky vyrobený monitorovaním výstupnej úrovne konkrétneho frekvenčného zásobníka FFT … veľké číslo predstavuje prítomnosť bodky alebo pomlčky … malé číslo predstavuje žiadny signál.

Takýto dekodér morzeovky je možné vyrobiť monitorovaním „koša 6“na fotografii 2, ale v tomto prístupe je niekoľko vecí nesprávnych:

  • chceme iba jeden frekvenčný kôš … ostatné sú zbytočné výpočty
  • frekvenčné zásobníky sa nemusia objaviť presne na požadovanej frekvencii
  • je relatívne pomalý (20 mS na slučku Arduino ()

Ďalšou metódou je použiť Goertzelov filter.

Goertzelov filter

Goertzelov filter je podobný FFT, má však iba jeden frekvenčný zásobník.

Fotografia3 zobrazuje frekvenčnú odozvu Goertzelovho filtra na diskrétne zvukové kroky.

Fotografia 4 je pohybom rovnakého filtra v rovnakom frekvenčnom rozsahu.

Rozhodol som sa „ísť“podľa Goertzelovho algoritmu ako:

  • Čas slučky Arduino () s použitím Goertzelovho algoritmu bol 14 mS (milisekundy) oproti 20 mS (milisekundy) pre riešenie FFT s použitím knižnice Arduino „fix_FFT“.
  • Strednú frekvenciu pásmového filtra Goertzel je ľahké nastaviť.
  • Šírka pásma je približne 190 Hz.

Fotografia 5 zobrazuje numerický výstup z Goertzelovho filtra 900 Hz, keď je detekovaný tón. Nastavil som svoj prah tónu na hodnotu 4000 … hodnoty nad 4000 označujú tón.

Teoreticky stačí vyladiť filter na príjemnú frekvenciu počúvania. Zvukový výstup z môjho 1 -palcového monitorovacieho reproduktora bohužiaľ rýchlo klesá pod 900 Hz. Aby sa predišlo akýmkoľvek problémom, používam filtračnú frekvenciu 950 Hz. Potrebné vzorce na výpočet alternatívnych frekvencií filtra nájdete v hlavičke môjho kódu.

Dekódovanie

Dekódovanie bodiek a čiarok nie je také jednoduché, ako sa na prvý pohľad zdá.

Dokonalá morse je definovaná ako:

  • bodka = 1 jednotka
  • medzery vnútri písmena = 1 jednotka
  • pomlčka = 3 jednotky
  • medzera medzi písmenami = 3 jednotky
  • medzera medzi slovami = 7 jednotiek

Na dekódovanie perfektnej morze jednoducho potrebujeme dobu trvania referenčného tónu 2 jednotky

  • bodka <2 jednotky
  • priestor prvkov <2 jednotky
  • pomlčka> 2 jednotky
  • písmeno _prostor> 2 jednotky
  • word_space> 6 jednotiek (t.j. 3 x referenčné jednotky)

Funguje to na strojovú moru, ale v „skutočnom svete“:

  • rýchlosť odosielania sa líši
  • trvanie jednotlivých bodiek sa líši
  • trvanie každej pomlčky sa líši
  • písmená E, I, S, H, 5 obsahujú iba bodky, ktoré sú priemerom trvania bodky
  • písmená T, M, O, 0 obsahujú iba pomlčky, ktoré sú priemerom trvania pomlčky
  • medzery v slovách nemusia prísť
  • blednutie spôsobuje chyby, z ktorých sa dekodér musí zotaviť.
  • poškodené signály v dôsledku rušenia

Písmená obsahujúce iba bodky a pomlčky sú čiastočne vyriešené, ak:

odhadujeme referenčné trvanie, kým nedostaneme platnú bodku a platnú pomlčku. Používam 200 milisekúnd, ktoré sú platné, ak je rýchlosť odosielania medzi 6 WPM (slová za minútu) a 17 WPM. Ak sa učíte morzeu, možno budete musieť túto hodnotu zvýšiť. Tabuľka rýchlostí je súčasťou softvéru

Zmeny rýchlosti sú vyriešené, ak:

  • vykonáme kĺzavý priemer pre každú bodku a každú pomlčku a
  • po prijatí každého symbolu prepočítajte referenčné trvanie

Nedostatky slov a medzery v slovách, ktoré neprichádzajú, sa vyriešia, ak:

  • pamätajte si čas posledného prechodu na konci hrany (tón na žiadny tón),
  • reštartujte algoritmus po každom písmene,
  • vypočítajte uplynulý čas pri čakaní na ďalší prechod na začiatku (bez tónu k tónu) a
  • ak bolo prekročených 6 časových jednotiek, vložte medzeru.

Morseho oscilátor

Pôvodne som vyskúšal niektoré piezo bzučiaky, ale zistil som:

  • frekvencia bola stanovená
  • výstupná frekvencia bola príliš vysoká na dlhodobé počúvanie
  • piezos mali tendenciu unášať sa z prihrávkového pásma Goertzela

Potom som sa pokúsil ovládať akustický menič s 750 Hz obdĺžnikovou vlnou, ale zistil som, že má rezonanciu, ktorá odfiltruje 1. a 3. harmonickú. Fotografia 6 zobrazuje výstup zosilňovača mikrofónu na 750Hz štvorcovú vlnu … vidíme 5. harmonickú !!!

Potom som sa uchýlil k použitiu malého reproduktora. Fotografia 7 zobrazuje výstup mikrofónu na 750Hz štvorcovú vlnu, ktorá bola odoslaná do malého reproduktora … tentoraz vidíme základnú … nie 5. harmonickú. Goertzelov filter ignoruje akékoľvek harmonické.

Poznámky

[1]

en.wikipedia.org/wiki/Goertzel_algorithm

www.embedded.com/the-goertzel-algorithm/

Krok 5: Softvér

Softvér
Softvér
Softvér
Softvér
Softvér
Softvér

Inštalácia

  • Stiahnite si priložený súbor MorseCodeDecoder.ino [1]
  • Skopírujte obsah tohto súboru do nového náčrtu Arduino
  • Uložte náčrt ako „MorseCodeDecoder“(bez úvodzoviek)
  • Zostavte a nahrajte skicu do svojho Arduina

Aktualizácia softvéru 23. júla 2020

Do priloženého súboru "MorseCodeDecoder6.ino" boli pridané nasledujúce funkcie

  • okno „Presný Blackman“[2]
  • „Noise_blanker“

Úprava:

  • zvýšte úroveň zvuku svojho prijímača, kým LED dióda nezačne blikať, a potom zhasnite
  • teraz nalaďte prijímač, kým LED dióda nebliká v kroku s prichádzajúcou morzeou
  • Noise_blanker bol nastavený tak, aby ignoroval hlukové výboje až do 8 mS (jeden cyklus)
  • prahovú hodnotu hluku je možné nastaviť nastavením Debug = true a sledovaním vášho sériového plotra

Poznámka

[1]

Ak chcete, aby sa text zobrazoval, nastavte svoj sériový monitor Arduino na 115 200 baudov.

[2]

  • Fotografia 1 … Presné okno Blackmana
  • Foto 2… Goertzelov filter bez presného okna Blackmana
  • Fotografia 3,,, Goertzel filter s aplikovaným oknom Exact Blackman

Krok 6: Prevádzka

Dekodér

Pri počúvaní morze umiestnite jednotku vedľa reproduktora.

  • Elektrónová mikrofónna kapsula zachytí signál morze z vášho reproduktora.
  • Výstup elektretového mikrofónu je potom 647 -krát zosilnený (56 dB) a potom je odoslaný do Arduina na spracovanie.
  • Digitálny pásmový filter Goertzel extrahuje signál Morseovej šumu.
  • Dekódovanie sa vykonáva pomocou binárneho stromu.
  • Výstup dekodéra je zobrazený ako text na displeji TFT s rozlíšením 320 x 240 pixelov. Ak nechcete používať displej, odošle sa tiež do vášho „sériového monitora“Arduino.

Morse odosielateľ

Bol zahrnutý aj odosielateľ morsey. To vám umožní precvičiť odosielanie morze a funguje nasledovne:

  • Na pine Arduino 4 je generovaný konštantný počuteľný tón.
  • Tento tón počujeme prostredníctvom reproduktora dekodéra vždy, keď stlačíme morzeovu klávesu.
  • Tón je nastavený na rovnakú frekvenciu ako Goertzelov filter, ktorý oklame dekodér, aby si myslel, že počúva skutočnú moru … čokoľvek, čo pošlete, sa na displeji zobrazí ako vytlačený text.

Vaše odosielanie sa zlepší, keď dekodér zachytí bežné chyby, ako napríklad:

  • príliš veľký priestor medzi symbolmi. (príklad: Q pinted as MA)
  • príliš veľa medzery medzi písmenami (príklad: TERAZ vytlačené ako BEZ W)
  • Nesprávny kód

Krok 7: Zhrnutie

Dekodér

Tento návod popisuje, ako vytvoriť morzeovský dekodér, ktorý prevádza morzeovku na tlačený text.

  • Dekodér je schopný dekódovať viac ako 80 WPM (slov za minútu)
  • Dekodér automaticky sleduje odchýlky v prijatej rýchlosti odosielania.
  • Text sa zobrazí na vašom sériovom monitore (alebo na zobrazovacom module 320 x 240 TFT, ak je k dispozícii) [1]

Odosielateľ

Bol zahrnutý aj odosielateľ morsey

  • Odosielateľ vám pomáha zlepšiť kvalitu odosielania morzeov.
  • Dekodér potvrdí, že to, čo ste odoslali, je správne

Náklady na diely

Odhadovaná cena štítu dekodéra Morse, mínus voliteľný TFT displej, je 25 dolárov.

Kliknutím sem zobrazíte ďalšie moje pokyny.

Audio Challenge 2020
Audio Challenge 2020
Audio Challenge 2020
Audio Challenge 2020

Druhá cena v Audio Challenge 2020

Odporúča: