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