فهرست مطالب:

رمزگذار مورس درخت باینری: 7 مرحله (همراه با تصاویر)
رمزگذار مورس درخت باینری: 7 مرحله (همراه با تصاویر)

تصویری: رمزگذار مورس درخت باینری: 7 مرحله (همراه با تصاویر)

تصویری: رمزگذار مورس درخت باینری: 7 مرحله (همراه با تصاویر)
تصویری: CS50 2015 - Week 5, continued 2024, نوامبر
Anonim
Image
Image
مدار
مدار

این دستورالعمل نحوه رمزگشایی کد مورس با استفاده از Arduino Uno R3 را توضیح می دهد.

رمزگشایی که به طور خودکار با سرعت ارسال تنظیم می شود ، قادر به رمزگشایی مورس تا حداقل 80 کلمه در دقیقه است.

کد ورودی به صورت متن روی مانیتور سریال Arduino شما نمایش داده می شود (یا صفحه نمایش TFT در صورت نصب)

در صورت تمایل به تمرین ارسال مورس ، یک نوسان ساز تن اضافه شده است.

ویژگی های رمزگشایی:

  • یک ماژول نمایش 320 240 240 TFT [1]
  • یک فیلتر باند دیجیتال Goertzel برای جداسازی سیگنال های ناخواسته.
  • یک "درخت دودویی مورس" برای رمزگشایی سیگنال
  • ردیابی سرعت خودکار
  • هنگام تمرین مورس خروجی قابل شنیدن است
  • متن ورودی و خروجی نمایش داده می شود.

علائم و نشانه های زیر شناخته می شوند:

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

هزینه تخمینی سپر رمزگشایی مورس ، بدون نمایشگر TFT ، 25 دلار است. [1]

تصاویر

  • عکس روی جلد یک واحد کاملاً مونتاژ شده را نشان می دهد
  • ویدئو نشان می دهد که رمزگشا در حال کار است

یادداشت

[1]

  • ماژول نمایش TFT اختیاری است زیرا همه متن به "Serial Monitor" آردوینو ارسال می شود.
  • ماژول TFT در https://www.instructables.com/id/Arduino-TFT-Grap… توضیح داده شده است

مرحله 1: لیست قطعات

قسمت های زیر از https://www.aliexpress.com/ تهیه شده است

فقط 1 نمونه محافظ برای Arduino UNO R3 ، 2.54mm Pitch

قطعات زیر به صورت محلی تهیه شده است:

  • فقط 1 LAM358 opamp دوگانه
  • فقط 1 عدد LED سبز
  • فقط 1 گیره LED
  • فقط 1 کپسول میکروفون الکتریک
  • فقط 1 دکمه معمولی باز شده
  • فقط 1 سوکت DIP 8 پینی
  • 2 مقاومت فقط 330 اهم
  • فقط 2 مقاومت 2K2
  • 5 فقط مقاومت 10 کیلو اهم
  • فقط 2 مقاومت 56 کیلو اهم
  • 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 مقاومت 33 کیلو اهم
  • 1 عدد پلاگین تک 3.5 میلی متری (برای کلید مورس)
  • 1 سوکت مونو 3.5 میلی متری (برای کلید مورس)
  • 3 فاصله گیر نایلونی M3 9 میلی متری
  • 1 عدد جعبه پلاستیکی ABS 130 x 68 x 44 میلی متر
  • فقط 5 اتصال دهنده 2 زاویه ای راست

هزینه تخمینی سپر رمزگشایی مورس ، بدون نمایشگر TFT اختیاری ، 25 دلار است. [1]

یادداشت

[1]

لیست قطعات ماژول صفحه نمایش TFT 320 x 240 اختیاری در

[2]

در صورت تمایل به استفاده از فرستنده ، یک کلید مورس یا یک دکمه محکم لازم است.

مرحله 2: نمودار مدار

مدار
مدار
مدار
مدار
مدار
مدار

تصاویر

عکس 1 نمودار مدار را برای رمزگشای مورس نشان می دهد. مقاومت سری 330 اهم با کلید مورس جریان خروجی D4 را در صورت اتصال کوتاه به زمین محدود می کند … افزایش مقدار آن خروجی صدا را از بلندگو کاهش می دهد. به همین دلیل ، من آن را به سپر اضافه نکرده ام ، اما برای سهولت تنظیم ، مستقیماً آن را به جک کلید مورس وصل کرده ام

عکس 2 یک سپر منطبق نشان می دهد. سپر از https://www.instructables.com/id/Arduino-TFT-Grap… است که من به آن تقویت کننده میکروفون و نوسان ساز تن اضافه کرده ام. [1]

عکس 3 سپر کامل متصل به آردوینو را نشان می دهد. اگر قرار است متن در "Serial Monitor" آردوینو شما مشاهده شود ، هیچ جزء دیگری مورد نیاز نیست

عکس 4 رمزگشایی را تا حدی جعبه نشان می دهد. برای مشاهده نمایشگر ، سوراخی در درب آن بریده شده است. اسپیکر و میکروفون به صورت گرم روی بدنه چسبانده شده اند. قبل از نصب بلندگو ، چند سوراخ بلندگو در درب آن ایجاد کنید. سوکت مرکزی روی درپوش برای میکروفون فرمت است … بدون این رمزگشایی باید نزدیک اسپیکر قرار گیرد که همیشه امکان پذیر نیست

عکس 5 صفحه TFT را نشان می دهد. نوار برقی مشکی به لبه های صفحه وصل شده است … این نوار از نشت نور جلوگیری می کند و هرگونه عدم هم راستایی بین صفحه نمایش و دهانه درپوش را پنهان می کند

مهم

[1]

آردوینوها با کانکتور USB بزرگ به لایه ای از نوار الکتریکی بین کانکتور USB و سپر آردوینو نیاز دارند. شورت های تصادفی بدون نوار امکان پذیر است زیرا فاصله کمی دارد. این نوار برای آردوینوهایی که کانکتورهای کوچک دارند لازم نیست

مرحله 3: نظریه

تئوری
تئوری
تئوری
تئوری
تئوری
تئوری

هر حرف مورس شامل مجموعه ای از آهنگهای کوتاه و بلند است که "نقطه" و "خط تیره" نامیده می شود.

  • طول یک نقطه (.) 1 واحد است
  • خط تیره (_) 3 واحد طول دارد
  • فاصله بین عناصر حرف 1 واحد است
  • فاصله بین حروف 3 واحد است
  • فاصله بین کلمات 7 واحد است

ما می توانیم با مقایسه مدت زمان آن با تن مرجع 2 واحد طول ، نقطه یا خط تیره را تعیین کنیم.

  • نقطه کمتر از 2 واحد است
  • یک خط تیره بیشتر از 2 واحد است

دو روش کاملاً متفاوت برای رمزگشایی الگوی ورودی نقاط و خط تیره وجود دارد:

  • جستجوی خطی
  • درخت دودویی (همچنین به عنوان جستجوی دوگانه شناخته می شود)

جستجوی خطی

یک روش متداول ایجاد آرایه ای از شخصیت ها و الگوهای مورس مطابقت آنها است. به عنوان مثال ، هر یک از کاراکترهای زیر به صورت زیر ذخیره می شوند:

  • آ. _
  • ب _. به به
  • C _. _.
  • 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 * 1 نیاز دارد. من انتخاب کردم که یک آرایه 128 کاراکتری ایجاد کنم تا بتوانم علائم نگارشی را رمزگشایی کنم.

مرحله 4: طراحی یادداشت ها

نکات طراحی
نکات طراحی
نکات طراحی
نکات طراحی
نکات طراحی
نکات طراحی
نکات طراحی
نکات طراحی

رمزگشایی مورس در حضور سیگنال های تداخل کار دشواری است. سیگنال های ناخواسته باید رد شوند … این امر به نوعی فیلتر نیاز دارد.

امکانات زیادی وجود دارد:

  1. حلقه های قفل شده فاز
  2. فیلترهای سلف-خازن
  3. فیلترهای فعال مقاومت-خازن
  4. پردازش سیگنال دیجیتال مانند Fast Fourier Transform یا فیلتر Goertzel.

روشهای 1 ، 2 ، 3 به اجزای خارجی حجیم نیاز دارند.

روش 4 نیازی به اجزای خارجی ندارد … فرکانس ها با استفاده از الگوریتم های ریاضی تشخیص داده می شوند.

تبدیل سریع فوریه (FFT)

یکی از روش های تشخیص وجود یک تن در شکل موج پیچیده ، استفاده از تبدیل سریع فوریه است

عکس 1 نشان می دهد که چگونه FFT (تبدیل سریع فوریه) طیف صوتی را به "سطل" تقسیم می کند.

عکس 2 نشان می دهد که چگونه "سطل" FFT به سیگنال پاسخ می دهد … در این مورد 800Hz. اگر سیگنال دوم مثلاً 1500 هرتز وجود داشت ، دو پاسخ می دیدیم … یکی در 800 هرتز و دیگری در 1500 هرتز.

از نظر تئوری ، رمزگشایی کد مورس را می توان با نظارت بر سطح خروجی یک فرکانس FFT خاص انجام داد … تعداد زیادی نشان دهنده وجود یک نقطه یا خط تیره است … تعداد کمی نشان دهنده هیچ سیگنالی نیست.

چنین رمزگشایی مورس را می توان با نظارت بر "بن 6" در عکس 2 ایجاد کرد ، اما تعدادی از موارد در این روش اشتباه است:

  • ما فقط یک سطل فرکانس می خواهیم … بقیه محاسبات هدر رفته است
  • سطل های فرکانس ممکن است دقیقاً در فرکانس مورد نظر ظاهر نشوند
  • نسبتاً کند است (20 میلی ثانیه در هر حلقه آردوینو)

روش دیگر استفاده از فیلتر Goertzel است.

فیلتر Goertzel

فیلتر Goertzel مشابه FFT است اما فقط یک فرکانس واحد دارد.

Photo3 پاسخ فرکانسی یک فیلتر Goertzel را برای گام های گسسته صوتی نشان می دهد.

عکس 4 جارو کردن یک فیلتر در محدوده فرکانس یکسان است.

من تصمیم گرفتم که با الگوریتم Goertzel "بروم" به شرح زیر:

  • زمان حلقه Arduino () با استفاده از الگوریتم Goertzel 14mS (میلی ثانیه) در مقابل 20mS (میلی ثانیه) برای یک راه حل FFT با استفاده از کتابخانه Arduino "fix_FFT" بود.
  • تنظیم فرکانس مرکزی فیلتر گذر باند Goertzel آسان است.
  • پهنای باند تقریباً 190 هرتز است.

عکس 5 خروجی عددی از فیلتر Goertzel 900 هرتزی را هنگام تشخیص صدا نشان می دهد. من آستانه لحن خود را روی مقدار 4000 تنظیم کرده ام … مقادیر بالای 4000 نشان دهنده تن است.

از نظر تئوری شما فقط باید فیلتر خود را با فرکانس گوش دادن راحت تنظیم کنید. متأسفانه خروجی صدا از بلندگوی مانیتورینگ 1 اینچی من به سرعت به زیر 900Hz کاهش می یابد. برای جلوگیری از هرگونه مشکل ، از فرکانس فیلتر 950 هرتز استفاده می کنم. فرمول های لازم برای محاسبه فرکانس های فیلتر متناوب در سربرگ کد من یافت می شود.

رمزگشایی

رمزگشایی نقاط و خطوط به آسانی به نظر نمی رسد.

مورس کامل به شرح زیر تعریف می شود:

  • نقطه = 1 واحد
  • فاصله داخل حرف = 1 واحد
  • خط تیره = 3 واحد
  • فاصله بین حروف = 3 واحد
  • فاصله بین کلمات = 7 واحد

برای رمزگشایی مورس کامل ، ما فقط به مدت زمان صدا مرجع 2 واحد نیاز داریم

  • نقطه <2 واحد
  • فضای عنصر <2 واحد
  • خط تیره> 2 واحد
  • حروف _فضا> 2 واحد
  • word_space> 6 واحد (یعنی 3 واحد مرجع)

این برای مورس ماشین کار می کند اما در "دنیای واقعی":

  • سرعت ارسال متفاوت است
  • مدت زمان هر نقطه متفاوت است
  • مدت زمان هر خط متغیر است
  • حروف E ، I ، S ، H ، 5 فقط دارای نقاطی هستند که به طور متوسط طول نقطه را نشان می دهند
  • حروف T ، M ، O ، 0 فقط دارای خط تیره ای هستند که به طور متوسط طول خط تیره است
  • ممکن است فاصله کلمات از بین نرود
  • محو شدن خطاهایی را ایجاد می کند که رمزگشا باید از آنها بازیابی شود.
  • سیگنال های خراب ناشی از تداخل

حروف حاوی فقط نقطه و خط تیره تا حدی حل می شوند اگر:

ما مدت زمان مرجع را تا زمانی که یک نقطه معتبر و یک خط تیره معتبر دریافت نکرده ایم برآورد می کنیم. من از 200 میلی ثانیه استفاده می کنم که اگر سرعت ارسال بین 6 WPM (کلمه در دقیقه) و 17 WPM باشد معتبر است. اگر در حال یادگیری مورس هستید ، ممکن است لازم باشد این مقدار را افزایش دهید. جدول سرعت در نرم افزار گنجانده شده است

تغییرات سرعت حل می شود اگر:

  • ما به طور متوسط در هر نقطه و هر خط تیره و
  • بعد از دریافت هر نماد ، مدت زمان مرجع را دوباره محاسبه کنید

شکاف کلمات و عدم رسیدن کلمات در صورتی حل می شوند که ما:

  • زمان آخرین لبه انتهایی (تن به بی صدا) را به خاطر بسپارید ،
  • راه اندازی مجدد الگوریتم بعد از هر حرف ،
  • زمان سپری شده را هنگام انتظار برای انتقال بعدی (بدون تن به تن) محاسبه کنید و
  • در صورت فراتر رفتن از 6 واحد زمان ، فاصله را وارد کنید.

نوسان ساز مورس

من در ابتدا برخی از زنگ های Piezo را امتحان کردم اما پیدا کردم:

  • فرکانس ثابت شد
  • فرکانس خروجی برای گوش دادن طولانی مدت بسیار زیاد بود
  • پیزوها تمایل داشتند از گذرگاه Goertzel خارج شوند

سپس سعی کردم با یک ترانسدیوسر آکوستیک با موج مربع 750 هرتز رانندگی کنم اما متوجه شدم که دارای طنینی است که هارمونیک های 1 و 3 را فیلتر می کند. عکس 6 خروجی تقویت کننده میکروفون را به موج مربع 750 هرتز نشان می دهد … ما هارمونیک پنجم را می بینیم !!!

سپس به استفاده از بلندگوی کوچک روی آوردم. عکس 7 خروجی میکروفون را به موج مربع 750 هرتز نشان می دهد که به بلندگوی کوچک ارسال شده است … این بار ما شاهد اصلی هستیم … نه هارمونیک 5. فیلتر Goertzel هرگونه هارمونیک را نادیده می گیرد.

یادداشت

[1]

fa.wikipedia.org/wiki/Goertzel_algorithm

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

مرحله 5: نرم افزار

نرم افزار
نرم افزار
نرم افزار
نرم افزار
نرم افزار
نرم افزار

نصب و راه اندازی

  • فایل پیوست را بارگیری کنید MorseCodeDecoder.ino [1]
  • محتویات این فایل را در یک طرح جدید آردوینو کپی کنید
  • طرح را به عنوان "MorseCodeDecoder" (بدون نقل قول) ذخیره کنید
  • طرح را کامپایل کرده و در Arduino خود بارگذاری کنید

به روز رسانی نرم افزار 23 جولای 2020

ویژگی های زیر به فایل پیوست "MorseCodeDecoder6.ino" اضافه شده است

  • پنجره "Blackman دقیق" [2]
  • یک "Noise_blanker"

تعدیل:

  • سطح صوتی گیرنده خود را افزایش دهید تا LED شروع به چشمک زدن و سپس خاموش شدن کند
  • در حال حاضر گیرنده خود را تنظیم کنید تا زمانی که چراغ LED همزمان با مورس ورودی چشمک بزند
  • Noise_blanker به گونه ای تنظیم شده است که از سر و صدا تا 8 میلی ثانیه (یک بار حلقه) چشم پوشی می کند
  • با تنظیم Debug = true و تماشای نقشه کش سریال می توانید آستانه Noise را تنظیم کنید

توجه داشته باشید

[1]

در صورت تمایل برای مشاهده متن ، مانیتور سریال آردوینو خود را روی 115200 باود تنظیم کنید.

[2]

  • عکس 1… پنجره دقیق Blackman
  • عکس 2… فیلتر Goertzel بدون پنجره دقیق Blackman
  • عکس 3 ، ، ، فیلتر Goertzel با پنجره دقیق Blackman اعمال شده است

مرحله 6: عملیات

رمزگشایی

هنگام گوش دادن به مورس ، دستگاه را در کنار بلندگوی خود قرار دهید.

  • کپسول میکروفون الکتریکی سیگنال مورس را از بلندگوی شما دریافت می کند.
  • سپس خروجی میکروفون الکترریت 647 بار (56 دسی بل) تقویت می شود و سپس برای پردازش به آردوینو منتقل می شود.
  • فیلتر باند دیجیتال Goertzel سیگنال مورس را از نویز استخراج می کند.
  • رمزگشایی با استفاده از یک درخت دودویی انجام می شود.
  • خروجی رمزگشایی به صورت متن روی صفحه نمایش TFT 320 در 240 پیکسل نمایش داده می شود. اگر مایل به استفاده از صفحه نمایش نیستید ، به "Serial Monitor" آردوینو ارسال می شود.

فرستنده مورس

فرستنده مورس نیز گنجانده شده است. این به شما امکان می دهد تا ارسال مورس را تمرین کنید و به شرح زیر عمل می کند:

  • یک صدای قابل شنیدن ثابت روی پین 4 آردوینو ایجاد می شود.
  • هر زمان که کلید مورس را فشار می دهیم ، این صدا را از طریق بلندگوی رسیور می شنویم.
  • صدا با فرکانس یکسان با فیلتر Goertzel تنظیم می شود که رمزگشا را فریب می دهد و فکر می کند که به مورس واقعی گوش می دهد … هر چه ارسال کنید به عنوان متن چاپ شده روی صفحه نمایش داده می شود.

با دریافت رمزگشای خطاهای متداول مانند: ارسال شما بهبود می یابد.

  • فاصله زیاد بین نمادها (به عنوان مثال: Q به عنوان MA pinted شده است)
  • فاصله زیاد بین حروف (مثال: اکنون به عنوان NO W چاپ شده است)
  • کد اشتباه است

مرحله 7: خلاصه

رمزگشایی

این دستورالعمل نحوه ساخت یک رمزگشای مورس که کد مورس را به متن چاپ شده تبدیل می کند ، توضیح می دهد.

  • رمزگشایی قادر به رمزگشایی مورس تا حداکثر 80 WPM (کلمات در دقیقه)
  • رمزگشای به طور خودکار تغییرات سرعت ارسال دریافتی را ردیابی می کند.
  • متن روی مانیتور سریال شما نمایش داده می شود (یا در صورت وجود روی یک ماژول صفحه نمایش TFT 240 * 320) [1]

فرستنده

فرستنده مورس نیز گنجانده شده است

  • فرستنده به شما کمک می کند تا کیفیت ارسال مورس خود را بهبود بخشید.
  • رمزگشایی تأیید می کند که آنچه ارسال کرده اید صحیح است

هزینه قطعات

هزینه تخمینی سپر رمزگشایی مورس ، بدون نمایشگر TFT اختیاری ، 25 دلار است.

برای مشاهده سایر دستورالعمل های من اینجا را کلیک کنید.

چالش صوتی 2020
چالش صوتی 2020
چالش صوتی 2020
چالش صوتی 2020

جایزه دوم در چالش صوتی 2020

توصیه شده: