王永臻
(上海船舶運輸科學研究所 艦船自動化系統(tǒng)事業(yè)部, 上海 200135)
船舶電力系統(tǒng)是船舶的生命線,在保障電力推進、甲板機械、控制與通信等設(shè)備正常工作方面具有重要作用。大型船舶電力監(jiān)控系統(tǒng)的網(wǎng)絡(luò)拓撲通常采用2層結(jié)構(gòu)設(shè)計,其中:上層網(wǎng)絡(luò)采用冗余的高速交換式工業(yè)以太網(wǎng),網(wǎng)絡(luò)拓撲采用環(huán)形方式;下層網(wǎng)絡(luò)主要采用雙冗余CAN(Controller Area Network)現(xiàn)場總線網(wǎng)?,F(xiàn)場監(jiān)控設(shè)備采集的數(shù)據(jù)主要通過下層網(wǎng)絡(luò)傳遞給網(wǎng)關(guān),網(wǎng)關(guān)通過上層網(wǎng)絡(luò)將數(shù)據(jù)傳遞給服務(wù)器,服務(wù)器將數(shù)據(jù)記錄到數(shù)據(jù)庫中。一艘大型船舶的測點有上萬個,按每秒采集1次數(shù)據(jù)計算,每天產(chǎn)生的數(shù)據(jù)量有幾十吉字節(jié)。根據(jù)實際需求,服務(wù)器需存儲最近3個月內(nèi)的監(jiān)控數(shù)據(jù),而船舶的數(shù)據(jù)存儲空間有限,采集的數(shù)據(jù)必須先作壓縮處理,再進行存儲。近年來,為改變芯片、操作系統(tǒng)等核心軟硬件主要依靠進口的現(xiàn)狀,船舶設(shè)備國產(chǎn)化研究越來越受重視,而目前國內(nèi)尚無滿足需求的工業(yè)數(shù)據(jù)庫,現(xiàn)有的國產(chǎn)數(shù)據(jù)庫暫不能提供可靠的數(shù)據(jù)壓縮技術(shù),若直接將監(jiān)控數(shù)據(jù)存入國產(chǎn)數(shù)據(jù)庫中,會導致數(shù)據(jù)存儲不及時,造成數(shù)據(jù)堆積,從而影響船舶電力監(jiān)控系統(tǒng)的正常運行。因此,需設(shè)計一種數(shù)據(jù)壓縮策略,先對監(jiān)測的數(shù)據(jù)進行壓縮,再將其存入國產(chǎn)數(shù)據(jù)庫中,以滿足船舶監(jiān)控設(shè)備的需要。
數(shù)據(jù)壓縮技術(shù)主要分為無損壓縮技術(shù)和有損壓縮技術(shù)2種,傳統(tǒng)的無損壓縮技術(shù)的壓縮量較小,已無法滿足當前船舶監(jiān)控設(shè)備的需求。目前的數(shù)據(jù)壓縮技術(shù)主要根據(jù)數(shù)據(jù)的特點,選擇不同的壓縮方法。文獻[3]采用小波變換和嵌入式零樹編碼的方法壓縮電力數(shù)據(jù),先選取合適的小波基對數(shù)據(jù)進行小波變換,再通過嵌入式零樹編碼對經(jīng)小波變換得到的數(shù)據(jù)進行壓縮,該方法的壓縮比較高,運算量適中,適用于電力系統(tǒng)錄波,但在船舶電力監(jiān)控系統(tǒng)中,由于采集數(shù)據(jù)的頻率較低,若采用該方法,需先將數(shù)據(jù)存儲一段時間,再對其進行處理,這會導致數(shù)據(jù)處理時間較長,內(nèi)存消耗較大。文獻[4]采用基于密度劃分的數(shù)據(jù)存儲方法,先將相近的數(shù)據(jù)納入1個區(qū)域內(nèi),再去除冗余的數(shù)據(jù),達到預(yù)期的壓縮效果,這種方法可有效壓縮地理信息類數(shù)據(jù),但解壓縮數(shù)據(jù)時算法較為復雜,且壓縮率較高,不適宜監(jiān)控系統(tǒng)采用。Wonderware工業(yè)數(shù)據(jù)庫采用旋轉(zhuǎn)門算法壓縮數(shù)據(jù),該算法原理簡單,編程比較容易實現(xiàn),但當數(shù)據(jù)在某一時間段內(nèi)發(fā)生突變時,采用該算法壓縮的數(shù)據(jù)會嚴重失真,若減小壓縮誤差,壓縮率難以得到保證。
船舶電力監(jiān)控系統(tǒng)數(shù)據(jù)傳輸?shù)乃俾瘦^低,大部分僅1 s/次,數(shù)據(jù)波動范圍不大,監(jiān)測數(shù)據(jù)在很長一段時間內(nèi)圍繞某一均值上下波動,最小二乘法可有效跟蹤數(shù)據(jù)波動情況,且在該傳輸速率下有充足的運算時間;船舶電力監(jiān)控系統(tǒng)數(shù)據(jù)傳輸?shù)臏y點較多,導致每秒傳輸?shù)臄?shù)據(jù)量較大,滑動窗口技術(shù)可對傳輸?shù)臄?shù)據(jù)進行分段處理,為后續(xù)采用最小二乘法進行數(shù)據(jù)計算提供便利?;谝陨咸匦?,本文根據(jù)船舶電力監(jiān)控系統(tǒng)數(shù)據(jù)的特點設(shè)計一種基于最小二乘法和滑動窗口的數(shù)據(jù)壓縮策略,并在滑動窗口中附加3個數(shù)據(jù)探測器,實時監(jiān)測數(shù)據(jù)和相關(guān)參數(shù),以滿足監(jiān)控設(shè)備的需要。由于開關(guān)量數(shù)據(jù)不適用于有損壓縮方式,故該策略僅適用于模擬量數(shù)據(jù)。
最小二乘法具有原理簡明、收斂速度快、易于理解和易于編程實現(xiàn)等特點,已在系統(tǒng)參數(shù)估計領(lǐng)域得到廣泛應(yīng)用。最小二乘法的原理是利用輸入數(shù)據(jù)計算系統(tǒng)參數(shù),使通過系統(tǒng)參數(shù)估計的理論值與實際值的差值的平方差最小。從壓縮數(shù)據(jù)的角度分析,記錄輸入的數(shù)據(jù)流,給每個數(shù)據(jù)分配一定的權(quán)重,根據(jù)權(quán)重預(yù)測下一個到來的值,使預(yù)測值與實際值的差值的平方差最小,該平方差可看作壓縮數(shù)據(jù)的誤差。在壓縮數(shù)據(jù)時,只需記錄權(quán)重分配比和初始值,從而達到減少數(shù)據(jù)存儲量的目的。解壓縮之后得到的數(shù)值就是根據(jù)參數(shù)和初始值計算得到的估計值,且估計值與實際值的差值的平方差最小,能在一定程度上保證數(shù)據(jù)的精度。在船舶電力監(jiān)控系統(tǒng)中,被控對象會源源不斷地提供新的輸入數(shù)據(jù),可利用新的信息提高數(shù)據(jù)壓縮精度。在船舶運行工況穩(wěn)定的情況下,數(shù)據(jù)變化不頻繁,在均值附近浮動,可采用遞推最小二乘法,加入修正項提高數(shù)據(jù)壓縮精度。遞推最小二乘法的表達式為
(1)
遞推最小二乘法的運算步驟如下:
(1) 根據(jù)初始數(shù)據(jù)構(gòu)造();
(2) 根據(jù)式(1)計算();
(4) 更新();
(5)=+1,返回步驟(1),繼續(xù)循環(huán)。
處理數(shù)據(jù)的窗口可分為固定值窗口、滑動窗口和會話窗口等3種。固定值窗口只處理每個時間段內(nèi)的數(shù)據(jù),不重復處理數(shù)據(jù),保證每個數(shù)據(jù)最多被處理1次;滑動窗口每次處理完窗口中的數(shù)據(jù)之后,向后滑動,剔除一部分舊的數(shù)據(jù),接收一部分新的數(shù)據(jù),部分數(shù)據(jù)會被重復處理,保證每個數(shù)據(jù)至少被處理1次;會話窗口用于捕捉某一時間段內(nèi)發(fā)生的事件。船舶電力監(jiān)控系統(tǒng)查詢數(shù)據(jù)以時間為約束條件,因此窗口中的時間序列以數(shù)據(jù)接收時間為準。根據(jù)式(1),每收到1個數(shù)據(jù),即更新1次參數(shù),因此處理數(shù)據(jù)的窗口采用滑動窗口最為合適。
本文將測點傳輸?shù)臄?shù)據(jù)看作數(shù)據(jù)流,滑動窗口負責控制流入數(shù)據(jù)的大小,滑動窗口內(nèi)部的數(shù)據(jù)先采用最小二乘法壓縮處理,再存入數(shù)據(jù)庫中。在采集數(shù)據(jù)過程中,某些數(shù)據(jù)受抖動影響,會突然偏大或偏小,這種數(shù)據(jù)會影響壓縮質(zhì)量,需在壓縮過程中將其剔除。若船舶工況發(fā)生改變,某些數(shù)據(jù)會脫離原來的穩(wěn)定范圍,這時若繼續(xù)采用最小二乘法處理,權(quán)重變化較大,數(shù)據(jù)壓縮精度下降,需存儲上一階段壓縮的數(shù)據(jù)并開始新一輪的壓縮過程。在壓縮過程中,還需監(jiān)控最小二乘法參數(shù)收斂情況,若參數(shù)未收斂,則壓縮精度較差。綜上,在滑動窗口中增加3臺探測器,用于提高數(shù)據(jù)壓縮精度。第一臺探測器負責監(jiān)測異常數(shù)據(jù),若有異常數(shù)據(jù),則及時將其剔除;第二臺探測器負責監(jiān)視數(shù)據(jù)波動范圍,若數(shù)據(jù)波動范圍變化較大,則說明工況發(fā)生改變,前一個壓縮周期結(jié)束,開啟下一個壓縮周期;第三臺探測器負責監(jiān)視參數(shù)收斂情況,若參數(shù)收斂,則壓縮結(jié)果可靠,反之判定壓縮結(jié)果不可靠。
本文所述數(shù)據(jù)壓縮策略模型見圖1,每當有新的數(shù)據(jù)到來時,處理過程如下:
1) 對新數(shù)據(jù)進行檢測,若該數(shù)據(jù)不是異常數(shù)據(jù),則將其傳遞到滑動窗口中。在新數(shù)據(jù)被滑動窗口接收之后,實時更新滑動窗口內(nèi)部數(shù)據(jù)的波動范圍,若數(shù)據(jù)波動范圍未超過相關(guān)閾值,則采用最小二乘法更新壓縮參數(shù)。
2) 計算壓縮參數(shù)的收斂情況,判斷壓縮結(jié)果是否可靠。當下一個數(shù)據(jù)到來時,滑動窗口向前滑動1次,并剔除最舊的數(shù)據(jù),重復上述操作,直到滿足壓縮需求為止。滿足壓縮需求之后,合并窗口內(nèi)部的數(shù)據(jù),并將其存入數(shù)據(jù)庫中。
圖1 數(shù)據(jù)壓縮策略模型
異常探測器用于檢測異常數(shù)據(jù),其結(jié)構(gòu)體定義如下:
struct trigger1{
double lastValue[3];
double nowValue;
double nextValue[3];
double range;
};
當船舶工況穩(wěn)定時,某一時刻數(shù)據(jù)前后的幾個數(shù)據(jù)的值相差不大,本文選擇前后3個時刻的數(shù)據(jù)判斷數(shù)據(jù)異常情況。lastValue用于存儲該數(shù)據(jù)之前的3個數(shù)據(jù);nextValue用于存儲該數(shù)據(jù)之后的3個數(shù)據(jù);range為數(shù)據(jù)波動范圍。計算該數(shù)據(jù)與這6個數(shù)據(jù)的差值,若6個差值均大于波動范圍,則丟棄該數(shù)據(jù),否則將其加入滑動窗口中。
數(shù)據(jù)波動范圍記錄器用于記錄數(shù)據(jù)波動范圍,其結(jié)構(gòu)體定義如下:
struct trigger2{
double arverror;
double standerror;
double rangeup;
double rangedown;
int errnumber;
}
參數(shù)收斂檢測器用于檢測最小二乘參數(shù)的收斂性,其結(jié)構(gòu)體定義如下:
struct trigger3{
double thetaerr;
double futurey;
bool convergence;
double lasttheta[50];
}
lasttheta用于存儲前幾次計算的參數(shù)矩陣;thetaerr為上次計算得到的參數(shù)與本次計算得到的參數(shù)的殘差;futurey為下一個數(shù)據(jù)的估計值;convergence用于判斷參數(shù)是否收斂。最小二乘參數(shù)需經(jīng)過一定次數(shù)的計算之后才能收斂,只有參數(shù)收斂才能保證數(shù)據(jù)壓縮精度。當每次計算的參數(shù)的殘差小于某一設(shè)定值,且估計值與實際值相差不大時,認為參數(shù)收斂,數(shù)據(jù)壓縮結(jié)果有效。
壓縮數(shù)據(jù)的滑動窗口結(jié)構(gòu)體定義如下:
struct window{
int number;
QList〈double〉 data;
int start;
int end;
trigger1 outlier;
trigger2 range;
trigger3 thetajudge;
int errnumber;
};
number為滑動窗口內(nèi)存儲的數(shù)據(jù)個數(shù);data為數(shù)據(jù)值;start與end共同確立滑動窗口目前處理的數(shù)據(jù)所在的位置;trigger1、trigger2和trigger3為附加的3臺探測器,用于保證數(shù)據(jù)壓縮精度。
1) 壓縮算法的步驟如下:
(1) 初始化窗口,初始化相關(guān)參數(shù);
(2) 計算接收數(shù)據(jù)的時間,若超時,則轉(zhuǎn)到步驟(9),否則進行步驟(3);
(3) 獲取新數(shù)據(jù),采用異常探測器判斷該數(shù)據(jù)是否為異常數(shù)據(jù),若是,則轉(zhuǎn)到步驟(2),否則進行步驟(4);
(4) 采用數(shù)據(jù)波動范圍記錄器計算數(shù)據(jù)波動范圍;
(5) 采用最小二乘法更新參數(shù);
(6) 采用參數(shù)收斂檢測器計算參數(shù)收斂情況;
圖2 壓縮算法流程圖
(7) 當數(shù)據(jù)波動未超出指定范圍,且參數(shù)收斂時,若處理的數(shù)據(jù)量大于等于100個,則對這些數(shù)據(jù)進行壓縮處理,并轉(zhuǎn)到步驟(9),否則轉(zhuǎn)到步驟(2);
(8) 當數(shù)據(jù)波動超出指定范圍時,轉(zhuǎn)到步驟(10);
(9) 將壓縮后的數(shù)據(jù)存入數(shù)據(jù)庫中,并轉(zhuǎn)到步驟(2)開始新的壓縮周期;
(10) 將原始數(shù)據(jù)直接存入數(shù)據(jù)庫中,并轉(zhuǎn)到步驟(2)開始新的壓縮周期。
壓縮算法流程圖見圖2。
2) 解壓縮算法的步驟如下:
(1) 判斷數(shù)據(jù)是否為壓縮數(shù)據(jù),若是,則進行步驟(2),否則轉(zhuǎn)到步驟(5);
(2) 讀取初始值向量和最小二乘參數(shù);
(3) 根據(jù)初始值和最小二乘參數(shù)計算解壓縮值;
(4) 利用得到的解壓縮值還原下一個解壓縮值,直到所有數(shù)據(jù)解壓縮完畢;
(5) 直接還原數(shù)據(jù)。
為驗證本文提出的數(shù)據(jù)壓縮策略的有效性,利用實船采集的真實數(shù)據(jù)進行壓縮測試,通過模擬軟件將真實數(shù)據(jù)發(fā)送給網(wǎng)關(guān),由網(wǎng)關(guān)傳輸給服務(wù)器。試驗環(huán)境如下:處理器采用兆芯KaiXianKX-6640A,主頻為2.6 GHz,內(nèi)存為16 GB;操作系統(tǒng)采用中標麒麟V7.0;數(shù)據(jù)庫采用達夢數(shù)據(jù)庫8.0;編譯器為Qt5.7。
為衡量壓縮效果,引入指標
(1)
(2)
式(1)和式(2):為壓縮比;為壓縮后數(shù)據(jù)占用的存儲空間;為壓縮前數(shù)據(jù)占用的存儲空間,壓縮比越小,數(shù)據(jù)占用的存儲空間越??;為壓縮數(shù)據(jù)與原數(shù)據(jù)的誤差百分比;為原數(shù)據(jù);為解壓縮之后的數(shù)據(jù);為數(shù)據(jù)個數(shù)。
下面以應(yīng)用較為廣泛的無損壓縮算法(LZ77算法)和工業(yè)數(shù)據(jù)庫中常用的旋轉(zhuǎn)門算法為參照,對不同壓縮算法的數(shù)據(jù)壓縮效果進行對比,結(jié)果見表1,其中LZ77算法采用Qt5.7編譯器中的zlib開源庫,壓縮等級為1。LZ77算法雖然沒有壓縮誤差,但其壓縮比較大;旋轉(zhuǎn)門算法雖然壓縮比較小,但其誤差較大;最小二乘法的船舶電力監(jiān)控系統(tǒng)數(shù)據(jù)壓縮效果最優(yōu)。
表1 不同壓縮算法的數(shù)據(jù)壓縮效果對比
經(jīng)不同數(shù)據(jù)集測試,基于最小二乘法的數(shù)據(jù)壓縮結(jié)果見表2。不同數(shù)據(jù)集的壓縮比不同,但壓縮誤差均在可接受的范圍內(nèi)?;谧钚《朔ǖ臄?shù)據(jù)壓縮效果見圖3。解壓縮數(shù)據(jù)與原數(shù)據(jù)相差不大,單個數(shù)據(jù)誤差在可接受的范圍內(nèi),解壓縮數(shù)據(jù)與原數(shù)據(jù)的波動趨勢基本一致。
表2 基于最小二乘法的數(shù)據(jù)壓縮結(jié)果
圖3 基于最小二乘法的數(shù)據(jù)壓縮效果
綜上,本文所述最小二乘法與LZ77算法相比壓縮率更低,與旋轉(zhuǎn)門算法相比壓縮誤差更小。經(jīng)不同數(shù)據(jù)集測試,最小二乘法能保持穩(wěn)定的壓縮效果。采用最小二乘法壓縮的數(shù)據(jù)與原數(shù)據(jù)相差不大,單個數(shù)據(jù)的誤差不會影響數(shù)據(jù)變動的趨勢。本文采用的方法涉及矩陣運算,運算量相對較大。若矩陣維度較高,會造成數(shù)據(jù)處理不及時,對CPU(Central Processing Unit)的要求更高;若矩陣維度較低,會造成數(shù)據(jù)壓縮效果不理想。因此,需根據(jù)實際情況選擇矩陣維度。
隨著船舶智能化的不斷發(fā)展,信息的應(yīng)用變得越來越重要,信息量增加會增大數(shù)據(jù)存儲負荷,數(shù)據(jù)壓縮技術(shù)能有效緩解數(shù)據(jù)存儲空間不夠的壓力。本文針對船舶電力監(jiān)控系統(tǒng)數(shù)據(jù)的特點,采用最小二乘法,結(jié)合滑動窗口技術(shù)設(shè)計了一種實時數(shù)據(jù)壓縮策略;同時,利用實船采集的真實數(shù)據(jù)進行測試,驗證了該策略的可行性。試驗數(shù)據(jù)集的大小受試驗環(huán)境的限制,且無法模擬突發(fā)狀況下數(shù)據(jù)的變化情況。本文對閾值的設(shè)計較為簡單,可能會導致部分數(shù)據(jù)有較大的誤差。下一步將對更大規(guī)模的數(shù)據(jù)進行壓縮測試,并將該算法植入監(jiān)控程序中,測試其在國產(chǎn)化設(shè)備上的應(yīng)用效果。