Mundarija:

Binary Tree Morse Decoder: 7 qadam (rasmlar bilan)
Binary Tree Morse Decoder: 7 qadam (rasmlar bilan)

Video: Binary Tree Morse Decoder: 7 qadam (rasmlar bilan)

Video: Binary Tree Morse Decoder: 7 qadam (rasmlar bilan)
Video: Binary Tree Morse Decoder 2024, Noyabr
Anonim
Image
Image
O'chirish diagrammasi
O'chirish diagrammasi

Bu ko'rsatma Arduino Uno R3 yordamida Morz kodini qanday dekodlashni tushuntiradi.

Avtomatik yuborish tezligiga moslashtiruvchi dekoder, morsni bir daqiqada kamida 80 so'zgacha dekodlash imkoniyatiga ega.

Kiruvchi kod Arduino Serial monitorida (yoki o'rnatilgan bo'lsa TFT ekranida) matn sifatida ko'rsatiladi.

Agar siz mors yuborishni mashq qilmoqchi bo'lsangiz, osilator qo'shilgan.

Dekoderning xususiyatlari:

  • 320 x 240 TFT displeyli modul [1]
  • kiruvchi signallarni ajratish uchun Goertzel raqamli tarmoqli o'tkazgich filtri.
  • signalni dekodlash uchun "Ikkilik morz daraxti"
  • avtomatik tezlikni kuzatish
  • morz mashq qilganda eshitiladigan ovoz
  • kiruvchi va chiquvchi matn ko'rsatiladi.

Quyidagi belgilar va belgilar tan olinadi:

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

TFT displeyini hisobga olmaganda, morse dekoder qalqonining taxminiy narxi 25 dollarni tashkil qiladi. [1]

Rasmlar

  • Muqova fotosurati to'liq yig'ilgan birlikni ko'rsatadi
  • Videoda dekoderning ishi ko'rsatilgan

Eslatmalar

[1]

  • TFT displey moduli ixtiyoriy, chunki barcha matn Arduino "Serial monitor" ga yuboriladi.
  • TFT moduli mening ko'rsatmali https://www.instructables.com/id/Arduino-TFT-Grap… da tasvirlangan.

1 -qadam: qismlar ro'yxati

Quyidagi qismlar https://www.aliexpress.com/ saytidan olingan.

Arduino UNO R3 uchun 2,54 mm balandlikdagi bitta prototipli qalqon

Quyidagi qismlar mahalliy darajada olingan:

  • Faqat bitta LM358 dual opamp
  • Faqat 1 ta yashil LED
  • Faqat 1 ta LED klip
  • 1 ta faqat elektret mikrofon kapsulasi
  • 1 faqat oddiy ochiladigan tugma
  • 1 ta 8 pinli DIP soket
  • 2 ta atigi 330 ohmli rezistorlar
  • 2 ta 2K2 rezistor
  • 5 ta 10K ohmli rezistorlar
  • 2 ta 56K ohmli rezistorlar
  • 2 ta faqat 1 uF kondansatör
  • 1 ta faqat 10 uF kondansatör

Quyidagi qismlar ixtiyoriy:

  • Faqat 2,2 dyuymli TFT SPI LCD displeyli modul 240*320 ILI9341, SD karta uyasi bilan Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • Morze tugmasi / tugma
  • 1 faqat BC548 NPN tranzistor
  • 1 faqat 1 dyuymli karnay
  • Faqat 33K ohmli qarshilik
  • 1 dona faqat 3,5 mm mono vilka (mors kaliti uchun)
  • Faqat 3,5 mm mono soket (mors kaliti uchun)
  • 3 ta faqat 9 mm M3 diametrli neylon ajratgichlar
  • 1 ta faqat 130 x 68 x 44 mm ABS plastik quti
  • 5 ta 2-pinli to'g'ri burchakli ulagichlar

Morse dekoder qalqonining taxminiy narxi, ixtiyoriy TFT -displeydan tashqari, 25 dollarni tashkil qiladi. [1]

Eslatmalar

[1]

Ixtiyoriy 320 x 240 TFT displeyli modul uchun ehtiyot qismlar ro'yxati

[2]

Agar siz jo'natuvchidan foydalanmoqchi bo'lsangiz, mors kaliti yoki mustahkam tugmacha kerak.

2 -qadam: O'chirish diagrammasi

O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi
O'chirish diagrammasi

Rasmlar

1 -rasmda Morse dekoderining sxemasi ko'rsatilgan. 330 ohmli qarshilik Mors tugmachasi bilan ketma -ket tasodifan erga qisqa tutashuvda D4 chiqish oqimini cheklaydi… uning qiymatini oshirish karnaydan ovoz chiqarilishini kamaytiradi. Shuning uchun men uni qalqonga qo'shmaganman, balki sozlashni osonlashtirish uchun uni to'g'ridan-to'g'ri mors-kalit uyasiga ulaganman

2 -rasmda mos keladigan qalqon ko'rsatilgan. Qalqon-bu menga ko'rsatiladigan https://www.instructables.com/id/Arduino-TFT-Grap…, men unga mikrofon kuchaytirgichi va ohang osilatorini qo'shdim. [1]

3 -rasmda Arduino -ga o'rnatilgan tugallangan qalqon ko'rsatilgan. Agar matnni Arduino "Serial monitor" da ko'rish kerak bo'lsa, boshqa komponentlar talab qilinmaydi

4 -rasmda dekoder qisman qutiga joylashtirilgan. Qopqoqda displeyni ko'rish uchun teshik kesilgan. Karnay va mikrofon korpusga mahkam yopishtirilgan. Karnayni o'rnatishdan oldin qopqog'ida bir nechta karnay teshiklarini burang. Qopqoqning markaziy rozetkasi kengaytma mikrofoni uchun mo'ljallangan … bu holda dekoder dinamikga yaqin joylashtirilishi kerak, bu har doim ham mumkin emas

5 -rasm TFT ekranini ko'rsatadi. Displey qirralariga qora elektr lenta yopishtirilgan … bu tasma yorug'lik oqishini oldini oladi va displey bilan qopqog'idagi teshik orasidagi har qanday noto'g'ri chiziqni yashiradi

Muhim

[1]

Katta USB ulagichi bo'lgan Arduinolar USB ulagichi va Arduino qalqoni o'rtasida elektr lenta qatlamini talab qiladi. Tasodifan qisqa chiziqlar tasmasiz mumkin, chunki bo'sh joy kichik. Kichik ulagichlari bo'lgan Arduinos uchun lenta kerak emas

3 -qadam: nazariya

Nazariya
Nazariya
Nazariya
Nazariya
Nazariya
Nazariya

Har bir morse kodi harfi "nuqta" va "chiziq" deb nomlangan qisqa va uzoq muddatli ohanglardan iborat.

  • nuqta (.) uzunligi 1 birlik
  • chiziq (_) uzunligi 3 birlik
  • harf elementlari orasidagi bo'shliq 1 birlik
  • harflar orasidagi bo'shliq - 3 birlik
  • so'zlar orasidagi bo'shliq - 7 birlik

Biz kiruvchi ohangni nuqta yoki chiziqcha ekanligini aniqlashimiz mumkin, uning davomiyligini mos yozuvlar ohangining uzunligi 2 birlik bilan solishtirish orqali.

  • nuqta 2 birlikdan kam
  • chiziq 2 birlikdan katta

Kiruvchi nuqta va chiziq chizig'ini dekodlashning ikkita aniq usuli bor:

  • chiziqli qidiruv
  • ikkilik daraxt (dichotomic search deb ham ataladi)

Chiziqli qidiruv

Umumiy usullardan biri - belgilar majmuasini va ularga mos keladigan morz naqshlarini yaratishdir. Masalan, quyidagi belgilarning har biri quyidagicha saqlanadi:

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

Har bir harfga 6 ta hujayra kerak bo'ladi: harfning o'zi uchun 1 ta, (.) Va (_) harflari uchun 5 ta. Buni amalga oshirish uchun bizga 216 katakdan iborat harflar [36] [6] kerak. Foydalanilmaydigan hujayralar odatda nol yoki bo'sh joy bilan to'ldiriladi.

Kiruvchi nuqta va chiziqlarni dekodlash uchun har bir kiruvchi harfning nuqta/chiziq chizig'ini mos yozuvlar belgilarimiz bilan solishtirishimiz kerak.

Bu usul ishlayotgan bo'lsa -da, bu juda sekin.

Aytaylik, bizda 26 ta harf ('A',.. 'Z') va raqamlar ('0',… '9') saqlangan, keyin biz har biri 5 tagacha qidiruvga ega bo'lgan 36 ta qidiruvni bajarishimiz kerak. bu "9" raqamini hal qilish uchun jami 36*5 = 180 ta qidiruv.

Ikkilik daraxt

Ikkilik qidiruv ancha tezroq, chunki hech qanday qidirish talab qilinmaydi.

Chiziqli qidirishdan farqli o'laroq, ikkilik daraxt faqat belgilarni saqlaydi, ya'ni massiv kattaligi kichikroq bo'ladi.

Men o'qiy olishim uchun ikkilik daraxtimni (1 -rasm) ikkiga ajratdim (2 va 3 -rasmlar).

Belgini topish uchun biz har safar nuqta eshitganimizda ko'rsatgichni chapga siljitamiz va chiziqni har eshitganimizda ko'rsatgichni o'ngga siljitamiz. Har bir harakatdan so'ng, biz keyingi harakat uchun ko'rsatgich masofasini ikki baravar kamaytiramiz, shuning uchun ikkilik daraxt nomi berilgan.

"9" harfini (tire, tire, tire, tire, nuqta) dekodlash uchun o'ng tomonga 5 ta … 4 va chapga 1 ta harakat qilish kerak, bu ko'rsatgichni to'g'ridan -to'g'ri "9" ustidan qoldiradi.

Beshta harakat 180 ta qidiruvdan ancha tezroq !!!!!

Ikkilik belgilar qatori ham kichikroq … 26 ta harf va 10 ta raqam faqat 64 x 1 qatorli qatorni talab qiladi. Men tinish belgilarini ochish uchun 128 ta belgidan iborat qator yaratishni tanladim.

4 -qadam: Dizayn bo'yicha eslatmalar

Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar
Dizayn bo'yicha eslatmalar

Morsni aralashuvchi signallar mavjudligida dekodlash qiyin. Kiruvchi signallarni rad etish kerak … buning uchun qandaydir filtr kerak.

Ko'p imkoniyatlar mavjud:

  1. Faza bilan qulflangan halqalar
  2. Induktor-kondansatör filtrlari
  3. Rezistor-kondansatkichli faol filtrlar
  4. Fast Fourier Transform yoki Goertzel filtri kabi raqamli signallarni qayta ishlash.

1, 2, 3 -usullar katta hajmli tashqi komponentlarni talab qiladi.

4 -usul tashqi komponentlarni talab qilmaydi … chastotalar matematik algoritmlar yordamida aniqlanadi.

Tez Fourier transformatsiyasi (FFT)

Murakkab to'lqin shaklida ohang borligini aniqlashning bir usuli - Fast Fourier transformasidan foydalanish

1 -rasmda FFT (Fast Fourier Transform) audio spektrini "axlat qutilari" ga qanday ajratish ko'rsatilgan.

2 -rasmda FFT "qutilari" signalga qanday javob berishi ko'rsatilgan … bu holda 800 Gts. Agar 1500Hz chastotali ikkinchi signal mavjud bo'lsa, biz ikkita javobni ko'rardik: biri 800Hzda, ikkinchisi 1500Hzda.

Nazariy jihatdan, ma'lum bir FFT chastotali qutisining chiqish darajasini kuzatish orqali morz kodi dekoderini tuzish mumkin … ko'p sonli nuqta yoki tire borligini bildiradi … oz qismi signalni bildirmaydi.

Mors kodining bunday dekoderini 2 -rasmdagi "bin 6" ni kuzatish orqali amalga oshirish mumkin edi, lekin bu yondashuvda bir qancha xatoliklar bor:

  • Biz faqat bitta chastota qutisini xohlaymiz … qolganlari behuda hisoblar
  • chastota qutilari qiziqish chastotasida aniq ko'rinmasligi mumkin
  • bu nisbatan sekin (Arduino loopiga 20 mS ()

Boshqa usul - Goertzel filtridan foydalanish.

Goertzel filtri

Goertzel filtri FFT -ga o'xshaydi, lekin faqat bitta chastota qutisi bor.

Photo3 Goertzel filtrining alohida ovozli bosqichlarga chastotali javobini ko'rsatadi.

4 -rasm - xuddi shu chastota diapazonida bir xil filtrni tozalash.

Men Goertzel algoritmi bilan "ketishga" qaror qildim:

  • Goertzel algoritmidan foydalangan Arduino loop () vaqti Arduino "fix_FFT" kutubxonasi yordamida FFT yechimi uchun 14mS (millisekund) ga nisbatan 20mS (millisekund) ga teng edi.
  • Goertzel tarmoqli o'tkazgich filtrining markaziy chastotasini o'rnatish oson.
  • Tarmoqli kengligi taxminan 190 Gts.

5 -rasmda ohang aniqlanganda 900 gigagertsli Goertzel filtrining raqamli chiqishi ko'rsatilgan. Men ohang chegarasini 4000 ga qo'ydim … 4000 dan yuqori qiymatlar ohangni bildiradi.

Nazariy jihatdan, siz filtrni qulay tinglash chastotasiga sozlashingiz kerak. Afsuski, mening 1 dyuymli monitorimning ovoz chiqishi 900 gigagertsdan pastga tez tushib ketadi. Muammolarni oldini olish uchun men 950 Gts chastotali filtrdan foydalanaman. Muqobil filtr chastotalarini hisoblash uchun kerakli formulalar mening kodim sarlavhasida topilgan.

Dekodlash

Nuqtalar va chiziqlarni dekodlash birinchi qarashda ko'rinadigan darajada oson emas.

Mukammal morse quyidagicha ta'riflanadi:

  • nuqta = 1 birlik
  • harf ichidagi bo'shliqlar = 1 birlik
  • chiziq = 3 birlik
  • harflar orasidagi bo'shliq = 3 birlik
  • so'zlar orasidagi bo'shliq = 7 birlik

Mukammal morzni dekodlash uchun bizga mos yozuvlar ohangining davomiyligi 2 birlik kerak

  • nuqta <2 birlik
  • elementlar maydoni <2 birlik
  • chiziq> 2 birlik
  • harfi _ bo'sh joy> 2 birlik
  • word_space> 6 birlik (ya'ni 3 ta mos yozuvlar birligi)

Bu mashina morsi uchun ishlaydi, lekin "haqiqiy dunyoda":

  • yuborish tezligi har xil
  • har bir nuqtaning davomiyligi turlicha
  • har bir chiziqning davomiyligi turlicha
  • E, I, S, H, 5 harflari faqat nuqta davomiyligiga o'rtacha nuqtalarni o'z ichiga oladi
  • T, M, O, 0 harflari faqat chiziq chizig'ining davomiyligiga to'g'ri keladigan chiziqlarni o'z ichiga oladi
  • so'z bo'shliqlari kelmasligi mumkin
  • so'nishi dekoder tiklanishi kerak bo'lgan xatolarni keltirib chiqaradi.
  • shovqin tufayli buzilgan signallar

Faqat nuqta va chiziqlardan iborat harflar qisman hal qilinadi, agar:

biz aniq nuqta va to'g'ri chiziqni olmagunimizcha, ma'lumotnomaning davomiyligini hisoblaymiz. Men 200 millisekunddan foydalanaman, agar yuborish tezligi 6 WPM (daqiqada so'zlar) va 17 WPM orasida bo'lsa. Agar siz mors tilini o'rganayotgan bo'lsangiz, bu qiymatni oshirishingiz kerak bo'lishi mumkin. Tezlik jadvali dasturiy ta'minotga kiritilgan

Tezlikning o'zgarishi hal qilinadi, agar:

  • biz har bir nuqta va har bir chiziq bo'yicha o'rtacha harakatni bajaramiz
  • har bir belgi olinganidan keyin mos yozuvlar davomiyligini qayta hisoblang

So'z bo'shliqlari va kelmagan bo'shliqlar hal qilinadi, agar:

  • oxirgi oxirgi (ohangdan ohanggacha) o'tish vaqtini eslang,
  • har bir harfdan keyin algoritmni qayta ishga tushiring;
  • keyingi vaqtni (ohangga ohangsiz) o'tishni kutayotganda o'tgan vaqtni hisoblang va
  • agar 6 ta vaqt birligi oshib ketgan bo'lsa, bo'sh joy qo'shing.

Morz osilatori

Men dastlab ba'zi Piezo buzzerlarini sinab ko'rdim, lekin topdim:

  • chastota aniqlandi
  • chiqish chastotasi uzoq vaqt tinglash uchun juda yuqori edi
  • piezolar Goertzel o'tish chizig'idan chiqib ketishga moyil edi

Keyin men 750 gigagertsli kvadrat to'lqinli akustik transduserni boshqarishga harakat qildim, lekin uning rezonansi borligini aniqladim, u 1 va 3 -chi harmonikalarni filtrladi. 6-rasmda 750 gigagertsli kvadrat to'lqinli mikrofon kuchaytirgichining chiqishi ko'rsatilgan … biz 5-garmonikni ko'ramiz !!!

Keyin men kichkina karnaydan foydalanardim. 7 -rasm mikrofonning 750 gigagertsli kvadrat to'lqinini ko'rsatadi, u kichik karnayga yuborilgan … bu safar biz 5 -garmonikni emas, balki asosiyini ko'ramiz. Goertzel filtri har qanday harmonikani hisobga olmaydi.

Eslatmalar

[1]

en.wikipedia.org/wiki/Goertzel_algorithm

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

5 -qadam: dasturiy ta'minot

Dasturiy ta'minot
Dasturiy ta'minot
Dasturiy ta'minot
Dasturiy ta'minot
Dasturiy ta'minot
Dasturiy ta'minot

O'rnatish

  • Qo'shilgan faylni yuklab oling MorseCodeDecoder.ino [1]
  • Ushbu fayl tarkibini yangi Arduino eskiziga nusxalash
  • Eskizni "MorseCodeDecoder" sifatida saqlang (tirnoqsiz)
  • Eskizni kompilyatsiya qiling va Arduino -ga yuklang

Dasturiy ta'minot yangilanishi 2020 yil 23 -iyul

"MorseCodeDecoder6.ino" biriktirilgan faylga quyidagi funktsiyalar qo'shildi.

  • "Aniq Blackman" oynasi [2]
  • "shovqin_blanker"

Moslashish:

  • LED miltillay boshlaguncha qabul qiluvchining ovozini oshiring va keyin o'chiring
  • Endi LEDni milt -milt milt -milt keladigan miltillab yonib ketguncha qabul qilgichni sozlang
  • Noise_blanker 8 mS gacha bo'lgan shovqinlarni e'tiborsiz qoldiradigan qilib o'rnatildi.
  • Shovqin chegarasini Debug = true ni sozlash va Serial Plotterni kuzatish orqali sozlash mumkin

Eslatma

[1]

Agar siz ham matnni ko'rishni xohlasangiz, Arduino seriyali monitorini 115200 bodga o'rnating.

[2]

  • 1 -rasm … Blekmenning aniq oynasi
  • 2 -rasm … Aniq Blackman oynasi bo'lmagan Goertzel filtri
  • Rasm 3,,, Goertzel filtri aniq Blackman oynasi bilan

6 -qadam: operatsiya

Dekoder

Mors tinglanayotganda jihozni karnay yoniga qo'ying.

  • Elektret mikrofon kapsulasi karnaydan mors signalini oladi.
  • Keyin elektrod mikrofonining chiqishi 647 marta (56dB) kuchaytiriladi va Arduino -ga qayta ishlash uchun yuboriladi.
  • Goertzel raqamli tarmoqli o'tkazgichli filtri shovqindan mors signalini chiqaradi.
  • Dekodlash ikkilik daraxt yordamida amalga oshiriladi.
  • Dekoder chiqishi 320 x 240 pikselli TFT displeyda matn sifatida ko'rsatiladi. Agar siz displeydan foydalanishni xohlamasangiz, u sizning Arduino "Serial Monitor" ga ham yuboriladi.

Morse yuboruvchisi

Mors yuboruvchi ham kiritilgan. Bu sizga mors yuborish amaliyotini bajarishga imkon beradi va quyidagicha ishlaydi:

  • Arduino pin 4 -da doimiy ovozli signal paydo bo'ladi.
  • Biz bu ohangni mors-tugmachasini har bosganimizda dekoderning karnay orqali eshitamiz.
  • Ohang Goertzel filtri bilan bir xil chastotada o'rnatiladi, bu dekoderni haqiqiy morzni tinglashiga aldanib qoladi … siz yuborgan har bir narsa displeyda bosma matn sifatida paydo bo'ladi.

Sizning yuborishingiz yaxshilanadi, chunki dekoder quyidagi kabi keng tarqalgan xatolarni oladi:

  • belgilar orasidagi bo'shliq juda ko'p. (misol: Q MA sifatida belgilangan)
  • harflar orasida juda ko'p bo'sh joy (masalan: NO W sifatida bosilgan)
  • noto'g'ri kod

7 -qadam: Xulosa

Dekoder

Bu yo'riqnomada Morse kodini bosma matnga o'zgartiradigan Morse dekoderini qanday qilish kerakligi tasvirlangan.

  • Dekoder morsni kamida 80 WPMgacha (daqiqada so'zlar) hal qila oladi.
  • Dekoder avtomatik ravishda qabul qilingan yuborish tezligidagi o'zgarishlarni kuzatadi.
  • Matn Serial monitoringizda (yoki o'rnatilgan bo'lsa, 320 x 240 TFT displeyli modulda) ko'rsatiladi [1]

Yuboruvchi

Mors yuboruvchi ham kiritilgan

  • Yuboruvchi sizga mors yuborish sifatini yaxshilashga yordam beradi.
  • Dekoder siz yuborgan narsaning to'g'riligini tasdiqlaydi

Qismlarning narxi

Morse dekoder qalqonining taxminiy narxi, ixtiyoriy TFT displeyidan tashqari, 25 dollarni tashkil qiladi.

Boshqa ko'rsatmalarni ko'rish uchun shu erni bosing.

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

Audio Challenge 2020 ikkinchi mukofoti

Tavsiya: