Loraphie ist eine vollständige MATLAB -Implementierung der LORA -physikalischen Schicht, einschließlich Basisbandmodulation, Basisband -Demodulation, Codierung und Decodierung. Die Loraphie ist als einzelne Datei LoRaPHY.m organisiert, um sie zu benutzen (kopieren Sie sie und laufen Sie überall aus).
Dieses Repo ist die Implementierung des folgenden Papiers:
Zhenqiang Xu, Pengjin Xie, Shuai Tong, Jiliang Wang. Von der Demodulation bis zum Dekodieren: Auf dem Weg zu vollständigem Verständnis und Umsetzung von Lora Phy. ACM -Transaktionen auf Sensornetzwerken 2022. [PDF]
Auf die Echtzeit-SDR-Implementierung basierend auf GNU-Radio kann über GR-LORA zugegriffen werden.
MATLAB> = R2019B
Git klonen dieses Repo oder laden Sie einfach LoRaPHY.m herunter. Setzen Sie Ihr Matlab -Skript, z. B. test.m , in das gleiche Verzeichnis von LoRaPHY.m . Im Folgenden finden Sie ein Beispiel, das zeigt, wie ein gültiges Basisband -Lora -Signal generiert und dann die Daten mit dem Decoder extrahiert werden. Weitere Beispiele finden Sie in Verzeichnisbeispielen. (Loraphy bietet fast mode , der 10x beschleunigte, im Vergleich zur normalen Demodulation mit ein wenig Sensitivitätsverschlechterung. Siehe ./examples/test_fast_mode.m .)
% test.m
rf_freq = 470e6 ; % carrier frequency 470 MHz, used to correct clock drift
sf = 7 ; % spreading factor SF7
bw = 125e3 ; % bandwidth 125 kHz
fs = 1e6 ; % sampling rate 1 MHz
phy = LoRaPHY( rf_freq , sf , bw , fs );
phy.has_header = 1 ; % explicit header mode
phy.cr = 4 ; % code rate = 4/8 (1:4/5 2:4/6 3:4/7 4:4/8)
phy.crc = 1 ; % enable payload CRC checksum
phy.preamble_len = 8 ; % preamble: 8 basic upchirps
% Encode payload [1 2 3 4 5]
symbols = phy .encode(( 1 : 5 ) ' );
fprintf( " [encode] symbols:n " );
disp( symbols );
% Baseband Modulation
sig = phy .modulate( symbols );
% Demodulation
[ symbols_d , cfo , netid ] = phy .demodulate( sig );
fprintf( " [demodulate] symbols:n " );
disp( symbols_d );
% Decoding
[ data , checksum ] = phy .decode( symbols_d );
fprintf( " [decode] data:n " );
disp( data );
fprintf( " [decode] checksum:n " );
disp( checksum );