雷 芳 ,陳 博 ,呂京昭 ,李平安 ,杜海濤 ,粟 栗
(1.重慶郵電大學 通信與信息工程學院,重慶 400065;2.中國移動通信集團公司研究院,北京 100053)
近年來,智能設備的蜂擁而起,先后涌現了一系列的無線通信技術,被大規(guī)模應用于各個行業(yè)各種應用場景。其中,在廣域網通信技術中,LoRa 是一種前景比較好的低功耗廣域網(Low Power Wide Area Network,LPWAN)[1-3]技術,主要應用于具有低功耗、遠距離特點的應用場景,如智能抄表[4]、智慧農業(yè)[5]、智慧城市[6]等。
LoRa 技術是由美國Semtech 公司開發(fā)的一種擴頻技術,融合了數字擴頻、數字信號處理及前向糾錯編碼等技術[7]。與傳統(tǒng)擴頻技術相比,LoRa 技術增加了鏈路預算和對帶內干擾的抗干擾能力,擴大了無線通信鏈路的通信范圍[8]。在SX1280 技術手冊[9]以及文獻[10]中,給出了LoRa 數據包結構以及長度計算方法,并沒有給出物理層LoRa 數據包的調制解調算法、通信鏈路流程;僅有一些文獻提到LoRa 調制解調技術的原理及物理層收發(fā)端流程框圖[11-13]。在文獻[14]中,提到了一種LoRa 空口數據鎖相環(huán)的硬同步算法,但基本沒有文獻提出軟同步算法。
基于此,本文將結合官方的羅德儀表中的LoRa 調制技術和文獻中的資料對LoRa 物理層進行更詳細更完整的說明,提出一種高效的軟同步算法,并對羅德儀表生成的LoRa 空口數據實現解調。
根據羅德儀表LoRa 參數配置界面,可知數據包有顯示和隱式兩種報頭,顯示模式數據包結構如圖1 所示,隱式模式是關閉報頭。
圖1 LoRa 顯示模式(Explicit mode only)的數據包結構
在圖1 中,前導(Preamble)主要用于接收端同步,不加密,不添加糾錯編碼;報頭(Header)主要包含有效載荷信息(Payload)的字節(jié)數、前向糾錯碼的碼率(CR)以及Payload 是否添加CRC,Header 的糾錯碼率按照最大糾錯碼碼率CR 為4/8 添加;Payload CRC 部分采用循環(huán)冗余校驗碼。隱式模式在這些報頭承載參數信息都已知,直接在接收端配置已知參數,不需要通過解報頭來獲取這些信息。
Payload 主要承載要發(fā)送的信息,數據長度為1~255 B;Payload CRC 是給Payload 進行差錯檢驗,不添加糾錯編碼時占2 B。Payload 和Payload CRC 采用的加密方式以及添加糾錯編碼的碼率相同,有5 種碼率(CR∈{4/4,4/5,4/6,4/7,4/8})可選。
通過羅德儀表的LoRa 調制的參數配置接口和文獻[9]-[10],繪制LoRa 收發(fā)端流程如圖2 所示。在下文對羅德儀表采集的LoRa 空口數據進行去前導解調,發(fā)現Payload 部分解出的符號個數大于實際配置比特長度生成的符號個數。因此,除了上述這些比特數據的處理方式,還涉及Payload 部分數據的填充規(guī)則。
在圖2 中,報頭Header 和Payload 碼率可以不同,因此它們是分開添加糾錯碼。前導碼由n 個上掃頻信號(Upchirps 信號)、兩個同步碼以及2.25 個下掃頻信號(Downchirps 信號)三部分組成。
圖2 “LoRa 收發(fā)端”的流程圖
其中,根據羅德儀表德LoRa 調制界面的各個模塊功能作用分析,對Payload 部分比特流數據加密和提高魯棒性處理的順位依次為:是否添加CRC,是否開啟低速率優(yōu)化,是否添加糾錯編碼,是否打開交織器[15],白化、格雷碼;而在接收端Payload 數據的解調、解密和去冗余比特,其處理順序和發(fā)送端相反。
在LoRa 調制中白化是一種擾碼技術,是對單個比特進行的,防止出現連續(xù)的0 或1 導致信道功率分配不均,但LoRa 技術中沒有信道功率分布不均問題,這里作用主要是加密,白化和解白化的過程是一樣。
LoRa 調制技術的本質是一種線性頻率調制技術,對初始頻率的循環(huán)偏移點數攜帶需要傳遞的信息進行擴頻傳輸。將經過處理和填充的比特數據按擴頻因子NSF個比特封裝成1 個符號,將NSF個比特數據分割為個碼片進行擴頻傳輸。一個符號的LoRa 調制定義如下:
由式(1)可知,LoRa 調制信號的頻率隨時間變換的表達式f(n)為:
根據LoRa 調制的基本原理,由本地Upchirp 信號作為基本的調制信號,對初始頻點進行循環(huán)位移得到調制信號。在接收端應對先接收數據去載頻fc和濾波處理,得基帶LoRa 調制信號sm(n)′,在這里sm(n)′是在理想情況下,不包含噪聲n(t)的歸一化數據(與sm(n)相同);再與μ=-1、K=0 的Downchirp 信號進行相乘得sr(n)。
其中,N1、N2與式(1)中相同,n 為接收端采樣點的橫坐標。對sr(n)的個碼片的行向量進行離散快速傅里葉變化(Fast Fourier Transformation,FFT),可以得到1 個符號的頻譜y(n)。根據第p 個符號的頻譜y(n,p)的壓縮脈沖的最大模值的橫坐標n 乘以B 為頻率突變采樣點的位置,得第p 個符號的解調值為K(p)。
通過羅德儀表選擇LoRa 標準,配置相應的參數生成LoRa 調制數據包。為了下文數據包的Payload 部分LoRa 解調簡單化,更好地驗證文獻中提到的LoRa 解調算法和Payload 部分數據的加密特點,在參數配置選擇隱式模式,關閉可以配置數據編碼方式,B 設置為500 kHz,NSF設置為7,Payload 設置4 字節(jié)全1 數據,只有LoRa 調制的白化處理以及Payload 部分獨特的數據填充方式是儀表內部自動配置的。通過羅德儀表連續(xù)采集的40 ms數據的實部、虛部幅值以及模值波形如圖3 所示。
由于通過羅德儀表采集的空口數據噪聲很小,因此在圖3 中可以直接區(qū)分數據部分和噪聲部分;為了能截取到1 個完整LoRa 數據包,故在其明顯的數據大概的起始位置,向前多取20 個點。
圖3 羅德儀表生成40 ms 的LoRa 調制數據
利用LoRa 解調算法進行滑動解調,并觀察解調數據的FFT 頻譜圖判斷解調結果的正確性,直到發(fā)現解調值為8 個連續(xù)的0、兩個同步字,再接著使用Upchirp 信號反解為2 個0,可得LoRa 數據包的起點,并結合羅德儀表可視化界面可得該參數配置數據包的點數,截取出一個完整的幅值歸一化LoRa 數據包如圖4 所示,并標出了前導各部分的位置。
圖4 LoRa 數據包的時域圖
由于LoRa 調制是一種頻率調制技術,并且在傳遞消息時,1 個符號或相鄰會有頻率突變的地方,在羅德儀表抓取數據需對數據進行重采樣,會經過內部的低通濾波器,因此在圖4 的第3 子圖數據取模的幅度不是一個固定值,而是當頻率發(fā)生很大突變就會出現凹陷,當頻率發(fā)生幾個采樣點或者幾十個采樣點突變就出現一些小波動。
圖4 的第3 個子圖中,標出了前導3 個部分所處的采樣點數所在的區(qū)間,可以明顯發(fā)現,前8 個符號都是以高頻開始和高頻結束的;在羅德儀表參數配置時,數據包前導的8 個Upchirp 信號起始頻率為-B/2,以B/2結束,通過這一特點就很容易找到了LoRa 數據包的前導,也符合LoRa 官方文檔中提到的LoRa 前導的結構特點。
在3.1 節(jié)中,由于羅德儀表生成的空口數據噪聲很小,可以直接找到數據的大概位置,可以直接通過LoRa解調算法進行滑動解調,找到LoRa 數據包的精同步點,從而得到完整的Payload 部分。但在噪聲比較大的環(huán)境下,LoRa 信號被噪聲淹沒,不能直接找到大概的數據區(qū),如果使用滑動解調的方法進行同步,獲得Payload 部分,同步復雜度很高,需要的時長很長,該方法只適用于本文的特殊情況作驗證。
針對這個問題,在這里結合LoRa 數據包的前導特點,提出了一種高效的同步算法,按符號進行偏移解調,直到解調疑似前導的連續(xù)Upchirp 信號部分,再進行頻點偏移檢測同步碼,最后再檢測2 個Downchirp 信號。算法詳細過程如下:
(1)檢測LoRa 信號的到來,提供2 種方式:檢測信號強度(RSSI)進行判斷;檢測信號頻率突變邊緣。
(2)檢測LoRa 信號的前導:通過2.2 節(jié)的解調算法,持續(xù)解調信號直到出現3 個連續(xù)相同符號,并記錄解調值K,也就是整個符號的解調向后偏移了K 個點。
(3)檢測兩個同步字和兩個Downchirp 信號:由于在LoRa 數據包的Payload 部分,也可能存在連續(xù)3 個及以的相同的符號,因此在步驟(2)可能檢測到的是LoRa 數據包的前導碼或Payload 部分,前移K 個點,再繼續(xù)持續(xù)解調信號直到出現5 個連續(xù)符號為0、同步字1、同步字2,繼續(xù)解調使用Upchirp 信號進行反解得兩個連續(xù)的0,只需要這個5 個符號中有4 個符號解調正確,則同步成功,進入步驟(4)。若解調次數超過前導符號數,則繼續(xù)執(zhí)行步驟(1)和步驟(2)。
(4)對同步信號向后偏移0.25 個Downchirp 信號,得有效載荷Payload 部分。根據LoRa 調制配置的參數,可以計算出Payload 及Payload CRC 的長度,得到其進行編碼后的n 個符號。
將羅德儀表采集的空口數據直接經過上文提出同步算法,得Payload 部分的數據模值圖及對應數據的LoRa解調數據的時頻圖如圖5 所示。根據配置的參數,計算得Payload 部分為1 536 個采樣點12 個符號。
對從羅德儀表獲取的LoRa 空口數據經過去前導后,經過使用上文提到的LoRa 解調算法分別對剩余的Payload 部分進行解調,得12 個符號為:96、124、0、0、0、0、0、0、28、92、99、96。從圖5 可以直接觀察到,時頻圖(b)的每個符號內部頻率變化和模值圖(a)的凹陷以及波動的地方是一一對應,說明了解調結果是的正確,所以文獻中提供的解調算法沒有問題。
圖5 Payload 數據模值圖及對應的時頻圖
在羅德儀表LoRa 調制參數界面中,Payload 部分只配置4 字節(jié)32 bit 數據,而實際上解出了84 bit,明顯是對32 bit 數據填充了52 bit,從而對傳輸數據達到了提升魯棒性和加密的目的。在上文中,選擇從羅德儀表采集的LoRa 空口數據,主要有兩個原因:一個是由于羅德儀表的是官方提供的LoRa 仿真儀器;另一個是由于采集數據的噪聲比較小,數據部分和噪聲部分區(qū)分明顯,數據部分的時域模值波形的特征明顯,容易觀察解調的正誤。
在文獻[7]中,對LoRa 調制的7 種擴頻因子分別在高斯信道和多徑衰落下進行MATLAB 性能仿真,可以發(fā)現在誤碼率小于0.01 時,擴頻因子增加1,抗噪聲性能可以帶來3 dB 的增益。為了觀察LoRa 調制前向糾錯編碼位數對通信鏈路帶來的增益,在下文中,對LoRa 調制的不同糾錯碼率在在高斯信道進行了MATLAB 性能仿真。
由于官方沒有給出確切的前向糾錯編碼方式,而漢明碼糾錯碼要求2r-1≥n,r 是監(jiān)督位數,n 是編碼后的bit數。若采用漢明碼,其中糾錯編碼碼率為4/4、4/5、4/6就不滿足要求,因此在這里采用循環(huán)糾錯編碼。在圖6 性能仿真中給出了LoRa 擴頻因子為7、基帶帶寬為500 Hz調制的5 種碼率的仿真曲線。
圖6 LoRa 的SF7 不同碼率誤碼性能曲線圖
由圖6 可知,在LoRa 的前向糾錯編碼中,并不是循環(huán)糾錯碼位數越多對系統(tǒng)性能提升越大;在誤碼率小于0.01 時,碼率為4/5、4/6 或4/8,抗噪聲性能大約增加了1 dB;碼率為4/7,抗噪聲性能大約增加了2 dB。
在LoRa 調制技術中,除了添加糾錯編碼、增大擴頻因子,還可以配置Payload 部分低速率優(yōu)化來提高信息傳輸的魯棒性。在實際應用中,LoRa 技術傳輸對設備進行控制命令時,只要傳輸幾個比特信息,由于LoRa 傳輸是以符號為單位進行傳輸的,而且有預留空間,至少可以傳輸幾個字節(jié)的信息,因此在保證發(fā)送數據能同步的基礎上,無需通過增加發(fā)送數據包的長度來增加傳輸信息之間的碼距,進而提高信息傳輸的可靠性,如配置幾個比特表示1 bit 信息。
本文根據羅德儀表的LoRa 參數界面配置接口結合文獻提供通信鏈路流程,對LoRa 物理層進行了詳細說明;通過羅德儀表生成的LoRa 空口數據,對文獻提到的LoRa 調制解調算法進行驗證,完成了對該數據的解調;根據LoRa 數據包前導的特點,提出了一種高效的LoRa空口數據的同步算法;最后,通過LoRa 調制擴頻因子為7 時的5 種碼率的仿真,說明添加1 位糾錯碼的效果最佳。