文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.170127
中文引用格式: 陳勇,黃茹楠,劉青,等. 基于北斗通信的工業(yè)過程數(shù)據(jù)壓縮方法[J].電子技術(shù)應(yīng)用,2017,43(10):106-110,115.
英文引用格式: Chen Yong,Huang Ru′nan,Liu Qing,et al. Industrial data compression method based on Beidou′s short-message communication[J].Application of Electronic Technique,2017,43(10):106-110,115.
0 引言
北斗衛(wèi)星導(dǎo)航系統(tǒng)是我國自主建設(shè)、獨立運行、集導(dǎo)航定位、授時、用戶監(jiān)測、短報文通信于一體的導(dǎo)航系統(tǒng)[1]。短報文通信是北斗系統(tǒng)特有的一個功能,其不受地形條件和環(huán)境氣候等影響,可用于解決偏遠地區(qū)數(shù)據(jù)實時通信問題,特別適用于常規(guī)通信手段存在盲區(qū)多、基建投入大的場合使用,例如野外的石油、天然氣的閥站和門站,以及遠離移動網(wǎng)絡(luò)覆蓋地區(qū)或者通信不穩(wěn)定地區(qū)工廠的數(shù)據(jù)傳輸。
北斗衛(wèi)星的主要任務(wù)是定位導(dǎo)航,通信的信道資源少,民用北斗短報文通信存在單次報文長度和通信頻度受限的問題。對于工業(yè)遠程監(jiān)測控制和數(shù)據(jù)采集(Supervisory Control and Data Acquisition,SCADA)項目中的數(shù)據(jù)而言,數(shù)據(jù)采集頻率高,數(shù)據(jù)量大。若對數(shù)據(jù)作分包處理,可實現(xiàn)大量數(shù)據(jù)傳輸。但谷軍霞[2]等在2015年進行的北斗短報文丟包測試中表明,隨著報文分包數(shù)的增加,報文的傳輸成功率逐步降低。若減少對原始工業(yè)數(shù)據(jù)的采樣頻率,則可降低數(shù)據(jù)量。但對于企業(yè)來說,歷史數(shù)據(jù)是工業(yè)現(xiàn)場寶貴的財富,是為后續(xù)工程技術(shù)人員提供分析和故障處理的基礎(chǔ)資料,是不能因為傳輸?shù)南拗凭碗S意減少和丟棄的。因此就需要有一種方法,既可完成實時數(shù)據(jù)的傳輸,又不會產(chǎn)生太大的數(shù)據(jù)量。
目前已發(fā)表的關(guān)于北斗短報文通信的論文中,于龍海提出先建立運動目標的數(shù)學(xué)模型,通過參數(shù)簡化和差分編碼實現(xiàn)北斗定位數(shù)據(jù)的壓縮[3]。陳海生提出的固定長度的索引碼表用于漁獲數(shù)據(jù)的傳輸,可以解決數(shù)據(jù)無損壓縮傳輸,但是不具有通用性[4]。彭浩提出了中文智能分詞和無損壓縮編碼的聯(lián)合壓縮算法,進而實現(xiàn)通信數(shù)據(jù)擴容[5],但是工業(yè)過程數(shù)據(jù)中,主要傳輸?shù)氖菍崝?shù)信息。目前,對于北斗短報文通信的工業(yè)過程數(shù)據(jù)的傳輸,還沒有較實用的數(shù)據(jù)壓縮和傳輸?shù)慕鉀Q辦法。因此本文提出了一種分別從有損和無損壓縮兩個方面,對數(shù)據(jù)分步進行壓縮處理的解決方案。實驗證明,該方法可有效對短報文數(shù)據(jù)進行壓縮處理,從而提高工業(yè)過程數(shù)據(jù)傳輸?shù)男屎涂煽啃浴?/p>
1 北斗通信壓縮第一步:有損壓縮
有損壓縮是在壓縮工程中損失一定的信息以獲得較高的壓縮比[6]。為后文評價有損壓縮過程,本文采用曲奕霖[7]在其論文中提出的評價標準,如下:
CR用于衡量算法對一組數(shù)據(jù)的壓縮能力,而δ用于衡量一組數(shù)據(jù)的平均失真度。
旋轉(zhuǎn)門算法是一種常見的過程數(shù)據(jù)壓縮算法。本文提出的北斗通信壓縮算法中的有損壓縮階段就基于旋轉(zhuǎn)門算法。下面先介紹旋轉(zhuǎn)門算法,再介紹本文提出的基于改進BP神經(jīng)網(wǎng)絡(luò)PID的自控精度SDT有損壓縮算法(后文簡稱為自控精度有損壓縮算法)。
1.1 標準旋轉(zhuǎn)門算法(SDT)分析
旋轉(zhuǎn)門壓縮算法由美國OSI軟件公司研發(fā),此算法主要針對的是浮點型的數(shù)據(jù)。SDT作為線性擬合的一種簡便算法,具有效率高、壓縮比高、實現(xiàn)簡單、誤差可控制的優(yōu)點?;舅惴ㄔ砣鐖D1所示。
設(shè)ΔE為SDT算法的壓縮精度參數(shù),圖1中A點為起始點,以距離A點為ΔE的上下兩點為支點(類似兩扇門的門軸,故得名旋轉(zhuǎn)門)。壓縮開始時,兩扇門是關(guān)閉的,且在算法執(zhí)行過程中,門只能往外開啟,不能往內(nèi)關(guān)閉。隨著數(shù)據(jù)點的增加,門就會旋轉(zhuǎn)打開,兩扇門的內(nèi)角和等于180°,就停止操作,存儲前一個數(shù)據(jù)點,并由該點開始新一段壓縮。經(jīng)過旋轉(zhuǎn)門壓縮后,由A到B點的直線代替A到B的數(shù)據(jù)點。
解壓過程:根據(jù)每段直線保存的起始點和終止點可以求出線段的公式,然后根據(jù)某點橫軸坐標求出其對應(yīng)的縱坐標數(shù)據(jù)值。
1.2 自控精度有損壓縮算法算法設(shè)計
對于SDT算法有兩方面需要注意:(1)ΔE是決定SDT算法解壓平均誤差δ的關(guān)鍵。如果ΔE選擇較小,δ也小,壓縮比CR低;反之ΔE選擇較大,CR高,δ卻也變大。即使是有經(jīng)驗的工程師,也需要長時間調(diào)整ΔE才能找到合適的值,且當數(shù)據(jù)范圍和特征改變時,為滿足壓縮比和精度的要求,還需重新設(shè)置。(2)δ通常是作為評價壓縮過程好壞的標準,如果δ不符合要求,較高的CR沒有任何意義。
基于以上兩點,將關(guān)注集中在δ的控制上。通過給定理想的δ,用算法自適應(yīng)調(diào)整ΔE。本文將工程中的反饋控制思想引入,用PID算法對ΔE在線調(diào)整,同時用神經(jīng)網(wǎng)絡(luò)算法動態(tài)調(diào)整PID參數(shù),并通過其強大的學(xué)習和網(wǎng)絡(luò)記憶功能,實現(xiàn)相似數(shù)據(jù)快速壓縮。
該算法包括兩方面內(nèi)容:改進BP神經(jīng)網(wǎng)絡(luò)PID控制器(后文簡稱為:NBP-PID)和標準SDT壓縮及解壓算法。數(shù)據(jù)通過SDT壓縮及解壓過程視為被控對象,期望的解壓平均誤差δs作為給定輸入,實際解壓平均誤差δ作為系統(tǒng)的輸出。NBP-PID控制器不斷調(diào)整ΔE的輸出,進而控制δ輸出,直到偏差值小于算法停止運行的門限值Th為止,這樣便完成了第一組數(shù)據(jù)的壓縮。門限值計算公式為:
當首組數(shù)據(jù)壓縮完成后,保留此時控制器各個參數(shù),用做下一組數(shù)據(jù)壓縮時控制器參數(shù)的初始值,完成第二組數(shù)據(jù)的壓縮,以此類推。同時將壓縮好的首組數(shù)據(jù)用北斗無損壓縮算法繼續(xù)壓縮。圖2為首組數(shù)據(jù)壓縮算法的反饋控制系統(tǒng)模型。
1.2.1 NBP-PID控制器設(shè)計
在工業(yè)控制中,對PID控制器比例、積分、微分3個系數(shù)的調(diào)整一般很難。根據(jù)神經(jīng)網(wǎng)絡(luò)理論,三層BP神經(jīng)網(wǎng)絡(luò)可逼近任意線性和非線性函數(shù),通過神經(jīng)網(wǎng)絡(luò)的自身學(xué)習,加權(quán)系數(shù)調(diào)整可以使其穩(wěn)定狀態(tài)對應(yīng)某種最有規(guī)律下的PID控制器參數(shù)[8]。于是本文采用三層BP神經(jīng)網(wǎng)絡(luò)(4-5-3結(jié)構(gòu))來調(diào)整PID的參數(shù)。
輸入層神經(jīng)元為4個,分別是輸入rin、輸出yout、誤差error和常數(shù)1;隱含層選擇5個即可滿足要求,3個輸出神經(jīng)元對參數(shù)Kp、Ki、Kd進行在線調(diào)整。輸入層的輸入為:
1.2.2 自控精度有損壓縮算法實現(xiàn)步驟
(1)第一次進行壓縮時,對相應(yīng)的參數(shù)初始化。令u、u_1、u_2、u_3、u_4、u_5,即控制器的輸出零時刻和各歷史時刻初始值都為0,同時誤差error、輸出值yout零時刻和各歷史時刻也都初始化為0。隱含層的加權(quán)系數(shù)初始值和和輸出層加權(quán)系數(shù)的初始值為-0.5~0.5之間的隨機數(shù)。選定學(xué)習速率η、慣性系數(shù)α和β,以及門限值Th;
(2)采樣得到rin(k);將前一時刻控制器的輸出u(k-1),即ΔE傳入代表被控對象模型的壓縮解壓函數(shù)中計算,得到此時的輸出yout值,再計算該時刻的系統(tǒng)誤差error(k)=rin(k)-yout(k);
(3)計算神經(jīng)網(wǎng)絡(luò)各層神經(jīng)元的輸入、輸出,輸出層的輸出即對應(yīng)PID控制器的3個可調(diào)參數(shù)Kp、Ki、Kd,據(jù)此計算控制器當前時刻的輸出u(k);
(4)進行神經(jīng)網(wǎng)絡(luò)學(xué)習,在線調(diào)整輸出層和隱含層加權(quán)系數(shù)值,然后將各狀態(tài)參數(shù)更新;
(5)根據(jù)式(3),計算系統(tǒng)此時的Th值,如果小于預(yù)先設(shè)置的門限值,則表明此組數(shù)據(jù)已達到給定誤差壓縮要求,進入步驟(6),否則進入步驟(2),再次循環(huán);
(6)將此時刻以及前3個時刻的輸出層及隱含層加權(quán)系數(shù)值保存,作為下組數(shù)據(jù)壓縮時零時刻及歷史時刻的初始值,保存u及前5個時刻的值,作為下組數(shù)據(jù)壓縮各時刻u的初始值。同時,此組壓縮后的數(shù)據(jù)進入后續(xù)北斗無損壓縮算法中繼續(xù)壓縮;
(7)利用前一組保存的控制器各參數(shù)開始下一組數(shù)據(jù)的壓縮,即又一次進入步驟(2),直到所有組別的數(shù)據(jù)都壓縮完畢,算法結(jié)束。
2 北斗通信壓縮第二步——無損壓縮
相對于有損壓縮來說,無損壓縮占用空間大,壓縮比不高,但它 100%地保存了原始信息,沒有任何信號丟失,不受信號源影響[9]。 一般的工業(yè)過程數(shù)據(jù)都有明確的物理含義,以項目中某能源公司提供的天然氣閥站數(shù)據(jù)為例,包含了溫度、流量、壓力、阻力等模擬量信息,也有閥門啟停、報警等狀態(tài)量信息。
本文以過程數(shù)據(jù)中最常見的流量/壓力/阻力為例,對北斗無損壓縮算法作介紹。
2.1 數(shù)據(jù)預(yù)處理
假設(shè)待壓縮實數(shù)數(shù)據(jù)精度為兩位小數(shù),數(shù)據(jù)大小為0.00~999 999.00。且以一個float fRevBuf[500] 類型數(shù)組保存,若將此數(shù)組每個元素都乘以100,則其小數(shù)部分全部轉(zhuǎn)化成了整數(shù),再用強制類型轉(zhuǎn)化得到4 B的無符號整形數(shù)組 iPlc[500]。不同類型的整數(shù)可表示的數(shù)據(jù)范圍如表1前3行所示,且根據(jù)整數(shù)在計算機中的保存方式[10],可推得后面的4種情況。
2.2 北斗短報文通信無損壓縮算法
過程數(shù)據(jù)一般是按時間的先后順序采集的數(shù)據(jù),數(shù)據(jù)中帶有時間特性,大多數(shù)工業(yè)現(xiàn)場采集數(shù)據(jù)都是過程數(shù)據(jù)[11]。因此,數(shù)據(jù)之間在數(shù)值上是有關(guān)聯(lián)的,所以根據(jù)相鄰數(shù)組元素的差值,而不是元素值本身,對其分配存儲空間更為合理。下面為具體步驟:
(1)新建數(shù)組 int iSub[500],用于保存數(shù)組iPlc中相鄰元素的差值,即:iSub[i+1]=iPlc[i]-iPlc[i+1]; 并將iPlc數(shù)組中的首元素賦值給iSub數(shù)組中的首元素。
(2)根據(jù)差值數(shù)組iSub中的每個元素的值大小,對照表1,給每個元素分配一個從1~4不等的字節(jié)長度標記,并用另一個數(shù)組iLethByte作出記錄。如表2中,差值元素為100,iLethByte數(shù)組相同下標元素值為1。
(3)iLethByte數(shù)組中每一個元素記錄了相同下標位置的差值數(shù)組iSub每一個元素所需存儲空間的最小字節(jié)長度,為了在北斗接收端作解壓縮,除了傳遞iSub數(shù)組外也需要傳遞長度標記數(shù)組iLethByte,但這樣需要傳遞的數(shù)據(jù)量過大。根據(jù)表1可知,以不同字節(jié)長度可表示的不同的數(shù)值范圍為依據(jù),可分為7種類型,但現(xiàn)實中不需要每次都分成7種類型,因為過程數(shù)據(jù)數(shù)值大小具有一定的連續(xù)性,并不是平均分布的,于是每次壓縮時根據(jù)過程數(shù)據(jù)本身的分布規(guī)律選擇其中的4種(選擇的原則后面會補充)類型作為本次傳輸?shù)臉藴暑愋?,包含在其余類型里的?shù)據(jù)最終會歸類到這4種標準類型中,然后用兩位二進制數(shù)代碼來代指此次選出的4個標準類型。例如,此次的4個標準類型字節(jié)長度為1、2、2.5、3,則它們的二進制數(shù)代碼可依次為:00 01 10 11。然后每個元素按照所在的標準類型的字節(jié)長度壓縮數(shù)據(jù),變成一個個存儲長度不等的數(shù)據(jù),再將每4個變換之后的iSub數(shù)組元素組成一組,在每組前面添加一個記錄字節(jié)bt4Record,bt4Record為8位,每兩個二進制位可表示一個iSub元素所在的標準類型的代碼,且iSub元素在前面的對應(yīng)bt4Record的高位,在后面的對應(yīng)bt4Record的低位,如表2所示。至此,表2中這4個iSub元素前面的bt4Record字節(jié)二進制表示為:01100011。
(4)標準類型的選擇組合共為讓接收端確定是哪種組合,需要額外傳遞當前組合的編號。且單次需要壓縮的數(shù)據(jù)個數(shù)如不是4的倍數(shù),則使最后一個bt4Record字節(jié)不夠8位,此時對于不足的字節(jié)先補零,然后額外傳遞本組壓縮數(shù)據(jù)的總數(shù)值,便可使北斗接收端解壓無誤。在每組報文的開頭,取兩個字節(jié)(16個bit位),其中10個bit位記錄本次壓縮的數(shù)據(jù)元素總數(shù)值(10位可表示:210=1 024個數(shù),足夠),剩余6個bit位(26=64>35)表示標準類型組合編號。
至此,一次北斗短報文的數(shù)據(jù)報文打包完成。
(5)將經(jīng)過步驟處理后的數(shù)據(jù)通過北斗設(shè)備發(fā)送到接收端。接收端解壓時,先取出前兩個字節(jié),根據(jù)6個比特位的分類編號確定此組數(shù)據(jù)中的四種標準類型;根據(jù)10個比特位的數(shù)據(jù)個數(shù),確定此組原始數(shù)據(jù)的總個數(shù)。然后依次先取bt4Record,再按照此字節(jié)的記錄長度對每個差值元素取數(shù),分別保存成整數(shù),再依次取下一個bt4Record字節(jié)。對于接收到數(shù)據(jù)字節(jié)長度為1、2、4類型的,可根據(jù)表1直接強制類型轉(zhuǎn)化變回4個字節(jié)的整數(shù);對于其余自定義類型,則需要提取符號位,再根據(jù)正數(shù)的補碼與原碼相同,負數(shù)的補碼為原碼取反加一原則處理轉(zhuǎn)化成4個字節(jié)的整數(shù)。
(6)將步驟(5)保存的整數(shù)縮小100倍,再保存成實數(shù)類型,至此完成北斗無損壓縮的解壓縮過程。
補充:一組數(shù)據(jù)中最大值所在的類型必須是本次選取的標準類型之一。例如iSub[4]元素最大值為8 000 000,則字節(jié)為3的標準類型必須取,后再取其他可包含元素值最多的3個類型作為標準類型。
3 試驗結(jié)果與對比分析
實驗數(shù)據(jù)源于一滾鉚實驗機床,其作用是用滾鉚工具碾壓軸承外環(huán)邊緣的環(huán)形槽,使環(huán)形槽的一側(cè)邊緣向座圈孔或軸承的變形,進而實現(xiàn)軸向固定。數(shù)據(jù)源自機床中的壓力傳感器,一組數(shù)據(jù)表示一次壓緊過程,原始壓力曲線如圖3所示。(原始數(shù)據(jù)共18組,編號:S1~S18)圖中曲線下降階段是因為電機停轉(zhuǎn),壓力逐步除去引起的,停機時間人為控制,故為排除人為干擾,每組只取前20 s的數(shù)據(jù)(200個)。
后續(xù)實驗中都選定rin(k)為1,學(xué)習速率η為1.4,慣性系數(shù)α為0.3,β為0.5,門限值Th為0.1。且后續(xù)段落中,“第一階段”指的是北斗通信壓縮中的有損壓縮階段,“第二階段”為無損壓縮階段。
3.1 NBP-PID與標準BP神經(jīng)網(wǎng)絡(luò)PID控制器性能對比
圖4為在第一階段中,NBP-PID算法較標準BP神經(jīng)網(wǎng)絡(luò)PID算法(簡稱為BP-PID),6組數(shù)據(jù)單獨壓縮時各自達到門限值所需壓縮訓(xùn)練次數(shù)對比。
分析圖4可知,在修改網(wǎng)絡(luò)權(quán)值時,增加一個k-2時刻的慣性項和“階梯慣性項”系數(shù)的NBP-PID算法,可以減少重復(fù)壓縮的次數(shù),從而更快達到門限值。
圖5為第一組(S1)數(shù)據(jù)分別采用兩種算法解壓誤差和訓(xùn)練次數(shù)的曲線圖,采用NBP-PID可在訓(xùn)練11次時達到門限值,即達到給定值的90%以上而結(jié)束訓(xùn)練,而BP-PID在最大訓(xùn)練次數(shù)(20)內(nèi)無法達到給定值的90%。綜上,NBP-PID的確可以有效加快訓(xùn)練過程,減少重復(fù)壓縮的次數(shù),從而提升算法的實用性。
3.2 采用NBP-PID算法壓縮多組數(shù)據(jù)
表3給出當首組數(shù)據(jù)壓縮完成后,后續(xù)組別依次繼續(xù)壓縮,達到門限值的壓縮次數(shù)的測試數(shù)據(jù)。
根據(jù)表3知,首次壓縮數(shù)據(jù)在10次左右,后續(xù)組別重復(fù)壓縮次數(shù)除了個別組別達到最大訓(xùn)練次數(shù),其余數(shù)據(jù)組別基本可在一兩次之內(nèi)完成壓縮。因此通過NBP-PID網(wǎng)絡(luò)權(quán)值記憶功能,當類似數(shù)據(jù)出現(xiàn)時,可一定程度上加快后續(xù)組的壓縮,提升整體壓縮效率。
3.3 北斗通信壓縮算法整體壓縮分析
表4描述了兩個階段壓縮過程中具體壓縮信息。為排除偶然性,這里用的數(shù)據(jù)與前面實驗的數(shù)據(jù)不同,采用S10~S14的5組數(shù)據(jù)作為實驗數(shù)據(jù)。
這5組數(shù)據(jù)的平均解壓誤差δ在1.0附近,滿足給定值上下波動10%以內(nèi)的要求。有損壓縮階段的壓縮比平均為4.452,實現(xiàn)了用戶自定義壓縮誤差的同時還能擁有不錯的壓縮比。無損壓縮階段中,壓縮后的存儲空間是壓縮后的數(shù)組元素所占空間之和,加上記錄字節(jié)所占空間之和,再加上處在報文開頭的兩個字節(jié)的總和。
總壓縮率是無損壓縮之后所占存儲空間與原始數(shù)據(jù)所占存儲空間(800=4×200)之比??梢钥吹?,經(jīng)過兩個階段的壓縮之后,數(shù)據(jù)被壓縮到了原始數(shù)據(jù)的10.5% 左右。由此可見北斗壓縮算法的壓縮效果良好。
4 結(jié)論
本文提出的有損壓縮算法已經(jīng)在實驗室環(huán)境中完成測試,無損壓縮算法在某天然氣管線監(jiān)測項目中實際完成測試部署,效果良好?;诒倍吠ㄐ诺墓I(yè)數(shù)據(jù)壓縮算法一方面解決了SDT壓縮精度不可控、參數(shù)設(shè)置困難等問題;另一方面,數(shù)據(jù)經(jīng)過兩個階段的壓縮,獲得了較高的壓縮比。此外,該算法不僅可用于北斗短報文通信,也可用于其他通信頻度和報文長度受限的場合下,因此該算法具有工程實用價值。
參考文獻
[1] 楊元喜.北斗衛(wèi)星導(dǎo)航系統(tǒng)的進展、貢獻與挑戰(zhàn)[J].測繪學(xué)報,2010,39(1):1-6.
[2] 谷軍霞,王春芳,宋之光.北斗短報文通信信道性能測試與統(tǒng)計分析[J].氣象科技,2015,43(3):458-463.
[3] 于龍洋,王鑫,李署堅,等.基于北斗短報文的定位數(shù)據(jù)壓縮和可靠傳輸[J].電子技術(shù)應(yīng)用,2012,38(11):108-111.
[4] 陳海生,郭曉云,王峰,等.基于北斗短報文的漁獲信息壓縮傳輸方法[J].農(nóng)業(yè)工程學(xué)報,2015,31(22):155-160.
[5] 彭皓.北斗系統(tǒng)用戶通信數(shù)據(jù)擴容技術(shù)研究[D].西安:西安電子科技大學(xué),2013.
[6] 徐慧.實時數(shù)據(jù)庫中數(shù)據(jù)壓縮算法的研究[D].杭州:浙江大學(xué),2006.
[7] 曲奕霖,王文海.用于過程數(shù)據(jù)壓縮的自控精度SDT算法[J].計算機工程,2010,36(22):40-42.
[8] 譚永紅.基于BP神經(jīng)網(wǎng)絡(luò)的自適應(yīng)控制[J].控制理論與應(yīng)用,1994,11(1):84-87.
[9] 鄭翠芳.幾種常用無損數(shù)據(jù)壓縮算法研究[J].計算機技術(shù)與發(fā)展,2011,21(9):73-76.
[10] 張德偉,沈培鋒,張德珍,等.計算機補碼概念剖析[J].微計算機信息,2005,21(20):177-178.
[11] 沈春鋒,黃松鑫,張冬,等.基于參數(shù)估計的通用工業(yè)數(shù)據(jù)在線壓縮方法[J].控制工程,2011(s1):142-145.
作者信息:
陳 勇,黃茹楠,劉 青,李建坡,李 鑫
(燕山大學(xué) 電氣工程學(xué)院,河北 秦皇島066004)