Satura rādītājs:

Binārais koku morzes dekodētājs: 7 soļi (ar attēliem)
Binārais koku morzes dekodētājs: 7 soļi (ar attēliem)

Video: Binārais koku morzes dekodētājs: 7 soļi (ar attēliem)

Video: Binārais koku morzes dekodētājs: 7 soļi (ar attēliem)
Video: CS50 2015 - Week 5, continued 2024, Novembris
Anonim
Image
Image
Ķēdes diagramma
Ķēdes diagramma

Šajā pamācībā ir paskaidrots, kā atšifrēt Morzes kodu, izmantojot Arduino Uno R3.

Dekodētājs, kas automātiski pielāgojas sūtīšanas ātrumam, spēj atšifrēt morzi līdz vismaz 80 vārdiem minūtē.

Ienākošais kods tiek parādīts kā teksts jūsu Arduino seriālajā monitorā (vai TFT ekrānā, ja tāds ir)

Ja vēlaties praktizēt morzes nosūtīšanu, ir iekļauts toņu oscilators.

Dekodētāja funkcijas:

  • 320 x 240 TFT displeja modulis [1]
  • Goertzel digitālais joslas caurlaides filtrs nevēlamu signālu atdalīšanai.
  • “Binārs Morzes koks” signāla dekodēšanai
  • automātiska ātruma izsekošana
  • dzirdama izeja, praktizējot morzi
  • tiek parādīts gan ienākošais, gan izejošais teksts.

Tiek atpazītas šādas rakstzīmes un simboli:

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

Morzes dekodētāja vairoga paredzamās izmaksas, atskaitot TFT displeju, ir 25 ASV dolāri. [1]

Attēli

  • Vāka fotoattēls parāda pilnībā samontētu vienību
  • Video parāda, kā darbojas dekodētājs

Piezīmes

[1]

  • TFT displeja modulis nav obligāts, jo viss teksts tiek nosūtīts uz jūsu Arduino “Serial Monitor”.
  • TFT modulis ir aprakstīts manā pamācībā

1. darbība: detaļu saraksts

Šādas daļas tika iegūtas vietnē

1 tikai prototipa vairogs Arduino UNO R3, 2.54mm Pitch

Vietēji tika iegūtas šādas daļas:

  • 1 tikai LM358 dubultā opamp
  • 1 tikai zaļa gaismas diode
  • 1 tikai LED klipsis
  • 1 tikai elektreta mikrofona kapsula
  • 1 tikai parasti atverama spiedpoga
  • 1 tikai 8 kontaktu DIP ligzda
  • 2 tikai 330 omu rezistori
  • 2 tikai 2K2 rezistori
  • 5 tikai 10K omu rezistori
  • 2 tikai 56K omi rezistori
  • 2 tikai 1uF kondensators
  • 1 tikai 10uF kondensators

Šādas daļas nav obligātas:

  • Tikai 1 2,2 collu TFT SPI LCD displeja modulis 240*320 ILI9341 ar SD kartes slotu Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • Morzes taustiņš / spiedpoga
  • 1 tikai BC548 NPN tranzistors
  • 1 tikai 1 collu skaļrunis
  • 1 tikai 33K omu rezistors
  • 1 tikai 3,5 mm mono spraudnis (Morzes atslēgai)
  • 1 tikai 3,5 mm mono ligzda (Morzes atslēgai)
  • 3 tikai 9 mm neilona starplikas ar M3
  • 1 tikai 130 x 68 x 44 mm ABS plastmasas kaste
  • 5 tikai 2 kontaktu taisnā leņķa savienotāji

Morzes dekodētāja vairoga paredzamās izmaksas, atskaitot papildu TFT displeju, ir 25 ASV dolāri. [1]

Piezīmes

[1]

Papildu 320 x 240 TFT displeja moduļa detaļu saraksts ir norādīts manā pamācībā

[2]

Ja vēlaties izmantot sūtītāju, nepieciešama morzes atslēga vai izturīga spiedpoga.

2. darbība: shēmas shēma

Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma

Attēli

1. fotoattēls parāda morzes dekodētāja shēmu. 330 omu rezistors sērijveidā ar morzes taustiņu ierobežo D4 izejas strāvu nejauša zemējuma īssavienojuma gadījumā … tā vērtības palielināšana samazina skaļruņa audio izvadi. Šī iemesla dēļ es to neesmu pievienojis vairogam, bet piestiprinājis tieši pie morzes taustiņa domkrata, lai atvieglotu regulēšanu

2. fotoattēlā redzams atbilstošs vairogs. Vairogs ir no mana pamācāmā https://www.instructables.com/id/Arduino-TFT-Grap…, kuram esmu pievienojis mikrofona pastiprinātāju un toņu oscilatoru. [1]

3. fotoattēlā parādīts pabeigtais vairogs, kas piestiprināts Arduino. Ja teksts ir jāskata jūsu Arduino “Sērijas monitorā”, nav nepieciešami citi komponenti

4. fotoattēlā redzams daļēji iesaiņots dekodētājs. Vāciņā ir izgriezts caurums displeja apskatei. Skaļrunis un mikrofons ir karsti pielīmēti pie korpusa. Pirms skaļruņa uzstādīšanas vāciņā urbiet dažus skaļruņu caurumus. Centrālā kontaktligzda uz vāka ir paredzēta pagarinājuma mikrofonam … bez tā dekodētājs jānovieto skaļruņa tuvumā, kas ne vienmēr ir iespējams

5. fotoattēlā redzams TFT ekrāns. Displeja malām ir piestiprināta melna elektriskā lente … šī lente novērš gaismas noplūdi un maskē neatbilstību starp displeju un vāka atveri

Svarīgs

[1]

Arduinos ar lielu USB savienotāju ir nepieciešams elektriskās lentes slānis starp USB savienotāju un Arduino vairogu. Bez lentes ir iespējami nejauši šorti, jo atstarpe ir maza. Lente nav nepieciešama Arduinos, kuriem ir mazi savienotāji

3. solis: teorija

Teorija
Teorija
Teorija
Teorija
Teorija
Teorija

Katrs morzes koda burts satur virkni īsu un garu toņu, ko sauc par “punktiem” un “domuzīmēm”.

  • punkts (.) ir 1 vienības garš
  • domuzīme (_) ir 3 vienības gara
  • atstarpe starp burtu elementiem ir 1 vienība
  • atstarpe starp burtiem ir 3 vienības
  • atstarpe starp vārdiem ir 7 vienības

Mēs varam noteikt, vai ienākošais signāls ir punkts vai domuzīme, salīdzinot tā ilgumu ar atsauces signālu 2 vienību garumā.

  • punkts ir mazāks par 2 vienībām
  • domuzīme ir lielāka par 2 vienībām

Ienākošā punktu un domuzīmju raksta atšifrēšanai ir divas izteikti atšķirīgas metodes:

  • lineāra meklēšana
  • binārais koks (pazīstams arī kā dihotomisks meklējums)

Lineārā meklēšana

Viena no izplatītākajām metodēm ir izveidot rakstzīmju masīvu un tiem atbilstošus morzes modeļus. Piemēram, katra no šīm rakstzīmēm tiks saglabāta kā:

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

Katram burtam ir vajadzīgas 6 šūnas… 1 pašam burtam un 5 (.) Un (_). Lai to izdarītu, mums ir nepieciešams burtu [36] [6] masīvs ar 216 šūnām. Neizmantotās šūnas parasti tiek aizpildītas ar nulli vai tukšu.

Lai atšifrētu ienākošos punktus un domuzīmes, mums jāsalīdzina katra ienākošā burta punktu/domuzīmju modelis ar mūsu atsauces rakstzīmju rakstiem.

Lai gan šī metode darbojas, tā ir ārkārtīgi lēna.

Pieņemsim, ka masīvā ir saglabāti 26 burti (“A”, “Z”) un cipari (“0”,… “9”), tad mums ir jāveic 36 meklējumi, katrs ar ne vairāk kā 5 apakšmeklējumiem, kas kopā ir 36*5 = 180 meklējumi, lai atšifrētu ciparu “9”.

Binārais koks

Binārā meklēšana ir daudz ātrāka, jo nav nepieciešama meklēšana.

Atšķirībā no lineārās meklēšanas, kurā ir jāsaglabā gan rakstzīmju, gan morzes raksti, binārais koks saglabā tikai rakstzīmes, kas nozīmē, ka masīva izmērs ir mazāks.

Esmu sadalījis savu bināro koku (foto1) divās daļās (2. un 3. fotoattēls), lai tas būtu vieglāk lasāms.

Lai atrastu rakstzīmi, mēs katru reizi, kad dzirdam punktu, pārvietojam rādītāju pa kreisi, un katru reizi, kad dzirdam domuzīmi, pārvietojam rādītāju pa labi. Pēc katra gājiena mēs uz pusi samazinām rādītāja attālumu nākamajam gājienam … līdz ar to nosaukums binārais koks.

Lai atšifrētu burtu “9” (domuzīme, domuzīme, domuzīme, domuzīme, punkts), ir nepieciešami 5 gājieni… 4 pa labi un 1 pa kreisi, kas atstāj rādītāju tieši virs “9”.

Pieci gājieni ir ievērojami ātrāk nekā 180 meklējumi !!!!!

Bināro rakstzīmju masīvs ir arī mazāks… 26 burtiem un 10 cipariem ir nepieciešams tikai 64 x 1 rindu masīvs. Esmu izvēlējies izveidot 128 rakstzīmju masīvu, lai varētu atšifrēt pieturzīmes.

4. solis: dizaina piezīmes

Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes

Morzi ir grūti atšifrēt traucējošu signālu klātbūtnē. Nevēlamie signāli ir jānoraida … tas prasa sava veida filtru.

Ir daudz iespēju:

  1. Fāzes bloķētas cilpas
  2. Induktora-kondensatora filtri
  3. Rezistoru-kondensatoru aktīvie filtri
  4. Digitālā signāla apstrāde, piemēram, ātrā Furjē transformācija vai Gertzela filtrs.

1., 2., 3. metodei ir nepieciešami ārēji komponenti, kas ir apjomīgi.

Metodei 4 nav nepieciešami ārēji komponenti… frekvences tiek noteiktas, izmantojot matemātiskos algoritmus.

Ātrā Furjē transformācija (FFT)

Viena metode, kā noteikt toņa klātbūtni sarežģītā viļņu formā, ir izmantot ātro Furjē transformāciju

1. fotoattēls parāda, kā FFT (ātrā Furjē transformācija) sadala audio spektru “tvertnēs”.

2. fotoattēls parāda, kā FFT “tvertnes” reaģē uz signālu… šajā gadījumā 800 Hz. Ja būtu otrs signāls, piemēram, 1500 Hz, mēs redzētu divas atbildes … vienu pie 800 Hz un otru pie 1500 Hz.

Teorētiski morzes koda dekodētāju var izgatavot, uzraugot konkrētas FFT frekvences tvertnes izvades līmeni … liels skaitlis apzīmē punkta vai domuzīmes klātbūtni … mazs skaitlis nav signāla.

Šādu morzes koda dekodētāju var izgatavot, uzraugot 2. bin 6. attēlu, taču ar šo pieeju ir vairākas lietas:

  • mēs vēlamies tikai vienu frekvenču tvertni … pārējie ir lieki aprēķini
  • frekvenču tvertnes var neparādīties tieši interesējošajā frekvencē
  • tas ir salīdzinoši lēns (20mS uz Arduino cilpu ()

Vēl viena metode ir izmantot Goertzel filtru.

Goertzel filtrs

Goertzel filtrs ir līdzīgs FFT, bet tam ir tikai viena frekvences tvertne.

Foto3 parāda Goertzel filtra frekvences reakciju uz diskrētiem audio soļiem.

4. fotoattēls ir tā paša filtra slaucīšana vienā un tajā pašā frekvenču diapazonā.

Es nolēmu “iet” ar Goertzel algoritmu šādi:

  • Arduino cilpas () laiks, izmantojot Goertzel algoritmu, bija 14mS (milisekundes) pret 20mS (milisekundēm) FFT risinājumam, izmantojot Arduino “fix_FFT” bibliotēku.
  • Ir viegli iestatīt Goertzel joslas caurlaidības filtra centrālo frekvenci.
  • Joslas platums ir aptuveni 190 Hz.

5. fotoattēls parāda 900 Hz Goertzel filtra skaitlisko izvadi, kad tiek konstatēts signāls. Esmu iestatījis toņa slieksni uz vērtību 4000 … vērtības virs 4000 norāda uz signālu.

Teorētiski jums vienkārši jāpielāgo filtrs ērtai klausīšanās frekvencei. Diemžēl audio izeja no mana 1 collu monitoringa skaļruņa strauji nokrītas zem 900 Hz. Lai izvairītos no problēmām, es izmantoju filtra frekvenci 950 Hz. Nepieciešamās formulas alternatīvo filtru frekvenču aprēķināšanai ir atrodamas manā koda galvenē.

Atšifrēšana

Punktu un domuzīmju atšifrēšana nav tik vienkārša, kā šķiet sākumā.

Ideāls mors tiek definēts kā:

  • punkts = 1 vienība
  • atstarpes burta iekšpusē = 1 vienība
  • domuzīme = 3 vienības
  • atstarpe starp burtiem = 3 vienības
  • atstarpe starp vārdiem = 7 vienības

Lai atšifrētu perfektu morzi, mums vienkārši nepieciešams atsauces signāla ilgums 2 vienības

  • punkts <2 vienības
  • elementu telpa <2 vienības
  • domuzīme> 2 vienības
  • burts _space> 2 vienības
  • word_space> 6 vienības (t.i., 3 x atsauces vienības)

Tas darbojas mašīnas morzes gadījumā, bet “reālajā pasaulē”:

  • nosūtīšanas ātrums ir atšķirīgs
  • katra punkta ilgums ir atšķirīgs
  • katras svītras ilgums ir atšķirīgs
  • burti E, I, S, H, 5 satur tikai punktus, kuru vidējais ilgums ir līdz punktam
  • burti T, M, O, 0 satur tikai svītras, kuru vidējais ilgums ir svītra
  • vārdu nepilnības var nesanākt
  • izbalēšana rada kļūdas, no kurām dekodētājam ir jāatgūst.
  • bojāti signāli traucējumu dēļ

Burti, kuros ir tikai punkti un domuzīmes, ir daļēji atrisināti, ja:

mēs aprēķinām atsauces ilgumu, līdz esam saņēmuši derīgu punktu un derīgu domuzīmi. Es izmantoju 200 milisekundes, kas ir derīgas, ja sūtīšanas ātrums ir no 6 WPM (vārdi minūtē) līdz 17 WPM. Jums var būt nepieciešams palielināt šo vērtību, ja mācāties morzi. Ātruma tabula ir iekļauta programmatūrā

Ātruma izmaiņas tiek atrisinātas, ja:

  • mēs veicam slīdošo vidējo rādītāju katram punktam un katrai svītrai un
  • pēc katra simbola saņemšanas pārrēķiniet atsauces ilgumu

Vārdu nepilnības un vārda nepilnības, kas netiek saņemtas, tiek atrisinātas, ja mēs:

  • atcerieties pēdējās pārejas laiku no malas (tonis bez toņa),
  • pēc katra burta restartējiet algoritmu,
  • aprēķiniet pagājušo laiku, gaidot nākamo priekšējo malu pāreju (bez toņa uz toni) un
  • ievietojiet atstarpi, ja ir pārsniegtas 6 laika vienības.

Morzes oscilators

Sākumā es izmēģināju dažus pjezo skaņas signālus, bet atradu:

  • biežums tika fiksēts
  • izvades frekvence bija pārāk augsta ilgstošai klausīšanai
  • pjezos bija tendence izkļūt no Gērcela caurlaides joslas

Pēc tam es mēģināju vadīt akustisko devēju ar 750 Hz kvadrātviļņu, bet atklāju, ka tam ir rezonanse, kas filtrē 1. un 3. harmoniku. 6. fotoattēlā redzama mikrofona pastiprinātāja izeja uz 750 Hz kvadrātviļņu … mēs redzam piekto harmoniku !!!

Pēc tam es izmantoju nelielu skaļruni. 7. fotoattēlā ir redzama mikrofona izeja uz 750 Hz kvadrātviļņu, kas tika nosūtīts uz nelielu skaļruni … šoreiz mēs redzam pamata … nevis piekto harmoniku. Goertzel filtrs ignorē visas harmonikas.

Piezīmes

[1]

en.wikipedia.org/wiki/Goertzel_algorithm

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

5. solis: programmatūra

Programmatūra
Programmatūra
Programmatūra
Programmatūra
Programmatūra
Programmatūra

Uzstādīšana

  • Lejupielādējiet pievienoto failu MorseCodeDecoder.ino [1]
  • Kopējiet šī faila saturu jaunā Arduino skicē
  • Saglabājiet skici kā "MorseCodeDecoder" (bez pēdiņām)
  • Apkopojiet un augšupielādējiet skici savā Arduino

Programmatūras atjauninājums 2020. gada 23. jūlijā

Pievienotajam failam "MorseCodeDecoder6.ino" ir pievienotas šādas funkcijas

  • logs "Precīzs melnādainais" [2]
  • "Trokšņu slāpētājs"

Pielāgošana:

  • palieliniet uztvērēja skaņas līmeni, līdz gaismas diode sāk mirgot, un pēc tam atkal izslēdzas
  • tagad noregulējiet uztvērēju, līdz gaismas diode mirgo vienlaikus ar ienākošo morsu
  • Noise_blanker ir iestatīts tā, lai ignorētu trokšņa pārrāvumus līdz 8 mS (vienas cilpas laikā)
  • trokšņa slieksni var noregulēt, iestatot Debug = true un skatoties seriālo ploteri

Piezīme

[1]

Iestatiet savu Arduino sērijas monitoru uz 115200 bodu, ja arī vēlaties apskatīt tekstu.

[2]

  • 1. foto… Precīzs Blekmena logs
  • 2. fotoattēls… Gērcela filtrs bez Exact Blackman loga
  • Foto 3,,, Gertzela filtrs ar piemērotu logu Precīzs Blekmens

6. darbība: darbība

Dekodētājs

Klausoties morzi, novietojiet ierīci blakus skaļrunim.

  • Elektreta mikrofona kapsula uztver morzes signālu no jūsu skaļruņa.
  • Pēc tam elektreta mikrofona izeja tiek pastiprināta 647 reizes (56 dB), pirms tā tiek nodota apstrādei Arduino.
  • Goertzel digitālais joslas caurlaidības filtrs no trokšņa iegūst morzes signālu.
  • Atšifrēšana tiek veikta, izmantojot bināro koku.
  • Dekodētāja izeja tiek parādīta kā teksts 320 x 240 pikseļu TFT displejā. Tas arī tiek nosūtīts uz jūsu Arduino “sērijas monitoru”, ja nevēlaties izmantot displeju.

Morzes sūtītājs

Ir iekļauts arī morzes sūtītājs. Tas ļauj praktizēt morzes sūtīšanu un darbojas šādi:

  • Arduino tapā 4 tiek ģenerēts nemainīgs skaņas signāls.
  • Šo signālu mēs dzirdam, izmantojot dekodētāja skaļruni, kad nospiežam morzes taustiņu.
  • Tonis ir iestatīts tādā pašā frekvencē kā Goertzel filtrs, kas liek dekodētājam domāt, ka tas klausās īstu morzi … viss, ko sūtīsit, parādīsies displejā kā drukāts teksts.

Jūsu sūtīšana uzlabosies, jo dekodētājs uztver bieži sastopamas kļūdas, piemēram:

  • pārāk daudz vietas starp simboliem. (piemērs: Q attēlots kā MA)
  • pārāk daudz vietas starp burtiem (piemērs: TAGAD izdrukāts kā NO W)
  • nepareizs kods

7. darbība. Kopsavilkums

Dekodētājs

Šajā pamācībā aprakstīts, kā izveidot morzes dekodētāju, kas pārvērš morzes kodu drukātā tekstā.

  • Dekodētājs spēj atšifrēt morzi līdz vismaz 80 WPM (vārdi minūtē)
  • Dekodētājs automātiski izseko saņemtā nosūtīšanas ātruma izmaiņas.
  • Teksts tiek parādīts jūsu seriālajā monitorā (vai 320 x 240 TFT displeja modulī, ja tāds ir) [1]

Sūtītājs

Ir iekļauts arī morzes sūtītājs

  • Sūtītājs palīdz uzlabot morzes sūtīšanas kvalitāti.
  • Dekodētājs apstiprina, ka jūsu nosūtītais ir pareizs

Daļu izmaksas

Morzes dekodētāja vairoga paredzamās izmaksas, atskaitot papildu TFT displeju, ir 25 ASV dolāri.

Noklikšķiniet šeit, lai skatītu citus manus norādījumus.

Audio izaicinājums 2020
Audio izaicinājums 2020
Audio izaicinājums 2020
Audio izaicinājums 2020

Otrā balva audio izaicinājumā 2020

Ieteicams: