Isi kandungan:

Dekoder Morse Tree Binary: 7 Langkah (dengan Gambar)
Dekoder Morse Tree Binary: 7 Langkah (dengan Gambar)

Video: Dekoder Morse Tree Binary: 7 Langkah (dengan Gambar)

Video: Dekoder Morse Tree Binary: 7 Langkah (dengan Gambar)
Video: How exactly does binary code work? - José Américo N L F de Freitas 2024, November
Anonim
Image
Image
Rajah Litar
Rajah Litar

Petunjuk ini menerangkan cara menyahkod Morse Code menggunakan Arduino Uno R3.

Penyahkod, yang secara automatik menyesuaikan dengan kecepatan kirim, mampu menyahkod morse hingga sekurang-kurangnya 80 perkataan seminit.

Kod masuk dipaparkan sebagai teks pada Arduino Serial Monitor (atau layar TFT jika dipasang)

Pengayun nada telah disertakan sekiranya anda ingin berlatih menghantar morse.

Ciri penyahkod:

  • modul paparan TFT 320 x 240 [1]
  • penapis jalur lebar digital Goertzel untuk memisahkan isyarat yang tidak diingini.
  • "Binary Morse Tree" untuk menyahkod isyarat
  • penjejakan kelajuan automatik
  • output yang didengar semasa berlatih morse
  • teks masuk dan keluar dipaparkan.

Watak dan simbol berikut dikenali:

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

Anggaran kos perisai decoder morse, kurang paparan TFT, adalah $ 25. [1]

Gambar

  • Foto sampul menunjukkan unit yang dipasang sepenuhnya
  • Video menunjukkan penyahkod berfungsi

Catatan

[1]

  • Modul paparan TFT adalah pilihan kerana semua teks dihantar ke "Serial Monitor" Arduino anda.
  • Modul TFT dijelaskan dalam https://www.instructables.com/id/Arduino-TFT-Grap saya yang boleh dipesan.

Langkah 1: Senarai Bahagian

Bahagian berikut diperoleh dari

1 perisai prototaip sahaja untuk Arduino UNO R3, 2.54mm Pitch

Bahagian berikut diperoleh secara tempatan:

  • 1 sahaja opamp dwi LM358
  • 1 LED hijau sahaja
  • 1 klip LED sahaja
  • 1 kapsul mikrofon electret sahaja
  • 1 hanya butang tekan yang biasanya terbuka
  • 1 soket DIP 8-pin sahaja
  • 2 perintang 330 ohm sahaja
  • 2 perintang 2K2 sahaja
  • 5 perintang 10k ohm sahaja
  • 2 perintang 56K ohm sahaja
  • 2 kapasitor 1uF sahaja
  • 1 kapasitor 10uF sahaja

Bahagian berikut adalah pilihan:

  • 1 sahaja Modul Paparan LCD 2.2 Inch TFT SPI 240 * 320 ILI9341 dengan Slot Kad SD untuk Arduino Raspberry Pi 51 / AVR / STM32 / ARM / PIC [1]
  • Kekunci / tekan butang Morse
  • 1 sahaja transistor BC548 NPN
  • 1 pembesar suara 1 inci sahaja
  • 1 perintang 33k ohm sahaja
  • 1 hanya plug mono 3.5mm (untuk kunci morse)
  • 1 hanya soket mono 3.5mm (untuk kunci morse)
  • 3 hanya spacer nilon 9mm M3 yang diketuk
  • 1 kotak plastik ABS 130 x 68 x 44mm sahaja
  • 5 hanya penyambung sudut kanan 2-pin

Anggaran kos perisai decoder morse, ditolak paparan TFT pilihan, adalah $ 25. [1]

Catatan

[1]

Senarai bahagian untuk modul paparan TFT 320 x 240 pilihan terdapat dalam

[2]

Kekunci morse atau butang tekan yang kukuh diperlukan jika anda ingin menggunakan pengirimnya.

Langkah 2: Rajah Litar

Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar

Gambar

Foto 1 menunjukkan gambarajah litar untuk penyahkod morse. Perintang 330 ohm secara bersiri dengan kunci morse menghadkan arus keluaran D4 sekiranya berlaku pendek ke tanah secara tidak sengaja … meningkatkan nilainya akan menurunkan output audio dari pembesar suara. Atas sebab ini saya tidak menambahkannya ke perisai tetapi melampirkannya terus ke soket kunci morse untuk kemudahan penyesuaian

Foto 2 menunjukkan perisai yang sepadan. Perisai adalah dari https://www.instructables.com/id/Arduino-TFT-Grap… yang boleh saya instruksikan. Saya telah menambahkan penguat mikrofon dan pengayun nada. [1]

Foto 3 menunjukkan perisai lengkap yang dilekatkan pada Arduino. Tidak ada komponen lain yang diperlukan jika teks tersebut akan dilihat di "Serial Monitor" Arduino anda

Foto 4 menunjukkan penyahkod yang sebahagiannya berkotak. Lubang telah dipotong di penutup untuk melihat paparan. Pembesar suara dan mikrofon telah terpaku panas pada casing. Bor lubang pembesar suara di penutup sebelum memasang pembesar suara. Soket tengah pada penutup adalah untuk mikrofon sambungan … tanpa ini penyahkod mesti diletakkan dekat dengan pembesar suara yang tidak selalu mungkin

Foto 5 menunjukkan skrin TFT. Pita elektrik hitam telah terpasang di tepi paparan … pita ini mencegah kebocoran cahaya dan menutupi ketidakseimbangan antara paparan dan bukaan di penutup

Penting

[1]

Arduino dengan penyambung USB yang besar memerlukan lapisan pita elektrik antara penyambung USB dan pelindung Arduino. Seluar pendek tidak sengaja boleh dilakukan tanpa pita kerana jaraknya kecil. Pita tidak diperlukan untuk Arduino yang mempunyai penyambung kecil

Langkah 3: Teori

Teori
Teori
Teori
Teori
Teori
Teori

Setiap huruf kod morse terdiri dari rangkaian nada pendek dan panjang yang disebut "titik" dan "tanda sempang".

  • satu titik (.) panjangnya 1 unit
  • sempang (_) panjangnya 3 unit
  • ruang antara unsur huruf ialah 1 unit
  • ruang antara huruf ialah 3 unit
  • ruang antara perkataan adalah 7 unit

Kita dapat menentukan sama ada nada masuk adalah titik atau tanda hubung dengan membandingkan lamanya dengan nada rujukan panjangnya 2 unit.

  • satu titik kurang daripada 2 unit
  • sengkang lebih besar daripada 2 unit

Terdapat dua kaedah yang berbeza untuk menyahkod corak titik dan tanda sempang yang masuk:

  • carian linear
  • pokok binari (juga dikenali sebagai carian dikotomik)

Pencarian Linear

Salah satu kaedah yang biasa adalah dengan membuat pelbagai watak dan corak morse yang sesuai. Contohnya setiap watak berikut akan disimpan sebagai:

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

Setiap huruf memerlukan 6 sel… 1 untuk huruf itu sendiri dan 5 untuk huruf (.) Dan (_). Untuk melakukan ini, kita memerlukan susunan aksara huruf [36] [6] dengan jumlah 216 sel. Sel yang tidak digunakan biasanya diisi dengan angka sifar atau kosong.

Untuk menyahkod titik dan tanda titik yang masuk, kita mesti membandingkan corak titik / tanda hubung setiap huruf masuk dengan corak watak rujukan kita.

Walaupun kaedah ini berfungsi, ia sangat perlahan.

Katakan kita mempunyai 26 huruf ('A',.. 'Z') dan digit ('0', … '9') disimpan dalam array, maka kita mesti melakukan 36 carian, masing-masing dengan hingga 5 sub-carian, iaitu sejumlah 36 * 5 = 180 carian untuk menyahkod angka '9'.

Pokok Perduaan

Pencarian binari jauh lebih pantas kerana carian tidak diperlukan.

Tidak seperti carian linear, yang memerlukan corak watak dan corak morse disimpan, pokok binari hanya menyimpan watak yang bermaksud bahawa ukuran susunan lebih kecil.

Saya telah membahagikan pokok binari saya (foto1) menjadi dua bahagian (gambar 2 dan 3) untuk menjadikannya lebih mudah dibaca.

Untuk mencari watak, kita menggerakkan penunjuk ke kiri setiap kali kita mendengar titik dan menggerakkan penunjuk ke kanan setiap kali kita mendengar tanda titik. Selepas setiap langkah, kami mengurangkan separuh jarak penunjuk untuk langkah seterusnya … oleh itu nama pokok binari.

Untuk menyahkod huruf ‘9’ (tanda hubung, tanda hubung, tanda hubung, tanda hubung, titik) memerlukan 5 gerakan… 4 ke kanan, dan 1 ke kiri yang meninggalkan penunjuk tepat di atas ‘9’.

Lima pergerakan jauh lebih pantas daripada 180 carian !!!!!

Susunan watak binari juga lebih kecil… 26 huruf dan 10 angka hanya memerlukan susunan baris 64 x 1. Saya telah memilih untuk membuat susunan 128 aksara sehingga saya dapat menyahkod tanda baca.

Langkah 4: Nota Reka Bentuk

Nota Reka Bentuk
Nota Reka Bentuk
Nota Reka Bentuk
Nota Reka Bentuk
Nota Reka Bentuk
Nota Reka Bentuk
Nota Reka Bentuk
Nota Reka Bentuk

Morse sukar untuk menyahkod dengan adanya isyarat yang mengganggu. Isyarat yang tidak diingini mesti ditolak … ini memerlukan semacam penapis.

Terdapat banyak kemungkinan:

  1. Gelung terkunci fasa
  2. Penapis induktor-kapasitor
  3. Penapis aktif perintang-kapasitor
  4. Pemprosesan isyarat digital seperti Fast Fourier Transform, atau penapis Goertzel.

Kaedah 1, 2, 3 memerlukan komponen luaran yang besar.

Kaedah 4 tidak memerlukan komponen luaran… frekuensi dikesan menggunakan algoritma matematik.

Transformasi Fourier Cepat (FFT)

Salah satu kaedah untuk mengesan kehadiran nada dalam bentuk gelombang kompleks adalah dengan menggunakan Fast Fourier Transform

Foto 1 menunjukkan bagaimana FFT (Fast Fourier Transform) membahagikan spektrum audio menjadi "tong sampah".

Foto 2 menunjukkan bagaimana "tong sampah" FFT bertindak balas terhadap isyarat … dalam hal ini 800Hz. Sekiranya isyarat kedua mengatakan 1500Hz hadir, kita akan melihat dua respons… satu pada 800Hz dan satu lagi pada 1500Hz.

Secara teori, penyahkod kod morse dapat dibuat dengan memantau tingkat keluaran tong frekuensi FFT tertentu … sebilangan besar menunjukkan adanya titik atau tanda hubung … sebilangan kecil tidak menunjukkan isyarat.

Penyahkod kod morse seperti itu dapat dibuat dengan memantau "bin 6" pada foto 2 tetapi ada beberapa hal yang salah dengan pendekatan ini:

  • kita hanya mahukan satu tong frekuensi … selebihnya adalah pengiraan yang sia-sia
  • tong frekuensi mungkin tidak kelihatan tepat pada kekerapan minat
  • agak perlahan (20mS per gelung Arduino ()

Kaedah lain adalah menggunakan penapis Goertzel.

Penapis Goertzel

Penapis Goertzel serupa dengan FFT tetapi hanya mempunyai tong frekuensi tunggal.

Foto3 menunjukkan tindak balas kekerapan penapis Goertzel terhadap langkah audio yang berbeza.

Foto 4 adalah sapuan penapis yang sama pada julat frekuensi yang sama.

Saya memutuskan untuk "pergi" dengan algoritma Goertzel sebagai:

  • Waktu gelung Arduino () menggunakan algoritma Goertzel adalah 14mS (milisaat) berbanding 20mS (milisaat) untuk penyelesaian FFT menggunakan perpustakaan Arduino "fix_FFT".
  • Sangat mudah untuk menetapkan frekuensi tengah penapis jalur lebar Goertzel.
  • Lebar jalur kira-kira 190Hz.

Foto 5 menunjukkan output berangka dari penapis Goertzel 900Hz apabila nada dikesan. Saya telah menetapkan ambang nada saya ke nilai 4000… nilai di atas 4000 menunjukkan nada.

Secara teori anda hanya perlu menyesuaikan penapis anda ke frekuensi mendengar yang selesa. Sayangnya output audio dari pembesar suara pemantauan 1 inci saya turun dengan cepat di bawah 900Hz. Untuk mengelakkan masalah, saya menggunakan frekuensi penapis 950Hz. Rumus yang diperlukan untuk mengira frekuensi penapis alternatif terdapat di tajuk kod saya.

Penyahkodan

Menyahkod titik dan tanda sempang tidak semudah yang pertama kali dilihat.

Morse sempurna ditakrifkan sebagai:

  • dot = 1 unit
  • ruang di dalam huruf = 1 unit
  • sengkang = 3 unit
  • ruang antara huruf = 3 unit
  • ruang antara perkataan = 7 unit

Untuk menyahkod morse sempurna, kita hanya memerlukan nada nada rujukan selama 2 unit

  • titik <2 unit
  • ruang elemen <2 unit
  • sengkang> 2 unit
  • huruf _space> 2 unit
  • word_space> 6 unit (iaitu 3 x unit rujukan)

Ini berfungsi untuk mesin morse tetapi di "dunia nyata":

  • kelajuan penghantaran berbeza-beza
  • jangka masa setiap titik berbeza-beza
  • jangka masa setiap tanda pisah berbeza-beza
  • huruf E, I, S, H, 5 hanya mengandungi titik yang rata-rata hingga panjang titik
  • huruf T, M, O, 0 hanya mengandungi tanda sempang yang rata-rata hingga durasi tanda sempang
  • jurang kata mungkin tidak sampai
  • pudar menimbulkan ralat dari mana penyahkod mesti pulih.
  • isyarat rosak kerana gangguan

Huruf yang hanya mengandungi titik dan tanda hubung diselesaikan sebahagiannya sekiranya:

kami menganggarkan jangka masa rujukan sehingga kami menerima titik dan tanda sempang yang sah. Saya menggunakan 200 milisaat yang sah jika kelajuan kiriman antara 6 WPM (perkataan per minit) dan 17 WPM. Anda mungkin perlu meningkatkan nilai ini jika anda belajar morse. Jadual kelajuan disertakan dalam perisian

Variasi kelajuan diselesaikan sekiranya:

  • kami melakukan purata putaran pada setiap titik dan setiap titik dan
  • hitung semula tempoh rujukan setelah setiap simbol diterima

Jurang kata dan jurang kata yang tidak tiba diselesaikan jika kita:

  • ingat masa peralihan trailing-edge (tone to no-tone) terakhir,
  • mulakan semula algoritma selepas setiap huruf,
  • hitung masa yang berlalu sementara menunggu peralihan terdepan (tanpa nada ke nada) seterusnya dan
  • masukkan ruang jika melebihi 6 unit masa.

Pengayun Morse

Pada mulanya saya mencuba beberapa buzzer Piezo tetapi mendapati:

  • kekerapannya tetap
  • frekuensi output terlalu tinggi untuk mendengar yang berpanjangan
  • piezos cenderung melayang keluar dari jalur masuk Goertzel

Saya kemudian cuba menggerakkan transduser akustik dengan gelombang persegi 750Hz tetapi mendapati ia mempunyai resonans yang menyaring harmonik 1 dan 3. Foto 6 menunjukkan output penguat mikrofon ke gelombang persegi 750Hz … kita melihat harmonik ke-5 !!!

Saya kemudian menggunakan pembesar suara kecil. Foto 7 menunjukkan output mikrofon ke gelombang persegi 750Hz yang dihantar ke pembesar suara kecil … kali ini kita melihat yang mendasar … bukan harmonik ke-5. Penapis Goertzel mengabaikan harmonik.

Catatan

[1]

en.wikipedia.org/wiki/Goertzel_algorithm

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

Langkah 5: Perisian

Perisian
Perisian
Perisian
Perisian
Perisian
Perisian

Pemasangan

  • Muat turun fail yang dilampirkan MorseCodeDecoder.ino [1]
  • Salin kandungan fail ini ke lakaran Arduino baru
  • Simpan lakaran sebagai "MorseCodeDecoder" (tanpa tanda petik)
  • Susun dan muat naik lakaran ke Arduino anda

Kemas kini Perisian 23 Julai 2020

Ciri-ciri berikut telah ditambahkan ke fail terlampir "MorseCodeDecoder6.ino"

  • tetingkap "Blackman Tepat" [2]
  • "Bising_blanker"

Pelarasan:

  • tingkatkan tahap audio penerima anda sehingga LED mula berkelip kemudian mati
  • sekarang tetapkan penerima anda sehingga LED berkedip sesuai dengan morse yang masuk
  • Noise_blanker telah diatur untuk mengabaikan ledakan bunyi sehingga 8mS (satu kali gelung)
  • ambang Kebisingan dapat disesuaikan dengan menetapkan Debug = true dan menonton Serial Plotter anda

Catatan

[1]

Tetapkan Arduino Serial Monitor anda ke 115200 baud jika anda mahu juga melihat teksnya.

[2]

  • Foto 1 … Tetingkap Blackman Tepat
  • Foto 2… Penapis Goertzel tanpa tetingkap Blackman Tepat
  • Penapis Foto 3,,, Goertzel dengan tetingkap Tepat Blackman digunakan

Langkah 6: Operasi

Penyahkod

Letakkan unit di sebelah pembesar suara anda semasa mendengar morse.

  • Kapsul mikrofon electret mengambil isyarat morse dari pembesar suara anda.
  • Output mikrofon electret kemudian diperkuat 647 kali (56dB) sebelum dihantar ke Arduino untuk diproses.
  • Penapis jalur lebar digital Goertzel mengeluarkan isyarat morse dari kebisingan.
  • Penyahkodan dilakukan menggunakan pokok binari.
  • Output penyahkod ditampilkan sebagai teks pada paparan TFT 320 x 240 piksel. Ia juga dikirimkan ke Arduino "Serial Monitor" jika anda tidak mahu menggunakan paparan.

Penghantar Morse

Pengirim morse juga telah disertakan. Ini membolehkan anda berlatih menghantar morse dan berfungsi seperti berikut:

  • Nada yang dapat didengar berterusan dihasilkan pada pin Arduino 4.
  • Kami mendengar nada ini melalui pembesar suara penyahkod setiap kali kami menekan kekunci morse.
  • Nada ditetapkan pada frekuensi yang sama dengan penapis Goertzel yang memperbodohkan penyahkod untuk memikirkannya mendengar morse yang sebenarnya … apa sahaja yang anda hantar akan muncul sebagai teks bercetak di paparan.

Penghantaran anda akan bertambah baik kerana penyahkod mengambil kesalahan biasa seperti:

  • terlalu banyak ruang antara simbol. (contoh: Q pinted sebagai MA)
  • terlalu banyak ruang antara huruf (contoh: SEKARANG dicetak sebagai TIDAK W)
  • kod salah

Langkah 7: Ringkasan

Penyahkod

Instruksional ini menerangkan bagaimana membuat decoder morse yang menukar kod morse menjadi teks bercetak.

  • Decoder mampu menyahkod morse hingga sekurang-kurangnya 80 WPM (perkataan per minit)
  • Penyahkod secara automatik mengesan variasi dalam kelajuan kiriman yang diterima.
  • Teks dipaparkan pada Monitor Serial anda (atau pada modul paparan TFT 320 x 240 jika dipasang) [1]

Penghantar

Pengirim morse juga telah disertakan

  • Pengirim membantu anda meningkatkan kualiti penghantaran morse anda.
  • Penyahkod mengesahkan bahawa apa yang anda hantar adalah betul

Kos bahagian

Anggaran kos perisai decoder morse, ditolak paparan TFT pilihan, adalah $ 25.

Klik di sini untuk melihat arahan saya yang lain.

Cabaran Audio 2020
Cabaran Audio 2020
Cabaran Audio 2020
Cabaran Audio 2020

Hadiah Kedua dalam Cabaran Audio 2020

Disyorkan: