דילוג לתוכן הראשי
כל הפוסטים בבלוג

הכירו את Yagi: שפת תכנות לרדיו

מתארים אות פעם אחת, ו-Yagi בונה את המקלט, את אותות הבדיקה ואת הגלאי. הנה הסיבה שאנחנו בונים אותה.

Yagi היא שפת תכנות למערכות תדר רדיו, שפותחה על ידי ⁦291 Group⁩. היא נקראת על שם אנטנת Yagi-Uda, שהומצאה על ידי Hidetsugu Yagi ו-Shintaro Uda בשנת 1926, והרעיון שלה נכנס בשורה אחת: מתארים את האות פעם אחת.

תוכנת רדיו נכתבת שלוש פעמים

כיום, יכולת רדיו חדשה נכתבת בדרך כלל שלוש פעמים: פעם אחת ב-Python כדי להוכיח את הרעיון, פעם ב-C++ כדי שתהיה מהירה, ופעם נוספת בשפת חומרה כדי להריץ אותה על חומרה ייעודית. קצבי דגימה ויחידות מידה חיים בהערות ובראש של המהנדס, כך שאי-התאמה מייצרת בשקט זבל במקום שגיאה. כל אות חדש פירושו דמודולטור שנבנה ביד, מחולל בדיקות נפרד ולוגיקת זיהוי נפרדת.

מתארים את האות פעם אחת

ב-Yagi מתארים אות פעם אחת: איך הוא מאופנן, באיזה קצב מגיעים הסמלים שלו, ואיך המסגרות שלו נבנות ונבדקות. מתוך התיאור היחיד הזה, Yagi מייצרת את המקלט, את אותות הבדיקה ואת הגלאי, ומריצה את אותה תוכנית על מחשב נייד או על חיישן שטח, בזמן אמת ממכשיר רדיו או מהקלטה.

הנה תוכנית קצרה שמכוונת מכשיר רדיו לתדר ⁦433.92 MHz⁩ ומפענחת חיישן מזג אוויר:

radio sdr = hackrf("one") {
  rx.freq = 433.92 MHz
  rx.rate = 2 Msps
}

signal WeatherSensor {
  modulation:  ook
  symbol_rate: 2.4 kbaud
  coding:      nrz
  frame:       preamble(0xAAAA) ++ sync(0x2DD4)
            ++ payload(bytes[8]) ++ crc16(poly: 0x1021)
}

sdr.rx
  |> lowpass(cutoff: 100 kHz)
  |> decimate(10)
  |> WeatherSensor.demod()
  |> each(frame => log(frame.payload))

שפה שיודעת מהו תדר

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

תיאורים קצרים, תוצאות אמיתיות

  • תיאור של LoRa באורך 28 שורות מפענח 196 מתוך 205 הקלטות ציבוריות, יותר מ-187 ההקלטות שפוענחו על ידי מפענח ייחוס באורך 2,100 שורות שנכתב ב-C++.
  • ספריית ההתקנים שלה מתארת 95 התקנים, וכל אחד מהם נבדק מול אוסף בדיקות ציבורי של הקלטות אמיתיות.
  • היא כבר מפענחת חיישני ⁦433 MHz⁩, משדרי-משיבים של כלי טיס (ADS-B), שידורי פרסום של Bluetooth Low Energy וקשר רדיו קולי בלחץ-דבר.

היא פועלת עם מכשירי רדיו מוגדרי תוכנה נפוצים כמו HackRF ו-RTL-SDR.

עקבו אחרי Yagi

הבית של Yagi נמצא ב-GitHub בכתובת github.com/yagi-lang. עקבו אחריה שם כדי להיות הראשונים לראות אותה.