Sadržaj:

Morse dekoder za binarno drvo: 7 koraka (sa slikama)
Morse dekoder za binarno drvo: 7 koraka (sa slikama)

Video: Morse dekoder za binarno drvo: 7 koraka (sa slikama)

Video: Morse dekoder za binarno drvo: 7 koraka (sa slikama)
Video: СТРАННЫЕ НОВОСТИ НЕДЕЛИ - 36 | Таинственный | Вселенная | НЛО | Паранормальный 2024, Studeni
Anonim
Image
Image
Kružni dijagram
Kružni dijagram

Ova uputa objašnjava kako dekodirati Morseov kod pomoću Arduino Uno R3.

Dekoder, koji se automatski prilagođava brzini slanja, sposoban je dekodirati morze do najmanje 80 riječi u minuti.

Dolazni kôd prikazuje se kao tekst na vašem Arduino serijskom monitoru (ili TFT ekranu ako je ugrađen)

Uključen je tonski oscilator ako želite vježbati slanje morzea.

Značajke dekodera:

  • 320 x 240 TFT zaslon modul [1]
  • Goertzelov digitalni propusni filter za odvajanje neželjenih signala.
  • "Binary Morse Tree" za dekodiranje signala
  • automatsko praćenje brzine
  • zvučni izlaz tijekom vježbanja morzea
  • prikazuju se i dolazni i odlazni tekst.

Prepoznaju se sljedeći znakovi i simboli:

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

Procijenjeni trošak štita dekodera Morsea, umanjenog za TFT zaslon, iznosi 25 USD. [1]

Slike

  • Naslovna fotografija prikazuje potpuno sastavljenu jedinicu
  • Video prikazuje rad dekodera

Bilješke

[1]

  • Modul TFT zaslona nije obavezan jer se sav tekst šalje na vaš Arduino “Serijski monitor”.
  • TFT modul opisan je u mojim uputstvima

Korak 1: Popis dijelova

Sljedeći dijelovi su nabavljeni sa

1 jedini prototip štita za Arduino UNO R3, visina 2,54 mm

Sljedeći dijelovi nabavljeni su lokalno:

  • 1 samo LM358 dvostruki opamp
  • 1 samo LED zelena
  • 1 samo LED kopča
  • 1 samo kapsula elektronskog mikrofona
  • 1 samo normalno otvoreni gumb
  • 1 samo 8-pinska DIP utičnica
  • 2 samo 330 ohmskih otpornika
  • 2 samo 2K2 otpornika
  • 5 samo 10K ohmskih otpornika
  • 2 samo 56K ohm otpornika
  • 2 samo 1uF kondenzator
  • 1 samo 10uF kondenzator

Sljedeći dijelovi su izborni:

  • 1 samo 2,2 inčni TFT SPI LCD zaslon modul 240*320 ILI9341 sa utorom za SD karticu za Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • Morzeov ključ / gumb
  • 1 samo BC548 NPN tranzistor
  • 1 zvučnik od samo 1 inča
  • 1 samo 33K ohmski otpornik
  • 1 samo 3,5 mm mono utikač (za Morzeov ključ)
  • 1 samo 3,5 mm mono utičnica (za Morzeov ključ)
  • 3 samo 9 mm najlonska odstojnika s izrezom M3
  • 1 samo ABS plastična kutija 130 x 68 x 44 mm
  • 5 samo 2-pinski pravokutni priključci

Procijenjeni trošak štita dekodera Morsea, umanjenog za opcionalni TFT zaslon, iznosi 25 USD. [1]

Bilješke

[1]

Popis dijelova za opcijski 320 x 240 TFT zaslon modul naveden je na mojim uputama

[2]

Morzeov ključ ili čvrsti gumb potreban je ako želite koristiti pošiljatelja.

Korak 2: Dijagram kruga

Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram
Kružni dijagram

Slike

Fotografija 1 prikazuje dijagram sklopa za dekoder Morzea. Otpornik od 330 ohma u seriji s morzeovom tipkom ograničava izlaznu struju D4 u slučaju slučajnog kratkog spoja na masu … povećanje njegove vrijednosti smanjuje audio izlaz iz zvučnika. Iz tog razloga ga nisam dodao na štit, već sam ga pričvrstio izravno na utičnicu za Morzeovo ključeve radi lakšeg podešavanja

Fotografija 2 prikazuje odgovarajući štit. Štit je iz mog uputstva https://www.instructables.com/id/Arduino-TFT-Grap… kojem sam dodao pojačalo za mikrofon i tonski oscilator. [1]

Fotografija 3 prikazuje dovršeni štit pričvršćen na Arduino. Nisu potrebne druge komponente ako se tekst želi pregledati na vašem Arduino "Serijskom monitoru"

Fotografija 4 prikazuje dekoder djelomično u kutiji. Na poklopcu je izrezana rupa za pregled zaslona. Zvučnik i mikrofon su vruće zalijepljeni za kućište. Izbušite rupe za zvučnike u poklopcu prije postavljanja zvučnika. Središnja utičnica na poklopcu služi za produžni mikrofon … bez toga dekoder mora biti postavljen blizu zvučnika što nije uvijek moguće

Fotografija 5 prikazuje TFT zaslon. Na rubove zaslona pričvršćena je crna električna vrpca … ova traka sprječava curenje svjetla i maskira bilo kakvo neslaganje između zaslona i otvora na poklopcu

Važno

[1]

Arduinos s velikim USB priključkom zahtijeva sloj električne trake između USB priključka i Arduino štita. Slučajne kratke hlače moguće su bez trake jer je zazor mali. Traka nije potrebna za Arduinos koji ima male konektore

Korak 3: Teorija

Teorija
Teorija
Teorija
Teorija
Teorija
Teorija

Svako slovo Morzeove abecede sadrži niz kratkih i dugih tonova koji se nazivaju "točkice" i "crtice".

  • točka (.) je 1 jedinica duljine
  • crtica (_) ima 3 jedinice duljine
  • razmak između elemenata slova je 1 jedinica
  • razmak između slova je 3 jedinice
  • razmak između riječi je 7 jedinica

Možemo utvrditi je li dolazni ton točka ili crtica uspoređujući njegovo trajanje s referentnim tonom od 2 jedinice duljine.

  • točka je manja od 2 jedinice
  • crtica je veća od 2 jedinice

Postoje dvije izrazito različite metode za dekodiranje dolaznog uzorka točaka i crtica:

  • linearno pretraživanje
  • binarno stablo (poznato i kao dihotomno pretraživanje)

Linearno pretraživanje

Jedna uobičajena metoda je stvaranje niza znakova i njihovih odgovarajućih Morseovih uzoraka. Na primjer, svaki od sljedećih znakova bio bi spremljen kao:

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

Svako slovo zahtijeva 6 ćelija … 1 za samo slovo i 5 za slova (.) I (_). Da bismo to učinili, potreban nam je niz znakova slova [36] [6] s ukupno 216 ćelija. Neiskorištene ćelije obično su ispunjene nulom ili praznim mjestom.

Za dekodiranje dolaznih točaka i crtica moramo usporediti dot/crticu svakog dolaznog slova s našim referentnim uzorcima znakova.

Iako ova metoda djeluje, izuzetno je spora.

Recimo da imamo 26 slova ('A',.. 'Z') i znamenke ('0', … '9') pohranjene u nizu, tada moramo izvršiti 36 pretraživanja, od kojih svako ima do 5 pod-pretraživanja, što je ukupno 36*5 = 180 pretraživanja za dekodiranje broja '9'.

Binarno stablo

Binarno pretraživanje daleko je brže jer nije potrebno pretraživanje.

Za razliku od linearnog pretraživanja, koje zahtijeva spremanje i znakova i morzeovih uzoraka, binarno stablo pohranjuje samo znakove što znači da je veličina niza manja.

Podijelio sam svoje binarno stablo (fotografija1) na dvije polovice (fotografije 2 i 3) kako bi bilo čitljivije.

Da bismo pronašli znak, pomičemo pokazivač ulijevo svaki put kada čujemo točku i pomičemo pokazivač udesno svaki put kada čujemo crticu. Nakon svakog poteza prepolovimo udaljenost pokazivača za sljedeći potez … otuda i naziv binarno stablo.

Za dekodiranje slova '9' (crtica, crtica, crtica, crtica, točka) potrebno je 5 poteza … 4 desno, a 1 lijevo što ostavlja pokazivač izravno iznad '9'.

Pet poteza je znatno brže od 180 pretraživanja !!!!!

Binarni niz znakova također je manji … Za 26 slova i 10 brojeva potreban je samo niz redaka 64 x 1. Odlučio sam stvoriti niz od 128 znakova kako bih mogao dekodirati interpunkciju.

Korak 4: Napomene o dizajnu

Bilješke o dizajnu
Bilješke o dizajnu
Bilješke o dizajnu
Bilješke o dizajnu
Napomene o dizajnu
Napomene o dizajnu
Bilješke o dizajnu
Bilješke o dizajnu

Morse je teško dekodirati u prisutnosti smetnji. Neželjeni signali moraju se odbiti … za to je potrebna neka vrsta filtra.

Postoji mnogo mogućnosti:

  1. Fazno zaključane petlje
  2. Indukcijski kondenzatorski filteri
  3. Otporno-kondenzatorski aktivni filtri
  4. Digitalna obrada signala kao što je Fast Fourierova transformacija ili Goertzelov filter.

Metode 1, 2, 3 zahtijevaju vanjske komponente koje su glomazne.

Metoda 4 ne zahtijeva vanjske komponente … frekvencije se detektiraju pomoću matematičkih algoritama.

Brza Fourierova transformacija (FFT)

Jedna od metoda otkrivanja prisutnosti tona u složenom valnom obliku je upotreba Fast Fourierove transformacije

Fotografija 1 prikazuje kako FFT (brza Fourierova transformacija) dijeli audio spektar u "kante".

Fotografija 2 prikazuje kako FFT "kante" reagiraju na signal … u ovom slučaju 800Hz. Da je prisutan drugi signal, recimo 1500Hz, vidjeli bismo dva odziva … jedan na 800Hz i drugi na 1500Hz.

U teoriji, dekoder Morzeovog koda može se napraviti praćenjem izlazne razine određene FFT frekvencijske posude … veliki broj predstavlja prisutnost točke ili crtice … mali broj ne predstavlja signal.

Takav dekoder Morzeovog koda mogao bi se napraviti nadziranjem "kante 6" na fotografiji 2, ali postoji nekoliko stvari koje nisu u redu s ovim pristupom:

  • želimo samo jedan spremnik frekvencija … ostalo su uzaludni izračuni
  • spremišta frekvencija možda se neće pojaviti točno na frekvenciji od interesa
  • relativno je spor (20 ms po Arduino petlji ()

Druga metoda je korištenje Goertzelovog filtra.

Goertzel filtar

Goertzelov filter sličan je FFT -u, ali ima samo jednu frekvencijsku spremište.

Fotografija 3 prikazuje frekvencijski odziv Goertzelovog filtera na diskretne audio korake.

Fotografija 4 je brisanje istog filtera u istom frekvencijskom rasponu.

Odlučio sam "ići" s Goertzelovim algoritmom kao:

  • Arduino loop () vrijeme pomoću Goertzelovog algoritma bilo je 14mS (milisekundi) naspram 20mS (milisekundi) za FFT rješenje pomoću Arduino “fix_FFT” knjižnice.
  • Lako je postaviti središnju frekvenciju Goertzelovog propusnog filtra.
  • Propusnost je približno 190Hz.

Fotografija 5 prikazuje numerički izlaz iz Goertzelovog filtra na 900Hz kada se detektira ton. Postavio sam prag tona na vrijednost 4000 … vrijednosti iznad 4000 označavaju ton.

U teoriji samo trebate podesiti filter na ugodnu frekvenciju slušanja. Nažalost, audio izlaz iz mog 1 -inčnog zvučnika za nadzor brzo pada ispod 900Hz. Kako bih izbjegao bilo kakve probleme, koristim frekvenciju filtra od 950Hz. Potrebne formule za izračunavanje zamjenskih frekvencija filtera nalaze se u mom zaglavlju koda.

Dekodiranje

Dekodiranje točaka i crtica nije tako jednostavno kako se čini.

Savršeni morzeov izraz definira se kao:

  • točka = 1 jedinica
  • razmaci unutar slova = 1 jedinica
  • crtica = 3 jedinice
  • razmak između slova = 3 jedinice
  • razmak između riječi = 7 jedinica

Za dekodiranje savršenog morzea jednostavno nam je potrebno referentno trajanje tona od 2 jedinice

  • točka <2 jedinice
  • prostor elemenata <2 jedinice
  • crtica> 2 jedinice
  • slovo _prostor> 2 jedinice
  • prostor_ riječi> 6 jedinica (tj. 3 x referentne jedinice)

Ovo radi za stroj Morse, ali u "stvarnom svijetu":

  • brzina slanja varira
  • trajanje svake točke varira
  • trajanje svake crtice varira
  • slova E, I, S, H, 5 sadrže samo točke koje prosječno traju točku
  • slova T, M, O, 0 sadrže samo crtice koje prosječno traju crticu
  • praznine u riječima možda neće stići
  • blijeđenje stvara pogreške od kojih se dekoder mora oporaviti.
  • korumpirani signali zbog smetnji

Slova koja sadrže samo točke i crtice djelomično su riješena ako:

procjenjujemo referentno trajanje dok ne primimo valjanu točku i valjanu crticu. Koristim 200 milisekundi što vrijedi ako je brzina slanja između 6 WPM (riječi u minuti) i 17 WPM. Možda ćete morati povećati ovu vrijednost ako učite morzeovski jezik. Tablica brzina uključena je u softver

Varijacije brzine rješavaju se ako:

  • izvodimo pokretni prosjek za svaku točku i svaku crticu i
  • ponovno izračunati referentno trajanje nakon primitka svakog simbola

Praznine u riječima i praznine u riječima koje ne stižu rješavaju se ako:

  • zapamtite vrijeme posljednjeg prijelaza na kraju (ton u bez tona),
  • ponovno pokrenite algoritam nakon svakog slova,
  • izračunati proteklo vrijeme čekajući sljedeći prednji prijelaz (bez tona u ton) i
  • umetnite razmak ako je prekoračeno 6 vremenskih jedinica.

Morzeov oscilator

U početku sam isprobao neke Piezo zvučnike, ali sam našao:

  • frekvencija je bila fiksna
  • izlazna frekvencija bila je previsoka za dugotrajno slušanje
  • piezosi su se sklone izvlačiti iz propusnog pojasa Goertzel

Zatim sam pokušao upravljati akustičkim pretvaračem s kvadratnim valom od 750Hz, ali otkrio sam da ima rezonanciju koja je filtrirala 1. i 3. harmonik. Fotografija 6 prikazuje izlaz mikrofonskog pojačala na kvadratni val od 750Hz … vidimo 5. harmonik !!!

Zatim sam pribjegao korištenju malog zvučnika. Fotografija 7 prikazuje izlaz mikrofona na 750Hz kvadratni val koji je poslan na mali zvučnik … ovaj put vidimo temeljni … ne 5. harmonik. Goertzelov filter zanemaruje sve harmonike.

Bilješke

[1]

en.wikipedia.org/wiki/Goertzel_algoritam

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

Korak 5: Softver

Softver
Softver
Softver
Softver
Softver
Softver

Montaža

  • Preuzmite priloženu datoteku MorseCodeDecoder.ino [1]
  • Kopirajte sadržaj ove datoteke na novu Arduino skicu
  • Spremite skicu kao "MorseCodeDecoder" (bez navodnika)
  • Sastavite i prenesite skicu na svoj Arduino

Ažuriranje softvera 23. srpnja 2020

Sljedeće značajke dodane su priloženoj datoteci "MorseCodeDecoder6.ino"

  • prozor "Exact Blackman" [2]
  • "Noise_blanker"

Podešavanje:

  • povećavajte razinu zvuka u prijemniku sve dok LED ne počne treperiti, a zatim se ugasi
  • sada podesite prijemnik dok LED dioda ne počne bljeskati u korak s ulaznim morzeom
  • Noise_blanker je postavljen tako da zanemaruje rafale buke do 8 mS (vrijeme jedne petlje)
  • prag šuma može se podesiti postavljanjem Debug = true i gledanjem vašeg serijskog plotera

Bilješka

[1]

Postavite svoj Arduino serijski monitor na 115200 bauda ako želite i vi da vidite tekst.

[2]

  • Fotografija 1 … Točan Blackmanov prozor
  • Fotografija 2 … Goertzelov filter bez točnog Blackman prozora
  • Fotografija 3,,, Goertzel filtar s primijenjenim točnim Blackman prozorom

Korak 6: Operacija

Dekoder

Postavite jedinicu pored zvučnika dok slušate morzeov tekst.

  • Kapsula elektronskog mikrofona preuzima morzeov signal iz vašeg zvučnika.
  • Izlaz elektronskog mikrofona se zatim pojačava 647 puta (56 dB) prije nego što se proslijedi Arduinu na obradu.
  • Goertzelov digitalni propusni filter izdvaja morzeov signal iz šuma.
  • Dekodiranje se vrši pomoću binarnog stabla.
  • Izlaz dekodera prikazuje se kao tekst na TFT zaslonu rezolucije 320 x 240 piksela. Također se šalje na vaš Arduino "Serijski monitor" ako ne želite koristiti zaslon.

Morseov pošiljatelj

Uključen je i pošiljatelj Morsea. To vam omogućuje vježbanje slanja morzea i radi na sljedeći način:

  • Na Arduino pin 4 generira se konstantan zvučni ton.
  • Ovaj ton čujemo putem zvučnika dekodera kad god pritisnemo tipku morzea.
  • Ton je postavljen na istu frekvenciju kao i Goertzelov filter koji zavarava dekoder da misli da sluša pravi Morzeov … sve što pošaljete pojavit će se kao ispisani tekst na zaslonu.

Vaše slanje će se poboljšati kako dekoder hvata uobičajene greške, kao što su:

  • previše prostora između simbola. (primjer: Q ispisano kao MA)
  • previše prostora između slova (primjer: SADA ispisano kao NO W)
  • neispravan kod

Korak 7: Sažetak

Dekoder

Ova uputa opisuje kako se izrađuje morzeov dekoder koji pretvara morzeov kod u tiskani tekst.

  • Dekoder može dekodirati morze do najmanje 80 WPM (riječi u minuti)
  • Dekoder automatski prati varijacije u primljenoj brzini slanja.
  • Tekst se prikazuje na vašem serijskom monitoru (ili na modulu zaslona 320 x 240 TFT ako je ugrađen) [1]

Pošiljatelj

Uključen je i pošiljatelj Morsea

  • Pošiljatelj vam pomaže poboljšati kvalitetu slanja morzeom.
  • Dekoder potvrđuje da je ono što ste poslali ispravno

Cijena dijelova

Procijenjeni trošak štita dekodera Morsea, umanjenog za opcionalni TFT zaslon, iznosi 25 USD.

Kliknite ovdje da biste vidjeli moje ostale upute.

Audio izazov 2020
Audio izazov 2020
Audio izazov 2020
Audio izazov 2020

Druga nagrada na Audio Challengeu 2020

Preporučeni: