مرحباً هبر. ربما كل من قابل أو أقارب أصدقاء أو أصدقاء على متن طائرة استخدم خدمة Flightradar24 المجانية. هذه هي وسيلة مريحة للغاية لتتبع موقف الطائرة في الوقت الحقيقي.
الجزء الأول وصف مبدأ تشغيل مثل هذه الخدمة عبر الإنترنت. سنذهب الآن أبعد من ذلك ، ونكتشف البيانات التي يتم إرسالها واستلامها من الطائرة إلى محطة الاستقبال ، ونقوم بفك تشفيرها بشكل مستقل باستخدام Python.
القصة
من الواضح ، لا يتم نقل البيانات المتعلقة بالطائرة بحيث يمكن للمستخدمين رؤيتها على هواتفهم الذكية. يُطلق على النظام ADS - B (المراقبة المعتمدة تلقائيًا - البث) ، ويستخدم لنقل معلومات الطائرة تلقائيًا إلى مركز التحكم - يتم إرسال معرفه وإحداثياته والاتجاه والسرعة والارتفاع والبيانات الأخرى. في السابق ، وقبل ظهور مثل هذه الأنظمة ، لم يتمكن المرسل من رؤية نقطة على الرادار. هذا لم يكن كافيا عندما كان هناك الكثير من الطائرات.
من الناحية الفنية ، يتكون ADS-B من جهاز إرسال على متن طائرة يرسل بشكل دوري الحزم التي تحتوي على معلومات بتردد عالٍ يصل إلى 1090 ميجاهرتز (هناك أوضاع أخرى ، لكنها ليست مثيرة للاهتمام بالنسبة لنا ، لأن الإحداثيات يتم إرسالها هنا فقط). بالطبع ، بالإضافة إلى جهاز الإرسال ، يوجد أيضًا جهاز استقبال في مكان ما في المطار ، ولكن بالنسبة لنا ، كما هو الحال بالنسبة للمستخدمين ، فإن جهاز الاستقبال الخاص بنا مثير للاهتمام.
بالمناسبة ، على سبيل المقارنة ، ظهر أول نظام من نوعه ، وهو Airnav Radarbox ، المصمم للمستخدمين العاديين ، في عام 2007 ، ويكلف حوالي 900 دولار ، وكان حوالي 250 دولارًا في السنة يستحق الاشتراك في خدمات الشبكة.

يمكنك قراءة مراجعات أول مالكين روس على منتدى أجهزة
الراديو . الآن وقد أصبحت أجهزة الاستقبال RTL-SDR متاحة على نطاق واسع ، يمكن تجميع جهاز مماثل مقابل 30 دولارًا ، المزيد حول هذا الموضوع في
الجزء الأول . سننتقل إلى البروتوكول نفسه - دعنا نرى كيف يعمل.
تلقي الإشارات
للبدء ، يجب تسجيل الإشارة. للإشارة بأكملها مدة 120 ميكروثانية فقط ، لذلك ، من أجل تفكيك مكوناتها بشكل مريح ، من المستحسن وجود جهاز استقبال SDR مع تردد أخذ العينات لا يقل عن 5 MHz.

بعد التسجيل ، نحصل على ملف WAV بتردد أخذ العينات يبلغ 5،000،000 عينة / ثانية ، أي 30 ثانية من هذا التسجيل "يزن" حوالي 500 ميجابايت. بالطبع ، لا فائدة من الاستماع إلى مشغل الوسائط - الملف لا يحتوي على صوت ولكن إشارة راديو رقمية مباشرة - هكذا تعمل Software Defined Radio.
سنفتح ونعالج الملف باستخدام بايثون. يمكن لأولئك الذين يرغبون في تجربة لوحدهم تنزيل نموذج التسجيل
من الرابط .
قم بتنزيل الملف وشاهد ما بداخله.
from scipy.io import wavfile import matplotlib.pyplot as plt import numpy as np fs, data = wavfile.read("adsb_20190311_191728Z_1090000kHz_RF.wav") data = data.astype(float) I, Q = data[:, 0], data[:, 1] A = np.sqrt(I*I + Q*Q) plt.plot(A) plt.show()
النتيجة: نرى "نبضات" واضحة على خلفية الضوضاء.

كل "دفعة" هي إشارة يكون هيكلها مرئيًا بوضوح إذا قمت بزيادة الدقة على الرسم البياني.

كما ترى ، تتوافق الصورة مع ما هو موصوف في الوصف أعلاه. يمكنك البدء في معالجة البيانات.
فك التشفير
تحتاج أولا إلى الحصول على bitstream. يتم تشفير الإشارة نفسها باستخدام ترميز manchester:

من الاختلاف في المستويات في nibbles فمن السهل الحصول على "0" و "1" الحقيقي.
bits_str = "" for p in range(8): pos = start_data + bit_len*p p1, p2 = A[pos: pos + bit_len/2], A[pos + bit_len/2: pos + bit_len] avg1, avg2 = np.average(p1), np.average(p2) if avg1 < avg2: bits_str += "0" elif avg1 > avg2: bits_str += "1"
هيكل الإشارة نفسها على النحو التالي:

لننظر في الحقول بمزيد من التفصيل.
DF (تنسيق الوصلة الهابطة ، 5 بت) - يحدد نوع الرسالة. هناك عدة أنواع منها:

(
مصدر الجدول )
نحن مهتمون فقط في نوع DF17 ، كما أنه يحتوي على إحداثيات الطائرة.
الايكاو (24 بت) هو رمز دولي فريد للطائرة. يمكنك التحقق من الطائرة من خلال الرمز
الخاص بها على موقع الويب (لسوء الحظ ، توقف المؤلف عن تحديث قاعدة البيانات ، لكنها لا تزال ذات صلة). على سبيل المثال ، بالنسبة للرمز 3c5ee2 ، لدينا المعلومات التالية:

تحرير: في
التعليق على المقال ، يرد وصف رمز الايكاو بمزيد من التفصيل ؛ أوصي بقراءته للمهتمين.
البيانات (56 أو 112 بت) - في الواقع البيانات التي سنقوم بفك تشفيرها. أول 5 بتات من البيانات هي حقل
Type Code الذي يحتوي على النوع الفرعي للبيانات المخزنة (يجب عدم الخلط بينه وبين DF). هناك عدد غير قليل من هذه الأنواع:

(
مصدر الجدول )
دعونا نلقي نظرة على حزم عينة قليلة.
تحديد الطائراتمثال ثنائي:
00100 011 000101 010111 000111 110111 110001 111000
حقول البيانات:
+------+------+------+------+------+------+------+------+------+------+ | TC,5 | EC,3 | C1,6 | C2,6 | C3,6 | C4,6 | C5,6 | C6,6 | C7,6 | C8,6 | +------+------+------+------+------+------+------+------+------+------+
TC = 00100b = 4 ، يحتوي كل حرف C1-C8 على رموز مقابلة للمؤشرات في السلسلة:
#ABCDEFGHIJKLMNOPQRSTUVWXYZ ##### _ ################# 0123456789 ######
بعد فك تشفير السطر ، من السهل الحصول على رمز الطائرة: EWG7184
symbols = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ#####_###############0123456789######" code_str = "" for p in range(8): c = int(bits_str[8 + 6*p:8 + 6*(p + 1)], 2) code_str += symbols[c] print("Aircraft Identification:", code_str.replace('#', ''))
موقف المحمولة جواإذا كان الاسم بسيطًا ، فستكون الإحداثيات أكثر تعقيدًا. يتم نقلها في شكل 2x ، حتى والأطر الفردية. رمز الحقل TC = 01011b = 11.

مثال على الحزم الفردية والزوجية:
01011 000 000101110110 00 10111000111001000 10000110101111001 01011 000 000110010000 01 10010011110000110 10000011110001000
يتم حساب الإحداثيات وفقًا لمعادلة ذكية إلى حد ما:

(
المصدر )
أنا لست متخصصًا في نظام المعلومات الجغرافية ، لذلك لا أعرف من أين تأتي. من هو في المعرفة ، والكتابة في التعليقات.
يُعد الارتفاع أكثر سهولة - اعتمادًا على جزء معين ، يمكن أن يظهر إما على شكل مضاعف يبلغ طوله 25 أو 100 قدم.
السرعة المحمولة جواالحزمة مع TC = 19. ما يثير الاهتمام هنا هو أن السرعة يمكن أن تكون إما دقيقة ، نسبة إلى الأرض (السرعة الأرضية) ، أو الهواء ، كما تم قياسها بواسطة مستشعر الطائرة (Airspeed). يتم نقل العديد من المجالات المختلفة أيضا:

(
المصدر )
استنتاج
كما ترون ، أصبحت تقنية ADS-B تعايشًا مثيرًا للاهتمام عندما يكون المعيار مفيدًا ليس فقط للمحترفين ، ولكن أيضًا للمستخدمين العاديين. ولكن بطبيعة الحال ، كان الدور الرئيسي في ذلك هو تقليص تكلفة أجهزة الاستقبال الرقمية لحقوق السحب الخاصة ، والتي تسمح للجهاز باستقبال إشارات بتردد أعلى جيجاهيرتز حرفيًا "مقابل قرش".
في المعيار نفسه ، بالطبع ، أكثر بكثير من أي شيء آخر. يمكن للمهتمين الاطلاع على ملف PDF على صفحة
الايكاو أو زيارة
الموقع المذكور أعلاه.
من غير المرجح أن يكون الكثير مما سبق مفيدًا ، ولكن على الأقل الفكرة العامة لكيفية عمل هذا ، كما آمل ، لا تزال قائمة.
بالمناسبة ، يوجد بالفعل جهاز فك تشفير جاهز في Python ، ويمكن دراسته
هنا . ويمكن لمالكي مستقبلات حقوق السحب الخاصة تجميع وتشغيل وحدة فك ترميز ADS-B النهائية
من الصفحة ، المزيد حول هذا الموضوع في
الجزء الأول .
الكود المصدري للمحلل الموصوف في المقال مقدّم تحت القص. هذا مثال اختبار لا يتظاهر بأنه إنتاج ، ولكن هناك شيئًا ما يعمل فيه ، ويمكنك تحليل الملف المسجل أعلاه.
شفرة المصدر (بيثون) from __future__ import print_function from scipy.io import wavfile from scipy import signal import matplotlib.pyplot as plt import numpy as np import math import sys def parse_message(data, start, bit_len): max_len = bit_len*128 A = data[start:start + max_len] A = signal.resample(A, 10*max_len) bits = np.zeros(10*max_len) bit_len *= 10 start_data = bit_len*8
آمل أن يكون شخص ما مهتمًا ، شكرًا على اهتمامك.