مرحباً هبر!
ذات مرة ، عندما يكلف الهاتف المحمول 2000 دولارًا ودقيقة المكالمة 50 سنتًا ، كان هناك شيء شائع مثل الترحيل. ثم أصبح الاتصال أرخص ، ثم انتقل النداء أولاً من السمة المرموقة لرجال الأعمال إلى السمة المرموقة لساعي أو سكرتير ، ثم اختفت هذه التقنية تقريبًا بالكامل.
بالنسبة لأولئك الذين يتذكرون النكتة "اقرأ النداء ، فكروا كثيرًا" ، ويريدون معرفة كيف تعمل ، فاستمروا في النقص. بالنسبة لأولئك الذين يرغبون في فهم المزيد من التفاصيل ، يتوفر
الجزء الثاني .
معلومات عامة
بالنسبة لأولئك الذين نسوا أو ولدوا بعد الألفية الجديدة ، أتذكر بإيجاز الأفكار الرئيسية.
من وجهة نظر المستخدم ، يحتوي اتصال الترحيل على إيجابيات كبيرة ، والتي لا تزال في بعض الحالات ذات صلة:
- الاتصالات في اتجاه واحد ، دون أي تأكيد ، وبالتالي فمن المستحيل تحميل شبكة الترحيل بشكل زائد ، لا يعتمد أدائها على عدد المشتركين. يتم بث الرسائل ببساطة بالتتابع "كما هي" ، ويستقبلها جهاز النداء إذا كان رقم المستلم يطابق رقم النداء.
- جهاز الاستقبال بسيط للغاية ، بحيث يعمل جهاز النداء دون إعادة شحن ما يصل إلى شهر من بطاريتي AA عاديتين.
هناك
معياران رئيسيان لإرسال الرسائل -
POCSAG (المجموعة الاستشارية لتوحيد رمز مكتب البريد) و
FLEX . المعايير ليست جديدة على الإطلاق ، تمت الموافقة على POCSAG مرة أخرى في عام 1982 ، وسرعات مدعومة من 512 ، 1200 و 2400 بت / ثانية. للإرسال ، يتم استخدام مفتاح إزاحة التردد (FSK) مع تباعد تردد 4.5 كيلو هرتز. يدعم معيار FLEX الأحدث (الذي اقترحته شركة موتورولا في التسعينيات) سرعات تصل إلى 6400 بت في الثانية ويمكنها استخدام FSK2 فحسب ، ولكن أيضًا FSK4.
تعتبر البروتوكولات بسيطة بطبيعتها ، ومنذ 20 عامًا تمت كتابة وحدات فك ترميز من أجلها يمكنها فك تشفير الإشارة من إدخال بطاقة الصوت (لا يتم توفير تشفير الرسائل ، بحيث يمكن لأي شخص قراءتها باستخدام هذا البرنامج ، من حيث المبدأ).
دعونا نرى كيف يعمل.
تلقي الإشارات
أولا ، نحن بحاجة إلى عينة لفك التشفير. نأخذ كمبيوتر محمول وجهاز استقبال rtl-sdr وآلة زمنية ، ونتلقى الإشارة التي نحتاجها.

بسبب تعديل التردد ، وضع استقبال أيضا تعيين وزير الخارجية. باستخدام HDSDR ، نسجل الإشارة بتنسيق WAV.
دعونا نرى ما حصلنا عليه. قم بتنزيل ملف wav كصفيف باستخدام Python:
from scipy.io import wavfile import matplotlib.pyplot as plt fs, data = wavfile.read("pocsag.wav") plt.plot(data) plt.show()
النتيجة (توقيع البتات يدويًا):

كما ترون ، كل شيء بسيط ، وحتى "بالعين" في الرسام ، يمكنك رسم البتات حيث "0" وحيث "1". ولكن للقيام بذلك للملف بأكمله سيكون طويلاً ، تحتاج العملية إلى أتمتة.
إذا قمت بزيادة الرسم البياني ، يمكنك أن ترى أن عرض كل "بت" هو 20 عينة ، والتي في تردد أخذ العينات من ملف wav من 24000 عينة / ثانية يتوافق مع سرعة 1200 بت / ثانية. نجد في الإشارة مكان الانتقال خلال الصفر - ستكون هذه بداية تسلسل البت. سنقوم بعرض علامات على الشاشة للتحقق من تطابق البتات.
speed = 1200 fs = 24000 cnt = int(fs/speed) start = 0 for p in range(2*cnt): if data[p] < - 50 and data[p+1] > 50: start = p break
كما ترى ، فإن المطابقة ليست مثالية (ترددات المرسل والمستقبل لا تزال مختلفة قليلاً) ، لكنها كافية لفك التشفير.

بالنسبة للإشارات الطويلة ، يجب إدخال خوارزمية تعديل التردد ، لكن هذا ليس مطلوبًا في هذه الحالة.
والخطوة الأخيرة هي ترجمة الصفيف من wav إلى تسلسل بت. كل شيء بسيط هنا أيضًا ، فنحن نعرف بالفعل طول البتة ، إذا كانت بيانات هذه الفترة إيجابية ، فقم بإضافة "1" أو "0" (التحرير - كما اتضح فيما بعد ، الإشارة المطلوبة يجب عكسها ، لذلك تم عكس 0 و 1).
bits_str = "" for p in range(0, data.size - cnt, cnt): s = 0 for p1 in range(p, p+cnt): s += data[p] bits_str += "1" if s < 0 else "0" print("Bits") print(bits_str)
ربما يمكن تحسين الكود عن طريق التخلي عن الحلقة ، رغم أنه في هذه الحالة ليس حرجًا.
والنتيجة هي تسلسل نهائي من البتات (كسلسلة) لحفظ رسالتنا.
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
010101010101010101010101010101010101010101010101010100100111110011010010000101001101
100001111010100010011100000110010111011110101000100111000001100101110111101
01000100111000001100101110111101010001001110000011001011101111010101000100111
000001100101110111101010001001110000011001011101111010100010011100000110010
011011110101000100111000001100101110111101010001001110000011001011101111010
100010011100000110010111011110101000100111000001100101110111101010001001110
...
111101111فك التشفير
يعد تسلسل البتات أكثر ملاءمة من مجرد ملف wav ؛ يمكنك بالفعل استخراج أي بيانات منه. نقسم الملف إلى كتل من 4 بايتات ، ونحصل على تسلسل أكثر قابلية للفهم:
1010101010101010101010101010101010
1010101010101010101010101010101010
1010101010101010101010101010101010
1010101010101010101010101010101010
01111100110100100001010011011000
01111010100010011100000110010111
01111010100010011100000110010111
01111010100010011100000110010111
01111010100010011100000110010111
00001000011011110100010001101000
10000011010000010101010011010100
01111100110100100001010111011000
11110101010001000001000000111000
01111010100010011100000110010111
01111010100010011100000110010111
01111010100010011100000110010111
00100101101001011010010100101111هذا هو كل ما يمكننا استخلاصه من الملف ، يبقى لفهم ما تعنيه هذه السطور. افتح الوثائق الخاصة بالتنسيق ، والذي يتوفر
بتنسيق PDF .

كل شيء أكثر أو أقل وضوحا. يتكون رأس الرسالة من كتلة طويلة "10101010101" وهي ضرورية بحيث يترك النداء "وضع السكون". تتكون الرسالة نفسها من كتل Batch-1 ... Batch-N ، يبدأ كل منها بتسلسل FSC فريد (مظلل بالخط العريض في النص). علاوة على ذلك ، كما يتضح من الدليل ، إذا كان الخط يبدأ بـ "0" ، فهذا هو عنوان المستلم. يتم توصيل العنوان في جهاز الاستدعاء نفسه ، وإذا لم يكن متطابقًا ، سيتجاهل جهاز الاستدعاء الرسالة ببساطة. إذا كان السطر يبدأ بـ "1" ، فهذه هي في الواقع رسالة. لدينا اثنين من هذه الخطوط.
انظر الآن إلى كل كتلة. نرى رموز الخمول - الكتل الفارغة 01111 ... 0111 التي لا تحمل معلومات مفيدة. نحن نحذفها ، هناك القليل جدا من المعلومات المتبقية ، كل ما تبقى:
01111100110100100001010011011000 - مزامنة الإطار
00001000011011110100010001101000 - العنوان
10000011010000010101010011010100 - رسالة
01111100110100100001010111011000 - مزامنة الإطار
11110101010001000001000000111000 - رسالة
00100101101001011010010100101111 - العنوانيبقى أن نفهم ما هو في الداخل.
نحن ننظر إلى أبعد من ذلك في الدليل ، ونكتشف أن الرسائل يمكن أن تكون رقمية أو نصية. يتم تخزين الرسائل الرقمية في شكل رموز BCD ذات 4 بتات ، مما يعني أنه يمكن احتواء 5 أحرف في 20 بت (لا تزال هناك بتات للتحكم ، ولن نأخذها في الاعتبار). يمكن أن تكون الرسالة أيضًا نصية ، في هذه الحالة يتم استخدام ترميز 7 بت ، لكن بالنسبة للرسالة رسالتنا صغيرة جدًا - لا يتعدى إجمالي عدد بتات الرسالة 7.
من السلاسل 10000011010000010101010011010100 و 11110101010001000001000000111000 ، نحصل على تسلسلات 4 بت التالية:
1 0000 0110 1000 0010 10101 0011010100 - 0h 6h 8h 2h Ah
1 1110 1010 1000 1000 00100 0000111000 - Eh Ah 8h 8h 2h
وأخيراً ، الخطوة الأخيرة - ننظر في الوثائق إلى جدول مراسلات الأحرف.

كما ترون ، يمكن أن تحتوي الرسالة الرقمية فقط على أرقام من 0 إلى 9 ، والحرف U ("ugrent") ، ومسافة ، وزوج من الأقواس. نكتب وظيفة إخراج بسيطة حتى لا نقرأها يدويًا:
def parse_msg(block):
نتيجة لذلك ، تلقينا الرسالة المرسلة "0682 *) * 882". من الصعب تحديد معنى ذلك ، لكن بما أن التنسيق يدعم الرسائل الرقمية ، فمن المحتمل أن يحتاجها شخص ما.
الاستنتاجات
كما ترون ، تنسيق POCSAG بسيط جدًا ، وفي الواقع ، يمكن فك تشفيره حتى في دفتر ملاحظات المدرسة. وعلى الرغم من أنها الآن ذات أهمية تاريخية إلى حد ما ، إلا أن تحليل هذه البروتوكولات مفيد للغاية من وجهة نظر معرفية.
يصف
القسم التالي فك رموز رسائل ASCII.