歐陽中輝,樊輝錦,陳青華,胡道暢
(海軍航空大學 岸防兵學院, 山東 煙臺 264001)
隨著裝備信息化建設的不斷推進,特種車輛的維修保障和管理信息化要求也不斷提高。車輛狀態(tài)信息作為表征車輛實時狀態(tài)的關(guān)鍵數(shù)據(jù),對車輛的維修保障提供了有效支撐。通過調(diào)研發(fā)現(xiàn),特種車輛常在特殊陸地、山區(qū)和海島執(zhí)行野外作戰(zhàn)(駐訓),當傳輸距離較遠時,車載通信電臺和天線的便攜性和可靠性極大下降,不能滿足車輛狀態(tài)遠程傳輸?shù)男枨?。另一方面,雖然目前絕大部分輪式特種車輛配備了北斗衛(wèi)星導航系統(tǒng),該系統(tǒng)具有獨特的短報文收發(fā)功能[1],但是,短報文服務主要用于簡單預置信息的傳遞,以常用的北斗SIM卡為例,單次報文長度僅為78.5 Byte,通信頻率為60 s/次,而且無通信回執(zhí)。通過北斗短報文進行車輛狀態(tài)信息傳輸時必須進行分包,極大的降低了傳輸?shù)膶崟r性和可靠性??傊?,現(xiàn)有車載通信方式與車輛狀態(tài)數(shù)據(jù)遠程傳輸需求之間的矛盾日益凸顯。
車輛狀態(tài)信息壓縮編碼屬于無損壓縮范疇,常用的算法有游程編碼RLE(run-length encoding)算法、字典編碼LZW(Lempel-Ziv-Welch)算法、Huffman編碼算法和算術(shù)編碼算法[2-3]等。通過研究發(fā)現(xiàn),游程編碼RLE壓縮效果的好壞決定于原數(shù)據(jù)串的結(jié)構(gòu),數(shù)據(jù)串中如果存在大量連續(xù)相同字符,將獲得很高的壓縮比[4]。LZW編碼對于重復率較高的信號壓縮效果好[5]。Huffman編碼和算術(shù)編碼屬于基于統(tǒng)計特性的編碼方法,計算復雜度高,主要應用于圖像和視頻信號壓縮[6-8]。車輛狀態(tài)信息極少存在連續(xù)相同的字符,且數(shù)據(jù)動態(tài)性較強,以上四種算法均無明顯優(yōu)勢。因此,為了在有限的報文長度范圍內(nèi)對車輛狀態(tài)信息數(shù)據(jù)進行壓縮傳輸,本文從特種車輛狀態(tài)信息編碼入手,設計了一種適用于北斗短報文傳輸?shù)膭討B(tài)索引碼表編碼方法。
車輛狀態(tài)信息進行壓縮傳輸時,為了避免直接傳輸信息造成的空間浪費,需要根據(jù)北斗短報文傳輸協(xié)議對信息進行編碼。
根據(jù)“北斗用戶機接口協(xié)議4.0“版[9-10]內(nèi)容,短報文信息傳輸格式如表 1所示,報文內(nèi)容最長217 Byte。針對不同車載北斗設備通信能力的不同,考慮到北斗三代報文長度升級以后的兼容性問題,取現(xiàn)有特種車輛中北斗收發(fā)機報文長度最短的78 Byte,即表1中通信申請指令下信息內(nèi)容的長度在本文中設定為78 Byte。
短報文空間劃分如表2所示,即對表 1中報文內(nèi)容的細化。具體字節(jié)空間分配策略如下:
表2 短報文空間分配表
1) 數(shù)據(jù)包編號。數(shù)據(jù)包編號長度為8 bit,主要用于短報文丟包時,數(shù)據(jù)中心根據(jù)數(shù)據(jù)包編號申請數(shù)據(jù)采集終端重傳數(shù)據(jù)。
2) 是否連續(xù)數(shù)據(jù)包。針對特殊情況,一次數(shù)據(jù)傳輸不能發(fā)送全部數(shù)據(jù)的情況,分配2 bit進行標識,00表示獨立幀,11表示連續(xù)幀,接收機做好接收后續(xù)數(shù)據(jù)的準備,出現(xiàn)01或者10時可識別為丟幀。
3) 特種車輛類型。根據(jù)車輛任務種類和使用者需求自行編碼,考慮到擴展性便于添加和刪除種類,采用6 bit描述特種車輛種類。例如,1型導彈發(fā)射車編為000001,2型步戰(zhàn)車編為100001,以此類推。
4) 設備終端編號。車載信息采集終端中的設備唯一標識碼UUID,表征設備合法性和唯一性,綁定車輛牌照和編號,分配16 bit。
5) 位置信息。位置信息包括精度、緯度和高度,由北斗導航系統(tǒng)獲得的位置信息編碼格式如表3所示,位置信息精度要求較高,根據(jù)協(xié)議中規(guī)定的報文格式,選取時間、經(jīng)度、緯度以及高度(H為高度數(shù)據(jù),ζH為高度異常值對高度數(shù)據(jù)進行誤差修正)作為要素進行發(fā)送,此幀格式將北斗授時的時間結(jié)合到數(shù)據(jù)包中,增加準確性。
表3 位置信息協(xié)議格式
6) 開機時長。以分鐘為單位,記錄采集設備連續(xù)開機時長,采集設備工作時長與發(fā)動機工作時長相關(guān),便于設備和車輛在定檢和修理計劃制定時參考,分配2個字節(jié)來表示,每次設備開機時將時間清零重計。
7) 車輛關(guān)鍵狀態(tài)信息。 車輛關(guān)鍵狀態(tài)信息主要包括車輛健康狀態(tài)(百分數(shù))和武器系統(tǒng)狀態(tài)信息等,最長為56 Byte,取45 Byte,預留11 Byte作為用戶自定義。
根據(jù)1.1中前1~6的字節(jié)空間分配結(jié)果,解決問題的關(guān)鍵是如何在后續(xù)56 Byte的空間限制條件下,一次盡可能多的傳遞車輛狀態(tài)信息。車輛關(guān)鍵狀態(tài)信息編碼如表 4,各項數(shù)據(jù)的值用兩個字節(jié)足夠完全表示,考慮到誤碼的情況,將只有0和1的數(shù)據(jù)項用全0和全1表示。如武器系統(tǒng)狀態(tài)用65535表示良好,0表示故障,溫度值用最高位標志正負,車輛整體健康狀態(tài)用百分數(shù)表示,根據(jù)車載PHM系統(tǒng)計算得出。
表4 特種車輛關(guān)鍵狀態(tài)信息編碼
車輛狀態(tài)信息中連續(xù)相同的字符出現(xiàn)概率較低,而較短時間間隔的前后兩次采集到的數(shù)據(jù)中部分不變化,將被多次重復傳輸。因此,基于短報文字節(jié)空間的分析,考慮簡單易實現(xiàn)及可靠性的要求,提出了動態(tài)索引碼表編碼方案。
該編碼方案只傳輸車輛關(guān)鍵狀態(tài)信息中變化的部分。這要求在車輛發(fā)送狀態(tài)信息時,標識哪些數(shù)據(jù)發(fā)生了變化,在傳輸車輛狀態(tài)信息之前,先傳輸索引碼表,標識哪些數(shù)據(jù)項發(fā)生了變化,再傳輸車輛狀態(tài)信息中時序上前后兩次發(fā)生變化的數(shù)據(jù)項。接收方數(shù)據(jù)中心通過索引碼表確定變化的數(shù)據(jù),并進行分析處理。
假設有一組數(shù)據(jù)如表5所示,表中所列為較前一次發(fā)生變化的數(shù)據(jù)項,索引碼表和車輛關(guān)鍵狀態(tài)信息數(shù)據(jù)映射關(guān)系實例,如圖1所示。
表5 特種車輛關(guān)鍵狀態(tài)信息實例數(shù)據(jù)
圖1 索引碼表和實際數(shù)據(jù)項映射關(guān)系示意圖
索引碼表的字節(jié)空間分配為5個字節(jié),共40位,最多一次可表征20項車輛狀態(tài)信息,基本滿足需求。從左起,首2位與第一項車輛狀態(tài)數(shù)據(jù)相關(guān)聯(lián),其后2位與第2項車輛狀態(tài)數(shù)據(jù)相關(guān),依次類推。與索引碼表的位對應,車輛狀態(tài)數(shù)據(jù)從左起,首2個字節(jié)表示第1項車輛狀態(tài)數(shù)據(jù)的低位字節(jié)和高位字節(jié),接著2個字節(jié)表示第2項車輛狀態(tài)數(shù)據(jù),依次類推。
因此,圖2所示的車輛狀態(tài)數(shù)據(jù)的索引碼表的5個字節(jié),由左到右分別是:0C、40、00、00和03。車輛狀態(tài)數(shù)據(jù)中的10個有變化的字節(jié)分別是:80,3C,00,23,08,34,00,35,E6和3F。經(jīng)過該方法壓縮后的編碼為
0C,40,00,00,03,80,3C,00,23,08,34,00,35,E6和3F
圖2 索引碼表示意圖
此時這條數(shù)據(jù)采用該模式后只需要15個字節(jié),來表示一次傳輸?shù)能囕v狀態(tài)信息數(shù)據(jù)。由于索引碼表固定需要5個字節(jié),假設項車輛數(shù)據(jù)都有,最大需要字節(jié)數(shù)為5+2β,最小需要字節(jié)為5+2。當β=10時,最大需要字節(jié)數(shù)為5+2β=25個字節(jié)。以此類推,當剛好等于20時,最大需要5+2β=45個字節(jié),未超出最大字節(jié)空間45 Byte。
在圖2所示實例的索引碼表中,從最左邊開始,每相鄰的2個位有4種狀態(tài):00、10、11和01,分別用S0、S1、S2和S3依次表示。若車輛狀態(tài)信息數(shù)據(jù)中包含很多兩次傳輸間不發(fā)生變化的字節(jié),即為0的字節(jié),相應地在索引碼表中也出現(xiàn)很多為0的位。
一般地,各車型一次發(fā)生變化的數(shù)據(jù)小于10種,即有(20-10)/20=50%以上概率是S0態(tài)。假設狀態(tài)出現(xiàn)概率從大到小的次序分別是:S0、S1、S2和S3。這種狀態(tài)出現(xiàn)概率不一樣的情況非常適合采用Huffman編碼。其方法是:S0 編碼為0,S1 編碼為10,S2 編碼為110,S3 編碼為111。
以圖2所示實例中的索引碼表為例,其狀態(tài)表為:S0、S0、S1、S1、S2、S0(25個)、S2和S0。按照Huffman編碼方法,其使用1×28+2×2+3×2=38 bit,而原索引碼表固定為40 bit,節(jié)省了2個字節(jié)。
但是字節(jié)空間的節(jié)約是以解碼端計算時間增加為代價的,在字節(jié)空間夠用的情況下,不建議采用Huffman編碼方案,增加時間開銷[11]。在用戶自定義編碼的方案下,索引碼表過長時可采用這種方法。
車輛狀態(tài)信息采集端是基于STM32的編解碼終端,連接北斗接收機收發(fā)報文,接收端數(shù)據(jù)中心采用中型工作站連接接收機進行報文收發(fā),計算處理能力較強,但并發(fā)性要求較高,其數(shù)據(jù)傳輸程序軟件設計一般流程如下:
1) 采集終端系統(tǒng)啟動,初始化數(shù)組,定義一個U8型數(shù)組Index[5]來記錄索引碼表;一個U8型數(shù)組Car_Info[40]存儲當前車輛關(guān)鍵狀態(tài)信息,Car_Info_Old[40]存儲上一次信息;根據(jù)不同信號的北斗接收機定義靜態(tài)SData作為發(fā)送緩沖區(qū),靜態(tài)RData作為接收緩沖區(qū)。
2) 將采集得到的數(shù)據(jù),賦值到Car_Info[40],準備比較。
3) 檢測是否開機第一次發(fā)送,是的話Index[5]置1,Car_Info_Old[40]置0,并跳轉(zhuǎn)到5。
4) 依次比較Car_Info[40]與Car_Info_Old[40]的數(shù)據(jù)內(nèi)容,有變化的將對應關(guān)聯(lián)位的Index[5]置1。
5) 根據(jù)上表1、2和4的數(shù)據(jù)格式,開始打包SData,封裝SData[0]~SData[11]數(shù)據(jù)包頭。
6) 在第一節(jié)的字節(jié)空間分配策略中,從SData[12]開始編寫,其中從12~33共22個字節(jié)的數(shù)據(jù)表示了電文內(nèi)容前6項指定值,從SData[34]開始索引碼表,共5個字節(jié),對應圖3進行封裝數(shù)據(jù)包。將Index[5]和Car_Info[40]對應需要發(fā)送的數(shù)據(jù)拼接,賦值到SData并發(fā)送。
7) 等待數(shù)據(jù)包接收到的回傳消息,并根據(jù)下次通信指令,循環(huán)到2)步。
圖3 報文幀格式和數(shù)組對應關(guān)系示意圖
為驗證上述壓縮傳輸?shù)姆椒?,使用兩臺BNTRE-320B北斗車載一體機進行試驗,測試環(huán)境如圖4所示。為保證試驗的可靠性和有效性,采用的北斗設備滿足指標要求:BD2/BD3上行為L頻段下行為S頻段,BD3全球短報文下行為L頻段,一次報文長度BD2為120漢字,BD3在RDSS服務區(qū)域不大于1 000個漢字,在僅具有全球短報文服務區(qū)域不大于40個漢字,誤碼率不大于10-5等其他需求[12]。在實驗中,兩臺北斗一體機的SIM卡報文權(quán)限相同,通信服務頻率為60 s/次。
圖4 測試環(huán)境搭建
數(shù)據(jù)傳輸中的時延通常使用往返時間來(Round-Trip Time,RTT)評估,RTT由鏈路的傳播時間、終端處理時間和緩沖區(qū)排隊時間三部分組成[13]?,F(xiàn)選取5組特種車輛執(zhí)行任務過程中產(chǎn)生的真實連續(xù)狀態(tài)信息進行數(shù)據(jù)上傳RTT測試,數(shù)據(jù)均為未經(jīng)過壓縮的原始數(shù)據(jù)。測試區(qū)域北斗衛(wèi)星信號良好,天氣良好。對原始數(shù)據(jù)和經(jīng)過編碼壓縮后的數(shù)據(jù)分別進行5次傳輸取平均值,并對結(jié)果進行分析。
表6中可看出:原始數(shù)據(jù)傳輸過程中由于漢字未編碼和壓縮需要進行分包傳輸,傳輸延遲嚴重,也產(chǎn)生了較為嚴重的丟包,平均丟包率在33.04%,平均時延在16.055 s,甚至出現(xiàn)一組數(shù)據(jù)的傳輸失敗。表7是利用通信用戶機編解碼終端對原始數(shù)據(jù)編碼并壓縮后進行的數(shù)據(jù)傳輸測試,平均丟包率在8.50%左右,平均時延在3.812 s,無傳輸失敗數(shù)據(jù)??芍?,原始數(shù)據(jù)的分包直接傳輸易導致數(shù)據(jù)不完整,一次傳輸數(shù)據(jù)量少時丟包數(shù)較少,驗證了編碼可以大大提高數(shù)據(jù)的傳輸效率。
表6 原始數(shù)據(jù)傳輸測試結(jié)果
表7 壓縮數(shù)據(jù)傳輸測試結(jié)果
表8是原始數(shù)據(jù)傳輸、Huffman編碼后傳輸、LZW算法傳輸、索引碼表方法壓縮后傳輸?shù)臏y試結(jié)果比較。壓縮率是數(shù)據(jù)壓縮的重要指標,表示數(shù)據(jù)的無損壓縮程度;傳輸出錯率是指經(jīng)過壓縮、傳輸、解壓后無法解析的數(shù)據(jù)占機載終端傳送數(shù)據(jù)的比例;傳輸丟包率是解壓后未接收到的數(shù)據(jù)總量占機載終端傳送數(shù)據(jù)的比例[13]。按照車載數(shù)據(jù)采集終端與傳輸標準要求,取3組特種車輛狀態(tài)數(shù)據(jù)作為測試數(shù)據(jù)源,將原始數(shù)據(jù)傳輸與3種壓縮后傳輸?shù)臄?shù)據(jù)結(jié)果進行比較。實驗重復操作100次,綜合各種環(huán)境條件(包括低溫、高溫、高海拔、異常位置等)取平均值??紤]到應用地點多為山區(qū)或海灘,其在接收北斗信號時數(shù)據(jù)質(zhì)量可能受到一定的影響,連續(xù)在多地進行測試[14-15]。
表8 數(shù)據(jù)壓縮測試結(jié)果
由表8可知,動態(tài)索引碼表編碼壓縮方式具有計算量少、壓縮效率較高的優(yōu)勢,適合車輛狀態(tài)信息在北斗短報文方式中進行數(shù)據(jù)傳輸。LZW算法在全局或局部相關(guān)性好的數(shù)據(jù)有較好的壓縮率,但由于車輛狀態(tài)信息數(shù)據(jù)字段之間相關(guān)性較小,使其壓縮效率相對索引碼表編碼算法并無優(yōu)勢。
為了進一步驗證數(shù)據(jù)壓縮方法,說明數(shù)據(jù)傳輸前后數(shù)據(jù)的完整性情況,本文對比了解壓數(shù)據(jù)與原始數(shù)據(jù)。本文車輛狀態(tài)信息中的車速數(shù)據(jù)為例,比較經(jīng)過編碼壓縮傳輸與原始數(shù)據(jù)的差異,讀取服務器收到的數(shù)據(jù)文件后進行解壓和反量化,實現(xiàn)數(shù)據(jù)對比。需要說明的是,所用的測試數(shù)據(jù)為某特種車輛從早上8∶00—10∶00執(zhí)行任務期間的車速數(shù)據(jù),采集周期為60 s,所產(chǎn)生的數(shù)據(jù)為117條(理論值應為120 條,存在3條錯誤、丟失以及沒有采集的數(shù)據(jù)樣本)。
從圖5可以看出:除極少速度數(shù)據(jù)由于編碼、傳輸?shù)仍蛟斐伤俣戎荡嬖谡`差外,大部分速度數(shù)據(jù)均與傳輸前保持一致。車載采集終端所發(fā)送的120條速度數(shù)據(jù)中,共有117條數(shù)據(jù)能夠準確解析,準確傳輸并解析的數(shù)據(jù)比例達97.50%,基本滿足實際應用要求。3條錯誤、丟失以及沒有采集的數(shù)據(jù)樣本中,丟失數(shù)據(jù)1條,丟包率占總量的0.008 3%,由于各種原因沒有采集數(shù)據(jù)為2條,占應采數(shù)據(jù)總量的0.016 7%。以速度數(shù)據(jù)為例驗證壓縮、傳輸算法的可用性試驗結(jié)果表明,該算法具有較高的效率以及傳輸完整性。
圖5 原始數(shù)據(jù)與壓縮傳輸并解壓后數(shù)據(jù)對比
設計了數(shù)據(jù)包幀格式,研究了采用索引碼表的方式對數(shù)據(jù)壓縮率和傳輸成功率的影響,給出了在采集端和數(shù)據(jù)接收端軟壓縮方法的實現(xiàn)流程,在有限短報文空間中傳輸具備一定特點的特種車輛關(guān)鍵狀態(tài)信息。實驗結(jié)果表明:在一般實驗環(huán)境下,準確傳輸并解析的數(shù)據(jù)比達97.50%,證明壓縮傳輸方法減小了數(shù)據(jù)包長度,提高了數(shù)據(jù)壓縮率和傳輸效率,該方法可為特種車輛關(guān)鍵狀態(tài)信息“全天候、全地域、全過程”的監(jiān)控管理提供支撐。下一步計劃采用北斗通信指揮機作為接收端模塊,配合“并發(fā)”數(shù)據(jù)采集與傳輸設備實現(xiàn)同時對多個特種車輛編隊進行狀態(tài)監(jiān)控。