Tartalomjegyzék:
- 1. lépés: Alkatrészlista
- 2. lépés: Áramköri diagram
- 3. lépés: Elmélet
- 4. lépés: Tervezési megjegyzések
- 5. lépés: Szoftver
- 6. lépés: Művelet
- 7. lépés: Összefoglalás
Videó: Bináris fa morze dekódoló: 7 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Ez az utasítás elmagyarázza, hogyan lehet dekódolni a Morse -kódot egy Arduino Uno R3 segítségével.
A dekódoló, amely automatikusan alkalmazkodik a küldési sebességhez, percenként legalább 80 szóig képes morse dekódolására.
A bejövő kód szövegként jelenik meg az Arduino soros monitoron (vagy a TFT képernyőn, ha van)
Hangszóró oszcillátor került bele, ha gyakorolni szeretné a morse küldését.
A dekóder jellemzői:
- 320 x 240 TFT kijelző modul [1]
- Goertzel digitális sávszűrő a nem kívánt jelek elválasztására.
- egy „bináris morzefa” a jel dekódolására
- automatikus sebességkövetés
- hallható kimenet a morse gyakorlásakor
- a bejövő és a kimenő szöveg is megjelenik.
A következő karaktereket és szimbólumokat ismeri fel:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
A morze -dekódoló pajzs becsült költsége, a TFT kijelzővel csökkentve, 25 dollár. [1]
Képek
- A borítóképen egy teljesen összeszerelt egység látható
- A videón látható a dekóder működése
Megjegyzések
[1]
- A TFT kijelzőmodul opcionális, mivel az összes szöveget elküldi az Arduino „Soros monitor” -ra.
- A TFT modult az oktatható
1. lépés: Alkatrészlista
A következő részeket a https://www.aliexpress.com/ webhelyről szerezték be
Csak 1 prototípus pajzs az Arduino UNO R3, 2,54 mm -es hangmagassághoz
A következő alkatrészeket szerezték be helyben:
- 1 csak LM358 kettős opamp
- 1 csak zöld LED
- 1 csak LED klip
- 1 csak elektret mikrofon kapszula
- 1 csak normálisan nyitott nyomógomb
- 1 csak 8 tűs DIP aljzat
- 2 csak 330 ohmos ellenállás
- 2 csak 2K2 ellenállás
- 5 db 10K ohmos ellenállás
- 2 db 56K ohmos ellenállás
- 2 csak 1uF kondenzátor
- 1 csak 10uF kondenzátor
A következő részek nem kötelezőek:
- Csak 1 2,2 hüvelykes TFT SPI LCD kijelzőmodul 240*320 ILI9341 SD kártya foglalattal az Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC számára [1]
- Morse kulcs / nyomógomb
- 1 csak BC548 NPN tranzisztor
- 1 csak 1 hüvelykes hangszóró
- 1 csak 33K ohmos ellenállás
- 1 csak 3,5 mm -es mono dugó (morse kulcshoz)
- 1 csak 3,5 mm -es mono aljzat (morse kulcshoz)
- 3 csak 9 mm -es M3 -as csapos nylon távtartó
- 1 csak 130 x 68 x 44 mm -es ABS műanyag doboz
- 5 csak 2 tűs derékszögű csatlakozó
A morze -dekódoló pajzs becsült költsége, kivéve az opcionális TFT -kijelzőt, 25 dollár. [1]
Megjegyzések
[1]
Az opcionális 320 x 240 TFT kijelzőmodul alkatrészlistája az oktatható
[2]
Morse kulcs vagy erős nyomógomb szükséges, ha használni szeretné a feladót.
2. lépés: Áramköri diagram
Képek
Az 1. fotó a morze -dekóder kapcsolási rajzát mutatja. A soros 330 ohmos ellenállás a morse -gombbal korlátozza a D4 kimeneti áramot véletlen testzárlat esetén… értékének növelése csökkenti a hangszóró hangkimenetét. Emiatt nem a pajzshoz adtam, hanem közvetlenül a morze kulcsos csatlakozóhoz rögzítettem a könnyű beállítás érdekében
A 2. képen egy megfelelő pajzs látható. A pajzs az oktatható https://www.instructables.com/id/Arduino-TFT-Grap…, amelyhez hozzáadtam a mikrofonerősítőt és a hangoszcillátort. [1]
A 3. fotó az Arduino -hoz csatolt kész pajzsot mutatja. Nincs szükség más komponensekre, ha a szöveget az Arduino „Soros monitoron” szeretné megtekinteni
A 4. képen a dekóder részben dobozos. A fedélben lyukat vágtak a kijelző megtekintéséhez. A hangszórót és a mikrofont melegen ragasztották a tokhoz. A hangszóró felszerelése előtt fúrjon néhány lyukat a fedélbe. A fedél középső aljzata egy hosszabbító mikrofonhoz készült … e nélkül a dekódert a hangszóró közelében kell elhelyezni, ami nem mindig lehetséges
Az 5. fotó a TFT képernyőt mutatja. Fekete elektromos szalagot rögzítettek a kijelző széleire … ez a szalag megakadályozza a fényszivárgást, és elfedi a kijelző és a fedél nyílása közötti eltéréseket
Fontos
[1]
A nagy USB -csatlakozóval rendelkező Arduino -khoz egy réteg elektromos szalag szükséges az USB -csatlakozó és az Arduino -pajzs között. Véletlen rövidnadrág lehetséges szalag nélkül, mivel a hézag kicsi. A szalag nem szükséges az Arduino -khoz, amelyek kis csatlakozókkal rendelkeznek
3. lépés: Elmélet
Minden morze kód betű rövid és hosszú hangok sorozatát tartalmazza, amelyeket „pontoknak” és „kötőjeleknek” neveznek.
- egy pont (.) 1 egység hosszú
- egy kötőjel (_) 3 egység hosszú
- a betűelemek közötti tér 1 egység
- a betűk közötti távolság 3 egység
- a szavak közötti távolság 7 egység
Meg tudjuk határozni, hogy a bejövő hang pont vagy kötőjel, ha összehasonlítjuk annak időtartamát egy 2 egység hosszúságú referenciahanggal.
- egy pont kevesebb, mint 2 egység
- egy kötőjel 2 egységnél nagyobb
Két egyértelmű módszer létezik a bejövő pontok és kötőjelek mintájának dekódolására:
- lineáris keresés
- bináris fa (más néven dichotómiai keresés)
Lineáris keresés
Az egyik gyakori módszer a karakterek tömbjének és a hozzájuk tartozó morze mintáknak a létrehozása. Például az alábbi karakterek mindegyike a következőképpen kerül mentésre:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Minden betűhöz 6 cella szükséges… 1 magához a betűhöz és 5 a (.) És (_) karakterhez. Ehhez szükségünk van egy betűkre [36] [6], összesen 216 cellával. A fel nem használt cellákat általában nulla vagy üres elem tölti ki.
A bejövő pontok és kötőjelek dekódolásához össze kell hasonlítanunk minden bejövő betű pont/kötőjele mintáját a referencia karaktermintáinkkal.
Bár ez a módszer működik, rendkívül lassú.
Tegyük fel, hogy 26 betűt („A”, „Z”) és számjegyeit („0”,… „9”) tároljuk egy tömbben, majd 36 keresést kell végrehajtanunk, egyenként legfeljebb 5 alkereséssel, ami összesen 36*5 = 180 keresés a „9” szám dekódolására.
Bináris fa
A bináris keresés sokkal gyorsabb, mivel nincs szükség keresésekre.
Ellentétben a lineáris kereséssel, amely mind a karakter, mind a morse minták tárolását igényli, a bináris fa csak a karaktereket tárolja, ami azt jelenti, hogy a tömb mérete kisebb.
A bináris fámat (fotó1) két részre osztottam (2. és 3. fotó), hogy jobban olvasható legyen.
A karakter megtalálásához mozgassunk balra egy mutatót, amikor meghallunk egy pontot, és jobbra mozgatjuk a mutatót, amikor kötőjelet hallunk. Minden lépés után felére csökkentjük a mutató távolságát a következő lépéshez… innen a bináris fa neve.
A „9” betű dekódolásához (kötőjel, kötőjel, kötőjel, kötőjel, pont) 5 mozdulat szükséges… 4 jobbra, és 1 balra, ami közvetlenül a „9” fölött hagyja a mutatót.
Öt lépés jelentősen gyorsabb, mint 180 keresés !!!!!
A bináris karakter tömb is kisebb… 26 betű és 10 szám csak 64 x 1 soros tömböt igényel. 128 karakter tömb létrehozását választottam, hogy dekódolhassam az írásjeleket.
4. lépés: Tervezési megjegyzések
A Morse -t zavaró jelek jelenlétében nehéz dekódolni. A nem kívánt jeleket el kell utasítani… ehhez valamiféle szűrő szükséges.
Sok lehetőség van:
- Fáziszárolt hurkok
- Induktor-kondenzátor szűrők
- Ellenállás-kondenzátor aktív szűrők
- Digitális jelfeldolgozás, például a gyors Fourier -transzformáció vagy a Goertzel -szűrő.
Az 1., 2., 3. módszerhez külső alkatrészekre van szükség, amelyek terjedelmesek.
A 4. módszer nem igényel külső komponenseket… a frekvenciákat matematikai algoritmusok segítségével észlelik.
Gyors Fourier -transzformáció (FFT)
Az egyik módszer a hang jelenlétének kimutatására egy komplex hullámformában a gyors Fourier -transzformáció használata
Az 1. fénykép azt mutatja be, hogy az FFT (Fast Fourier Transform) hogyan osztja fel az audio spektrumot „tartályokra”.
A 2. fotó azt mutatja, hogy az FFT „tartályok” hogyan reagálnak egy jelre… ebben az esetben 800 Hz. Ha egy második, mondjuk 1500 Hz -es jel is jelen lenne, két választ látnánk… az egyik 800 Hz -en, a másik 1500 Hz -en.
Elméletileg morze -kód dekódoló készíthető egy adott FFT frekvenciatartály kimeneti szintjének figyelésével … nagy szám egy pont vagy kötőjel jelenlétét jelzi … kis szám nem jel.
Ilyen morzekód dekódoló a 2. képen látható „6 -os bin” figyelésével készíthető el, de ezzel a megközelítéssel számos dolog nem stimmel:
- csak egy frekvenciatartályt szeretnénk… a többi elpazarolt számítás
- előfordulhat, hogy a frekvenciatartályok nem pontosan az érdeklődési gyakoriságon jelennek meg
- viszonylag lassú (20mS / Arduino hurok ()
Egy másik módszer a Goertzel -szűrő használata.
Goertzel szűrő
A Goertzel -szűrő hasonló az FFT -hez, de csak egyetlen frekvenciatartóval rendelkezik.
A 3. fotó egy Goertzel -szűrő frekvenciaválaszát mutatja a különálló audio lépésekhez.
A 4. fotó ugyanazon szűrő leképezése ugyanazon frekvenciatartományban.
Úgy döntöttem, hogy a Goertzel -algoritmussal "megyek":
- Az Arduino ciklus () ideje a Goertzel -algoritmust használva 14 mS (ezredmásodperc) volt, szemben az Arduino „fix_FFT” könyvtárat használó FFT -megoldás 20 mS (ezredmásodperce) értékével.
- Könnyű beállítani a Goertzel sávszűrő középső frekvenciáját.
- A sávszélesség körülbelül 190 Hz.
Az 5. fotó egy 900 Hz -es Goertzel -szűrő számkimenetét mutatja, amikor hangot észlel. A hangküszöböt 4000 -re állítottam be … a 4000 feletti értékek hangot jeleznek.
Elméletileg csak be kell hangolnia a szűrőt egy kényelmes hallgatási frekvenciára. Sajnos az 1 hüvelykes figyelő hangszóróm hangkimenete gyorsan 900 Hz alá csökken. A problémák elkerülése érdekében 950 Hz -es szűrőfrekvenciát használok. Az alternatív szűrőfrekvenciák kiszámításához szükséges képletek megtalálhatók a kódfejlécemben.
Dekódolás
A pontok és kötőjelek dekódolása nem olyan egyszerű, mint amilyennek látszik.
A tökéletes morse a következő:
- pont = 1 egység
- szóköz betű = 1 egység
- kötőjel = 3 egység
- szóköz a betűk között = 3 egység
- szóköz = 7 egység
A tökéletes morse dekódolásához egyszerűen szükségünk van 2 egység referenciahang időtartamra
- pont <2 egység
- elemtér <2 egység
- kötőjel> 2 egység
- betű _tér> 2 egység
- word_space> 6 egység (azaz 3 x referencia egység)
Ez működik a gépmorse esetében, de a „való világban”:
- a küldési sebesség változik
- az egyes pontok időtartama változó
- minden kötőjel időtartama változó
- az E, I, S, H, 5 betűk csak olyan pontokat tartalmaznak, amelyek átlagos időtartama a pont
- a T, M, O, 0 betűk csak olyan kötőjeleket tartalmaznak, amelyek átlagosan a kötőjelig terjednek
- a szóközök esetleg nem érkeznek meg
- az elhalványodás hibákat hoz létre, amelyekből a dekódolónak helyre kell állnia.
- interferencia miatt sérült jelek
A csak pontokat és kötőjeleket tartalmazó betűk részben megoldódnak, ha:
becsüljük a referencia időtartamát, amíg meg nem kapunk egy érvényes pontot és egy érvényes kötőjelet. 200 ezredmásodpercet használok, ami akkor érvényes, ha a küldési sebesség 6 WPM (szó percenként) és 17 WPM között van. Lehet, hogy növelnie kell ezt az értéket, ha morse -t tanul. A szoftver tartalmaz egy sebességtáblázatot
A sebességváltozások megoldódnak, ha:
- gördülő átlagot hajtunk végre minden ponton és kötőjelnél és
- számolja újra a referencia időtartamát minden szimbólum fogadása után
A szóközök és a nem érkező szóközök megoldódnak, ha:
- emlékezzen a legutóbbi átlépés idejére (hangról hangra)
- indítsa újra az algoritmust minden betű után,
- számítsa ki az eltelt időt, miközben várja a következő élvonalbeli (nincs hangról hangra) átmenetet, és
- helyezzen be szóközt, ha túllépte a 6 időegységet.
Morse oszcillátor
Kezdetben kipróbáltam néhány Piezo hangjelzőt, de találtam:
- a frekvenciát rögzítették
- a kimeneti frekvencia túl magas volt a hosszú hallgatáshoz
- a piezók inkább kisodródtak a Goertzel -sávból
Ezután megpróbáltam egy 750 Hz -es négyszöghullámú akusztikus jeladót vezetni, de azt találtam, hogy rezonanciája kiszűri az első és a harmadik felharmonikusokat. A 6. fotó a mikrofonerősítő 750 Hz-es négyszöghullámú kimenetét mutatja … látjuk az ötödik harmonikát !!!
Ezután egy kis hangszóróhoz folyamodtam. A 7. fotó a mikrofon kimenetét mutatja egy 750 Hz -es négyszöghullámra, amelyet egy kis hangszóróra küldtek … ezúttal az alapvető… nem az ötödik harmonikát látjuk. A Goertzel -szűrő figyelmen kívül hagyja a felharmonikusokat.
Megjegyzések
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
5. lépés: Szoftver
Telepítés
- Töltse le a csatolt MorseCodeDecoder.ino fájlt [1]
- Másolja a fájl tartalmát egy új Arduino -vázlatba
- Mentse a vázlatot "MorseCodeDecoder" néven (idézőjelek nélkül)
- Fordítsa össze és töltse fel a vázlatot Arduino készülékére
Szoftverfrissítés 2020. július 23
A következő funkciókkal bővült a csatolt "MorseCodeDecoder6.ino" fájl
- "Exact Blackman" ablak [2]
- "zajszűrő"
Beállítás:
- növelje a vevő hangerejét, amíg a LED villogni nem kezd, majd vissza nem kapcsol
- hangolja most a rádióerősítőt, amíg a LED villogni kezd a bejövő morzsával
- a Noise_blanker úgy lett beállítva, hogy figyelmen kívül hagyja a zajkitöréseket akár 8 mS -ig (egy ciklusidő)
- a zajküszöb beállítható a Debug = true beállítással és a Soros Plotter figyelésével
jegyzet
[1]
Ha szeretné megtekinteni a szöveget, állítsa az Arduino soros monitort 115200 baud értékre.
[2]
- 1. fotó… Pontos Blackman ablak
- 2. fotó… Goertzel szűrő Exact Blackman ablak nélkül
- 3. fotó,,, Goertzel szűrő Exact Blackman ablak alkalmazásával
6. lépés: Művelet
Dekódoló
Morse hallgatásakor helyezze a készüléket a hangszóró mellé.
- Az elektret mikrofon kapszula felveszi a hangszóróból származó morze jelet.
- Az elektret mikrofon kimenetét ezután 647 -szeresére (56 dB) erősítik, majd továbbítják az Arduino -hoz feldolgozásra.
- A Goertzel digitális sávszűrő kivonja a morse jelet a zajból.
- A dekódolás bináris fa segítségével történik.
- A dekódoló kimenete szövegként jelenik meg a 320 x 240 képpontos TFT kijelzőn. Azt is elküldi az Arduino „Soros Monitorjába”, ha nem kívánja használni a kijelzőt.
Morse küldő
Morse küldő is szerepelt. Ez lehetővé teszi a morse küldésének gyakorlását, és a következőképpen működik:
- Az Arduino 4 -es tűn állandó hangjelzés hallható.
- Ezt a hangot a dekóder hangszóróján keresztül halljuk, amikor megnyomjuk a morse gombot.
- A hangszín ugyanazon a frekvencián van beállítva, mint a Goertzel -szűrő, amely megtéveszti a dekódert, hogy azt gondolja, hogy igazi morse -t hallgat … bármit küld, nyomtatott szövegként jelenik meg a kijelzőn.
A küldés javulni fog, ahogy a dekódoló észleli az olyan gyakori hibákat, mint:
- túl sok hely van a szimbólumok között. (példa: Q MA -ként ábrázolva)
- túl sok hely van a betűk között (példa: MOST NO W -ként nyomtatva)
- Hibás kód
7. lépés: Összefoglalás
Dekódoló
Ez az utasítás leírja, hogyan lehet morze -dekódolót készíteni, amely morse -kódot nyomtatott szöveggé alakít át.
- A dekódoló képes legalább 80 WPM (szó percenként) morze dekódolására
- A dekóder automatikusan követi a fogadott küldési sebesség változásait.
- A szöveg megjelenik a soros monitoron (vagy 320 x 240 TFT kijelzőmodulon, ha van) [1]
Feladó
Morse küldő is szerepelt
- A feladó segít javítani a morse küldés minőségét.
- A dekóder megerősíti, hogy az Ön által küldött adatok helyesek
Az alkatrészek költsége
A morze -dekódoló pajzs becsült költsége, kivéve az opcionális TFT -kijelzőt, 25 dollár.
Kattintson ide a többi utasításom megtekintéséhez.
Második díj az Audio Challenge 2020 versenyen
Ajánlott:
LabDroid: Morse kód kódoló/dekódoló: 4 lépés
LabDroid: Morse Code Encoder/Decoder: Megjegyzés: Ez az utasítás nem hajtható végre 1: 1 arányban a LabDroid legújabb verziójában. Hamarosan frissítem. Ez a projekt megmutatja, mit tehet a LabDroid segítségével. Mivel a Hello World általában szöveg, fény vagy hang alapján készül, a LabDr -re gondoltam
Egyszerű DTMF (hang) telefonvonal dekódoló készítése: 3 lépés
Egyszerű DTMF (hang) telefonvonal dekódoló készítése: Ez egy egyszerű projekt, amely lehetővé teszi a DTMF jelek dekódolását alapvetően bármely telefonvonalon. Ebben az oktatóanyagban az MT8870D dekódolót használjuk. Előre beépített hangdekódert használunk, mert hidd el, fájdalmas a hátul, ha megpróbálod ezt a
RC5 távirányító protokoll dekódoló könyvtár nélkül: 4 lépés
RC5 távirányító protokoll dekódoló könyvtár nélkül: az rc5 dekódolása előtt először megbeszéljük, hogy mi az rc5 parancs és mi a felépítése. Tehát alapvetően az rc5 parancsot használják a távvezérlőkben, amelyeket televíziókban, cd -lejátszókban, d2h -ben, házimozi -rendszerekben stb. használnak. 13 vagy 14 bit van elrendezve egy
Menekülési szoba dekódoló doboz: 7 lépés (képekkel)
Menekülési szoba dekódoló doboz: A menekülési szobák félelmetesen szórakoztató tevékenységek, amelyek nagyon vonzóak és nagyszerűek a csapatmunkához. Gondolt már arra, hogy saját menekülési szobát hozzon létre? Nos, ezzel a dekódoló dobozzal jó úton haladhat! Még jobb, ha az es használatára gondolt
Dekódoló névjegykártya - QR kódolású titkos üzenet: 6 lépés (képekkel)
Dekódoló névjegykártya - QR -kódolású titkos üzenet: A jó névjegykártya segíthet a kapcsolatok fenntartásában, önmagának és vállalkozásának népszerűsítésében, valamint barátok szerzésében. Ha létrehoz egy személyes névjegykártyát, amelyben a címzett aktívan lefordítja a kártyáját, akkor nagyobb valószínűséggel emlékezik rá