Software Defined Radio - wie funktioniert es? Teil 7

Hallo Habr.

Im vorherigen Teil über die Übertragung an GNU Radio wurde die Frage gestellt, ob es möglich ist, das LoRa- Protokoll (Datenübertragung für Geräte mit geringem Stromverbrauch) mit SDR zu dekodieren. Dieses Thema erschien mir interessant, zumal das LoRa-Signal selbst ziemlich ungewöhnlich ist - die sogenannte Chirp-Spread-Spectrum-Modulation oder „Chirp-Modulation“.



Wie es funktioniert, weiter unter dem Schnitt.

Übrigens hätte die wörtliche Übersetzung der Chirp-Modulation wie "Tweet-Modulation" geklungen, aber das klingt völlig surreal. Deshalb möchte ich lieber das einfache Wort "Chirp" belassen (wie in den Kommentaren vorgeschlagen, wird dies auf Russisch als lineare Frequenzmodulation bezeichnet ).

LoRa-Modulation


Wie oben erwähnt, wird bei der Übertragung von LoRa ein von Semtech patentiertes Modulationsverfahren unter Verwendung von "Chirps" verwendet. Wenn jemand Implementierungsdetails mit Formeln möchte, können Sie das PDF auf der Semtech-Website oder hier lesen. Wenn es jedoch sehr unhöflich ist, ist ein „Zwitschern“ eine Frequenzänderung, und der Bitstrom wird mit solchen Änderungen codiert, wie in der obigen Abbildung gezeigt. Signalparameter in LoRa sind SF (Spreizfaktor - tatsächlich die Dauer eines "Chirps") und Bandbreite - Übertragungsbandbreite. Der SF-Parameter wird durch die vordefinierten SF7-Werte festgelegt - SF12, wobei 7 der schnellste und 12 der langsamste Modus ist (Sie können beispielsweise ein Bild mit einer Darstellung der verschiedenen Chirp-Geschwindigkeiten mit researchgate sehen ).

Je kürzer das „Zwitschern“ und je breiter das Band ist, desto höher ist natürlich die Übertragungsgeschwindigkeit. All dies ist durch eine Tabelle wie diese verbunden:



Unter dem Gesichtspunkt der Reichweite und der Störfestigkeit ist es vorteilhaft, langsam und traurig zu senden, aber erstens verlieren wir an Geschwindigkeit, zweitens verlieren wir an Zeit und gemäß den LoRa-Regeln kann das Gerät nicht mehr als 1% der Zeit senden, um andere nicht zu stören Geräte. Die Wahl der optimalen Übertragungsgeschwindigkeit für Geräte mit geringem Stromverbrauch ist daher ebenfalls keine leichte Aufgabe.

Mit einem allgemeinen Prinzip hoffe ich, dass es klar ist. Kommen wir nun zu SDR und Dekodierung.

Eisen


Zum Testen habe ich den LoRa Click RN2483 und den Arduino M0 verwendet, einfach weil sie verfügbar waren.



Dies ist ein ziemlich praktischer Formfaktor für das Prototyping Sie können die Platine problemlos durch eine andere ersetzen, ohne sie zu löten (in diesem als MikroBUS bezeichneten Format sind viele verschiedene Peripheriegeräte verfügbar).

Der Codeentwurf, der nicht vorgibt, eine Produktion zu sein, wurde unter dem Spoiler hinzugefügt. Der Wert "1234" wird als Test übergeben.

rn2483_tx.ino
// RN2483 Modem and LoRa Click test TX. Tested with Arduino M0 int reset = A2; int rts = 9; // CS int cts = 3; // INT // the setup routine runs once when you press reset: void setup() { Serial1.begin(57600); // Serial port to radio // output LED pin pinMode(LED_BUILTIN, OUTPUT); pinMode(cts, INPUT); pinMode(rts, OUTPUT); digitalWrite(rts, HIGH); // Reset rn2483 pinMode(reset, OUTPUT); digitalWrite(reset, LOW); delay(100); digitalWrite(reset, HIGH); delay(100); sendCommand("sys get ver\r\n"); sendCommand("sys get hweui\r\n"); sendCommand("mac pause\r\n"); sendCommand("radio set mod lora\r\n"); sendCommand("radio set pwr -3\r\n"); // the transceiver output power, from -3 to 15 sendCommand("radio set sf sf8\r\n"); // sf7..sf12, sf7 the fastest spreading factor but gives the shortest range // sendCommand("mac set dr 0\r\n"); // data rate: 0-4, 4 faster sendCommand("radio set freq 869100000\r\n"); // sendCommand("radio set afcbw 41.7\r\n"); sendCommand("radio set rxbw 125\r\n"); // sendCommand("radio set prlen 8\r\n"); sendCommand("radio set crc on\r\n"); // sendCommand("radio set iqi off\r\n"); sendCommand("radio set cr 4/8\r\n"); // sendCommand("radio set wdt 60000\r\n"); // disable for continuous reception // sendCommand("radio set sync 12\r\n"); sendCommand("radio set bw 125\r\n"); } void sendCommand(const char *cmd) { Serial1.print(cmd); String incoming = Serial1.readString(); // SerialUSB.print(cmd); // SerialUSB.println(incoming); } // the loop routine runs over and over again forever: void loop() { char data[64] = {0}; // hexadecimal value representing the data to be transmitted, from 0 to 255 bytes for LoRa modulation and from 0 to 64 bytes for FSK modulation. sprintf(data, "radio tx 1234\r\n"); sendCommand(data); if (msg_num > 10000) msg_num=0; digitalWrite(LED_BUILTIN, 1); delay(400); digitalWrite(LED_BUILTIN, 0); delay(600); } 

Übrigens beträgt die maximal deklarierte Übertragungsreichweite für RN2483 bis zu 15 km. In der Praxis verschwindet das Signal bei Vorhandensein eines einstöckigen Gebäudes bereits für 1 km und kann in städtischen "Ameisenhaufen" nicht mehr als 100 m betragen.

Wir starten das Modem und fahren mit der Dekodierung fort.

Dekodierung


In GNU Radio selbst gibt es keine LoRa-Unterstützung, daher müssen Sie Komponenten von Drittanbietern verwenden. Es gab nur zwei von ihnen, und leider zeigten beide Autoren keine Phantasie im Namen, und sie nannten sie genau gleich - gr-lora ( https://github.com/rpp0/gr-lora und https://github.com/ BastilleResearch / gr-lora ). Da GNU Radio nicht beide Komponenten gleichzeitig haben kann, überschreibt das Installationsprogramm einer Komponente leider die Dateien der anderen.

rpp0 / gr-lora

Sie können die Decoderquellen von github herunterladen , die Baugruppe ist Standard und verursacht keine Schwierigkeiten:

 git clone https://github.com/rpp0/gr-lora.git cd gr-lora mkdir build cd build cmake .. make && sudo make install && sudo ldconfig 

Nach der Installation erscheinen in GNU Radio zusätzliche Blöcke, aus denen sich ein Decoder leicht zusammenbauen lässt. Als Parameter des Decoders müssen Sie die Sendebandbreite, den Spreizfaktor, die Mittenfrequenz des SDR und die Empfangsfrequenz angeben.



Die Geräte in GNU Radio sind standardisiert, sodass jeder Empfänger wie RTL-SDR verwendet werden kann. Ich habe SDRPlay verwendet. Ein einfaches Python-Programm wurde verwendet, um Daten an die Konsole auszugeben.

udp_receive.py
 import socket UDP_IP = "127.0.0.1" UDP_PORT = 40868 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((UDP_IP, UDP_PORT)) sock.settimeout(0.5) while True: try: data, addr = sock.recvfrom(128) # buffer size is 1024 bytes print("Msg:", ' '.join('{:02x}'.format(x) for x in data)) except socket.timeout: pass 

Das Ergebnis der Arbeit ist in der Abbildung dargestellt.



Wie Sie sehen können, enthält die Zeile den Header und die Endblöcke der Übertragung, und in der Mitte sehen wir unsere Daten „1234“.

BastilleResearch / gr-lora

Dieses Modul ist insofern bemerkenswert, als es nicht nur beim Empfang, sondern auch beim Senden arbeiten kann. Die Installation ist ungefähr gleich: Die Komponente muss von der Quelle zusammengebaut werden.

 git clone git://github.com/BastilleResearch/gr-lora.git cd gr-lora mkdir build cd build cmake .. make && sudo make install && sudo ldconfig 

Das Verbindungsdiagramm für diesen Decoder ist in der Abbildung dargestellt.



Wie Sie sehen können, gibt es mehr Blöcke. Rotator und Polyphase Resampler wählen die gewünschte Frequenz aus und schneiden den Überschuss ab. Der Demodulator wandelt die „Chirps“ in einen Binärcode um (die Ausgabe ist eine Sequenz wie „17 00 3e 00 38 00 2f 00 01 00 39 00 2c 00 30 00 c6 00 18 00 7e 00 d5 00“ 85 00 e9 00 d8 00 67 00 c4 00 ”), und Decoder bildet das endgültige Paket.

Leider hat es nie richtig funktioniert. Die Dekodierung funktioniert definitiv, während das Modem arbeitet, werden die Daten angezeigt, aber die empfangenen Nachrichten haben nichts mit den übertragenen zu tun.



Ich habe den Grund nicht verstanden, entweder habe ich irgendwo einen Fehler in den Einstellungen gemacht oder dieser Decoder ist nur mit meinem eigenen Encoder kompatibel. Wer möchte, kann unabhängig mit dem Kanalmodell prüfen.

LoRaWAN


Wie Sie sehen können, wurde hier die untere physikalische Übertragungsschicht berücksichtigt. Im übergeordneten LoRaWAN-Protokoll wird eine weitere logische Schicht darüber gelegt - mit Verschlüsselung, Schlüsseln und anderen Diensten. Wer sehen möchte, wie die Codierung funktioniert, kann hier den Online-Decoder ausprobieren.

Übrigens, selbst wenn wir ein LoRaWAN-Signal über SDR empfangen, ohne dass Verschlüsselungsschlüssel vorhanden sind (von denen einer auf dem Server des Anbieters gespeichert ist), erkennen wir den Inhalt des Pakets immer noch nicht.

Fazit


Wie Sie sehen können, ist das Dekodieren von LoRa mit SDR durchaus möglich. Natürlich ist es kaum ratsam, ein echtes Gateway auf SDR-Basis zu erstellen - seine Empfindlichkeit ist schlechter als die Empfindlichkeit von "echten" Modems, die speziell für den Empfang schwacher Signale ausgelegt sind und über schmalbandigere Filter und LNA verfügen. Aber für Tests oder Forschung kann dies sehr interessant sein.

Für diejenigen, die es selbst ausprobieren möchten, sind die GNU Radio-Quell-Grc-Dateien unter dem Spoiler.

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> 


Alle erfolgreichen Experimente.

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


All Articles