مرحبا يا هبر.
في الجزء السابق حول
النقل إلى راديو جنو ، تم طرح سؤال عما إذا كان من الممكن فك تشفير بروتوكول
LoRa (نقل البيانات للأجهزة منخفضة الطاقة) باستخدام SDR. بدا هذا الموضوع مثيراً للاهتمام بالنسبة لي ، خاصةً لأن إشارة LoRa نفسها غير عادية تمامًا - ما يسمى بتشكيل الطيف المنتشر Chirp Spread Spectrum ، أو "تعديل النقيق".

كيف يعمل ، واصلت تحت خفض.
بالمناسبة ، كانت الترجمة الحرفية لتعديل Chirp تبدو وكأنها "tweet modulation" ، لكن هذا يبدو سرياليًا تمامًا ، لذلك أفضل ترك الكلمة البسيطة "chirp" (كما هو موضح في التعليقات ، وهذا ما يسمى بـ
"تعديل التردد الخطي" باللغة الروسية).
لورا التحوير
كما ذكر أعلاه ، عند إرسال LoRa ، يتم استخدام طريقة تشكيل باستخدام "chirps" ، من خلال طريقة براءة اختراع Semtech. إذا كان أي شخص يريد تفاصيل التنفيذ مع الصيغ ، يمكنك قراءة PDF
على موقع semtech أو
هنا ، ولكن إذا كان وقحًا للغاية ، فإن "chirp" واحد هو تغيير تردد واحد ، ويتم تشفير دفق البت بمثل هذه التغييرات ، كما هو موضح في الصورة أعلاه. معلمات الإشارة في LoRa هي SF (عامل الانتشار - في الواقع ، مدة "غرد" واحد) وعرض النطاق الترددي - عرض النطاق الترددي. يتم تعيين المعلمة SF بواسطة قيم SF7 المحددة مسبقًا - SF12 ، حيث 7 هي الأسرع و 12 هي أبطأ وضع (على سبيل المثال ، يمكنك رؤية صورة مع توضيح لسرعات مختلفة من النقيق
مع researchgate ).
من الواضح ، كلما كان طول "النقيق" أقصر وطول النطاق ، كلما كان بإمكانك الحصول على سرعة النقل. كل هذا مرتبط بجدول مثل هذا:

من وجهة نظر مناعة النطاق والضوضاء ، من المفيد أن تنقل ببطء وحزن ، ولكن أولاً وقبل كل شيء ، نفقد السرعة ، وثانياً ، نفقد في الوقت المحدد ، ووفقًا لقواعد LoRa ، لا يمكن للجهاز إرسال أكثر من 1٪ من الوقت حتى لا يزعج الآخرين الأجهزة. لذا فإن اختيار سرعة النقل المثلى للأجهزة منخفضة الطاقة ليس بالأمر السهل.
مع مبدأ عام ، آمل أن يكون الأمر واضحًا ، فلننتقل الآن إلى حقوق السحب الخاصة وفك التشفير.
حديد
للاختبار ، استخدمت LoRa Click RN2483 و Arduino M0 ، ببساطة لأنها كانت متوفرة.

هذا هو عامل شكل مناسب إلى حد ما لنماذج أولية ، كما يسمح لك بسهولة استبدال اللوحة بأخرى بدون لحام (في هذا التنسيق ، يسمى
MikroBUS ،
تتوفر العديد من الأجهزة الطرفية المختلفة).
تمت إضافة مسودة التعليمات البرمجية ، وليس التظاهر بأنها إنتاج ، تحت المفسد. يتم تمرير القيمة "1234" كاختبار.
بالمناسبة ، يبلغ الحد الأقصى لنطاق الإرسال المعلن عنه لـ RN2483 ما يصل إلى 15 كم ، في الممارسة العملية ، وبوجود مبنى من طابق واحد ، تختفي الإشارة بالفعل لمسافة كيلومتر واحد ، ولا يمكن أن يزيد طولها عن 100 متر في "النمل" الحضرية.
نبدأ المودم ، والمضي قدما في فك التشفير.
فك
لا يوجد دعم لورا في راديو جنو نفسه ، لذلك عليك استخدام مكونات الطرف الثالث. لم يكن هناك سوى اثنين منهم ، وللأسف ، لم يظهر كلا المؤلفين أي خيال في الاسم ، ودعوهما هو نفسه تمامًا - gr-lora (
https://github.com/rpp0/gr-lora و
https://github.com/ BastilleResearch / gr-lora على التوالي). لسوء الحظ ، نظرًا لأن GNU Radio لا يمكن أن يحتوي على كلا المكونين في وقت واحد ، يقوم مثبت أحد المكونات بالكتابة فوق ملفات الآخر.
rpp0 / gr-loraيمكنك تنزيل مصادر وحدة فك الترميز
من github ، التجميع قياسي ولا يسبب صعوبات:
git clone https://github.com/rpp0/gr-lora.git cd gr-lora mkdir build cd build cmake .. make && sudo make install && sudo ldconfig
بعد التثبيت ، تظهر كتل إضافية في راديو جنو ، حيث يسهل تجميع وحدة فك ترميز. كمعلمات وحدة فك الترميز ، يجب عليك تحديد عرض النطاق الترددي ، عامل الانتشار ، تردد مركز SDR وتردد الاستقبال.

تم توحيد الوحدات الموجودة في راديو جنو بحيث يمكن استخدام أي مستقبل ، مثل RTL-SDR. اعتدت SDRPlay. تم استخدام برنامج Python بسيط لإخراج البيانات إلى وحدة التحكم.
udp_receive.py import socket UDP_IP = "127.0.0.1" UDP_PORT = 40868 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
تظهر نتيجة العمل في الشكل.

كما ترون ، يحتوي الصف على رؤوس ونهايات الإرسال ، وفي المنتصف نرى بياناتنا "1234".
BastilleResearch / gr-loraهذه الوحدة جديرة بالملاحظة من حيث أنها يمكن أن تعمل ليس فقط على الاستقبال ، ولكن أيضًا على الإرسال. التثبيت هو نفسه: يحتاج المكون إلى تجميع من المصدر.
git clone git://github.com/BastilleResearch/gr-lora.git cd gr-lora mkdir build cd build cmake .. make && sudo make install && sudo ldconfig
يظهر الرسم البياني اتصال لهذا فك التشفير في الشكل.

كما ترون ، هناك المزيد من القطع. يقوم كل من Rotator و Polyphase Resampler بتحديد التردد المطلوب وقطع الزائد ، ويقوم المستخلص بتحويل "chirps" إلى رمز ثنائي (الإخراج هو تسلسل مثل "17 00 3e 00 38 00 2f 00 01 00 39 00 2c 00 30 00 c6 00 18 00 7e d d 00 85 00 e9 00 d8 00 67 00 c4 00 ") ، وتشكل وحدة فك الترميز الحزمة النهائية.
لسوء الحظ ، لم تعمل بشكل صحيح. بالتأكيد يعمل فك التشفير ، أثناء عمل المودم ، تظهر البيانات ، لكن الرسائل المستلمة لا علاقة لها بالرسائل المرسلة.

ما زلت لم أفهم السبب ، إما أنني ارتكبت خطأ في الإعدادات في مكان ما ، أو أن وحدة فك الترميز هذه متوافقة فقط مع برنامج التشفير الخاص بي. يمكن لأولئك الذين يرغبون في التحقق من تلقاء أنفسهم باستخدام نموذج القناة.
LoRaWAN
كما ترون ، تم النظر في الطبقة المادية الدنيا للإرسال هنا. في بروتوكول LoRaWAN ذي المستوى الأعلى ، يتم وضع طبقة منطقية أخرى في الأعلى - مع التشفير والمفاتيح والخدمات الأخرى. أولئك الذين يرغبون في معرفة كيفية عمل الترميز يمكنهم تجربة وحدة فك الترميز عبر الإنترنت
هنا .
بالمناسبة ، يترتب على ذلك أنه حتى لو تلقينا إشارة LoRaWAN باستخدام SDR ، دون وجود مفاتيح تشفير (يتم تخزين أحدها على خادم الموفر) ، فإننا لا نزال لا نتعرف على محتويات الحزمة.
استنتاج
كما ترون ، فك ترميز LoRa باستخدام حقوق السحب الخاصة أمر ممكن تمامًا. بالطبع ، لا يُنصح بصنع بوابة حقيقية قائمة على SDR - ستكون حساسيتها أسوأ من حساسية أجهزة المودم "الحقيقية" ، المصممة خصيصًا لتلقي إشارات ضعيفة ، ولديها مرشحات ضيقة النطاق و LNA. ولكن للاختبار أو البحث ، يمكن أن يكون هذا مثيرا للاهتمام.
بالنسبة لأولئك الذين يرغبون في تجربة ذلك بمفردهم ، توجد ملفات grc الخاصة بمصدر راديو جنو تحت جناح التحكم.
receive1.grc <?xml version='1.0' encoding='utf-8'?> <?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Mon Jun 3 09:39:45 2019</timestamp> <block> <key>options</key> <param> <key>author</key> <value></value> </param> <param> <key>window_size</key> <value></value> </param> <param> <key>category</key> <value>[GRC Hier Blocks]</value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>description</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(8, 8)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>generate_options</key> <value>wx_gui</value> </param> <param> <key>hier_block_src_path</key> <value>.:</value> </param> <param> <key>id</key> <value>top_block</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> <key>qt_qss_theme</key> <value></value> </param> <param> <key>realtime_scheduling</key> <value></value> </param> <param> <key>run_command</key> <value>{python} -u {filename}</value> </param> <param> <key>run_options</key> <value>prompt</value> </param> <param> <key>run</key> <value>True</value> </param> <param> <key>thread_safe_setters</key> <value></value> </param> <param> <key>title</key> <value></value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(760, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>bw</value> </param> <param> <key>value</key> <value>125000.0</value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(936, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>code_rate</value> </param> <param> <key>value</key> <value>4</value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(848, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>header</value> </param> <param> <key>value</key> <value>True</value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(680, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>ldr</value> </param> <param> <key>value</key> <value>True</value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(400, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>offset</value> </param> <param> <key>value</key> <value>-100000.0</value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(8, 76)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>samp_rate</value> </param> <param> <key>value</key> <value>1000000</value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(544, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>spreading_factor</value> </param> <param> <key>value</key> <value>8</value> </param> </block> <block> <key>blocks_rotator_cc</key> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(416, 252)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>blocks_rotator_cc_0</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>phase_inc</key> <value>(2 * math.pi * offset) / samp_rate</value> </param> </block> <block> <key>blocks_socket_pdu</key> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(944, 452)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>host</key> <value>127.0.0.1</value> </param> <param> <key>id</key> <value>blocks_socket_pdu_0</value> </param> <param> <key>mtu</key> <value>10000</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>port</key> <value>40868</value> </param> <param> <key>tcp_no_delay</key> <value>False</value> </param> <param> <key>type</key> <value>"UDP_CLIENT"</value> </param> </block> <block> <key>import</key> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(296, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>import_0</value> </param> <param> <key>import</key> <value>import math</value> </param> </block> <block> <key>lora_decode</key> <param> <key>alias</key> <value></value> </param> <param> <key>code_rate</key> <value>code_rate</value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>header</key> <value>header</value> </param> <param> <key>_coordinate</key> <value>(648, 452)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>lora_decode_0</value> </param> <param> <key>low_data_rate</key> <value>ldr</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>spreading_factor</key> <value>spreading_factor</value> </param> </block> <block> <key>lora_demod</key> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>fft_factor</key> <value>2</value> </param> <param> <key>beta</key> <value>25.0</value> </param> <param> <key>_coordinate</key> <value>(384, 452)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>lora_demod_0</value> </param> <param> <key>low_data_rate</key> <value>ldr</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>spreading_factor</key> <value>spreading_factor</value> </param> </block> <block> <key>pfb_arb_resampler_xxx</key> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>1</value> </param> <param> <key>_coordinate</key> <value>(656, 292)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>pfb_arb_resampler_xxx_0</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>nfilts</key> <value>32</value> </param> <param> <key>rrate</key> <value>bw/samp_rate</value> </param> <param> <key>samp_delay</key> <value>0</value> </param> <param> <key>atten</key> <value>100</value> </param> <param> <key>taps</key> <value></value> </param> <param> <key>type</key> <value>ccf</value> </param> </block> <block> <key>sdrplay_rsp2_source</key> <param> <key>agc_enabled</key> <value>False</value> </param> <param> <key>antenna</key> <value>'A'</value> </param> <param> <key>bw</key> <value>400</value> </param> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>dc_offset_mode</key> <value>True</value> </param> <param> <key>debug_enabled</key> <value>False</value> </param> <param> <key>device_serial</key> <value>'0'</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(144, 196)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>sdrplay_rsp2_source_0</value> </param> <param> <key>if_atten_db</key> <value>30</value> </param> <param> <key>ifType</key> <value>0</value> </param> <param> <key>iq_balance_mode</key> <value>True</value> </param> <param> <key>lna_atten_step</key> <value>3</value> </param> <param> <key>lo_mode</key> <value>1</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>rf_freq</key> <value>869.0e6</value> </param> <param> <key>sample_rate</key> <value>samp_rate</value> </param> </block> <block> <key>wxgui_fftsink2</key> <param> <key>avg_alpha</key> <value>0</value> </param> <param> <key>average</key> <value>False</value> </param> <param> <key>baseband_freq</key> <value>0</value> </param> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>fft_size</key> <value>1024</value> </param> <param> <key>freqvar</key> <value>None</value> </param> <param> <key>_coordinate</key> <value>(1000, 116)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>grid_pos</key> <value></value> </param> <param> <key>id</key> <value>wxgui_fftsink2_0</value> </param> <param> <key>notebook</key> <value></value> </param> <param> <key>peak_hold</key> <value>False</value> </param> <param> <key>ref_level</key> <value>0</value> </param> <param> <key>ref_scale</key> <value>2.0</value> </param> <param> <key>fft_rate</key> <value>15</value> </param> <param> <key>samp_rate</key> <value>samp_rate</value> </param> <param> <key>title</key> <value>FFT Plot</value> </param> <param> <key>type</key> <value>complex</value> </param> <param> <key>win_size</key> <value></value> </param> <param> <key>win</key> <value>None</value> </param> <param> <key>y_divs</key> <value>10</value> </param> <param> <key>y_per_div</key> <value>10</value> </param> </block> <connection> <source_block_id>blocks_rotator_cc_0</source_block_id> <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>blocks_rotator_cc_0</source_block_id> <sink_block_id>wxgui_fftsink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>lora_decode_0</source_block_id> <sink_block_id>blocks_socket_pdu_0</sink_block_id> <source_key>out</source_key> <sink_key>pdus</sink_key> </connection> <connection> <source_block_id>lora_demod_0</source_block_id> <sink_block_id>lora_decode_0</sink_block_id> <source_key>out</source_key> <sink_key>in</sink_key> </connection> <connection> <source_block_id>pfb_arb_resampler_xxx_0</source_block_id> <sink_block_id>lora_demod_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>sdrplay_rsp2_source_0</source_block_id> <sink_block_id>blocks_rotator_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> </flow_graph>
receive2.grc <?xml version='1.0' encoding='utf-8'?> <?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Mon Jun 3 09:39:45 2019</timestamp> <block> <key>options</key> <param> <key>author</key> <value></value> </param> <param> <key>window_size</key> <value></value> </param> <param> <key>category</key> <value>[GRC Hier Blocks]</value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>description</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(8, 8)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>generate_options</key> <value>wx_gui</value> </param> <param> <key>hier_block_src_path</key> <value>.:</value> </param> <param> <key>id</key> <value>top_block</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> <key>qt_qss_theme</key> <value></value> </param> <param> <key>realtime_scheduling</key> <value></value> </param> <param> <key>run_command</key> <value>{python} -u {filename}</value> </param> <param> <key>run_options</key> <value>prompt</value> </param> <param> <key>run</key> <value>True</value> </param> <param> <key>thread_safe_setters</key> <value></value> </param> <param> <key>title</key> <value></value> </param> </block> <block> <key>variable</key> <param> <key>comment</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(184, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>samp_rate</value> </param> <param> <key>value</key> <value>1000000</value> </param> </block> <block> <key>lora_lora_receiver</key> <param> <key>bandwidth</key> <value>125000</value> </param> <param> <key>alias</key> <value></value> </param> <param> <key>crc</key> <value>True</value> </param> <param> <key>center_freq</key> <value>869e6</value> </param> <param> <key>channel_list</key> <value>[869.1e6]</value> </param> <param> <key>cr</key> <value>4</value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>conj</key> <value>False</value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>decimation</key> <value>1</value> </param> <param> <key>disable_channelization</key> <value>False</value> </param> <param> <key>disable_drift_correction</key> <value>False</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(456, 332)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>lora_lora_receiver_0</value> </param> <param> <key>implicit</key> <value>False</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>reduced_rate</key> <value>False</value> </param> <param> <key>samp_rate</key> <value>1e6</value> </param> <param> <key>sf</key> <value>8</value> </param> </block> <block> <key>lora_message_socket_sink</key> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(696, 364)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>lora_message_socket_sink_0</value> </param> <param> <key>ip</key> <value>127.0.0.1</value> </param> <param> <key>layer</key> <value>1</value> </param> <param> <key>port</key> <value>40868</value> </param> </block> <block> <key>sdrplay_rsp2_source</key> <param> <key>agc_enabled</key> <value>False</value> </param> <param> <key>antenna</key> <value>'A'</value> </param> <param> <key>bw</key> <value>400</value> </param> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>dc_offset_mode</key> <value>True</value> </param> <param> <key>debug_enabled</key> <value>False</value> </param> <param> <key>device_serial</key> <value>'0'</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>_coordinate</key> <value>(72, 148)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>id</key> <value>sdrplay_rsp2_source_0</value> </param> <param> <key>if_atten_db</key> <value>30</value> </param> <param> <key>ifType</key> <value>0</value> </param> <param> <key>iq_balance_mode</key> <value>True</value> </param> <param> <key>lna_atten_step</key> <value>3</value> </param> <param> <key>lo_mode</key> <value>1</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> <key>rf_freq</key> <value>869.0e6</value> </param> <param> <key>sample_rate</key> <value>samp_rate</value> </param> </block> <block> <key>wxgui_fftsink2</key> <param> <key>avg_alpha</key> <value>0</value> </param> <param> <key>average</key> <value>True</value> </param> <param> <key>baseband_freq</key> <value>0</value> </param> <param> <key>alias</key> <value></value> </param> <param> <key>comment</key> <value></value> </param> <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> <key>fft_size</key> <value>1024</value> </param> <param> <key>freqvar</key> <value>None</value> </param> <param> <key>_coordinate</key> <value>(688, 108)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> <key>grid_pos</key> <value></value> </param> <param> <key>id</key> <value>wxgui_fftsink2_0</value> </param> <param> <key>notebook</key> <value></value> </param> <param> <key>peak_hold</key> <value>True</value> </param> <param> <key>ref_level</key> <value>0</value> </param> <param> <key>ref_scale</key> <value>2.0</value> </param> <param> <key>fft_rate</key> <value>15</value> </param> <param> <key>samp_rate</key> <value>samp_rate</value> </param> <param> <key>title</key> <value>FFT Plot</value> </param> <param> <key>type</key> <value>complex</value> </param> <param> <key>win_size</key> <value></value> </param> <param> <key>win</key> <value>None</value> </param> <param> <key>y_divs</key> <value>10</value> </param> <param> <key>y_per_div</key> <value>10</value> </param> </block> <connection> <source_block_id>lora_lora_receiver_0</source_block_id> <sink_block_id>lora_message_socket_sink_0</sink_block_id> <source_key>frames</source_key> <sink_key>in</sink_key> </connection> <connection> <source_block_id>sdrplay_rsp2_source_0</source_block_id> <sink_block_id>lora_lora_receiver_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>sdrplay_rsp2_source_0</source_block_id> <sink_block_id>wxgui_fftsink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> </flow_graph>
جميع التجارب الناجحة.