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