תוכן עניינים:

מפענח מורס עץ בינארי: 7 שלבים (עם תמונות)
מפענח מורס עץ בינארי: 7 שלבים (עם תמונות)

וִידֵאוֹ: מפענח מורס עץ בינארי: 7 שלבים (עם תמונות)

וִידֵאוֹ: מפענח מורס עץ בינארי: 7 שלבים (עם תמונות)
וִידֵאוֹ: כאן סקרנים | איך כותבים בקצרנות עברית? 2024, נוֹבֶמבֶּר
Anonim
Image
Image
תרשים מעגלים
תרשים מעגלים

מדריך זה מסביר כיצד לפענח את קוד מורס באמצעות Arduino Uno R3.

המפענח, המתכוונן אוטומטית למהירות השליחה, מסוגל לפענח מורס עד 80 מילים לדקה לפחות.

הקוד הנכנס מוצג כטקסט במסך הסידורי של Arduino (או במסך TFT אם הוא מצויד)

מתנד צלילים כלול אם תרצה לתרגל שליחת מורס.

המפענח כולל:

  • מודול תצוגה של 320 x 240 TFT [1]
  • מסנן פס פס דיגיטלי של Goertzel להפרדת אותות לא רצויים.
  • "עץ מורס בינארי" לפענוח האות
  • מעקב אחר מהירות אוטומטית
  • פלט נשמע בעת תרגול מורס
  • מוצגים טקסט נכנס ויוצא.

התווים והסמלים הבאים מזוהים:

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

העלות המשוערת של מגן מפענח מורס, פחות צג TFT, היא 25 $. [1]

תמונות

  • תמונת השער מציגה יחידה שהורכבה במלואה
  • הסרטון מראה את המפענח עובד

הערות

[1]

  • מודול התצוגה של TFT הוא אופציונלי מכיוון שכל הטקסט נשלח ל- "צג סידורי" של Arduino.
  • מודול TFT מתואר ב https://www.instructables.com/id/Arduino-TFT-Grap… להוראה שלי.

שלב 1: רשימת חלקים

החלקים הבאים התקבלו מ-

מגן אב טיפוס אחד בלבד עבור Arduino UNO R3, פיץ '2.54 מ"מ

החלקים הבאים התקבלו באופן מקומי:

  • 1 LM358 כפול אופמפ בלבד
  • 1 ירוק LED בלבד
  • קליפ LED אחד בלבד
  • כמוסת מיקרופון אחת בלבד של אלקטרט
  • 1 כפתור לחיצה פתוח בלבד
  • שקע DIP אחד בלבד עם 8 פינים
  • 2 נגדים של 330 אוהם בלבד
  • 2 נגדים 2K2 בלבד
  • 5 נגדים של 10K אוהם בלבד
  • 2 נגדים רק של 56K אוהם
  • 2 קבלים 1uF בלבד
  • קבל 10uF בלבד

החלקים הבאים הם אופציונליים:

  • רק מודול תצוגת LCD מסוג TFT SPI 240 אינץ 'בלבד 240 אינץ' ILI9341 עם חריץ לכרטיס SD ל- Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • מקש מורס / כפתור לחיצה
  • טרנזיסטור NPN BC548 בלבד
  • רמקול 1 אינץ 'בלבד
  • נגד רק 33K אוהם
  • תקע מונו 3.5 מ"מ בלבד (למפתח מורס)
  • שקע מונו 3.5 מ"מ בלבד (למפתח מורס)
  • 3 מרווחי ניילון מהודקים מסוג 9 מ 'מסוג M3
  • 1 קופסת פלסטיק מסוג 130 x 68 x 44 מ"מ בלבד
  • 5 מחברי זווית ישרה 2 פינים בלבד

העלות המשוערת של מגן מפענח המורסה, בניכוי תצוגת TFT האופציונלית, היא 25 $. [1]

הערות

[1]

רשימת החלקים של מודול התצוגה TFT 320 x 240 אופציונלי מופיעה ב- https://www.instructables.com/id/Arduino-TFT-Grap… להנחיה שלי.

[2]

יש צורך במפתח מורס או בלחצן יציב אם ברצונך להשתמש בשולח.

שלב 2: תרשים מעגלים

תרשים מעגלים
תרשים מעגלים
תרשים מעגלים
תרשים מעגלים
תרשים מעגלים
תרשים מעגלים

תמונות

תמונה 1 מציגה את תרשים המעגל של מפענח המורסה. הנגד של 330 אוהם בסדרה עם מפתח המורס מגביל את זרם הפלט D4 במקרה של קצר מקרי לקרקע … הגדלת ערכו מפחיתה את פלט השמע מהרמקול. מסיבה זו לא הוספתי אותו למגן אלא הצמדתי אותו ישירות לשקע המורסה למען הקלות בהתאמה

בתמונה 2 מוצג מגן תואם. המגן הוא מתוך https://www.instructables.com/id/Arduino-TFT-Grap… להוראה שלי שאליו הוספתי את מגבר המיקרופון ומתנד הטון. [1]

תמונה 3 מציגה את המגן שהושלם לארדואינו. אין צורך ברכיבים אחרים כדי להציג את הטקסט ב- "צג סידורי" של Arduino

בתמונה 4 מוצג המפענח בקופסא חלקית. נקבע חור במכסה לצפייה בתצוגה. הרמקול והמיקרופון הודבקו בחום למארז. מקדחים כמה חורי רמקולים במכסה לפני הרכבת הרמקול. השקע המרכזי במכסה מיועד למיקרופון מאריך … בלי זה יש למקם את המפענח קרוב לרמקול וזה לא תמיד אפשרי

תמונה 5 מציגה את מסך TFT. סרט חשמלי שחור הוצמד לקצוות התצוגה … סרט זה מונע דליפת אור ומסווה כל כיוון לא נכון בין הצג לפתח המכסה

חָשׁוּב

[1]

Arduinos עם מחבר USB גדול דורשים שכבה של סרט חשמלי בין מחבר ה- USB לבין המגן Arduino. אפשר לקבל מכנסיים מקריים ללא הקלטת מכיוון שהמרווח קטן. הקלטת אינה נדרשת עבור Arduinos שיש להם מחברים קטנים

שלב 3: תיאוריה

תֵאוֹרִיָה
תֵאוֹרִיָה
תֵאוֹרִיָה
תֵאוֹרִיָה
תֵאוֹרִיָה
תֵאוֹרִיָה

כל אות קוד מורס כוללת סדרה של צלילי משך זמן קצר וארוך הנקראים "נקודות" ו- "מקפים".

  • נקודה (.) היא אורך יחידה אחת
  • מקף (_) הוא באורך 3 יחידות
  • המרווח בין רכיבי האותיות הוא יחידה אחת
  • המרווח בין אותיות הוא 3 יחידות
  • המרווח בין מילים הוא 7 יחידות

אנו יכולים לקבוע אם הטון הנכנס הוא נקודה או מקף על ידי השוואת משכו עם צליל התייחסות באורך של 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 x 1. בחרתי ליצור מערך של 128 תווים כדי שאוכל לפענח סימני פיסוק.

שלב 4: הערות עיצוב

הערות עיצוב
הערות עיצוב
הערות עיצוב
הערות עיצוב
הערות עיצוב
הערות עיצוב
הערות עיצוב
הערות עיצוב

מורס קשה לפענח בנוכחות אותות מפריעים. יש לדחות את האותות הלא רצויים … זה דורש איזשהו פילטר.

יש הרבה אפשרויות:

  1. לולאות שלב נעולות
  2. מסנני משרן-קבלים
  3. מסננים פעילים נגד קבלים
  4. עיבוד אותות דיגיטליים כגון Fast Fourier Transform או מסנן Goertzel.

שיטות 1, 2, 3 דורשות רכיבים חיצוניים שהם מגושמים.

שיטה 4 אינה דורשת רכיבים חיצוניים … התדרים מזוהים באמצעות אלגוריתמים מתמטיים.

טרנספורמציה פורייה מהירה (FFT)

אחת השיטות לאיתור נוכחות של צליל בצורת גל מורכבת היא שימוש בטרנספורמציה המהירה של פורייה

תמונה 1 מראה כיצד FFT (Fast Fourier Transform) מחלק את ספקטרום האודיו ל"פחים ".

תמונה 2 מראה כיצד "פחי" FFT מגיבים לאות … במקרה זה 800 הרץ. אם קיים אות שני של למשל 1500 הרץ היינו רואים שתי תגובות … אחת ב 800 הרץ ושנייה ב 1500 הרץ.

בתיאוריה ניתן לבצע מפענח קוד מורס על ידי ניטור רמת הפלט של סל תדר FFT מסוים … מספר גדול מייצג נוכחות של נקודה או מקף … מספר קטן אינו מייצג שום אות.

מפענח קוד מורס כזה יכול להתבצע על ידי ניטור "סל 6" בתמונה 2 אך ישנם מספר דברים שגויים בגישה זו:

  • אנחנו רוצים רק סל תדר אחד … השאר חישובים מבוזבזים
  • פחי התדרים עשויים שלא להופיע בדיוק בתדירות העניין
  • הוא איטי יחסית (20mS ללולאת Arduino ()

שיטה נוספת היא שימוש במסנן גורצל.

מסנן גורצל

מסנן Goertzel דומה ל- FFT אך יש לו רק סל תדר יחיד.

Photo3 מציג את תגובת התדר של מסנן גורצל לצעדי שמע נפרדים.

צילום 4 הוא טאטא של אותו מסנן על פני אותו טווח תדרים.

החלטתי "ללכת" עם האלגוריתם של גורצל כמו:

  • זמן לולאת Arduino () באמצעות אלגוריתם Goertzel היה 14mS (מילי שניות) מול 20mS (מילי שניות) לפתרון FFT באמצעות ספריית ה- "fix_FFT" של Arduino.
  • קל להגדיר את התדר המרכזי של מסנן פס פס של Goertzel.
  • רוחב הפס הוא כ -190 הרץ.

תמונה 5 מציגה את הפלט המספרי ממסנן Goertzel של 900 הרץ כאשר מזוהה צליל. הגדרתי את סף הטון שלי לערך של 4000 … ערכים מעל 4000 מצביעים על צליל.

בתיאוריה אתה רק צריך לכוון את המסנן שלך לתדר האזנה נוח. לרוע המזל פלט השמע מרמקול הניטור 1 אינץ 'שלי יורד במהירות מתחת ל 900 הרץ. כדי להימנע מבעיות אני משתמש בתדר סינון של 950Hz. הנוסחאות הדרושות לחישוב תדרי מסנן חלופיים נמצאות בכותרת הקוד שלי.

פִּעַנוּחַ

פענוח הנקודות והמקפים אינו פשוט כפי שנראה בפעם הראשונה.

מורס מושלם מוגדר כ:

  • נקודה = יחידה אחת
  • רווחים בתוך אות = יחידה אחת
  • מקף = 3 יחידות
  • רווח בין אותיות = 3 יחידות
  • רווח בין מילים = 7 יחידות

כדי לפענח מורס מושלם אנחנו פשוט צריכים משך צליל התייחסות של 2 יחידות

  • נקודה <2 יחידות
  • מרווח אלמנטים <2 יחידות
  • מקף> 2 יחידות
  • אות _מרווח> 2 יחידות
  • מרחב word_ 6> יחידות (כלומר 3 x יחידות ייחוס)

זה עובד עבור מכונת מורס אבל ב"עולם האמיתי ":

  • מהירות השליחה משתנה
  • משך כל נקודה משתנה
  • משך כל מקף משתנה
  • האותיות E, I, S, H, 5 מכילות רק נקודות שהן ממוצעות למשך הנקודה
  • האותיות T, M, O, 0 מכילות רק מקפים הממוצעים למשך המקף
  • פערי מילים עשויים שלא להגיע
  • דהייה יוצרת שגיאות מהן המפענח חייב לשחזר.
  • אותות מושחתים עקב הפרעה

אותיות המכילות נקודות ומקפים בלבד נפתרות חלקית אם:

אנו מעריכים את משך ההפניה עד שנקבל נקודה תקפה ומקף תקף. אני משתמש ב -200 אלפיות השנייה שזה תקף אם מהירות השליחה היא בין 6 WPM (מילים לדקה) ל -17 WPM. ייתכן שתצטרך להגדיל ערך זה אם אתה לומד מורסה. טבלת מהירות כלולה בתוכנה

וריאציות המהירות נפתרות אם:

  • אנו מבצעים ממוצע מתגלגל על כל נקודה ועל כל מקף ו
  • לחשב מחדש את משך ההתייחסות לאחר קבלת כל סמל

פערי מילים ופערי מילים שלא מגיעים נפתרים אם אנו:

  • זכור את הזמן של המעבר האחרון בקצה (טון אל טון),
  • הפעל מחדש את האלגוריתם לאחר כל אות,
  • לחשב את הזמן שחלף בזמן ההמתנה למעבר הבא (ללא טון לטון) ו
  • הכנס רווח אם חרגת 6 יחידות זמן.

מתנד מורס

בהתחלה ניסיתי כמה זמזומי פיזו אבל מצאתי:

  • התדירות הייתה קבועה
  • תדר הפלט היה גבוה מדי להאזנה ממושכת
  • הפיזו נוטה להיסחף מתוך פס המעבר של גרצל

לאחר מכן ניסיתי להניע מתמר אקוסטי עם גל מרובע של 750 הרץ אך מצאתי שיש לו תהודה שסיננה את ההרמוניות 1 ו -3. תמונה 6 מציגה את פלט מגבר המיקרופון לגל מרובע של 750 הרץ … אנו רואים את ההרמוניה החמישית !!!

לאחר מכן פניתי לרמקול קטן. תצלום 7 מציג את פלט המיקרופון לגל מרובע של 750 הרץ שנשלח לרמקול קטן … הפעם אנו רואים את היסוד … לא ההרמוני החמישי. מסנן גורצל מתעלם מכל הרמוניות.

הערות

[1]

en.wikipedia.org/wiki/Goertzel_algorithm

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

שלב 5: תוכנה

תוֹכנָה
תוֹכנָה
תוֹכנָה
תוֹכנָה
תוֹכנָה
תוֹכנָה

הַתקָנָה

  • הורד את הקובץ המצורף MorseCodeDecoder.ino [1]
  • העתק את תוכן קובץ זה למערכון חדש של ארדואינו
  • שמור את המערכון כ- "MorseCodeDecoder" (ללא מרכאות)
  • הידור והעלה את המערכון לארדואינו שלך

עדכון תוכנה 23 ביולי 2020

התכונות הבאות נוספו לקובץ המצורף "MorseCodeDecoder6.ino"

  • חלון "בלקמן מדויק" [2]
  • "בליין_רעש"

התאמה:

  • הגדל את רמת השמע של המקלט עד שהנורית מתחילה להבהב ואז נסוגה
  • עכשיו כוון את המקלט שלך עד שהנורית מהבהבת בהתאם למורס הנכנס
  • ה- Noise_blanker הוגדר להתעלם מהתפרצויות רעש של עד 8mS (זמן לולאה אחד)
  • ניתן להתאים את סף הרעש על ידי הגדרת Debug = true וצפייה בפלוטר הסידורי שלך

הערה

[1]

הגדר את המסך הטורי של Arduino ל- 115200 שידורים אם תרצה לצפות גם בטקסט.

[2]

  • תמונה 1 … חלון בלקמן מדויק
  • תמונה 2… מסנן גררטזל ללא חלון מדויק של בלקמן
  • תמונה 3,,, מסנן גורצל עם חלון מדויק של Blackman

שלב 6: פעולה

מפענח

הנח את היחידה ליד הרמקול שלך בעת האזנה למורס.

  • כמוסת המיקרופון של האלקטרט קולטת את אות המורס מהרמקול שלך.
  • הפלט של מיקרופון האלקטרט מועצם לאחר מכן 647 פעמים (56dB) לפני שהוא מועבר לעיבוד Arduino.
  • מסנן פס פס דיגיטלי של Goertzel מחלץ את אות המורס מהרעש.
  • הפענוח מתבצע באמצעות עץ בינארי.
  • פלט המפענח מוצג כטקסט בתצוגת TFT של 320 x 240 פיקסלים. הוא נשלח גם ל"צג הטורי "של Arduino אם אינך מעוניין להשתמש בתצוגה.

שולח מורס

שולח גם מורס. זה מאפשר לך לתרגל שליחת מורס ופועל באופן הבא:

  • צליל קבוע קבוע נוצר על סיכה 4 של ארדואינו.
  • אנו שומעים את הטון הזה באמצעות הרמקול החזק של המפענח בכל פעם שאנו לוחצים על מקש המורסה.
  • הטון מוגדר לאותו תדר כמו מסנן גורצל שמטמטם את המפענח לחשוב שהוא מקשיב למורס אמיתי … כל מה שתשלח יופיע כטקסט מודפס בתצוגה.

שליחתך תשתפר כאשר המפענח יקלוט שגיאות נפוצות כגון:

  • יותר מדי מרווח בין סמלים. (דוגמה: Q מוצג כ- MA)
  • יותר מדי מקום בין אותיות (דוגמה: עכשיו מודפס כ- NO W)
  • קוד שגוי

שלב 7: סיכום

מפענח

מדריך זה מתאר כיצד ליצור מפענח מורס הממיר קוד מורס לטקסט מודפס.

  • המפענח מסוגל לפענח מורס עד לפחות 80 WPM (מילים לדקה)
  • המפענח עוקב אוטומטית אחר וריאציות במהירות השליחה שהתקבלה.
  • הטקסט מוצג במסך הסידורי שלך (או במודול תצוגה של 320 x 240 TFT אם הוא מצויד) [1]

שׁוֹלֵחַ

שולח גם מורס

  • השולח עוזר לך לשפר את איכות שליחת המורס שלך.
  • המפענח מאשר שמה ששלחת נכון

עלות חלקים

העלות המשוערת של מגן מפענח המורסה, בניכוי תצוגת TFT האופציונלית, היא 25 $.

לחץ כאן לצפייה במדריכים האחרים שלי.

אתגר האודיו 2020
אתגר האודיו 2020
אתגר האודיו 2020
אתגר האודיו 2020

פרס שני באתגר האודיו 2020

מוּמלָץ: