تعلم راديو جنو بميكروفون



أظهر مقال سابق على SDR وراديو جنو أن الموضوع مثير للاهتمام للمجتمع. بالنظر إلى أنه لا توجد معلومات تقريبًا حول حزمة راديو جنو باللغة الروسية ، وليس كل شيء واضحًا باللغة الإنجليزية ، قررت أن أصف تجربتي مع راديو جنو.

حول SDR وراديو جنو ، كتبت بالفعل في مقال سابق . دعني أذكرك ، هدفي هو إظهار كيفية اعتراض إشارة راديو وحتى إشعاعها للتحكم في الأجهزة المنزلية الذكية (وبالفعل إنترنت الأشياء). أعتقد أنه من المهم لفت الانتباه إلى الأمن في إنترنت الأشياء. لكن هذا لا يزال بعيدًا جدًا ... بادئ ذي بدء ، كان عليّ التعامل مع راديو جنو!

ليس لدى الجميع جهاز استقبال SDR ، ويبدو لي أنه سيكون من المفيد إظهار ما يمكن فعله باستخدام راديو GNU مع ما يمتلكه الجميع - أي ميكروفون الكمبيوتر وسماعات الرأس.

تحت قطع بعض التمارين المثيرة للاهتمام مع الصوت.

يبدو حولها


لذا ، دعونا نبدأ بواحد بسيط: دراسة طيف الأصوات حولها. نفترض أنك قمت بتثبيت حزمة راديو جنو أو أطلقت صورة أوبونتو / ويندوز مع راديو جنو. إذا لم يكن الأمر كذلك ، فقم بتنزيل صورة تعتمد على Ubuntu من موقع راديو جنو .

لنبدأ بإنشاء مشروع التقاط ميكروفون بسيط. للقيام بذلك ، أضف كتلة مصدر الصوت ، واضبط samp_rate 48000 (تعمل العديد من البطاقات بتردد 44100 هرتز ، وليس على 48000 هرتز).

يمكنك معرفة حد بطاقتك على لينكس مثل هذا:
$ pactl list short sinks
0	alsa_output.pci-0000_00_03.0.hdmi-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED
1	alsa_output.pci-0000_00_1b.0.analog-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED

السؤال الذي يطرح نفسه على الفور: لماذا 48 كيلو هرتز؟ بعد كل شيء ، يقولون ، نسمع تفاصيل تصل إلى 20 كيلوهرتز ، وهذا ليس كل شيء.
--, , 2 . , 24 — . .

48 44.1 — . , CD. .

عد إلى مخطط راديو جنو الخاص بنا. قم بتوصيل مصدر الصوت WX FFT. لا تنس استبدال QT GUI بـ WX GUI في top_block ، وكذلك تغيير نوع الإدخال إلى Float. والآن سنركض حول الشقة ، ونصدر أصواتًا مختلفة. أخبرتنا فيزياء المدرسة كثيرًا عما سنراه ، ولكن كل هذا منسي ، ومن الممتع دائمًا أن ترى بأم عينيك أكثر من القراءة في كتاب مدرسي.

أول شيء سنراه هو أنه لا يوجد شيء مرئي! يتركز الجزء الهام بأكمله من الطيف في أول 2 أو 3 كيلوهرتز. حسنًا ، حسنًا ، دعنا نضيف كتلة جديدة بين المصدر و WX FFT: Rational Resampler - ستسمح لك بتغيير معدل العينة ، مع ترك الجزء الصحيح فقط من الطيف. من أجل الراحة ، سنقوم بإنشاء كتلة متغيرة جديدة (متغير) ، واستدعاء resamp وتعيين القيمة ، على سبيل المثال ، 15. في كتلة إعادة التشكيل في حقل Decimation ، أدخل اسم هذا المتغير. الآن ، إشارة بمعدل عينة تساوي samp_rate / resamp ، أي في هذه الكتلة ، في حقل معدل العينة ، تحتاج إلى إدراج هذا التعبير. الآن ستمتد إشارتنا إلى 1.5 كيلو هرتز ، وهو أفضل بالفعل. حسنا ، الآن كل شيء مرئي!

لذا ، ابدأ بملاحظة لـ 440 هرتز. تحقق من صوتك للترددالنظافة. على الفور اكتشاف مثير للاهتمام (أذكركم ، يجب أن نعرف ذلك من المدرسة): نحن لا ننشر ترددًا واحدًا ، بل مجموعة من الترددات المتعددة - النغمات والإيقاعات. من لديه بيانو أو آلة أخرى في المنزل ، يمكنك تجربتها. هذه هي الطريقة التي تبدو بها الملاحظة لأول أوكتاف مثل بيانو.



لكن بالنسبة لأوكتاف الصغير. كل شيء كما هو الحال في الكتاب المدرسي - هناك قمم أكثر مرتين ، وأقل ذروة أصبحت أقل مرتين (220 هرتز)



لا توجد ترددات متعددة بشكل عشوائي. في الواقع ، في حالة البيانو / الغيتار / ... (سلاسل) يتم استخراج الصوت بواسطة اهتزاز الخيط. وللسلسلة نهايتان ثابتتان ، أي يمكن فقط إطلاق الأوضاع ذات الطول الموجي الطويل λ / 2 = L * n ، حيث n = 1،2،3 ...

وبالمثل مع الصوت. تسمح لك الأربطة بتغيير خصائص الحنجرة ، التي تعمل كمرنان (سامحني لعشاق التشريح للأسماء غير الدقيقة). مرة أخرى ، يتم إصلاح الجدران ، وهناك نقاط عقدية عند الاهتزازات ، أي مرة أخرى نفس الصيغة لأوضاع متحمس.

والآن دعونا نصفق:


(أزرق - طيف "الصمت" ، أخضر - طيف التصفيق)

أوه ، هنا جميع الترددات مرئية (انتبه إلى مقياس التردد ومستوى الإشارة بالمقارنة مع الرسوم البيانية أعلاه!). إنه منطقي ، لأن القطن هو زيادة قصيرة المدى في الضغط (حاد جدًا) ، أي تقريبا function -الوظيفة ، ويحتوي طيفها على جميع الترددات.

يمكن استخدامه بالمناسبة. من يتذكر من التسعينات حلقات المفاتيح هذه للعثور على المفاتيح التي بدأت في إصدار أصوات عندما صفير؟ كان شيئًا مناسبًا. لذلك تفاعلوا أيضًا مع القطن ، لأن في صوت القطن هناك أيضا تردد يتوافق مع صافرة.

طيف الأبجدية


الآن دعونا نستمع لأنفسنا. قل أحرفًا مختلفة من الأبجدية وانظر إلى الطيف (يفضل بدون إعادة التشكيل ، لمعرفة الترددات المستخدمة في نطاق 0-20 كيلو هرتز). يستخدم الشخص عدة أنواع من توليد الصوت: الشفوي (بدءًا من فتح الشفاه ، مما يخلق العديد من الترددات في وقت واحد) والحنجرة والأسنان واللغات والأنف. أصوات الهسهسة والصفير مثيرة للاهتمام بشكل خاص (هذه هي الحنجرة والأسنان) - طيفها واسع جدًا ويقع بشكل أساسي في الطيف> kHz 2.5 (للصوت "c" حتى> 5 kHz). يفسر هذا سبب صعوبة سماع الكلمات التي تحتوي على هذا الصوت على الهاتف (في الماضي ، كان عرض النطاق الترددي عند 3 كيلو هرتز أو أقل - حاول إضافة مرشح Low Pass وأرسل النتيجة إلى Sink Audio مع سماعات الرأس - ستشبه النتيجة هاتفًا سلكيًا قديمًا جيدًا).

من لديه أطفال ، استمع إليهم - هم أعلى بكثير ، صوتهم يحتوي على العديد من الترددات العالية. هذا هو السبب في أن صوتهم عبر الهاتف غريب دائمًا ، وغالبًا ما يكون من المستحيل فهمه (تشويه الصوت أكبر بكثير من صوت الشخص البالغ).

بالمناسبة ، حاولت الضغط على أعلى ملاحظة مني. حسنًا ، لم أتناوله فوق 700 هرتز. استغرق الابن 1200 هرتز! لم أتوقع مثل هذا القيد من نفسي - هذا أقل من 5 ٪ من الطيف الذي أسمعه. شعرت بالخلل ...

تحدث إلى الدلافين


حسنًا ، حسنًا ، لا يمكننا أن نسمع صوتًا مرتفعًا للغاية ، لذا استخدم هذا النطاق لآخر الآن دعنا نحاول إجراء نقل الصوت من خلال الموجات فوق الصوتية. وضعنا مرشح تمرير منخفض (تمرير منخفض) بعد كتلة مصدر الصوت ، واضربه في جيب التمام 15 كيلو هرتز (وبالتالي نقل إشارتنا 15 كيلو هرتز أعلى) وإرساله إلى مكبر الصوت (يتواءم مع هذا الأمر). ولكن يمكن كتابة مثل هذا الملف باستخدام File Sink. بعد فقد هذا الملف ، لن يتمكن مستمع الطرف الثالث من تحليل ما يقال هناك. لعبة تجسس في المستوى 2.



الآن لنفعل العكس - سنستعيد الإشارة المشفرة. لا يقبل ميكروفون الكمبيوتر المحمول العادي الترددات العالية جيدًا ، ولكن من ملف ما يعد أمرًا سهلاً (يكفي في اختباراتنا). يتم استقبال الصوت بعد الشفاء بشكل جيد للغاية.



بهذه الطريقة تقريبًا ، يمكنك حتى نقل البيانات: هنامثال على واجهة الشبكة القائمة على الإرسال بالموجات فوق الصوتية .

يوضح هذا المثال أنه يمكنك القيام بالكثير مع راديو جنو وبطاقة الصوت!

نظرة عامة على وحدات راديو جنو


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

العمليات الرياضية:

إضافة - إضافة إشارتين
Mulitly - ضرب إشارتين (على سبيل المثال ، AM)
إضافة Const - إضافة (طرح) ثابت (على سبيل المثال ، عند إزالة AM إزالة مكون DC)
Multiply Const - ضرب إشارة بثابت (للتضخيم ، على سبيل المثال)
Char / Integer / Float / Complex إلى Char / Integer / Float / Complex - تحويل نوع البيانات

مصادر:

مصدر ثابت - مصدر ينتج دائمًا نفس القيمة
Signal Source - مصدر ينتج إشارة جيبية (لإشارة اصطناعية)
مصدر الصوت / الحوض - التقاط من بطاقة الصوت أو الإخراج إليها
مصدر الملف / الحوض - قراءة من ملف (استخدم Throttle to قيود على سرعة القراءة إلى معدل العينة المطلوب) والكتابة إلى
ملف مصدر / حوض Wav - قراءة / كتابة ملف
TCP / UDP WAV ؛ المصدر / الحوض - القدرة على إرساء المشروع مع برنامج الشبكة عبر TCP / UDP
osmocom Source / Sink sockets - استقبال البيانات من RTL-SDR أو HackRF One أو مصدر ناقل (لـ HackRF One)
- مصدر سلسلة من الأرقام

الفلاتر والتشكيل:

مرشح تمرير الترددات المنخفضة / العالية / النطاق - مرشحات
التردد المنخفض / التردد العالي / تمرير النطاق التردد مرشح Xlating FIR - يجمع بين تغيير التردد ومرشح التردد المنخفض لاختيار نطاق التردد المطلوب
AM / FM / GFSK / ... Mod / Demod - مختلف المعدلات ومزيلات التشكيل

أخذ العينات:

Rational Resampler - يسمح لك بتحويل تسلسل وارد للعينات من معدل عينة واحد إلى آخر عن طريق الهلاك والاستيفاء (يستخدم "ليناسب" معدل العينة المطلوب)
خنق - حد سرعة تقديم العينات إلى معدل العينة المطلوب (إذا لم يكن هناك كتل في المشروع تحد من السرعة المعالجة)
تأخير - يؤخر التدفق حسب العدد المطلوب من العينات

واجهة المستخدم:

WX GUI FFT Sink - الإخراج الرسومي لطيف الإشارة
WX GUI Waterfall Sink - إخراج الطاقة الطيفية في وضع "الشلال" (على طول المحور X - التردد ، على طول Y - الوقت ، Z (اللون) - السعة). مفيد للعثور على تردد الإشعاع لمصدر إرسال نادر في نطاق معين.
WX GUI Constellation Sink - يعرض مخطط الطور للإشارة (فرق الطور بين تذبذبات الأجزاء الحقيقية والخيالية للإشارة)
WX GUI Scope Sink - Oscilloscope

متفرقات:

المتغير - متغير يسمح لك باستخدام المتغيرات بدلاً من الأرقام في مجموعة متنوعة من كتل
التحديد - معدد الإرسال ، بالاشتراك مع WX Slider يتيح لك "تبديل" مدخلات ومخرجات
Pack / Unpack على البتات المتغيرة K - يتحول من 0/1 بايت إلى سلسلة من البتات K والعكس بالعكس من بايتات في سلسلة من وحدات البايت 0/1 ، المقابلة للبتات (ملائمة لحزم التشفير / فك التشفير - يمكن ضرب البايتات 0/1 بالحامل ، على سبيل المثال)

ماذا تريد أن تعرف أيضًا عن GNU Radio Companion (GRC)؟


تتطلب جميع الكتل في مركز الخليج للأبحاث التي تحتوي على مدخلات أو مخرجات تعريفًا لنوع البيانات. يجب أن يكون نوع إخراج كتلة واحدة هو نفسه نوع الإدخال للكتلة المرتبطة به. يمكن نقل الإخراج من كتلة واحدة إلى عدة كتل (أي رسم عدة روابط). لكن تيار واحد فقط يمكن أن يدخل إدخال واحد!

تحتوي معظم الكتل على الحد الأدنى من التوثيق في علامة التبويب في نافذة الإعدادات ، وكذلك في حواشي المعلمات. على الرغم من أن هذا عادة لا يكفي. رصيف قديم بعض الشيء هنا .

يمكن أن تكون جميع معلمات الكتلة عبارة عن تعبيرات Python. على سبيل المثال بدلاً من الرقم ، يمكنك استبدال صيغة بمشاركة متغيرات محددة بواسطة كتل متغيرة.

غالبًا ما ترغب في "تحريف" معلمات المشروع عن طريق تغيير قيم المتغيرات. للقيام بذلك ، استخدم WX Slider أو مكون واجهة مستخدم مشابه ، وذلك باستخدام اسمه بدلاً من المتغير المطلوب. بعد بدء المشروع ، سيظهر شريط تمرير في واجهة المستخدم. هذا مناسب لضبط معلمات التردد أو المرشح.

يتم تمييز الأخطاء في نوع الروابط أو في معلمات الكتلة باللون الأحمر. كما أنهم يحظرون إطلاق المشروع (في إعدادات الكتلة المظللة باللون الأحمر يمكنك أن تقرأ عن المشكلة). تظهر أخطاء وقت التشغيل حتى عند بدء المشروع - سيخبرك السجل الموجود أسفل نافذة GRC بالمشكلة.

تتطلب بعض الكتل عددًا صحيحًا كمعلمة. يمكن أن يؤدي استبدال الصيغة إلى عدم تطابق في النوع. استخدم الدالة Python int () للتحويل إلى عدد صحيح.

لتعطيل الكتلة ، استخدم تعطيل / تمكين. سيسمح هذا بعدم حذف الكتلة ، ولكن ببساطة استبعادها من المشروع لفترة من الوقت مع حفظ جميع المعلمات المدخلة.

يتم تحويل جميع المخططات في GRC إلى نصوص Python ، مما يسمح لك بتغييرها لاحقًا ، وكذلك أتمتة بعض العمليات التي تتجاوز GRC.

غالبًا ما يكون من السهل حفظ إشارة الصوت / الراديو في ملف لمزيد من التحليل. للقيام بذلك ، استخدم كتلة مصدر الملف. يرجى ملاحظة أنه عند قراءة ملف ، تحتاج إلى تذكر تنسيق البيانات المستخدم عند الكتابة (نوع الرقم) ، وكذلك معدل العينة. أوصي بتضمين هذه القيم في اسم الملف بالإضافة إلى وصف الإشارة المسجلة نفسها - وهذا سيسمح لك بتذكر كيفية قراءته لاحقًا.

عند التشغيل من ملف ، تأكد من استخدام كتلة Throttle لتحديد سرعة القراءة. هذا ليس مطلوبًا إذا كان هناك كتلة أخرى في الدائرة تحد فعليًا من سرعة قراءة البيانات. على سبيل المثال ، تحدد كتلة Sink الصوتية سرعة البيانات المقدمة إليها كما هو محدد في إعدادات معدل العينة.

استخدم رمز العدسة المكبرة في شريط الأدوات للعثور على الكتلة التي تحتاجها. سيؤدي النقر المزدوج على الاسم في قائمة الكتل المتاحة إلى إضافة الكتلة إلى المشروع. بدلاً من ذلك ، يمكنك سحبها من القائمة إلى الموقع المطلوب في المشروع.

حاول وضع الكتل بشكل ملائم في المشروع. هذا لا يؤثر على أي شيء آخر غير سهولة القراءة.

آمل أن تشجع هذه المقالة شخصًا على تجربة الصوت.

Source: https://habr.com/ru/post/ar393713/


All Articles