李可寒 ,楊俊峰 ,宋克柱
(1.中國(guó)科學(xué)技術(shù)大學(xué)核探測(cè)與核電子學(xué)國(guó)家重點(diǎn)實(shí)驗(yàn)室,合肥,230026;2.中國(guó)科學(xué)技術(shù)大學(xué)近代物理系,合肥,230026)
地震勘探是當(dāng)前油氣勘探中一種應(yīng)用廣泛的方法[1],它對(duì)數(shù)據(jù)采集系統(tǒng)的要求有多通道、高精度、數(shù)據(jù)量大和實(shí)時(shí)處理等[2]。數(shù)據(jù)采集系統(tǒng)在采集到地震數(shù)據(jù)之后,將采集的數(shù)據(jù)匯聚至控制與紀(jì)錄模塊供以后數(shù)據(jù)分析使用?;诘卣鹂碧綌?shù)據(jù)采集系統(tǒng)的實(shí)時(shí)、多通道等要求,數(shù)據(jù)采集系統(tǒng)需要實(shí)時(shí)采集和傳輸大量數(shù)據(jù)。
在已有的地震數(shù)據(jù)采集系統(tǒng)中,通常使用拖纜中長(zhǎng)度為100 m 的傳輸線進(jìn)行數(shù)據(jù)傳輸。由于傳輸距離較長(zhǎng),如果傳輸速率過(guò)快將導(dǎo)致誤碼率增高。因此,在傳輸線質(zhì)量無(wú)法提升的情況下,可以使用數(shù)據(jù)壓縮來(lái)降低需要的傳輸速率,從而降低數(shù)據(jù)傳輸?shù)恼`碼率,同時(shí)也能降低系統(tǒng)的功耗。
現(xiàn)有的地震數(shù)據(jù)壓縮算法[3-4]利用地震波的物理特征采用小波變換、Dreamlet 變換等方式能夠起到很好的壓縮效果。但這些算法的計(jì)算過(guò)程較復(fù)雜,而且需要輸入整個(gè)地震數(shù)據(jù)文件才能完成壓縮,很難用于基于現(xiàn)場(chǎng)可編程門陣列(Field programmable gate array,FPGA)的實(shí)時(shí)采集處理系統(tǒng),因此需要一種針對(duì)地震數(shù)據(jù)流的壓縮算法。
現(xiàn)有的地震數(shù)據(jù)流壓縮算法[5]是一種針對(duì)數(shù)據(jù)流的無(wú)損壓縮算法,根據(jù)地震數(shù)據(jù)的數(shù)值將3 字節(jié)的數(shù)據(jù)壓縮至1~4 字節(jié),是一種熵編碼。
本文考慮地震波的物理特征,同時(shí)使用熵編碼,實(shí)現(xiàn)了一種針對(duì)地震數(shù)據(jù)流的無(wú)損壓縮算法。
海上地震數(shù)據(jù)采集系統(tǒng)[6-7]分為水下部分和水上部分。水下部分包括采集和傳輸數(shù)據(jù)的拖纜,系統(tǒng)可以有多條拖纜;水上部分包括數(shù)據(jù)處理機(jī)箱和室內(nèi)控制顯示工作站,數(shù)據(jù)處理機(jī)箱負(fù)責(zé)轉(zhuǎn)發(fā)控制命令和匯總拖纜數(shù)據(jù)。由于水下部分的傳輸距離更長(zhǎng),因此數(shù)據(jù)傳輸?shù)钠款i主要在水下部分。
地震數(shù)據(jù)采集系統(tǒng)支持若干條拖纜,其中單條水下拖纜的結(jié)構(gòu)如圖1 所示。每段拖纜長(zhǎng)100 m,里面包含16 個(gè)傳感器,道間距為6.25 m,采用24 位的ADC,最大采樣率為2 ksps,最大要求支持150 段拖纜。兩段拖纜之間由傳輸節(jié)點(diǎn)相連,每一個(gè)傳輸節(jié)點(diǎn)除了負(fù)責(zé)收集本級(jí)采集數(shù)據(jù)和狀態(tài)數(shù)據(jù)外,還負(fù)責(zé)接收后級(jí)傳輸節(jié)點(diǎn)數(shù)據(jù)并轉(zhuǎn)發(fā)。根據(jù)系統(tǒng)結(jié)構(gòu),越往前級(jí)數(shù)據(jù)量越大,其中滿負(fù)荷情況下首節(jié)點(diǎn)的凈數(shù)據(jù)量可以達(dá)到150×16×24×2 000=115.2 (Mb/s)。如果考慮協(xié)議開銷,首節(jié)點(diǎn)需要的傳輸速率則會(huì)更大。
圖1 水下拖纜整體結(jié)構(gòu)Fig.1 Integral structure of underwater towline
當(dāng)拖纜段數(shù)增加時(shí),首節(jié)點(diǎn)需要更大的傳輸速率。為了控制誤碼率,可以考慮對(duì)地震數(shù)據(jù)進(jìn)行壓縮,減少需要傳輸?shù)臄?shù)據(jù)量。另外,傳輸速率的減小能夠降低單個(gè)節(jié)點(diǎn)的功耗,從而使系統(tǒng)能夠支持更多段拖纜。
現(xiàn)有的大部分地震數(shù)據(jù)壓縮算法針對(duì)的是一個(gè)地震數(shù)據(jù)文件,用于減小地震數(shù)據(jù)占用的存儲(chǔ)空間,無(wú)法在數(shù)據(jù)采集的時(shí)候使用以提高傳輸效率?,F(xiàn)有的地震數(shù)據(jù)流壓縮算法[5]針對(duì)的是單個(gè)地震數(shù)據(jù),利用地震數(shù)據(jù)的分布特征,將3 字節(jié)的地震數(shù)據(jù)壓縮至1~4 字節(jié)。該算法沒(méi)有考慮數(shù)據(jù)之間的相關(guān)性,故而壓縮性能有待提升。
本文將根據(jù)地震數(shù)據(jù)的時(shí)空特征,同時(shí)借鑒語(yǔ)音壓縮算法,提出一種易于用FPGA 實(shí)現(xiàn)的24 位地震數(shù)據(jù)流無(wú)損壓縮算法。
任意兩段拖纜之間由一個(gè)傳輸節(jié)點(diǎn)相連,每個(gè)傳輸節(jié)點(diǎn)負(fù)責(zé)收集附近16 個(gè)傳感器采集到的地震數(shù)據(jù)。為了提高壓縮效果,傳輸節(jié)點(diǎn)通常需要緩存若干個(gè)采樣時(shí)刻的數(shù)據(jù)。圖2 為隨機(jī)截取的連續(xù)16 個(gè)通道、16 個(gè)采樣時(shí)刻的地震數(shù)據(jù),即為待壓縮的數(shù)據(jù)。
從圖2 可以看出,待壓縮的16×16 地震數(shù)據(jù)具有如下特點(diǎn):(1)傳感器的數(shù)值隨采樣時(shí)刻的變化不大;(2)傳感器的數(shù)值隨傳感器號(hào)的變化不可預(yù)知。
圖2 地震數(shù)據(jù)Fig.2 Seismic data
傳感器收集的是地震波數(shù)據(jù),地震波本質(zhì)上是機(jī)械波,理想情況下應(yīng)該是一個(gè)類正弦波信號(hào)。激發(fā)人工地震波的震源頻率約為幾十赫茲,而傳感器的采樣周期通常為毫秒量級(jí)(對(duì)應(yīng)頻率為千赫茲量級(jí)),即采樣頻率遠(yuǎn)大于振動(dòng)頻率。因此,在不長(zhǎng)的時(shí)間里,某一個(gè)傳感器的數(shù)值不會(huì)有太大的變化。而在同一時(shí)刻,相鄰傳感器采集的數(shù)據(jù)可能相近,也可能相差很大,這取決于地層結(jié)構(gòu)。由于地層結(jié)構(gòu)無(wú)法預(yù)知,所以很難事先得知同時(shí)刻不同傳感器數(shù)據(jù)之間的關(guān)系。
因此,本文中的壓縮主要考慮針對(duì)同一個(gè)傳感器在若干個(gè)采樣時(shí)刻的地震數(shù)據(jù),這樣的數(shù)據(jù)類似于機(jī)械波(聲波),故可以借鑒語(yǔ)音壓縮的相關(guān)算法。
對(duì)地震數(shù)據(jù)的壓縮可以借鑒語(yǔ)音壓縮,一種常見的語(yǔ)音壓縮算法分為預(yù)測(cè)編碼和熵編碼兩步,其過(guò)程如圖3 所示。
圖3 語(yǔ)音壓縮過(guò)程Fig.3 Process of speech compression
預(yù)測(cè)編碼是根據(jù)離散信號(hào)之間存在著一定關(guān)聯(lián)性的特點(diǎn),利用前一個(gè)或多個(gè)信號(hào)預(yù)測(cè)下一個(gè)信號(hào),然后對(duì)實(shí)際值和預(yù)測(cè)值的差(預(yù)測(cè)誤差)進(jìn)行編碼。如果預(yù)測(cè)比較準(zhǔn)確,誤差就會(huì)很小。在同等精度要求的條件下,就可以用比較少的比特進(jìn)行編碼,達(dá)到壓縮數(shù)據(jù)的目的。
常見的預(yù)測(cè)編碼有線性預(yù)測(cè)編碼,即現(xiàn)在值可用若干個(gè)過(guò)去值的加權(quán)線性組合來(lái)逼近,加權(quán)系數(shù)即為預(yù)測(cè)系數(shù),預(yù)測(cè)值為
為使線性預(yù)測(cè)誤差
最小,可以根據(jù)實(shí)際采樣值讓線性預(yù)測(cè)誤差的平方達(dá)到最小值,從而確定最佳預(yù)測(cè)系數(shù)。
由于線性預(yù)測(cè)編碼比較復(fù)雜,尤其是預(yù)測(cè)系數(shù)的計(jì)算在硬件上實(shí)現(xiàn)起來(lái)難度很大,因此考慮一種更加簡(jiǎn)單的線性預(yù)測(cè)編碼,即差分編碼。
對(duì)于原始數(shù)據(jù)X1,X2,…,Xn,一階差分編碼為X1,X2-X1,…,Xn-Xn-1,一階差分編碼是預(yù)測(cè)階數(shù)p=1,預(yù)測(cè)系數(shù)A1=1 的線性預(yù)測(cè)編碼。預(yù)測(cè)值=Xn-1,即估計(jì)后一個(gè)數(shù)據(jù)和前一個(gè)數(shù)據(jù)差不多。
二階差分編碼為X1,X2-X1,X3-2X2+X1,…,Xn-2Xn-1+Xn-2,二階差分編碼是預(yù)測(cè)階數(shù)p=2,預(yù)測(cè)系數(shù)A1=2,A2=-1 的線性預(yù)測(cè)編碼。預(yù)測(cè)值=2Xn-1-Xn-2,即用前兩個(gè)點(diǎn)擬合一次函數(shù),并預(yù)測(cè)下一個(gè)點(diǎn)會(huì)出現(xiàn)在該直線上。
以此類推,可得高階差分編碼。
差分編碼只需要作若干次減法,易于硬件上的實(shí)現(xiàn)。
由于地震數(shù)據(jù)及其各階導(dǎo)數(shù)隨時(shí)間的變化不是很明顯,因此地震數(shù)據(jù)在差分編碼之后,其絕對(duì)值將變得很小(相比原來(lái)的數(shù)據(jù))?,F(xiàn)在就要想辦法用較少的比特來(lái)存儲(chǔ)這些絕對(duì)值很小的數(shù)據(jù)。
熵編碼又稱為統(tǒng)計(jì)編碼,是根據(jù)消息出現(xiàn)概率的分布特性而進(jìn)行的無(wú)損數(shù)據(jù)壓縮編碼(差分編碼之后,絕對(duì)值小的數(shù)據(jù)出現(xiàn)的概率更大)。
2.4.1 指數(shù)哥倫布編碼[8]
指數(shù)哥倫布編碼刪去了數(shù)據(jù)高位多余的0(負(fù)數(shù)刪去多余的1),并添加上若干位的標(biāo)記位。表示非負(fù)整數(shù)N的k階指數(shù)哥倫布編碼生成方法如下:
(1)將N用二進(jìn)制碼表示,去掉低位的k個(gè)比特,然后加1;
(2)計(jì)算留下的比特?cái)?shù),將此數(shù)減1,并記作m;
(3)將第(1)步中去掉的k個(gè)比特補(bǔ)回串尾,并在串頭添加m個(gè)0。
例如,對(duì)1 階指數(shù)哥倫布編碼,0 到13 的編碼如下:
0——0000——10
1——0001——11
2——0010——0100
3——0011——0101
4——0100——0110
5——0101——0111
6——0110——001000
7——0111——001001
8——1000——001010
9——1001——001011
10——1010——001100
11——1011——001101
12——1100——001110
13——1101——001111
由此可見,如果數(shù)據(jù)出現(xiàn)小幅度的概率比出現(xiàn)大幅度的概率大,則通過(guò)指數(shù)哥倫布編碼可以較好地壓縮數(shù)據(jù)。但如果數(shù)據(jù)不滿足上述特征,則壓縮后的數(shù)據(jù)可能會(huì)比原來(lái)更大。
k階指數(shù)哥倫布編碼包含m位的0 + 1 位的1 + (m+k)位的數(shù)據(jù),若要解碼,對(duì)于某串k階指數(shù)哥倫布編碼的數(shù)據(jù),先計(jì)算數(shù)據(jù)頭部0 的個(gè)數(shù),并記作m;則除去這m個(gè)0,該數(shù)據(jù)的有效位數(shù)為m+k+1,將該數(shù)據(jù)減去2k,即可得到指數(shù)哥倫布編碼數(shù)據(jù)的解碼,即原始數(shù)據(jù)。
由編碼和解碼的過(guò)程可知,解碼能過(guò)完全恢復(fù)出編碼之前的數(shù)據(jù),不會(huì)損失數(shù)據(jù)的精度,因此指數(shù)哥倫布編碼能夠?qū)崿F(xiàn)無(wú)損壓縮。
單個(gè)數(shù)據(jù)的指數(shù)哥倫布編碼很容易用硬件實(shí)現(xiàn),然而要壓縮的數(shù)據(jù)往往有很多個(gè),在指數(shù)哥倫布編碼之后通常要將這些數(shù)據(jù)拼接起來(lái)。由于這些數(shù)據(jù)往往不是整數(shù)字節(jié),而且長(zhǎng)度不一,這會(huì)導(dǎo)致數(shù)據(jù)的拼接需要消耗大量的邏輯資源。因此,指數(shù)哥倫布編碼并不是熵編碼的最佳選擇。
2.4.2 整數(shù)字節(jié)熵編碼
指數(shù)哥倫布編碼之后的數(shù)據(jù)不是整數(shù)字節(jié),而且長(zhǎng)度也不確定,這給后續(xù)處理帶來(lái)了很大的麻煩,下面考慮一種將差分編碼后的數(shù)據(jù)壓縮成整數(shù)個(gè)字節(jié)的熵編碼。
對(duì)于24 bit 地震數(shù)據(jù),一階差分后的數(shù)據(jù)可用25 bit 表示,其大小位于[-16 777 216 , 16 777 215]區(qū)間,并且差分?jǐn)?shù)據(jù)中的大多數(shù)數(shù)據(jù)數(shù)值都很小,因此可按照如下方式[5]壓縮數(shù)據(jù):
(1)如果差分?jǐn)?shù)據(jù)位于[-64 , 63]區(qū)間,可用1 個(gè)字節(jié)A[7:0]表示該數(shù)據(jù)。A[6]為差分?jǐn)?shù)據(jù)的符號(hào)位,A[7]=0,A[6:0]為差分?jǐn)?shù)據(jù)的有效值。
(2)如果差分?jǐn)?shù)據(jù)位于 [-8 192 , 8 191]區(qū)間,可用2 個(gè)字節(jié)B[15:0]表示該數(shù)據(jù)。B[13]為差分?jǐn)?shù)據(jù)的符號(hào)位,B[15:14]=10,B[13:0]為差分?jǐn)?shù)據(jù)的有效值。
(3)如果差分?jǐn)?shù)據(jù)位于[-1 048 576 , 1 048 575]區(qū)間,可用3 個(gè)字節(jié)C[23:0]表示該數(shù)據(jù)。C[20]為差分?jǐn)?shù)據(jù)的符號(hào)位,C[23:21]=110,C[20:0]為差分?jǐn)?shù)據(jù)的有效值。
(4)無(wú)論如何,可用 4 個(gè)字節(jié) D[31:0]表示該數(shù)據(jù)。D[24]為差分?jǐn)?shù)據(jù)的符號(hào)位,D[31:25]=1 110 000,D[24:0]為差分?jǐn)?shù)據(jù)的絕對(duì)值。
以上方法簡(jiǎn)單易實(shí)現(xiàn),可將25bit 差分?jǐn)?shù)據(jù)壓縮為1~4 字節(jié)的數(shù)據(jù)。
由于壓縮后的數(shù)據(jù)由若干個(gè)字節(jié)組成,因此如要解壓,首先要判斷哪幾個(gè)字節(jié)(1 到4 字節(jié))對(duì)應(yīng)一個(gè)差分?jǐn)?shù)據(jù)。首先從緩存區(qū)中讀取一個(gè)字節(jié)的數(shù)據(jù)A[7:0],如果A[6]=0,該數(shù)據(jù)為1 個(gè)字節(jié);如果A[6:5]=10,該數(shù)據(jù)為 2 個(gè)字節(jié);如果 A[6:4]=110,該數(shù)據(jù)為 3 個(gè)字節(jié);如果 A[6:4]=111,該數(shù)據(jù)為 4 個(gè)字節(jié)。
先通過(guò)以上方法將差分后的數(shù)據(jù)分離出來(lái),轉(zhuǎn)換成25 bit 的數(shù)據(jù);再進(jìn)行差分逆變換,得到24 bit 的原始地震數(shù)據(jù)。
由編碼和解碼的過(guò)程可知,解碼能過(guò)完全恢復(fù)出編碼之前的數(shù)據(jù),不會(huì)損失數(shù)據(jù)的精度,因此整數(shù)字節(jié)熵編碼能夠?qū)崿F(xiàn)無(wú)損壓縮。
如果地震數(shù)據(jù)不是24 bit,或者采用的差分編碼不是一階差分編碼,也可以使用類似的整數(shù)字節(jié)熵編碼。
為了減少傳輸節(jié)點(diǎn)需要上傳的數(shù)據(jù)量,可以利用傳輸節(jié)點(diǎn)中的FPGA 對(duì)采集到的24 位地震數(shù)據(jù)進(jìn)行壓縮;當(dāng)壓縮后的數(shù)據(jù)到達(dá)船上時(shí),再利用數(shù)據(jù)處理機(jī)箱中的FPGA 對(duì)數(shù)據(jù)解壓。每個(gè)傳輸節(jié)點(diǎn)只負(fù)責(zé)壓縮附近16 個(gè)傳感器的地震數(shù)據(jù)。
因?yàn)閷?duì)FPGA 的功耗有一定的要求,所以很難使用比較復(fù)雜的壓縮算法。本文實(shí)現(xiàn)了一種用一階差分編碼和整數(shù)字節(jié)熵編碼來(lái)完成地震數(shù)據(jù)壓縮的算法。
使用一階差分編碼和整數(shù)字節(jié)熵編碼來(lái)完成地震數(shù)據(jù)的壓縮。在每一個(gè)采樣周期內(nèi),需要輸入24 bit 數(shù)據(jù),然后輸出1~4 字節(jié)的數(shù)據(jù)。數(shù)據(jù)壓縮模塊的輸入輸出端口如圖4 所示。
數(shù)據(jù)的輸入和輸出均使用AXI-Stream 接口。輸入的數(shù)據(jù)是24 bit 的地震數(shù)據(jù),i_last 表示某一次壓縮的最后一個(gè)數(shù)據(jù);輸出的數(shù)據(jù)是壓縮后的數(shù)據(jù),壓縮后的數(shù)據(jù)以8 bit 為單位,o_last 表示壓縮后數(shù)據(jù)的最后一個(gè)字節(jié)。數(shù)據(jù)壓縮過(guò)程分差分編碼和熵編碼兩步來(lái)實(shí)現(xiàn)。
3.1.1 差分編碼
差分編碼由一個(gè)24 位寄存器和一個(gè)24 位減法器實(shí)現(xiàn),寄存器保存上一個(gè)數(shù)據(jù),減法器利用當(dāng)前輸入的數(shù)據(jù)減去上一個(gè)數(shù)據(jù)得到差分?jǐn)?shù)據(jù),如圖5 所示。圖中:i_last 控制寄存器的清零(當(dāng)最后一個(gè)數(shù)據(jù)到來(lái)時(shí));i_valid 和i_ready 控制寄存器的使能端(僅i_valid 和i_ready 都有效時(shí)才進(jìn)行差分編碼)。
圖4 數(shù)據(jù)壓縮模塊Fig.4 Module of data compression
圖5 差分編碼器Fig.5 Differential encoder
3.1.2 熵編碼
整數(shù)字節(jié)熵編碼可用一個(gè)組合邏輯電路來(lái)實(shí)現(xiàn),輸入25 位數(shù)據(jù)data_dif 和有效的字節(jié)數(shù)byte_cnt,輸 出 4 字 節(jié) 數(shù) 據(jù) data_out(1~4 字 節(jié) 有效),Verilog 代碼如圖 6 所示。
有效的字節(jié)數(shù)byte_cnt 可根據(jù)輸入數(shù)據(jù)data_dif 高位多余的 0(負(fù)數(shù)為 1)得到。
在熵編碼之后,需要將熵編碼器輸出的數(shù)據(jù)data_out[31:0]從 o_data[7:0]端口輸出,根據(jù) byte_cnt 的不同需要 1~4 個(gè)時(shí)鐘周期。在輸出完成之前,將i_ready 拉低,暫時(shí)停止前級(jí)的輸入,直到輸出結(jié)束才將i_ready 拉高。
圖6 整數(shù)字節(jié)熵編碼器的Verilog 實(shí)現(xiàn)Fig.6 Verilog implementation of integer byte entropy encoder
數(shù)據(jù)解壓在船上數(shù)據(jù)處理機(jī)箱中的FPGA 上進(jìn)行。數(shù)據(jù)解壓模塊也是使用AXI-Stream 接口,輸入8 bit 壓縮數(shù)據(jù),輸出24 bit 地震數(shù)據(jù)。數(shù)據(jù)解壓過(guò)程分反熵編碼和反差分編碼兩步。
3.2.1 反熵編碼
反熵編碼的第1 步是根據(jù)每個(gè)壓縮數(shù)據(jù)的第一個(gè)字節(jié)來(lái)判斷該數(shù)據(jù)占用了幾個(gè)字節(jié),然后將這幾個(gè)字節(jié)的數(shù)據(jù)當(dāng)作反熵編碼器的輸入,并開始解析下一個(gè)數(shù)據(jù),該過(guò)程可以通過(guò)一個(gè)狀態(tài)機(jī)來(lái)實(shí)現(xiàn)。
反熵編碼器則可以通過(guò)一個(gè)簡(jiǎn)單的組合邏輯電路實(shí)現(xiàn),輸入4 字節(jié)數(shù)據(jù)data_in(1~4 字節(jié)有效)和有效的字節(jié)數(shù)byte_cnt,輸出25 bit 數(shù)據(jù)data_dif,Verilog 代碼如圖 7 所示。
有效的字節(jié)數(shù)byte_cnt 通過(guò)反熵編碼第一步的狀態(tài)機(jī)得到。
3.2.2 反差分編碼
類似于差分編碼,反差分編碼可用一個(gè)25 位寄存器和一個(gè)25 位加法器實(shí)現(xiàn),寄存器保存之前所有數(shù)據(jù)的和值(即上一個(gè)原始數(shù)據(jù)),加法器將當(dāng)前差分?jǐn)?shù)據(jù)和上一個(gè)原始數(shù)據(jù)相加得到當(dāng)前原始數(shù)據(jù),如圖8 所示。圖中:i_last 控制寄存器的清零(當(dāng)最后一個(gè)數(shù)據(jù)到來(lái)時(shí));i_valid 控制寄存器的使能端(僅i_valid 有效時(shí)才進(jìn)行反差分編碼)。
圖7 反熵編碼器的Verilog 實(shí)現(xiàn)Fig.7 Verilog implementation of inverse entropy encoder
圖8 反差分編碼器Fig.8 Inverse differential encoder
壓縮率指數(shù)據(jù)壓縮之后的大小與數(shù)據(jù)壓縮之前的大小之比。利用本文中所述的一階差分編碼和整數(shù)字節(jié)熵編碼,表1 給出了3 組實(shí)測(cè)地震數(shù)據(jù)的壓縮結(jié)果。
每一組地震數(shù)據(jù)均由2 336 個(gè)傳感器進(jìn)行12 288 次采樣得到。每次壓縮1 個(gè)傳感器64 次采樣得到的地震數(shù)據(jù),壓縮前數(shù)據(jù)長(zhǎng)度為64×3=192 字節(jié)??倝嚎s次數(shù)為2 336×12 288/64=448 512 次。剔除掉全零數(shù)據(jù)(采集系統(tǒng)未開始工作),需要壓縮的次數(shù)記作總幀數(shù)。使用本文中所述的壓縮算法壓縮這些數(shù)據(jù),記錄這些數(shù)據(jù)在壓縮之后的總長(zhǎng)度(記作總字節(jié)數(shù))。壓縮后的平均長(zhǎng)度=總字節(jié)數(shù)/總幀數(shù)。壓縮率=平均長(zhǎng)度/192。3 組地震數(shù)據(jù)的平均壓縮率=(101+105+105)/3/192=54%。
數(shù)據(jù)壓縮在傳輸節(jié)點(diǎn)中的FPGA 上進(jìn)行,相應(yīng)FPGA 的型號(hào)是Altera 公司的Cyclone V 5CEBA7F23C7,壓縮模塊占用的資源如圖9 所示。壓縮模塊需要的邏輯資源為54 個(gè)ALMs,不到總量的千分之一。
數(shù)據(jù)解壓在船上數(shù)據(jù)處理機(jī)箱中的FPGA 上進(jìn)行,F(xiàn)PGA 的型號(hào)為Xilinx 公司的Kintex-7 xc7k325tffg900-2,解壓模塊占用的資源如表2 所示。解壓模塊需要的邏輯資源為79 個(gè)LUT,不到總量的萬(wàn)分之五。
由此可見,不管是壓縮模塊,還是解壓模塊,占用FPGA 的資源都可以忽略不計(jì)。
表1 壓縮率測(cè)試結(jié)果Table 1 Test result of compression ratio
圖9 壓縮模塊占用資源Fig.9 Utilization of compression module
表2 解壓模塊占用資源Table 2 Utilization of decompression module
圖10 是壓縮模塊的仿真結(jié)果。在圖10 中,采集的24 位數(shù)據(jù)依次是{580,600,630,900,-900(}3 字節(jié)帶符號(hào)整數(shù)),壓縮后的數(shù)據(jù)依次是{82,44,14,1E,81,0E,E0,F(xiàn)F,F(xiàn)8,F(xiàn)8(}十六進(jìn)制)。可以發(fā)現(xiàn),相鄰兩個(gè)數(shù)據(jù)之間的差值越小,則數(shù)據(jù)壓縮之后的長(zhǎng)度也會(huì)越小。同時(shí),由于壓縮一個(gè)數(shù)據(jù)需要多個(gè)時(shí)鐘周期(1~4 個(gè)),因此輸入的數(shù)據(jù)之間應(yīng)該間隔若干個(gè)時(shí)鐘周期。
圖11 是解壓模塊的仿真結(jié)果,直接利用壓縮模塊的仿真結(jié)果當(dāng)作解壓模塊的輸入,輸入數(shù)據(jù)依此為{82,44,14,1E,81,0E,E0,F(xiàn)F,F(xiàn)8,F(xiàn)8(}十六進(jìn)制),輸出的數(shù)據(jù)是{580,600,630,900,-900(}3 字節(jié)帶符號(hào)整數(shù))。可以看出,解壓得到的數(shù)據(jù)正是壓縮之前的數(shù)據(jù)。
圖10 壓縮模塊仿真結(jié)果Fig.10 Simulation result of compression module
圖11 解壓模塊仿真結(jié)果Fig.11 Simulation result of decompression module
海洋地震勘探方法是目前海洋油氣勘探的主要方法,更深層和更精確的海洋勘探需要更長(zhǎng)的勘探拖纜,這將導(dǎo)致系統(tǒng)的功耗和傳輸速率大幅度增加。本文提出了一種可以提高傳輸效率的24位地震數(shù)據(jù)流無(wú)損壓縮算法,可以大幅度降低采集系統(tǒng)需要的傳輸速率,同時(shí)略微降低采集系統(tǒng)的功耗。地震數(shù)據(jù)的壓縮率平均可達(dá)54%,數(shù)據(jù)壓縮算法很容易用FPGA 實(shí)現(xiàn),占用FPGA 的邏輯資源極少,無(wú)須占用或只需占用較少的存儲(chǔ)資源,數(shù)據(jù)壓縮可在幾個(gè)時(shí)鐘周期之內(nèi)完成。簡(jiǎn)而言之,本文所述的壓縮算法可以只花費(fèi)極少的代價(jià)就將地震數(shù)據(jù)采集系統(tǒng)需要傳輸?shù)牡卣饠?shù)據(jù)量減少一半左右。