摘要:隨著測(cè)試參數(shù)種類增加,測(cè)試環(huán)境越來(lái)越復(fù)雜,海量雷達(dá)數(shù)據(jù)與有限存儲(chǔ)容量之間的矛盾日益明顯,實(shí)時(shí)數(shù)據(jù)采集與壓縮技術(shù)可以緩解這一矛盾的加劇。雷達(dá)數(shù)據(jù)采集系統(tǒng)采取了基于FPGA的LZW實(shí)時(shí)無(wú)損壓縮算法。該算法能夠?qū)崿F(xiàn)追求采集信號(hào)精度的同時(shí)減低算法難度,已成功應(yīng)用于某飛行測(cè)試實(shí)驗(yàn),性能指標(biāo)滿足應(yīng)用要求。
多頻連續(xù)波雷達(dá)是一種新體制雷達(dá),能夠同時(shí)發(fā)射多個(gè)頻率的連續(xù)波正弦信號(hào)對(duì)多個(gè)目標(biāo)的速度、加速度、距離、方位角、俯仰角等多組參數(shù)目標(biāo)進(jìn)行探測(cè)。具有設(shè)備簡(jiǎn)單、體積小、重量輕、功耗低等優(yōu)點(diǎn)[1]。
對(duì)于連續(xù)波體制雷達(dá),目標(biāo)參數(shù)多、信號(hào)處理的實(shí)時(shí)性強(qiáng)是其最顯著的特點(diǎn)。海量的回波數(shù)據(jù)使得存儲(chǔ)操作變得非常困難,并且也不易進(jìn)行數(shù)據(jù)分析。數(shù)據(jù)的實(shí)時(shí)采集壓縮技術(shù)可以解決這一問(wèn)題。由于雷達(dá)信號(hào)較為敏感,在大多數(shù)情況下雷達(dá)信號(hào)都需要先記錄,再事后取證、分析,所以只能采用實(shí)時(shí)無(wú)損壓縮。因此,要求多頻連續(xù)波雷達(dá)數(shù)據(jù)采集系統(tǒng)信號(hào)處理實(shí)時(shí)性好,處理數(shù)據(jù)量大,在追求目標(biāo)采集測(cè)量精度的同時(shí)降低信號(hào)處理算法的復(fù)雜度,利于工程實(shí)現(xiàn)。
當(dāng)前有很多壓縮與解壓縮方法都是基于軟件實(shí)現(xiàn)的,都是對(duì)數(shù)據(jù)進(jìn)行后期處理。這種方法執(zhí)行速度慢,耗費(fèi)大量的CPU資源。采用硬件實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)無(wú)損壓縮能夠?qū)⒏咚傩盘?hào)變成緩變信號(hào)進(jìn)行傳輸,降低通信的信道容量,提高數(shù)據(jù)的可靠性。在雷達(dá)信號(hào)數(shù)據(jù)采集系統(tǒng)中,完成數(shù)據(jù)的海量存儲(chǔ)并提高總線的數(shù)據(jù)傳輸速度應(yīng)采用硬件實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)無(wú)損壓縮。
1 數(shù)據(jù)壓縮算法比較
數(shù)據(jù)壓縮算法有不同的分類方法,根據(jù)壓縮算法是否可逆可以分為可逆壓縮與不可逆壓縮。其中可逆壓縮也叫無(wú)失真編碼或無(wú)損壓縮。不可逆壓縮叫做失真編碼或有損壓縮。由于人的感覺(jué)器官對(duì)于圖片、聲音或視頻中的某些信息的丟失難以察覺(jué),一般采用有損壓縮算法可以節(jié)約大量的存儲(chǔ)空間。主要有預(yù)測(cè)編碼、多分辨率編碼、分型圖形編碼等。無(wú)損壓縮算法主要有哈夫曼編碼、算術(shù)編碼、游程編碼和LZ編碼等[2]。其中哈夫曼編碼與算術(shù)編碼均根據(jù)源數(shù)據(jù)發(fā)生的概率進(jìn)行編碼,需要對(duì)壓縮數(shù)據(jù)進(jìn)行統(tǒng)計(jì),處理過(guò)程緩慢,實(shí)時(shí)性差;游程編碼只有在字符連續(xù)出現(xiàn)4次以上才能獲得比較好的壓縮效果,不適用于壓縮雷達(dá)回波信號(hào)。LZ編碼是基于字典的模式,用單個(gè)代碼代替字符串,數(shù)據(jù)流式輸入,對(duì)數(shù)據(jù)源無(wú)分塊要求,實(shí)時(shí)效果好,解壓完全可逆。LZ編碼包括LZ77、LZ78和LZW(Lempel-Ziv-Welch Encoding)。本文根據(jù)雷達(dá)回波數(shù)據(jù)的壓縮要求選用LZW無(wú)損壓縮算法。
2 雷達(dá)數(shù)據(jù)采集系統(tǒng)硬件實(shí)現(xiàn)
本文介紹的多頻連續(xù)波雷達(dá)數(shù)據(jù)采集系統(tǒng)中16路模擬信號(hào)經(jīng)過(guò)放大、跟隨、濾波處理后經(jīng)高速模擬電子開(kāi)關(guān)進(jìn)入高速ADC,輸出16bit數(shù)字量。數(shù)字量的緩存與處理由采集處理模塊中的采集控制邏輯(FPGA)實(shí)現(xiàn)。壓縮后的數(shù)據(jù)在主控模塊的控制下經(jīng)高速系統(tǒng)總線寫入數(shù)據(jù)存儲(chǔ)模塊中的存儲(chǔ)器陣列。原理框圖如圖1所示。
3 基于FPGA的LZW算法設(shè)計(jì)
3.1 LZW數(shù)據(jù)壓縮算法
LZW數(shù)據(jù)壓縮算法是一種新穎的壓縮方法,具有實(shí)時(shí)性,壓縮效率高,可對(duì)不同的數(shù)據(jù)流進(jìn)行自適應(yīng)壓縮,對(duì)于緩變、重復(fù)性高的數(shù)據(jù)流,隨著數(shù)據(jù)量的增大, 壓縮效率能顯著提高。LZW算法有三個(gè)重要的對(duì)象:數(shù)據(jù)流(CharStream)、編碼流(CodeStream)和編譯表(String Table)。在編碼時(shí),數(shù)據(jù)流是輸入對(duì)象,編碼流是輸出對(duì)象。數(shù)據(jù)流是指被壓縮數(shù)據(jù),編碼流是指壓縮后輸出的代碼流,編譯表存儲(chǔ)的是數(shù)據(jù)的索引號(hào),相同塊的數(shù)據(jù)只輸出第一塊的索引號(hào),從而實(shí)現(xiàn)數(shù)據(jù)的壓縮。
LZW壓縮算法的基本原理是提取出待壓縮數(shù)據(jù)中的不同字符,基于這些字符創(chuàng)建一個(gè)編譯表,然后用編譯表中的字符索引替代原始數(shù)據(jù)中的相應(yīng)字符,從而減少原始數(shù)據(jù)的大小。其中編譯表不是事先創(chuàng)建好的,而是根據(jù)原始文件數(shù)據(jù)動(dòng)態(tài)創(chuàng)建的。
LZW壓縮算法的基本思想是建立一個(gè)串表,將輸入字符串映射成定長(zhǎng)的碼字輸出,通常碼長(zhǎng)設(shè)置為12bit,也可設(shè)置為15bit或者18bit。串表具有“前綴性”:假設(shè)任何一個(gè)字符串P和某一個(gè)字符S組成一個(gè)字符串PS,若PS在串表中,則S為P的擴(kuò)展,P為S的前綴。字符串表是動(dòng)態(tài)生成的,編碼前先將其初始化,使其包含所有的單字符串。在壓縮過(guò)程中,串表中不斷產(chǎn)生壓縮信息的新字符串,存儲(chǔ)新字符串時(shí)也保存新字符串PS的前綴P相對(duì)應(yīng)的碼字。在解壓縮過(guò)程中,解碼器可根據(jù)編碼字恢復(fù)出同樣的字符串表,解出編碼數(shù)據(jù)流[3-4]。
3.2 FPGA模塊化設(shè)計(jì)
FPGA具有運(yùn)行速率快,邏輯資源豐富,片內(nèi)RAM資源豐富,通用性好等特點(diǎn)。用FPGA實(shí)現(xiàn)LZW算法需要解決以下幾個(gè)關(guān)鍵問(wèn)題[5-6]:(1)字典的生成。通常采用FPGA片內(nèi)存儲(chǔ)單元生成RAM;(2)字典的維護(hù)與更新:在壓縮過(guò)程中,對(duì)于一個(gè)新的字符串要在對(duì)字典進(jìn)行查找后,根據(jù)字典中是否已經(jīng)存在來(lái)決定是否更新字典,這一過(guò)程必須利用FPGA片內(nèi)邏輯單元完成,因而過(guò)于復(fù)雜的字典需要耗費(fèi)大量邏輯單元,不宜采用FPGA模塊化設(shè)計(jì);(3)壓縮編碼流的處理:由于壓縮算法改變了原始數(shù)據(jù)的編碼格式,需要在壓縮過(guò)程中添加一些標(biāo)識(shí)符,使得在解壓縮過(guò)程中能夠完全還原原始數(shù)據(jù)。并且在壓縮編碼輸出數(shù)據(jù)時(shí),需要根據(jù)存儲(chǔ)器件或傳輸總線的數(shù)據(jù)位寬度進(jìn)行重新編碼。
在雷達(dá)信號(hào)的采集系統(tǒng)中,信號(hào)采集與處理的控制時(shí)序是保證數(shù)據(jù)正確傳輸?shù)年P(guān)鍵。大多數(shù)雷達(dá)數(shù)據(jù)的信號(hào)處理都采用流水線的數(shù)據(jù)處理方式,如圖2所示。
雷達(dá)數(shù)據(jù)通過(guò)采集系統(tǒng)的高速A/D采集進(jìn)入到存儲(chǔ)模塊時(shí)需要向控制器件發(fā)出中斷信號(hào),再將數(shù)據(jù)寫入到存儲(chǔ)器中等待信號(hào)處理模塊對(duì)雷達(dá)數(shù)據(jù)進(jìn)行分析、壓縮處理[7]。這種發(fā)出中斷信號(hào)的流水線采集方式由于受到采集數(shù)據(jù)周期長(zhǎng)的限制,不利于數(shù)據(jù)的實(shí)時(shí)壓縮,必然導(dǎo)致數(shù)據(jù)總線實(shí)時(shí)傳輸速率的降低,不能滿足待采集信號(hào)量日益增大的要求。
為節(jié)約FPGA的I/O引腳,縮小系統(tǒng)體積,本文所設(shè)計(jì)的采集系統(tǒng)首先將高速ADC轉(zhuǎn)換后的16bit數(shù)字量分高8bit和低8bit寫入FPGA內(nèi)的數(shù)據(jù)緩存模塊,時(shí)序控制模塊完成將緩存數(shù)據(jù)依次送入LZW算法模塊及各模塊之間的時(shí)序控制操作,壓縮后的數(shù)據(jù)再經(jīng)過(guò)數(shù)據(jù)寬度轉(zhuǎn)化模塊寫入到系統(tǒng)總線。
由于本系統(tǒng)需要大量的片內(nèi)的Block RAM構(gòu)成數(shù)據(jù)緩存模塊和字典存儲(chǔ)模塊,因此采用Xilinx公司的Virtex-E系列的XCV400E,該器件具有豐富的RAM資源,共有40個(gè)Block RAM,每個(gè)Block RAM存儲(chǔ)容量為4096bit。Block RAM可以用作FPGA片上和片外緩沖的FIFO,高速并行訪問(wèn)的緩沖存儲(chǔ)器和總線寬度轉(zhuǎn)換器等。設(shè)計(jì)選用的是雙口RAM,每個(gè)端口都有獨(dú)立的控制信號(hào),并且每個(gè)端口的數(shù)據(jù)總線寬度可以獨(dú)立配置。在本文設(shè)計(jì)的采集系統(tǒng)中數(shù)據(jù)緩存模塊及數(shù)據(jù)寬度轉(zhuǎn)換模塊選用雙口RAM,對(duì)于字典存儲(chǔ)模塊選用單口RAM構(gòu)成。FPGA片內(nèi)集成功能模塊如圖3所示。
由圖3可知,F(xiàn)PGA主控邏輯內(nèi)部主要有以下四個(gè)模塊。
(1)輸入緩存模塊:該模塊由FPGA片內(nèi)集成的2個(gè)高速FIFO構(gòu)成,數(shù)據(jù)采用循環(huán)寫入方式,最大限度地實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)處理。
(2)時(shí)序控制模塊:完成對(duì)數(shù)據(jù)緩存模塊的讀寫操作和為其他模塊提供時(shí)序控制信號(hào)。
(3)壓縮算法實(shí)現(xiàn)模塊:實(shí)現(xiàn)字典的初始化,字符串查找、判斷、更新,輸入數(shù)據(jù)流的編碼,輸出代碼生成等功能;
(4)字典存儲(chǔ)模塊:用于存放字典數(shù)據(jù)信息。
在字典存儲(chǔ)模塊中選用20片Block RAM并聯(lián)構(gòu)成20bit數(shù)據(jù)寬度、4K深度的字典存儲(chǔ)區(qū)。每個(gè)存儲(chǔ)區(qū)存放20bit寬度字符,包含兩部分:頭部為12bit的前綴字符P,尾部為8bit的當(dāng)前字符S。輸出為12bit編碼。
(5)數(shù)據(jù)寬度轉(zhuǎn)換模塊:將壓縮后的12bit編碼數(shù)據(jù)轉(zhuǎn)換為與系統(tǒng)背板總線對(duì)應(yīng)的16bit數(shù)據(jù)寬度。
設(shè)計(jì)中采用把4個(gè)雙口RAM并行連接構(gòu)成16bit數(shù)據(jù)寬度、1K深度的高速FIFO。壓縮后的12bit輸出碼流經(jīng)過(guò)數(shù)據(jù)寬度轉(zhuǎn)換模塊組合成16bit數(shù)據(jù)寫入系統(tǒng)總線。
3.3 LZW算法工作流程
本文所設(shè)計(jì)的采集系統(tǒng)借鑒了流水線采集方式狀態(tài)機(jī)實(shí)現(xiàn)簡(jiǎn)單的優(yōu)點(diǎn),算法采用VHDL語(yǔ)言實(shí)現(xiàn)有限狀態(tài)機(jī),壓縮算法流程如圖4所示。
狀態(tài)機(jī)首先完成初始化過(guò)程,物理地址000H~0FFH分別存放對(duì)應(yīng)的0~255。初始化完成后,狀態(tài)機(jī)進(jìn)入壓縮編碼循環(huán),讀入當(dāng)前字符,若該字符與字典中的某個(gè)字符匹配,再讀入下一字符;若不匹配,把該字符加入到當(dāng)前字符串中,輸出前綴的字典指針到輸出碼流。反復(fù)執(zhí)行該過(guò)程,直到編碼結(jié)束。
以字符串流97,24,1,97,24,232,1,255,97,24,232,46……為例,表1給出LZW壓縮算法的處理過(guò)程。輸出碼流為061,018,061,100,0E8,001,0FF,0E8……,其中字典指針及輸出碼流均以16進(jìn)制表示。
3.4 測(cè)試結(jié)果分析
本文設(shè)計(jì)的多頻連續(xù)波雷達(dá)數(shù)據(jù)采集系統(tǒng)中的控制邏輯采用Xilinx公司的Virtex-E系列FPGA器件XCV400E,系統(tǒng)時(shí)鐘頻率100MHz,分別選取三種不同類型的雷達(dá)數(shù)據(jù)幀進(jìn)行壓縮算法測(cè)試,如表2所示。其中數(shù)據(jù)幀1為1MB的雷達(dá)視頻回波文本文件數(shù)據(jù),雜波信號(hào)較多;數(shù)據(jù)幀2為5MB的雷達(dá)視頻回波文本文件數(shù)據(jù),雜波信號(hào)較少;數(shù)據(jù)幀3為10MB的二進(jìn)制雷達(dá)數(shù)據(jù)。
由測(cè)試結(jié)果可以看出,LZW算法對(duì)于雜波信號(hào)較少的緩變雷達(dá)回波信號(hào)的壓縮效果最好。對(duì)于雜波較多的數(shù)據(jù)實(shí)現(xiàn)無(wú)損壓縮可進(jìn)一步對(duì)LZW算法進(jìn)行優(yōu)化。例如固化初始化過(guò)程,可以節(jié)約壓縮時(shí)間和簡(jiǎn)化控制時(shí)序;或是對(duì)于出現(xiàn)頻率高的字符,記憶其字典指針及出現(xiàn)位置,不必每次都從字典的起始處開(kāi)始查,簡(jiǎn)化算法的復(fù)雜度。
本文介紹了基于FPGA的LZW算法在雷達(dá)回波信號(hào)壓縮中的應(yīng)用,利用FPGA內(nèi)部豐富的Block RAM資源,在片內(nèi)集成高速數(shù)據(jù)緩存及字典存儲(chǔ)模塊實(shí)現(xiàn)對(duì)海量雷達(dá)數(shù)據(jù)的實(shí)時(shí)采集、壓縮處理。算法通過(guò)采用VHDL語(yǔ)言有限狀態(tài)機(jī)實(shí)現(xiàn),可移植性強(qiáng),并可在線升級(jí)。該算法已成功應(yīng)用于某飛行測(cè)試實(shí)驗(yàn)中。
參考文獻(xiàn)
[1] 戴奉周,馮維婷,沈福民.數(shù)字多頻連續(xù)波雷達(dá)信號(hào)處理中的關(guān)鍵算法[J].雷達(dá)科學(xué)與技術(shù),2005,6(3):177-180.
[2] SALOMOND.數(shù)據(jù)壓縮原理與應(yīng)用[M].吳樂(lè)南,等,譯.北京:電子工業(yè)出版社,2003.
[3] 藍(lán)波,林小竹,籍俊偉.一種改進(jìn)的LZW算法在圖像編碼中的應(yīng)用[J].計(jì)算機(jī)工程與科學(xué),2006,28(6):55-57.
[4] 郭曉巖,郝永勝. LZW無(wú)損壓縮算法在計(jì)算機(jī)取證中的應(yīng)用研究[J].測(cè)控技術(shù),2006,25(11):64-67.
[5] LONMB,LEEJF,JANGE. A lossless data compression anddecompression algorithm and its hardware architecture[J].IEEE Trans,VLSI. 2006,14(9):925-935.
[6] 陳晉敏,黃春明,周軍. 激光雷達(dá)數(shù)據(jù)無(wú)損壓縮的FPGA實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2007,15(1):100-102.
[7] 尹志勇,焦新泉,任勇峰.雷達(dá)視頻回波信號(hào)實(shí)時(shí)采集、壓縮轉(zhuǎn)發(fā)裝置[J].計(jì)算機(jī)測(cè)量與控制,2010,18(2):479-481.
作者:劉鑫 任勇峰 來(lái)源:《電子技術(shù)應(yīng)用》2011年第8期