王 寬,石馮磊,宮海波
(中國飛行試驗研究院,西安 710089)
武器系統(tǒng)的特性主要通過武器脈沖信號的幅度、極性、上升沿及下降沿曲線等信息進行表征。近年來,隨著航空武器系統(tǒng)的發(fā)展[1],武器脈沖信號的測試要求也越來越高[2-3]:如武器脈沖信號的通道數(shù)從之前的幾個增加到現(xiàn)在的32個,脈沖寬度從之前的微秒級縮減至納秒級,脈沖邊沿的時間分辨率不得超過100 ns。因此為了滿足系統(tǒng)的采集要求,信號的采樣率至少應(yīng)為20 MHz。若要對機上32路信號進行不間斷數(shù)據(jù)記錄方式,按一個飛行架次2 h計算,理論數(shù)據(jù)存儲容量為20 M×32路×3 600 s×2 h×2=9 000 GB,目前微型存儲設(shè)備的發(fā)展遠遠滿足不了該要求[4]。同時,理論數(shù)據(jù)傳輸速率為20 M×32路×16 bit=10 Gb/s,即數(shù)據(jù)總線帶寬要滿足10 Gb/s以上才能完成數(shù)據(jù)的正常記錄,而現(xiàn)有的總線無法滿足該帶寬的要求[5]。因此必須對采集數(shù)據(jù)進行實時壓縮才能滿足總線帶寬和數(shù)據(jù)存儲的要求。
目前,常用的壓縮技術(shù)分為無損壓縮與有損壓縮。為了確保壓縮后的數(shù)據(jù)不存在損失,可正?;謴?fù),需使用無損壓縮[6-7]。無損壓縮中應(yīng)用較為廣泛的有2種方案,分別是字典編碼和熵編碼方法[8]。常用的字典編碼算法有RLE、LZ77/78、LZSS、LZW等,其壓縮核心是使用信息碼元之間的相關(guān)性,為數(shù)據(jù)流中的碼元創(chuàng)建對應(yīng)的編碼字典,然后將數(shù)據(jù)流中的碼元用編碼來代替,從而實現(xiàn)數(shù)據(jù)的壓縮數(shù)據(jù)。常用的熵編碼法有霍夫曼編碼、算數(shù)編碼、香農(nóng)-范諾編碼,其壓縮的核心是將數(shù)據(jù)流中的字母用不同長度的比特代替[9-10],進而實現(xiàn)數(shù)據(jù)的壓縮。熵編碼法的復(fù)雜性主要集中在各符號的概率統(tǒng)計及概率樹生成,當(dāng)數(shù)據(jù)流中各符號的出現(xiàn)概率差別不大時,其可壓縮性差,會得到更大體積的壓縮數(shù)據(jù)[11];字典編碼算法的復(fù)雜性集中在符號串的比較上,其有較高的數(shù)據(jù)壓縮率,但計算復(fù)雜并不適合實時壓縮[12],文獻[6]采用改進行程編碼算法進行遙測數(shù)據(jù)的壓縮,其計算簡單可進行實時壓縮,但該算法壓縮效率低。
針對上述方法中存在的可壓縮性差及壓縮效率低的缺點,提出了基于數(shù)據(jù)重構(gòu)的自適應(yīng)間隔游程壓縮算法。該算法首先采用重構(gòu)技術(shù)將數(shù)據(jù)中的相同字節(jié)重構(gòu)成連續(xù)的數(shù)據(jù)塊,提高了數(shù)據(jù)的可壓縮性,然后提出了自適應(yīng)間隔游程編碼規(guī)則,通過引入連續(xù)字節(jié)標(biāo)志位,實現(xiàn)了壓縮方式隨數(shù)據(jù)特性的自適應(yīng),避免了數(shù)據(jù)的膨脹問題,同時通過引入游程長度和游程域長度標(biāo)志,對壓縮長度進行動態(tài)調(diào)整,實現(xiàn)了游程間隔的自適應(yīng)調(diào)整,進一步提高了數(shù)據(jù)的壓縮率,同時該算法計算量小,滿足嵌入式實時壓縮的需求。最后通過試驗表明該算法能夠?qū)?shù)據(jù)進行實時壓縮。
武器脈沖信號的波形如圖1所示。該信號中有用的信息包括:脈沖的幅值,上升沿曲線和下降沿曲線。為了保證信號采集的延時最小,必須采用AD連續(xù)轉(zhuǎn)換的方式進行信號采集。然而,由于AD轉(zhuǎn)換過程中存在噪聲干擾、量化誤差等因素,經(jīng)AD轉(zhuǎn)換后的碼值通常會有幾個值的差別,同時系統(tǒng)采用16位AD轉(zhuǎn)換,因此很難存在連續(xù)多個字節(jié)相同的情況,武器脈沖信號AD采樣數(shù)據(jù)如表1所示。
圖1 武器脈沖信號
表1 武器脈沖采集數(shù)據(jù)
由表1可見,采樣數(shù)據(jù)幾乎不存在兩個連續(xù)相同的字節(jié)。然而,當(dāng)數(shù)據(jù)流中存在大量連續(xù)相同字節(jié)時可以得到很好的壓縮比,當(dāng)數(shù)據(jù)流中沒有連續(xù)相同字節(jié)時,游程編碼不但無法進行壓縮,還會得到體積更大的壓縮數(shù)據(jù),因此為了實現(xiàn)武器脈沖采樣數(shù)據(jù)的壓縮,設(shè)計了基于數(shù)據(jù)重構(gòu)的自適應(yīng)間隔游程壓縮算法。
由第1節(jié)分析可知,由于實際模數(shù)轉(zhuǎn)換過程中存在量化誤差、噪聲干擾等因素,采集的數(shù)據(jù)基本不存在連續(xù)相同字節(jié)的情況,采用傳統(tǒng)的游程編碼壓縮后會得到體積更大的數(shù)據(jù),無法達到數(shù)據(jù)壓縮的目的,因此為了實現(xiàn)武器脈沖信號的可壓縮性,提出了武器脈沖信號重構(gòu)技術(shù)。
脈沖低電平的采樣數(shù)據(jù)如表1所示,可見每個數(shù)據(jù)的高字節(jié)都為0,低字節(jié)只有十幾個碼值的差別,其物理量約為幾個毫伏的差別,這些差別主要由量化誤差、噪聲干擾的引起。這些由干擾帶來的碼值的差別造成采樣數(shù)據(jù)中幾乎不存在連續(xù)相同的字節(jié),故而使數(shù)據(jù)不可壓縮。因此該算法采用低電平閾值數(shù)字濾波技術(shù)來濾除干擾信號。該電平閾值數(shù)字濾波技術(shù)的傳遞函數(shù)如式(1)所示:
(1)
式中,y為采樣存儲值;x為初始采樣值;X為閾值。
若AD轉(zhuǎn)換后的采樣值x小于閾值X,表明脈沖信號為 0 V,則將AD轉(zhuǎn)換后的碼值強制修改為0;如果AD轉(zhuǎn)換后的碼值大于閾值則認(rèn)為信號不為0 V,不對AD轉(zhuǎn)換后的碼值進行修改,保持真實轉(zhuǎn)換碼值。這樣即可完成閾值濾波,可以保證脈沖信號為低電平時,AD轉(zhuǎn)換后數(shù)據(jù)的高低字節(jié)均為0,以便對數(shù)據(jù)進行壓縮??梢?,低電平閾值濾波技術(shù)解決了脈沖低電平的可壓縮性問題,然而卻無法解決脈沖高電平的壓縮性問題。
由表1可知:無論是脈沖高電平還是脈沖低電平,每個數(shù)據(jù)的高字節(jié)在電平一定的情況下是保持不變的,僅低字節(jié)數(shù)據(jù)變化;同時結(jié)合脈沖信號的特性可知,當(dāng)信號電平不變化時,前后兩個數(shù)據(jù)僅低字節(jié)變化,高字節(jié)基本不變。
針對以上脈沖信號的特點,提出了武器脈沖信號采集重構(gòu)技術(shù),如圖2所示。將一個16位采集數(shù)據(jù)按照高低字節(jié)分裂開來,將所有數(shù)據(jù)的高字節(jié)重新組合成一個新的數(shù)據(jù)塊存儲,同時將所有數(shù)據(jù)的低字節(jié)重新組合成一個新的數(shù)據(jù)塊存儲,這樣一段完整的原始數(shù)據(jù)就分成高字節(jié)部分和低字節(jié)部分兩個區(qū)域。這樣當(dāng)脈沖電平不變時,高字節(jié)部分?jǐn)?shù)據(jù)保持不變,可進行數(shù)據(jù)壓縮。
圖2 數(shù)據(jù)重構(gòu)技術(shù)框圖
如圖2所示,將每一個數(shù)據(jù)按照高低字節(jié)分開存儲,這樣在脈沖電平一定的情況下,數(shù)據(jù)高字節(jié)存儲區(qū)域的字節(jié)是不變化的,可實現(xiàn)高字節(jié)存儲區(qū)域的數(shù)據(jù)可壓縮性。
為了解決傳統(tǒng)游程編碼壓縮后數(shù)據(jù)膨脹的問題,產(chǎn)生了很多改進算法,其中應(yīng)用比較多的是Apple公司提出的PackBits算法,其通過引入標(biāo)志位成功解決了壓縮膨脹問題。由于武器脈沖信號頻率低且采樣率高,因此會存在上百萬個字節(jié)相同的數(shù)據(jù)塊,這就要求行程長度需達到百萬級,而PackBits算法中的行程長度為127,所以其壓縮率并不是很高。為了進一步提高其壓縮率,提出了一種自適應(yīng)游程長度的編碼算法,其算法定義如表2所示,其具體屬性如表3所示。
表2 自適應(yīng)游程長度編碼協(xié)議
該算法在PackBits的基礎(chǔ)上增加了數(shù)據(jù)字節(jié)類型Type、校驗位Check和游程域長度Length-Number三個屬性。其中數(shù)據(jù)字節(jié)類型Type用以表示該數(shù)據(jù)域的內(nèi)容是數(shù)據(jù)的高字節(jié)還是低字節(jié);校驗位Check用以解碼校驗使用,每一個原始數(shù)據(jù)塊都會分配一個校驗值,該原始數(shù)據(jù)塊分裂成的高低字節(jié)數(shù)據(jù)塊會繼承該原始數(shù)據(jù)塊的校驗值,這樣若兩個高低字節(jié)數(shù)據(jù)塊的的校驗值相同,則說明這兩個數(shù)據(jù)塊能夠配對并可解碼出正確的原始數(shù)據(jù),若兩個高低字節(jié)數(shù)據(jù)塊的校驗值不同,則說明這兩個數(shù)據(jù)塊不能配對并進行解碼;若游程域長度Length-Number表示游程域的長度,因此游程域長度最少為1個字節(jié),最大為16個字節(jié)。
表3 協(xié)議屬性
本算法中Length-Number為2個bit,所以游程域的最大長度為4個字節(jié),因此本算法最大可以表示的數(shù)據(jù)大小為GB。若這4 GB的數(shù)據(jù)全部為低電平,則壓縮后的數(shù)據(jù)可表示為0x83、0xFF、0xFF、0xFF、0xFF、0x00、0xD3、0xFF、0xFF、0xFF、0xFF、0x00,可見4GB的低電平數(shù)據(jù)壓縮后可通過12個字節(jié)表示;若這4 GB的數(shù)據(jù)全部為高電平,則壓縮后的數(shù)據(jù)可表示為:高字節(jié)部分(6個字節(jié))+低字節(jié)(5個字節(jié)+231)。所以可得到該算法的壓縮率為
(2)
式中:x為總的字節(jié)數(shù)量;D為高電平字節(jié)數(shù)占總字節(jié)數(shù)的比率。
由于在實際試飛過程中總的字節(jié)數(shù)x遠遠大于23,所以該算法的壓縮率可表示為
(3)
即算法的壓縮率為高字節(jié)比率的一半。由于武器脈沖信號只有在執(zhí)行武器發(fā)射任務(wù)時才會產(chǎn)生,且每個脈沖的時間非常短,所以在一個2 h的飛行試驗中,武器脈沖的累計時間不會超過總時間的5%,所以該算法的理論壓縮率不會超過2.5%。
自適應(yīng)游程長度編碼的主要步驟:
1) 標(biāo)志位Indicator,校驗位Check,游程域長度Length-Number等位置初始化,并設(shè)置數(shù)據(jù)壓縮長度L。
2) 獲取字節(jié)B(k)(k=0),將其放置在數(shù)據(jù)域Data區(qū),同時將數(shù)據(jù)字節(jié)類型屬性按照數(shù)據(jù)重構(gòu)的結(jié)果賦值(高字節(jié)為0,低字節(jié)為1);
3) 獲取B(k+1)字節(jié),若B(k)與B(k+1)相同,則游程域Run Length加1,并將Indicator置1;若B(k)與B(k+1)不相同,則游程域Run Length加1,同時將B(k)也放置在數(shù)據(jù)Data區(qū),并將Indicator置0;
4) 判斷Indicator是否發(fā)生變化,若Indicator發(fā)生變化,則執(zhí)行步驟6);
5) Run Length若小于壓縮長度L,則執(zhí)行步驟3),若大于L,則執(zhí)行步驟6);
6) 根據(jù)Run Length的數(shù)值所占的字節(jié)長度確定Length-Number的數(shù)值,后將數(shù)據(jù)輸出,同時重復(fù)步驟2)。
該算法的壓縮流程如圖3所示。如圖3所示,系統(tǒng)的壓縮過程為首先對原始數(shù)據(jù)進行閾值判斷,若原始數(shù)據(jù)小于閾值認(rèn)為數(shù)據(jù)為脈沖低電平,若原始數(shù)據(jù)大于閾值認(rèn)為該數(shù)據(jù)為脈沖高電平,為了簡化壓縮規(guī)則,對高低電平進行單獨壓縮。若數(shù)據(jù)為脈沖高電平,此時不對數(shù)據(jù)進行閾值濾波,直接進行數(shù)據(jù)重組,若數(shù)據(jù)為脈沖低電平,則需要先對數(shù)據(jù)進行閾值濾波后再進行重組,最后應(yīng)用自適應(yīng)游程長度壓縮算法對數(shù)據(jù)進行壓縮。
圖3 壓縮流程框圖
以表1中20個數(shù)據(jù)為例進行數(shù)據(jù)壓縮。通過閾值判斷可知數(shù)據(jù)1到數(shù)據(jù)10為脈沖低電平數(shù)據(jù),數(shù)據(jù)11到數(shù)據(jù)20為脈沖高電平數(shù)據(jù),對原始數(shù)據(jù)進行重構(gòu),結(jié)果如表4所示。
表4 數(shù)據(jù)重構(gòu)結(jié)果
由表4可以看出:經(jīng)過閾值濾波后脈沖低電平數(shù)據(jù)高低字節(jié)全部變?yōu)?x00,而脈沖高電平數(shù)據(jù)不被影響,同時經(jīng)過數(shù)據(jù)重構(gòu)之后高字節(jié)數(shù)據(jù)塊和低字節(jié)數(shù)據(jù)塊均出現(xiàn)了連續(xù)相同字節(jié)區(qū)域,即數(shù)據(jù)具備了可壓縮特性。對表4數(shù)據(jù)進行壓縮,結(jié)果如下:
0x80、0x0A、0x00、0xC0、0x0A、0x00、0X84、0x0A、0xB3、0x44、0x0A、0x33、0x23、0x2F、0x37、0x30、0x2F、0x32、0x33、0x2D、0x2F
可見表1壓縮后的數(shù)據(jù)可由以上21個字節(jié)進行表示,可見該算法能夠?qū)?shù)據(jù)進行壓縮。同時,按照表3的協(xié)議可知高字節(jié)數(shù)據(jù)塊的前10個字節(jié)可通過0x80,0x0A,0x00這3個字節(jié)來表示,而這3個字節(jié)可最大可表示64 K的數(shù)據(jù),其壓縮率比較高。而實際應(yīng)用中,算法的壓縮率與武器高脈沖電平的比率有關(guān)。
為了進一步驗證算法的可行性和效率,分別基于文[6]中的改進行程編碼和本文的算法設(shè)計了實時壓縮模塊,如圖4所示。該模塊的功能為:接收數(shù)據(jù)采集系統(tǒng)發(fā)送的數(shù)據(jù),將其壓縮后發(fā)送出去。并搭建了如圖5所示的試驗系統(tǒng)。
圖4 武器脈沖數(shù)據(jù)實時壓縮模塊
試驗中采用高速信號采集器采集飛機武器系統(tǒng)的一路武器參數(shù)信號,隨后將采集到的數(shù)據(jù)分成3路,一路直接進入高速數(shù)據(jù)記錄系統(tǒng),一路進入改進行程編碼的實時壓縮模塊,最后一路進入本文的實時壓縮模塊,經(jīng)過數(shù)據(jù)壓縮后進入高速數(shù)據(jù)記錄系統(tǒng)。為了避免數(shù)據(jù)過大,試驗中在1 h內(nèi)做完整套武器系統(tǒng)發(fā)射的模擬流程,理論上產(chǎn)生的數(shù)據(jù)量約。試驗結(jié)果如表5所示。
圖5 試驗系統(tǒng)框圖
表5 采集數(shù)據(jù)壓縮結(jié)果
由表6可知:單路信號1 h將產(chǎn)生102 G的數(shù)據(jù)量,經(jīng)過改進行程編碼方法壓縮后產(chǎn)生4.4 G的數(shù)據(jù)量,壓縮效率為4.3%,本文方法壓縮后產(chǎn)生2.3 G的數(shù)據(jù)量,其壓縮率約為2.26%??梢姳疚奶岢龅膲嚎s算法能夠?qū)?shù)據(jù)進行壓縮,且壓縮效率較改進行程編碼有很大的提高。
目前,基于該壓縮算法的數(shù)據(jù)實時壓縮模塊已經(jīng)應(yīng)用于飛行試驗中,飛行試驗中武器參數(shù)采集記錄設(shè)備采用PCIE總線進行數(shù)據(jù)傳輸其速率為1 Gb/s,數(shù)據(jù)記錄介質(zhì)的容量為500 GB,而經(jīng)過該壓縮算法后可得到理論數(shù)據(jù)的傳輸速率為20 M×32路×16 bit×2.26%=231.424 Mb/s,理論數(shù)據(jù)存儲容量為20 M×32路×3 600 s×2 h×2×2.26%=203.4 GB,可見經(jīng)過該算法壓縮后滿足嵌入式存儲設(shè)備的性能范圍。
本文通過對武器脈沖信號的特性進行分析,提出了一種基于數(shù)據(jù)重構(gòu)的自適應(yīng)間隔游程壓縮算法,采用閾值濾波技術(shù)和數(shù)據(jù)重組技術(shù)實現(xiàn)了武器系統(tǒng)脈沖數(shù)據(jù)的可壓縮性,同時設(shè)計了自適應(yīng)游程長度編碼協(xié)議,大大提高了數(shù)據(jù)的壓縮效率。該算法編碼規(guī)則簡單,能夠滿足邊采集邊壓縮的要求,可應(yīng)用于嵌入式采集系統(tǒng)中。試驗結(jié)果表明該算法的壓縮效率高達2.26%,滿足嵌入式存儲設(shè)備的性能范圍,且該算法已經(jīng)成功應(yīng)用于試飛測試系統(tǒng)中,滿足武器系統(tǒng)試飛數(shù)據(jù)的采集壓縮需求。