Loraphy es una implementación completa de MATLAB de la capa física de Lora, que incluye modulación de banda base, demodulación de banda base, codificación y decodificación. Loraphy se organiza como un solo archivo LoRaPHY.m para facilitar el uso (copiarla y ejecutar en todas partes).
Este repositorio es la implementación del siguiente documento:
Zhenqiang Xu, Pengjin Xie, Shuai Tong, Jiliang Wang. Desde la demodulación hasta la decodificación: hacia la comprensión e implementación completa de Lora Phy. Transacciones ACM en Sensor Networks 2022. [PDF]
Se puede acceder a la implementación de SDR en tiempo real basada en la radio GNU a través de Gr-Lora.
MATLAB> = R2019B
Git Clone este repositorio o simplemente descargue LoRaPHY.m . Coloque su script de Matlab, por ejemplo, test.m , en el mismo directorio de LoRaPHY.m . A continuación se muestra un ejemplo que muestra cómo generar una señal Lora de banda base válida y luego extraer los datos con el decodificador. Ver más ejemplos en ejemplos de directorio. (Loraphy proporciona fast mode que permite la aceleración 10x en comparación con la demodulación normal con un poco de degradación de sensibilidad. Consulte ./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 );