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, Novembar
Anonim
Image
Image
Dijagram kola
Dijagram kola

Ova instrukcija objašnjava kako dekodirati Morzeov 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 se prikazuje kao tekst na vašem Arduino serijskom monitoru (ili TFT ekranu ako postoji)

Tonski oscilator je uključen ako želite vježbati slanje morzea.

Karakteristike dekodera:

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

Prepoznaju se sljedeći znakovi i simboli:

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

Procijenjena cijena štita dekodera Morzea, umanjena za TFT ekran, iznosi 25 USD. [1]

Slike

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

Napomene

[1]

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

Korak 1: Lista 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 otvoreno dugme
  • 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č / dugme
  • 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 sa izrezom M3
  • 1 samo ABS plastična kutija 130 x 68 x 44 mm
  • 5 samo 2-polnih pravokutnih konektora

Procijenjena cijena štita dekodera Morzea, umanjena za opcionalni TFT ekran, iznosi 25 USD. [1]

Napomene

[1]

Lista dijelova za opcionalni modul ekrana 320 x 240 TFT prikazana je na mojim uputstvima

[2]

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

Korak 2: Dijagram kola

Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola
Dijagram kola

Slike

Fotografija 1 prikazuje dijagram kola za Morzeov dekoder. Otpornik od 330 ohma u seriji s morzeovim ključem 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 direktno na utičnicu za Morzeovo ključevo 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 ekrana. Zvučnik i mikrofon su vruće zalijepljeni za kućište. Izbušite rupe za zvučnike u poklopcu pre 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 ekran. Crna električna traka je pričvršćena na rubove ekrana … ova traka sprječava curenje svjetla i maskira bilo kakvo neslaganje između ekrana i otvora na poklopcu

Bitan

[1]

Arduinos s velikim USB konektorom zahtijeva sloj električne trake između USB konektora 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 azbuke sadrži niz kratkih i dugih tonova koji se nazivaju „tačke“i „crtice“.

  • tačka (.) je 1 jedinica dužine
  • crtica (_) ima 3 jedinice
  • 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 da li je dolazni ton tačka ili crtica upoređujući njegovo trajanje sa referentnim tonom od 2 jedinice dužine.

  • tač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] sa ukupno 216 ćelija. Neiskorištene ćelije obično su ispunjene nulom ili praznim mjestom.

Da bismo dekodirali dolazne tačke i crtice, moramo uporediti dot/crticu svakog dolaznog slova sa našim referentnim šablonima 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'.

Binary Tree

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

Za razliku od linearnog pretraživanja, koje zahtijeva čuvanje 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, tačka) potrebno je 5 poteza … 4 desno, a 1 lijevo što ostavlja pokazivač direktno iznad '9'.

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

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

Korak 4: Napomene o dizajnu

Napomene o dizajnu
Napomene o dizajnu
Napomene o dizajnu
Napomene o dizajnu
Napomene o dizajnu
Napomene o dizajnu
Napomene o dizajnu
Napomene o dizajnu

Morze je teško dekodirati u prisustvu smetnji. Neželjeni signali moraju biti odbijeni … ovo zahtijeva neku vrstu filtera.

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 Furijeova transformacija (FFT)

Jedna 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 na “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 izlaznog nivoa određene FFT frekvencijske kante … veliki broj predstavlja prisustvo tačke ili crtice … mali broj ne predstavlja signal.

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

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

Druga metoda je upotreba Goertzel filtera.

Goertzel filter

Goertzel filter je sličan 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 Goertzel algoritma bilo je 14mS (milisekundi) naspram 20mS (milisekundi) za FFT rješenje koje koristi Arduino “fix_FFT” biblioteku.
  • Lako je postaviti središnju frekvenciju Goertzelovog propusnog filtra.
  • Propusni opseg je približno 190Hz.

Fotografija 5 prikazuje numerički izlaz iz Goertzel filtra na 900Hz kada se detektuje 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. Da izbjegnem bilo kakve probleme, koristim filtar frekvencije 950Hz. Potrebne formule za izračunavanje alternativnih frekvencija filtera nalaze se u mom zaglavlju koda.

Dekodiranje

Dekodiranje točkica i crtica nije tako jednostavno kako izgleda.

Savršeni morzeov izraz definira se kao:

  • tač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

  • tač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 Morse Machine, ali u "stvarnom svijetu":

  • brzina slanja varira
  • trajanje svake tačke varira
  • trajanje svake crtice varira
  • slova E, I, S, H, 5 sadrže samo tačke koje prosječno traju tačke
  • slova T, M, O, 0 sadrže samo crtice koje prosječno traju crticu
  • praznine u riječima možda neće stići
  • fading stvara greš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 se rješavaju ako:

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

Nedostaci u riječima i nedostaci u riječima rješavaju se ako:

  • zapamtite vrijeme posljednje tranzicije na kraju (ton u bez tona),
  • ponovo pokrenite algoritam nakon svakog slova,
  • izračunati proteklo vrijeme dok čekate na sljedeću prijelaznu liniju (bez tona u ton) i
  • umetnite razmak ako je prekoračeno 6 vremenskih jedinica.

Morzeov oscilator

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

  • frekvencija je bila fiksna
  • izlazna frekvencija je bila previsoka za duže slušanje
  • piezo -i su se tendenciozno udaljavali od Goertzelovog prolaza

Zatim sam pokušao upravljati akustičkim pretvaračem sa kvadratnim valom od 750Hz, ali sam otkrio da ima rezonancu koja je filtrirala prvi i treći 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. Goertzel filter zanemaruje sve harmonike.

Napomene

[1]

en.wikipedia.org/wiki/Goertzel_algorithm

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

Korak 5: Softver

Softver
Softver
Softver
Softver
Softver
Softver

Instalacija

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

Ažuriranje softvera 23. jula 2020

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

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

Podešavanje:

  • povećavajte jačinu zvuka prijemnika sve dok LED ne počne treperiti, a zatim se ugasi
  • sada podesite prijemnik sve dok LED dioda ne počne bljeskati u skladu s ulaznim morzeom
  • Noise_blanker je postavljen tako da zanemaruje rafale buke do 8mS (jedno vrijeme petlje)
  • prag šuma se može 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… Tačan Blackman prozor
  • Fotografija 2… Goertzel filter bez tačnog Blackman prozora
  • Fotografija 3,,, Goertzel filter sa primijenjenim tač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 (56dB) 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 se prikazuje kao tekst na TFT ekranu rezolucije 320 x 240 piksela. Također se šalje na vaš Arduino "Serijski monitor" ako ne želite koristiti zaslon.

Morse Sender

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

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

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 štampano kao NO W)
  • netačan kod

Korak 7: Sažetak

Dekoder

Ovo uputstvo opisuje kako napraviti morzeov dekoder koji pretvara morzeov kod u štampani 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 prikaza 320 x 240 TFT ako je ugrađen) [1]

Pošiljalac

Uključen je i pošiljalac Morsea

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

Cijena dijelova

Procijenjena cijena štita dekodera Morzea, umanjena za opcionalni TFT ekran, iznosi 25 USD.

Kliknite ovdje za pregled ostalih instrukcija.

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

Druga nagrada na Audio Challengeu 2020

Preporučuje se: