פתגם סיני עתיק אומר: ״אם אתה רוצה לאמת להבין משהו, תנסה להסביר אותו למישהו אחר״
שיטת JT65 נוצרה ב2003 על ידי ג׳ו טיילור, אסטרופיזיקאי מאוניברסיטת פרינסטון, זוכה פרס נובל וכמובן חובב רדיו אמריקאי, כשיטה להעביר מידע בתווך לא אמין בעיקר בתחום החביב עליו של תקשורת דרך הירח ( moon bounce או EME) היא אומצה לשימוש בתדרי hf ועובדת גם בהספקים נמוכים ובתנאי תקשורת גרועים ומתחרה באמינות של cw אך קלה יותר לשימוש.
השיטה לא נועדה לשיחות ארוכות (מקלדת מול מקלדת) אלא יצירת קשר מינימאלי הכולל אות-קריאה, עוצמת האות, פריט מידע על המפעיל (בד״כ מיקום) וברכת סיום. נהוג לומר שאורך כל הודעה מוגבל ל13 תווים. אולם למעשה ישנם 3 סוגי הודעות שונות.
הסוג הראשון מכיל 2 אותות קריאה ומיקום. אות קריאה מורכת מאחת או שתי אותיות קוד ארץ, מספר, ואחת עד שלוש אותיות מזהות. מספר האפשריות הוא קצת מעל 262 מליון אפשרויות אותן ניתן לקודד ב28 ביטים.שימוש ב״גריד״ לציון מיקום דורש עוד 16 ביטים. לכן סה״כ לשני אותות קריאה + מיקום 28+28+16 = 71 ביטים. ביט 72 מסמן את סוג ההודאה.
לחילופין אם נרצה לשלוח דיווח עוצמת הסיגנאל נקודד אותו במקום הגריד בצורת -NN או R-NN כאשר nn נא בין 01 ל 30.
כאשר נדרשות קידומות או סיומות לאות הקריאה, הן מקודדות גם הן במקום הגריד אך התמיכה בקידומות וסיומות הינה מוגבלת, ולכן אם אין חובה חוקית לכך, עדיף להימנע משימוש בהן.
מכיוון ש28 ביטים מכילים קצת יותר אפשרויות מהנדרש לקידוד אות הקריאה, מספר ערכים גבוהים משמש כדי לסמן הודאות כגון cq, qrz וכדומה.
הסוג השני משמש להעברת ההודעות ro, rrr ו 73. הודעות אלו משתמשות בקידוד שונה לחלוטין המאפשר זיהוי ההודעה בשמיעה באוזן (הודעות אלו מכילות רק שני טונים שמתחלפים בניהם לפי סוג ההודעה, הסבר בהמשך)
לחילופין אם אנחנו רוצים לשדר טקסט ״חופשי״ נוכל להשתמש ב43 סימנים מותרים (ספרות, אותיות, רווח והסימנים +-./? ). כל סימן דורש 5.4 ביטים, כלומר 71 ביטים יכולים להכיל 13 תווים (ומכאן הדעה הרווחת לגבי אורך ההודעה)
השלב הבא הוא תיקון שגיאות למפרע (תרגום שלי לforward error correction.( בשלב זה ניקח את 72 הביטים שלנו ונוסיף להם 306 ביטים של מידע עודף, כך שגם אם חלק מההודעה לא יגיע בשלום, ניתן יהיה לקבל את המסר בשלמותו. לדוגמא, בדיבור, אנו משתמשים בשיטה בא אנו מקודדים כל אות באלף בית הפונטי וחוזרים מספר פעמים. בjt65משתמשים בקידוד ריד-סולומון של rs(63,12). או בעברית: נקודד את 72 הביטים שלנו ל 63 סימנים שמכילים 6 ביט כל אחד. מכיוון שההודעה הראשונית היא 12 סימנים של 6 ביט כל אחד, אנו מקבלים יחס יתירות של מעל 5 אולם בגלל המתמטיקה מאחורי התהליך אנו חסינים לשגיאות, כלומר מסוגלים לפענח את ההודעה המקורית גם אחרי שגיאות והשמטות שגורם התווך, הרבה יותר מחזרה פשוטה של המידע 5 פעמים (הסבר יחסית פשוט ניתן למצוא כאן) כמו כן יש לשים לב כי המידע כרגע ״מעורבב״ כלומר אם לא נקלוט מידע בקטע מסוים של ההודעה המוצפנת אין כל חפיפה בהכרח למידע בקטע מסוים של הודעה המקורית.
בשלב הבא 63 הסימנים מסודרים במטריצה ש 7 על 9, ומהופכים למטריצה של 9 על 7. שלב זה הוכח שאינו משפר את האמינות אולם מאחר ואינו פוגע בה נשאר כדי לתמוך אחורה בגרסאות ישנות של הפרוטוקול.
לאחר מכן מתורגם כל סימן מבינארי לקוד גריי, שתורם לאמינות כאשר יש בעיות יציבות בתדר.
השלב האחרון הינו אפנון המידע. כל שידור מחולק ל126 פרקי סמן, 63 של המידע עצמו ו63 שמוקדשים לאות סנכרון בין המשדר למקלט. שתי הסדרות שזורות אחת בשנייה ומשודרות לחילופין, פרק זמן זו ופעם השנייה. כל פרק זמן הינו באורך של 0.372 (מספר זה נוצר מסינטוז של 4096 דגימות בתדר של 11,025 הרץ)
אות הסנכרון מורכב מסדרה פסודו רנדומלית שיוצרת אוטו-קורלציה בצורה של שיא של פולס בודד, ולכן היא מצוינת לסנכרון. כאשר יש ׳1׳ לוגי בסדרה משודר תדר של 1270.5 הרץ.
כל אות מידע מקודד לטונים באמצעות הזזת תדר (fsk). הטונים הם אורטוגונאלים וללא שינוי בעוצמה או הזחה בפאזה. הם מחושבים לפי הנוסחא 1270.5 + 2.6917 (N+2) mכאשר N מציין את הסימן בן 6 ביט המשודר ו-m אות תת-מוד השידור כאשר בדרך כלל נשתמש בתת-מוד A שערכו m=1 (מודים b ו c משתמשים ברוחב פס כפול אחד מקודמו. זה יוצר חסינות לבעיות בטווח אך מוריד את הרגישות).
אגב, 2 בחזקת 6 נותן לנו 64 טונים + טון הסנכרון = 65 טונים אפשריים ומכאן מקור השם.
הודעות ״מקוצרות״ אינן משדרות את אות הסנכרון, אלה משתמשות בפרק זמן כפול, ומשדרות שני טונים מתחלפים. הראשון 1270.5 הרץ והשני גבוהה ב 26.917*n*m כאשר nמקבל ערך של 2,3,4 עבור ro, rrr, 73
תהליך הקליטה מבצע את הפעולות בסדר הפוך:
ראשית דוגמים את האודיו בתדר 11025 הרץ, לאחר מכן מורידים את תדר הדגימה ב2 (עם מסנן נמוכים כמובן) ומבצעים המרה לתדר על ידי fft. כאשר מזהים את אות הסנכרון ניתן לחשב את שגיאת תדר השעון וההזחה בזמן. לאחר מכן מחשבים את הספקטרום ב64 תאים המכוונים לתדרי האפנון. בכל פרק זמן יהיה תא אחד שיכיל עוצמה גבוהה יותר של האות מאשר רעש מפוזר גאוסינית.
לאחר שיש לנו את סידרת הביטים ששודרה, יש צורך בפענוח קוד הריד-סולומון. ישנם אלגוריתמים שונים לפתרון בעיה זו, בתוכנה שלו משתמש טיילור בשיטה של ראלף קוטר ואלכסנדר וורדי (או בקיצור KV ) אם נמצא פתרון מתאים, מוחזרים הביטים ואם לא האלגוריתם מזה זאת ומחזיר ״אין פתרון״. לכן אין קליטה חלקית של המסר, ונדיר שיש פתרון שגוי.
מדידות שנערכו מראות כי אחוז ההצלחה של האלגוריתם לזהות את המידע נשאר גבוהה כל עוד העוצמת האות היא -23db עד -25db
גם אם האלגוריתם נכשל, ניתן להפעיל ״חיפוש עמוק״ בו המחשב מנסה לבצע קידוד של הודעות ולמצוא קורלציה גבוהה בין הערך המחושב למסר שנקלט (טכניקה המוכרת כפיצוח brute-force ) כדי לקצר את התהליך לא מחושבות כל ההודעות האפשריות, שהן 2 בחזקת 72 אפשריות’ אלא רק כאלו שיש הגיון שיקלטו (אותות קריאה שיצרנו איתם קשר והמיקום הידוע שלהם, אל מול קריאת cq או פניה אל אות הקריאה שלי)
במקביל מתבצעת אנליזה לזיהוי הצלילים של ההודעות ה״מקוצרות״ . עקב המבנה הפשוט שלהן, סיכוי הזיהוי של הודעות אלו אפשרי אפילו באותות מתחת ל-30db
מקורות
- The JT65 Communications Protocol
- Features and Technical Specifications of JT65
- WSJT User Guide
- sigidwiki
- קוד מקור (למתענינים: ממשק המשתמש בנוי בc++ עם ספרית Qt. הקידוד עצמו כתוב בfortran…)
תודה לגיל 4Z1KD על העזרה בעריכה.