Съдържание:
- Стъпка 1: Списък на частите
- Стъпка 2: Електрическа схема
- Стъпка 3: Теория
- Стъпка 4: Бележки за дизайна
- Стъпка 5: Софтуер
- Стъпка 6: Операция
- Стъпка 7: Обобщение
Видео: Декодер на двоично дърво на Морс: 7 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Тази инструкция обяснява как да декодирате азбуката на Морз с помощта на Arduino Uno R3.
Декодерът, който автоматично се настройва към скоростта на изпращане, е в състояние да декодира азбука до поне 80 думи в минута.
Входящият код се показва като текст на вашия Arduino сериен монитор (или TFT екран, ако има такъв)
Тонов осцилатор е включен, ако искате да практикувате изпращането на морз.
Характеристиките на декодера:
- 320 x 240 TFT дисплей модул [1]
- цифров лентов филтър на Goertzel за разделяне на нежелани сигнали.
- „Двоично дърво на Морс“за декодиране на сигнала
- автоматично проследяване на скоростта
- звуков изход при практикуване на морз
- се показват както входящият, така и изходящият текст.
Разпознават се следните знаци и символи:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Приблизителната цена на щита за декодиране на Морзе, минус TFT дисплея, е 25 долара. [1]
Изображения
- Снимката на корицата показва напълно сглобена единица
- Видеото показва как декодерът работи
Бележки
[1]
- Модулът за TFT дисплей е незадължителен, тъй като целият текст се изпраща към вашия Arduino „Serial Monitor“.
- TFT модулът е описан в инструкциите ми
Стъпка 1: Списък на частите
Следните части са получени от
1 единствен прототип на щит за Arduino UNO R3, 2.54mm Pitch
Следните части са получени локално:
- 1 само LM358 двойна опампа
- 1 само светодиод зелен
- 1 само LED скоба
- 1 само капсула с електретен микрофон
- 1 само нормално отворен бутон
- 1 само 8-пинов DIP контакт
- 2 само 330 ома резистори
- 2 само 2K2 резистора
- 5 само 10K ома резистори
- 2 само 56K ома резистори
- 2 само 1uF кондензатор
- 1 само 10uF кондензатор
Следните части са незадължителни:
- 1 само 2.2 -инчов TFT SPI LCD дисплей модул 240*320 ILI9341 със слот за SD карта за Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
- Морзов ключ / бутон
- 1 само BC548 NPN транзистор
- 1 само 1 инчов високоговорител
- 1 само 33K ом резистор
- 1 само 3,5 мм моно щепсел (за ключ на Морз)
- 1 само 3,5 мм моно гнездо (за морзов ключ)
- 3 само 9 мм найлонови дистанционни елементи M3 с накрайник
- 1 само 130 x 68 x 44 мм ABS пластмасова кутия
- 5 само 2-пинови конектори за прав ъгъл
Приблизителната цена на щита за декодиране на Морзе, минус опционалния TFT дисплей, е 25 долара. [1]
Бележки
[1]
Списъкът с части за опционалния 320 x 240 TFT дисплей модул е посочен в инструкциите ми
[2]
Ако искате да използвате подателя, е необходим ключ на Морзе или здрав бутон.
Стъпка 2: Електрическа схема
Изображения
Снимка 1 показва електрическата схема на декодера на Морз. Резисторът от 330 ома, последователно с клавиша на Морс, ограничава изходния ток D4 в случай на случайно късо съединение към масата … увеличаването на неговата стойност намалява аудио изхода от високоговорителя. Поради тази причина не съм го добавил към щита, а го прикрепих директно към жака за морзов ключ за по-лесно регулиране
Снимка 2 показва съвпадащ щит. Щитът е от моя инструкционен https://www.instructables.com/id/Arduino-TFT-Grap…, към който добавих усилвателя на микрофона и тоналния осцилатор. [1]
Снимка 3 показва завършения щит, прикрепен към Arduino. Не се изискват никакви други компоненти, ако текстът трябва да се гледа на вашия Arduino „Serial Monitor“
Снимка 4 показва декодера частично в кутия. В капака е изрязан отвор за гледане на дисплея. Високоговорителят и микрофонът са залепени горещо към корпуса. Пробийте няколко отвора за високоговорители в капака, преди да монтирате високоговорителя. Централният гнездо на капака е за разширителен микрофон … без това декодерът трябва да бъде поставен близо до високоговорителя, което не винаги е възможно
Снимка 5 показва TFT екрана. Черна електрическа лента е прикрепена към ръбовете на дисплея … тази лента предотвратява изтичането на светлина и маскира всяко разминаване между дисплея и отвора в капака
Важно
[1]
Arduinos с голям USB конектор изисква слой електрическа лента между USB конектора и Arduino щита. Случайни къси панталони са възможни без лентата, тъй като хлабината е малка. Лентата не е необходима за Arduinos, които имат малки конектори
Стъпка 3: Теория
Всяка буква на азбуката на Морз включва поредица от кратки и дълготрайни тонове, наречени „точки“и „тирета“.
- точка (.) е с дължина 1 единица
- тире (_) е с дължина 3 единици
- пространството между буквените елементи е 1 единица
- интервалът между буквите е 3 единици
- пространството между думите е 7 единици
Можем да определим дали входящият тон е точка или тире, като сравним продължителността му с референтен тон с дължина 2 единици.
- точка е по -малко от 2 единици
- тире е по -голямо от 2 единици
Има два ясно различни метода за декодиране на входящия модел на точки и тирета:
- линейно търсене
- двоично дърво (известно също като дихотомично търсене)
Линейно търсене
Един често срещан метод е да се създаде масив от знаци и съответстващите им модели на Морзе. Например всеки от следните знаци ще бъде записан като:
- А. _
- Б _…
- ° С _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Всяка буква изисква 6 клетки … 1 за самата буква и 5 за буквите (.) И (_). За да направим това, се нуждаем от букви [36] [6] символен масив с общо 216 клетки. Неизползваните клетки обикновено се запълват с нула или празно място.
За да декодираме входящите точки и тирета, трябва да сравним модела точки/тирета на всяка входяща буква с нашите референтни символни модели.
Въпреки че този метод работи, той е изключително бавен.
Да речем, че имаме 26 букви ('A',.. 'Z') и цифрите ('0', … '9'), съхранени в масив, тогава трябва да извършим 36 търсения, всяко с до 5 под-търсения, което е общо 36*5 = 180 търсения за декодиране на цифрата '9'.
Двоично дърво
Двоичното търсене е много по -бързо, тъй като не са необходими търсения.
За разлика от линейното търсене, което изисква да се съхраняват както знаците, така и моделите на Морзе, двоичното дърво съхранява само знаците, което означава, че размерът на масива е по -малък.
Разделих двоичното си дърво (снимка1) на две половини (снимки 2 и 3), за да стане по -четимо.
За да намерим знак, преместваме показалец наляво всеки път, когато чуем точка и преместваме показалеца надясно всеки път, когато чуем тире. След всеки ход ние разделяме наполовина разстоянието на показалеца за следващия ход … оттук и името двоично дърво.
За декодиране на буквата „9“(тире, тире, тире, тире, точка) са необходими 5 хода… 4 надясно и 1 вляво, което оставя показалеца директно над „9“.
Пет хода са значително по -бързи от 180 търсения !!!!!
Двоичният масив от символи също е по -малък … 26 букви и 10 цифри изискват само масив от 64 x 1 ред. Избрах да създам масив от 128 знака, за да мога да декодирам пунктуацията.
Стъпка 4: Бележки за дизайна
Морзе е трудно да се декодира при наличие на смущаващи сигнали. Нежеланите сигнали трябва да бъдат отхвърлени … това изисква някакъв филтър.
Има много възможности:
- Фазово заключени контури
- Индуктор-кондензаторни филтри
- Резисторно-кондензаторни активни филтри
- Цифрова обработка на сигнал, като например бързо преобразуване на Фурие, или филтър на Goertzel.
Методи 1, 2, 3 изискват външни компоненти, които са обемисти.
Метод 4 не изисква външни компоненти … честотите се откриват с помощта на математически алгоритми.
Бърза трансформация на Фурие (FFT)
Един метод за откриване на наличието на тон в сложна форма на вълната е да се използва бързата трансформация на Фурие
Снимка 1 показва как FFT (бърза трансформация на Фурие) разделя аудио спектъра на „контейнери“.
Снимка 2 показва как FFT „контейнерите“реагират на сигнал … в този случай 800Hz. Ако присъстваше втори сигнал, да речем 1500Hz, щяхме да видим две реакции … една на 800Hz и друга на 1500Hz.
На теория декодер на азбука на Морз може да бъде направен чрез наблюдение на изходното ниво на определена битова честотна лента … голям брой представлява наличието на точка или тире … малък брой не представлява сигнал.
Такъв декодер на азбуката на Морз може да бъде направен чрез наблюдение на „кош 6“на снимка 2, но има няколко неща, които не са наред с този подход:
- искаме само една честотна лента … останалите са напразни изчисления
- честотните кутии може да не се показват точно на честотата, която представлява интерес
- сравнително бавен е (20mS на контур на Arduino ()
Друг метод е да използвате филтър на Goertzel.
Goertzel филтър
Филтърът Goertzel е подобен на FFT, но има само една честотна лента.
Снимка 3 показва честотната характеристика на филтър на Goertzel към дискретни аудио стъпки.
Снимка 4 е размахване на същия филтър в същия честотен диапазон.
Реших да „отида“с алгоритъма на Goertzel като:
- Времето на Arduino loop (), използващо алгоритъма Goertzel, е 14mS (милисекунди) срещу 20mS (милисекунди) за FFT решение, използващо библиотеката „fix_FFT“на Arduino.
- Лесно е да настроите централната честота на лентов филтър на Goertzel.
- Пропускателната способност е приблизително 190Hz.
Снимка 5 показва числовия изход от 900Hz Goertzel филтър, когато се открие тон. Задал съм тоновия си праг на стойност 4000 … стойностите над 4000 означават тон.
На теория просто трябва да настроите филтъра си на удобна за слушане честота. За съжаление аудио изходът от моя 1 -инчов високоговорител за мониторинг пада бързо под 900Hz. За да избегна всякакви проблеми, използвам филтърна честота 950Hz. Необходимите формули за изчисляване на алтернативни честоти на филтрите се намират в заглавката на моя код.
Декодиране
Декодирането на точките и тиретата не е толкова лесно, колкото изглежда на пръв поглед.
Перфектният морз се определя като:
- точка = 1 единица
- интервали в буквата = 1 единица
- тире = 3 единици
- интервал между букви = 3 единици
- интервал между думите = 7 единици
За да декодираме перфектен морз, просто се нуждаем от референтна продължителност на тона от 2 единици
- точка <2 единици
- пространство на елементите <2 единици
- тире> 2 единици
- буква _пространство> 2 единици
- word_space> 6 единици (т.е. 3 x референтни единици)
Това работи за машината на Морс, но в „реалния свят“:
- скоростта на изпращане варира
- продължителността на всяка точка е различна
- продължителността на всяко тире варира
- буквите E, I, S, H, 5 съдържат само точки, които са средни за продължителността на точката
- буквите T, M, O, 0 съдържат само тирета, които са средни за продължителността на тирето
- пропуските в думите може да не се появят
- избледняване създава грешки, от които декодерът трябва да се възстанови.
- повредени сигнали поради смущения
Буквите, съдържащи само точки и тирета, са частично решени, ако:
ние изчисляваме референтната продължителност, докато не получим валидна точка и тире. Използвам 200 милисекунди, което е валидно, ако скоростта на изпращане е между 6 WPM (думи в минута) и 17 WPM. Може да се наложи да увеличите тази стойност, ако изучавате морз. В софтуера е включена таблица за скоростта
Промените в скоростта се решават, ако:
- изпълняваме подвижна средна стойност за всяка точка и всяко тире и
- преизчислете референтната продължителност след получаване на всеки символ
Дупките и дупките, които не пристигат, се решават, ако:
- запомнете времето на последния преход (тон към без тон),
- рестартирайте алгоритъма след всяка буква,
- изчисляване на изминалото време, докато се чака следващият преход (без тон към тон) и
- вмъкнете интервал, ако са надхвърлени 6 времеви единици.
Осцилатор на Морс
Първоначално опитах някои пиезо зумери, но намерих:
- честотата беше фиксирана
- изходната честота е твърде висока за продължително слушане
- пиезотата имаха тенденция да се отклоняват от пропускателната лента на Goertzel
След това се опитах да управлявам акустичен преобразувател с 750Hz квадратна вълна, но установих, че той има резонанс, който филтрира 1 -ва и 3 -та хармоника. Снимка 6 показва изхода на микрофонния усилвател на 750Hz квадратна вълна … виждаме 5-та хармоника !!!
След това прибягнах до използването на малък високоговорител. Снимка 7 показва изхода на микрофона към 750Hz квадратна вълна, която е изпратена до малък високоговорител … този път виждаме фундаменталната … не 5 -та хармоника. Филтърът на Goertzel пренебрегва всички хармоници.
Бележки
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Стъпка 5: Софтуер
Инсталация
- Изтеглете прикачения файл MorseCodeDecoder.ino [1]
- Копирайте съдържанието на този файл в нова скица на Arduino
- Запазете скицата като "MorseCodeDecoder" (без кавичките)
- Компилирайте и качете скицата във вашия Arduino
Софтуерна актуализация 23 юли 2020 г.
Следните функции са добавени към прикачения файл "MorseCodeDecoder6.ino"
- прозорец "Точен Blackman" [2]
- "Noise_blanker"
Регулиране:
- увеличете нивото на звука на приемника, докато светодиодът започне да мига, след което се изключи
- сега настройте приемника си, докато светодиодът започне да мига в крак с входящия морс
- Noise_blanker е настроен да игнорира шумовите изблици до 8mS (време на един цикъл)
- прагът на шума може да се регулира, като зададете Debug = true и гледате вашия сериен плотер
Забележка
[1]
Настройте вашия Arduino Serial Monitor на 115200 бода, ако желаете и вие да прегледате текста.
[2]
- Снимка 1… Точен прозорец на Blackman
- Снимка 2… Филтър на Goertzel без прозорец с точен Blackman
- Снимка 3,,, Goertzel филтър с приложен Точен прозорец на Blackman
Стъпка 6: Операция
Декодер
Поставете устройството до високоговорителя, когато слушате морзе.
- Капсулата за електретен микрофон улавя морзов сигнал от вашия високоговорител.
- След това изходът на електретен микрофон се усилва 647 пъти (56dB), преди да бъде предаден на Arduino за обработка.
- Цифров лентов филтър на Goertzel извлича морзов сигнал от шума.
- Декодирането се извършва с помощта на двоично дърво.
- Изходът на декодера се показва като текст на TFT дисплей с размери 320 x 240 пиксела. Той също се изпраща до вашия Arduino „Serial Monitor“, ако не искате да използвате дисплей.
Морзов подател
Включен е и подател на морс. Това ви позволява да практикувате изпращането на морз и работи по следния начин:
- На пин 4 на Arduino се генерира постоянен звуков тон.
- Чуваме този тон през високоговорителя на декодера, когато натискаме клавиша на Морз.
- Тонът е настроен на същата честота като филтъра на Goertzel, който заблуждава декодера да мисли, че слуша на истински морз … каквото и да изпратите, ще се появи като отпечатан текст на дисплея.
Изпращането ви ще се подобри, тъй като декодерът улавя често срещани грешки като:
- твърде много пространство между символите. (пример: Q пинтиран като MA)
- твърде много място между букви (пример: СЕГА отпечатано като NO W)
- грешен код
Стъпка 7: Обобщение
Декодер
Тази инструкция описва как да се направи декодер на Морз, който преобразува азбуката на Морз в отпечатан текст.
- Декодерът е в състояние да декодира азбуката до поне 80 WPM (думи в минута)
- Декодерът автоматично проследява вариациите в приетата скорост на изпращане.
- Текстът се показва на вашия сериен монитор (или на 320 x 240 TFT дисплей модул, ако има такъв) [1]
Изпращач
Включен е и подател на морс
- Изпращачът ви помага да подобрите качеството на изпращането си по морз.
- Декодерът потвърждава, че изпратеното от вас е правилно
Цената на частите
Приблизителната цена на щита за декодиране на Морзе, минус опционалния TFT дисплей, е 25 долара.
Щракнете тук, за да видите другите ми инструкции.
Втора награда в Audio Challenge 2020
Препоръчано:
Каска на Морс*: 8 стъпки
Каска на Морс*: bipbipbipbip bip biptûûûtbipbip biptûûûtbipbip tûûûтûûûûтûûûт / bipbipbip tûûûт biptûûûtbip biptûûût tûûûтбип tûûûтûûûтбип
Статуята на Морс Моаи: 4 стъпки (със снимки)
Статуята на Морзе Моаи: Като дете много се интересувах от азбуката на Морз. Имаше няколко причини за това - баща ми беше в Корпуса на сигналите по време на Втората световна война и разказите му за това как Морс е бил използван във войната бяха очарователни. Имах доста добър слух за ритми, затова научих
Коледно дърво със спирала, водено: 4 стъпки (със снимки)
Коледна елха със спирала: Здравейте приятели В това неразбираемо ще направим коледна елха със спирала
Честотен измервател с два чипа с двоично отчитане: 16 стъпки
Честотен измервател с два чипа с двоично отчитане: използване на дванадесет светодиода. Прототипът има CD4040 като брояч и CD4060 като генератор на времевата база. Регулирането на сигнала е чрез резистор - диодна порта. Използваните тук CMOS ics позволяват на инструмента да се захранва от всяко напрежение в диапазона от 5
Горелка с USB захранване! Този проект може да изгори чрез пластмаса / дърво / хартия (забавният проект също трябва да бъде много фино дърво): 3 стъпки
Горелка с USB захранване! Този проект може да изгори чрез пластмаси / дърво / хартия (забавният проект също трябва да бъде много фин дървен материал): НЕ ПРАВЕТЕ ТОВА С ИЗПОЛЗВАНЕ НА USB !!!! разбрах, че може да повреди компютъра ви от всички коментари. компютъра ми е добре. Използвайте зарядно устройство за телефон 600ma 5v. Използвах това и работи добре и нищо не може да се повреди, ако използвате предпазен щепсел, за да спрете захранването