魏 鵬,李醒飛,2,,3,楊少波,2,3,李洪宇
(1.天津大學(xué),精密測(cè)試技術(shù)及儀器國(guó)家重點(diǎn)實(shí)驗(yàn)室,天津 300072;2.青島海洋科學(xué)與技術(shù)試點(diǎn)國(guó)家實(shí)驗(yàn)室海洋觀測(cè)與探測(cè)聯(lián)合實(shí)驗(yàn)室,山東青島 266237;3.天津大學(xué)青島海洋技術(shù)研究院,山東青島 266237;4.山東科技大學(xué) 機(jī)械電子工程學(xué)院,山東青島 266590)
剖面浮標(biāo)作為一種海洋觀測(cè)平臺(tái),其上搭載多種傳感器,旨在通過(guò)在全球海洋布放衛(wèi)星跟蹤浮標(biāo),快速、準(zhǔn)確、大范圍地收集全球海洋上層的海水溫度、鹽度等剖面資料[1]。在剖面浮標(biāo)嵌入式系統(tǒng)的數(shù)據(jù)采集、存儲(chǔ)、通信過(guò)程中存在著諸多問(wèn)題。例如剖面浮標(biāo)在上浮過(guò)程中按照預(yù)定的時(shí)間間隔采集的海水溫度、鹽度、深度、標(biāo)體內(nèi)部電壓、電流、氣壓等大量數(shù)據(jù)均存儲(chǔ)在容量有限的TF卡中,一方面造成了數(shù)據(jù)冗余,存儲(chǔ)空間使用緊張,通信效率低下,另一方面由于衛(wèi)星通信方式費(fèi)用高、單次通信容量有限(一般不超過(guò)幾百個(gè)字節(jié))[2],導(dǎo)致了較高的通信成本。因此,將剖面浮標(biāo)的采集數(shù)據(jù)進(jìn)行無(wú)失真壓縮,是降低通信費(fèi)用、提高通信效率、減少數(shù)據(jù)存儲(chǔ)空間的一種行之有效的方法。
雖然目前已經(jīng)開發(fā)了許多成熟的數(shù)據(jù)壓縮算法,如基于統(tǒng)計(jì)模型的香農(nóng)算法、Huffman算法、游程編碼等,基于字典模型的LZ系列及其改進(jìn)型的算法,國(guó)際上也制定了很多數(shù)據(jù)壓縮標(biāo)準(zhǔn),但針對(duì)不同的數(shù)據(jù)資料,其所包含的信源概率模型和冗余度表現(xiàn)形式都不一定相同,每種壓縮方式都有其優(yōu)越性和局限性,且嵌入式系統(tǒng)一般不具備PC機(jī)的環(huán)境,因此,本文根據(jù)海洋監(jiān)測(cè)平臺(tái)的數(shù)據(jù)特點(diǎn),在兩種不同壓縮模型中各選取了一種較有代表性的壓縮算法,開展對(duì)剖面浮標(biāo)數(shù)據(jù)存儲(chǔ)、通信數(shù)據(jù)的壓縮應(yīng)用研究[3]。
剖面浮標(biāo)嵌入式數(shù)據(jù)采集系統(tǒng)以球形玻璃浮體為傳感器搭載平臺(tái),以STM32F429微控制器為主控單元,將傳感器采集的數(shù)據(jù)進(jìn)行解析、存儲(chǔ)和發(fā)送。整個(gè)系統(tǒng)由電平轉(zhuǎn)換電路、STM32控制器最小系統(tǒng)、數(shù)據(jù)存儲(chǔ)模塊、通信模塊和電源模塊組成,系統(tǒng)總體框圖如圖1所示。由于剖面浮標(biāo)平臺(tái)搭載多種傳感器,本文選取較有代表性的溫鹽深儀(CTD)為例介紹數(shù)據(jù)采集過(guò)程。
圖1 系統(tǒng)總體框圖
CTD傳感器、銥星通信模塊與主控板通過(guò)RS232串口通信,由于二者使用TTL電平,故需要經(jīng)過(guò)MAX3232電平轉(zhuǎn)換電路之后連接至主控板。MAX3232適用電壓3~5.5 V,可以實(shí)現(xiàn)RS232到TTL電平轉(zhuǎn)換。電平轉(zhuǎn)換電路如圖2所示。
圖2 電平轉(zhuǎn)換電路圖
STM32F429集成了Cortex-M4內(nèi)核,工作頻率為180 MHz,片上集成了多達(dá)20個(gè)通信接口,包括4個(gè)USART、4個(gè)速度達(dá)11.25 Mbit/s的UART、6個(gè)速度達(dá)45 Mbit/s的SPI、3個(gè)具有新型可選數(shù)字濾波器功能的I2C、2個(gè)CAN以及SDIO接口;它包含2個(gè)12位DAC、3個(gè)速度為2.4 MSPS或7.2 MSPS(交錯(cuò)模式下)的12位ADC;定時(shí)器多達(dá)17個(gè),使用靈活的存儲(chǔ)控制器可以輕松擴(kuò)展存儲(chǔ)范圍,該控制器通過(guò)一個(gè)32位的并行接口可達(dá)到90 MHz的頻率,能支持Compact Flash、SRAM、PSRAM、NOR、 NAND以及現(xiàn)在的SDRAM存儲(chǔ)器[4]。STM32F429資源豐富,能夠滿足浮標(biāo)體整體功能的需求。
存儲(chǔ)模塊使用容量為8 GB的TF卡。TF卡又稱microSD,是一種極細(xì)小的快閃存儲(chǔ)器卡,體積小,容量較大,存取速度快,采用SanDisk最新NAND MLC技術(shù)及控制器技術(shù)??刂破鲗?duì)SD卡進(jìn)行通信操作采用SDIO(安全數(shù)字輸入/輸出)接口。為了方便對(duì)數(shù)據(jù)的存儲(chǔ)和管理,在主控系統(tǒng)中引入了串行Flash文件系統(tǒng)FatFs,它是建立在存儲(chǔ)介質(zhì)上的一種組織結(jié)構(gòu),這些結(jié)構(gòu)包括操作系統(tǒng)引導(dǎo)區(qū)、目錄和文件,是一個(gè)為小型嵌入式系統(tǒng)設(shè)計(jì)的通用FAT(file allocation table)文件系統(tǒng)模塊[5]。存儲(chǔ)模塊電路圖如圖3所示。
圖3 存儲(chǔ)模塊電路圖
剖面浮標(biāo)采用大容量鋰電池,輸出電壓可達(dá)28 V,需要降壓之后才能供各模塊正常使用。系統(tǒng)需要將電源電壓VCC降至12 V后為CTD、銥星通訊模塊供電、由12 V降至5 V后為浮標(biāo)其他模塊供電、由5 V降至3.3 V后為主控板、MAX3232、TF卡供電,電路圖如圖4所示。其中LMR33630是一種同步降壓直流/直流轉(zhuǎn)換芯片,能夠使用高達(dá)36 V的輸入電壓驅(qū)動(dòng)高達(dá)3 A的負(fù)載電流;MAX604是低壓差線性穩(wěn)壓器,具有預(yù)置3.3 V電壓的輸出方式,其輸出電流可達(dá)500 mA,功耗很低。
(a)VCC轉(zhuǎn)12 V電路
(b)12 V轉(zhuǎn)5 V電路
(c)5 V轉(zhuǎn)3.3 V電路圖4 電源模塊電路
本系統(tǒng)設(shè)計(jì)中,采用的軟件開發(fā)平臺(tái)為集成開發(fā)環(huán)境Keil5軟件,并使用ST官方的集成開發(fā)庫(kù)。應(yīng)用程序中主程序完成系統(tǒng)各個(gè)模塊的初始化;數(shù)據(jù)采集及處理程序依據(jù)各傳感器的通信協(xié)議,將采集的數(shù)據(jù)解析、存儲(chǔ);數(shù)據(jù)壓縮模塊將存儲(chǔ)在TF卡中的TXT文件進(jìn)行壓縮;通信模塊使用銥星通信,將壓縮數(shù)據(jù)通過(guò)衛(wèi)星傳至岸站接收端,軟件總體功能框圖如圖5所示?,F(xiàn)將數(shù)據(jù)壓縮程序部分作為重點(diǎn)做詳細(xì)介紹。
圖5 軟件總體功能框圖
數(shù)據(jù)壓縮技術(shù)主要分為無(wú)損數(shù)據(jù)壓縮和有損數(shù)據(jù)壓縮兩大類,為保證海洋監(jiān)測(cè)數(shù)據(jù)的準(zhǔn)確性,只能采用無(wú)損數(shù)據(jù)壓縮技術(shù)。無(wú)損壓縮從壓縮原理上大體可以分為基于統(tǒng)計(jì)的壓縮算法和基于字典的壓縮算法[6]。針對(duì)剖面浮標(biāo)傳感器采集的數(shù)據(jù)特點(diǎn)和嵌入式系統(tǒng)的資源限制,在兩種模型中選取較有代表性的Huffman算法和miniLZO算法,對(duì)剖面浮標(biāo)傳感器采集的數(shù)據(jù)進(jìn)行壓縮對(duì)比并分析。
Huffman編碼是根據(jù)數(shù)據(jù)信息中字符重復(fù)出現(xiàn)的概率生成的一種前綴編碼方法。是目前用于壓縮的最普遍方法之一。它的核心是構(gòu)造二叉樹,是一種自下向上的、非自適應(yīng)的編碼算法,其思想是將經(jīng)常出現(xiàn)的字母賦予較短的編碼,而不經(jīng)常出現(xiàn)的字母賦予較長(zhǎng)的編碼[7]。
對(duì)于剖面浮標(biāo)數(shù)據(jù)文件來(lái)說(shuō),文件系統(tǒng)存儲(chǔ)的數(shù)據(jù)主要是ASCII碼0~9,且每個(gè)字符均有概率出現(xiàn),對(duì)該類數(shù)據(jù)分析比較簡(jiǎn)單,因此可采用Huffman算法對(duì)數(shù)據(jù)文件進(jìn)行壓縮。
Huffman編碼步驟為:
(1)統(tǒng)計(jì)信源符號(hào)出現(xiàn)的概率,并按從大到小的順序排列。
(2)給兩個(gè)頻率最小的信源符號(hào)各分配一個(gè)碼元“0”和“1”,然后將這兩個(gè)信源符號(hào)合并成一個(gè)新符號(hào),并用這兩個(gè)最小的頻率之和作為新符號(hào)的頻率,結(jié)果得到一個(gè)只有n-1個(gè)信源符號(hào)的新信源(假設(shè)原來(lái)所需編碼的符號(hào)數(shù)為n,稱為信源的第一次縮減信源S1;
(3)將縮減信源S1的符號(hào)仍按頻率從大到小的順序進(jìn)行排列,重復(fù)步驟2,得到只含n~2個(gè)符號(hào)的縮減信源S2;
(4)重復(fù)上述步驟,直至縮減信源只剩2個(gè)符號(hào)為止,此時(shí)所剩2個(gè)符號(hào)的頻率之和必為1,將這2個(gè)符號(hào)各分配一個(gè)碼元“0”和“1”后,從最后一級(jí)縮減信源開始,依編碼路徑向前返回,就得到各信源符號(hào)所對(duì)應(yīng)的Huffman碼字,形成壓縮數(shù)據(jù)。
圖6為Huffman算法實(shí)現(xiàn)流程圖。經(jīng)過(guò)編碼后的壓縮文件,主要包含2部分信息,第一部分為數(shù)據(jù)的統(tǒng)計(jì)信息,即Huffman碼表,另一部分為數(shù)據(jù)內(nèi)容部分。當(dāng)解壓數(shù)據(jù)時(shí),首先從數(shù)據(jù)中提取Huffman碼表重建編碼樹,然后對(duì)壓縮碼進(jìn)行解壓縮。在構(gòu)建二叉樹時(shí),將其定義為一個(gè)結(jié)構(gòu)體可以方便的實(shí)現(xiàn)節(jié)點(diǎn)的遍歷和置換。
圖6 Huffman算法實(shí)現(xiàn)流程圖
LZO算法是一種基于字典的快速的無(wú)損數(shù)據(jù)壓縮解壓算法,其中LZO是lempel-ziv-oberhumer的縮寫[8],其原理是以較長(zhǎng)的字符串或經(jīng)常出現(xiàn)的字母組合構(gòu)成字典中的各個(gè)詞條,并且用相對(duì)較短的數(shù)字或符號(hào)來(lái)表示,當(dāng)再次遇到相同字符串或字母組合時(shí),使用已知的字典中對(duì)應(yīng)的數(shù)字或符號(hào)表示,如此反復(fù),最后輸出經(jīng)過(guò)字典翻譯后的壓縮數(shù)據(jù)。
miniLZO是一個(gè)輕量級(jí)的壓縮/解壓縮庫(kù),使用miniLZO的目的是為了某些只需包含一個(gè)小型的壓縮/解壓縮功能,而不包含LZO全部代碼的程序。編譯后的miniLZO庫(kù)少于5 KB,非常適合內(nèi)嵌在主程序中。
在剖面浮標(biāo)數(shù)據(jù)文件中包含大量重復(fù)性數(shù)據(jù),譬如溫度、鹽度、電流、殼內(nèi)氣壓等數(shù)據(jù),往往在一定的時(shí)間段內(nèi)數(shù)值變化范圍很小,甚至相同,這為miniLZO算法提供了壓縮空間。
miniLZO算法的執(zhí)行步驟為:
(1)讀入帶壓縮文件,前兩字節(jié)無(wú)須壓縮直接輸出。
(2)初始化數(shù)據(jù)流指針并設(shè)定查詢窗口大小、最小匹配串長(zhǎng)度。
(3)使用匹配函數(shù)在輸入數(shù)據(jù)流的前向緩沖區(qū)中查找與窗口中最長(zhǎng)匹配串。
(4)判斷最長(zhǎng)匹配串長(zhǎng)度是否不小于最小匹配串長(zhǎng)度,如果是,則用(重復(fù)長(zhǎng)度L,指回距離D)代替最長(zhǎng)匹配串,如果否,則輸出原來(lái)的字符串并將其寫入字典中等待下一次匹配過(guò)程。
(5)根據(jù)前向緩沖區(qū)是否為空循環(huán)執(zhí)行步驟(3)~(5)。miniLZO算法執(zhí)行流程圖如圖7所示。
圖7 miniLZO算法實(shí)現(xiàn)流程圖
本文測(cè)試數(shù)據(jù)選取于“大洋4 000米深海自持式剖面浮標(biāo)”項(xiàng)目在南海北部水域投放的一套剖面浮標(biāo)。此套浮標(biāo)使用銥星衛(wèi)星通信,其單包通信數(shù)據(jù)長(zhǎng)度是定長(zhǎng)的260字節(jié),包含的信息有時(shí)間、溫度、鹽度、深度、外油囊油量、電壓、電流。在剖面浮標(biāo)的數(shù)據(jù)文件中隨機(jī)選取100組在ARM嵌入式系統(tǒng)中進(jìn)行測(cè)試,對(duì)每組數(shù)據(jù)分別使用Huffman算法和miniLZO算法測(cè)試壓縮效果,其中壓縮率是衡量一個(gè)壓縮算法性能的重要指標(biāo),是壓縮后數(shù)據(jù)文件的大小與壓縮前源文件大小之比[9]。測(cè)試結(jié)果如圖8所示。
圖8 2種算法壓縮率比較
通過(guò)2種算法的測(cè)試結(jié)果分析,可以得出以下幾個(gè)判斷:
(1)Huffman算法對(duì)浮標(biāo)觀測(cè)數(shù)據(jù)的壓縮率在50%左右,miniLZO算法對(duì)浮標(biāo)觀測(cè)數(shù)據(jù)的壓縮率在20%左右,2種方法均能對(duì)通信數(shù)據(jù)進(jìn)行有效壓縮。
(2)從壓縮率角度分析,miniLZO算法的壓縮效果明顯優(yōu)于Huffman算法。分析認(rèn)為出現(xiàn)這種現(xiàn)象的原因是采集的數(shù)據(jù)中,重復(fù)的長(zhǎng)字符串較多,部分采集參數(shù)數(shù)據(jù)變化緩慢,甚至變化的只是小數(shù)點(diǎn)之后的內(nèi)容,因而能夠大量采用(重復(fù)長(zhǎng)度L,指回距離D)代替較長(zhǎng)的字符串。
(3)從壓縮率穩(wěn)定性角度分析,2種壓縮算法壓縮率均具有一定的波動(dòng)性,但Huffman算法的穩(wěn)定性要強(qiáng)于miniLZO算法,在沒(méi)有單包數(shù)據(jù)量限制的情況下尤其明顯。分析認(rèn)為,隨著數(shù)據(jù)組的增加,各數(shù)據(jù)包中字符出現(xiàn)概率趨于平穩(wěn),而在隨機(jī)取出的單個(gè)數(shù)據(jù)包中,各測(cè)量要素波動(dòng)范圍增大,造成已出現(xiàn)的字符串的長(zhǎng)度變化增大,因而壓縮率波動(dòng)范圍較大。
(4)從算法復(fù)雜度上分析,miniLZO算法略優(yōu)于Huffman算法。首先,在時(shí)間復(fù)雜度上,由于每次發(fā)送的數(shù)據(jù)量較小,故而每次調(diào)用壓縮函數(shù)處理數(shù)據(jù)的時(shí)間都很少,甚至可以忽略不計(jì);其次,在空間復(fù)雜度上,2種算法在處理數(shù)據(jù)的過(guò)程中都會(huì)產(chǎn)生類似于字典性質(zhì)的數(shù)據(jù)存儲(chǔ)空間,但miniLZO算法在數(shù)據(jù)傳輸?shù)倪^(guò)程中不需要此字典,而Huffman算法需要通過(guò)此字典來(lái)進(jìn)行解碼,故miniLZO算法在空間復(fù)雜度方面要略優(yōu)于Huffman算法,因此總體上miniLZO算法復(fù)雜度略優(yōu)于Huffman算法。
本文將基于2種不同模型的數(shù)據(jù)壓縮算法應(yīng)用在剖面浮標(biāo)嵌入式數(shù)據(jù)采集壓縮系統(tǒng)中,并取得了較好的實(shí)際應(yīng)用效果。實(shí)驗(yàn)證明,2種算法均能能夠滿足剖面浮標(biāo)數(shù)據(jù)壓縮的需求,在壓縮率方面,miniLZO算法的壓縮效果明顯好于Huffman算法。值得注意的是,在選擇壓縮算法時(shí),要充分考慮壓縮耗時(shí)、內(nèi)存及算法復(fù)雜度,根據(jù)具體情況進(jìn)行選擇,結(jié)合自身所使用的軟硬件資源,達(dá)到數(shù)據(jù)壓縮的目的