導讀:傳統壓縮方法對DCS 模擬量進行壓縮效果不佳。要得到較好的壓縮效果就要從模擬量在計算機中表示的方法入手。本文分析了DCS 模擬量在計算機中存儲和表示方法及其特點,對原始數據進行預處理,使數據表現出較明顯的冗余信息,然后對數據的不同部分,采用不同的壓縮方法,每種壓縮算法壓縮模擬量數據的一部分。
與DCS 接口中,串行通訊是常見的接口方式。為了提高通訊效率,需要對通訊的數據進行壓縮處理。DCS 模擬量的壓縮方法中,常用整數表示工程量,即將模擬量的按其量程線性化處理為兩字節正整數(0~65535),應用時再轉換為工程量。這種方法由于要維護模擬量的量程表,不便于通信;另一類常用的壓縮方法是采用LZW 等基于字典模型的壓縮算法。模擬量數據是以單精度浮點數存放的,數據的冗余度很小,傳統的壓縮處理方法的壓縮效果都不理想。
本文從模擬量在計算機中的表示方法入手,首先將模擬量預處理,再針對數據的不同部分采用不同的方法進行壓縮,最后將壓縮后數據組合起來。這樣既充分考慮到了數據的特點,又充分利用了壓縮方法的適應性。
1 模擬量的表示方法及特點
1.1 模擬量的表示方法
DCS 模擬量用單精度浮點數表示,占用4 個字節,可以精確到7 位有效數字。按文獻[3] 標準(以下簡稱標準)表示。設一個浮點數R,可使用三元組{S,E,M}來表示:S 為符號位,用1 位表示。
S = 0 表示R 為正數,S = 1 表示R 為負數;E 為指數,用8bits表示。實際指數要經E - 127 計算后得到;M 為尾數,用23bits 表示。浮點數R 為S×1.M E(1 為隱含的一位尾數,不在M 中表示)。
1.2 模擬量的特點
數據壓縮需要信息有足夠的冗余度。以標準表示的模擬量不利于壓縮。即便差值很小的數據,在計算機中表示結果差別很大,如1234.5 在計算機中用四字節表示為:68 154 80 0 ,而1234.6表示為:68 154 83 51,僅有符號位和指數位表示相同,尾數完全不同,這樣就造成了壓縮的難度。
現以200 個模擬量數據為樣本分析其特點。樣本數據隨機產生,其范圍為[0.0,1000.0].按照標準存儲的數據從字符概率分布較平均,若用通用數據壓縮方法壓縮這些數據,得不到很好的效果。
雖然浮點數的信息冗余度很小,但若用其表示DCS 模擬量,仍有以下特點:
(1)各工程量數值多數大于零,因此標準表示中,符號位S 大多為零;
(2)各工程量的量程相差約為0.0001~10000 倍,因此標準表示中,指數差值約為-4 ~ 4 ;
(3)從數據精度考慮,工程量一般保留5 位有效數字即可。因此標準表示中,尾數部分有可壓縮的信息。
2 模擬量的預處理
模擬量預處理的目的是為了產生更多的冗余信息,獲得更好的壓縮效果。通信時一般將模擬量按測點表以自然順序排列。根據1.2 節的分析可知,若將模擬量按其三元組順序排列,即:N 個模擬量數據,其自然排列順序為{S1,E1,M1}、{S2,E2,M2}、…、{SN,EN,MN},共占用4N 字節。壓縮前將模擬量序列按字節重新排列為:
S1S2…SNE1E2…ENM1M2…MN.因符號位S 為1 位,重新排列后將8個模擬量的符號位合并為1 字節。故重新排列后N 個模擬量共占用字節數為4N+N/8(+1) 字節。(括號中+1 字節表示N 不是8 的整數倍時總字節數+1)。
圖1(a) 為樣本數據經重新排列后字節分布情況??梢钥闯鰯祿殉尸F明顯的規律性:第一部分數據[1,25] 為數據的符號,是樣本數據的符號。樣本數據均為正,因此由符號位構成的這部分數據全為零;第二部分數據[26,225] 為N 個樣本數據的指數,根據1.2 節分析可知,各數據的指數差值大約在-4~4 之間,故有較大的壓縮空間;最后一部分數據[226,825] 為N 個樣本的尾數,呈隨機分布。
第一次預處理是數據無損的??紤]到DCS 模擬量精度要求有5 位有效數字即可。根據信息理論,1 位十進制數可以精確表示log210 ≈ 3.32 位二進制數。單精度浮點數表示模擬量時,4 位二進制約可表示1 位十進制。因此,在精度滿足DCS 系統要求的情況下,可以減少一個字節尾數。第二次預處理將尾數的最低字節置零,進一步提高數據的冗余信息。圖1(b) 為第二次預處理后的字節分布情況。可以看出,相比第一次預處理,數據最后一部分[626,825] 全為零,可以更好地被壓縮。
3 壓縮算法的選擇
3.1 壓縮算法選擇原則
壓縮算法要根據原始數據的特點以及對速度、性能的綜合要求來選擇。模擬量的壓縮應用在數據通信中,對速度的要求較高。
因此壓縮算法不能過于復雜,運算量要小。
從預處理后的樣本數據可以看出,每一部分數據的特點不同,因此選擇壓縮算法時應針對不同特點的數據采用不同的壓縮算法來處理。第一部分數據(由符號位組成)為零(或絕大部分為零),可以采用游程編碼(Run Length Encoding);第二部分數據(由指數組成)數值間相差不大,可用差分編碼(Differential Encoding);第三部分數據(由部分尾數組成)隨機性較大,壓縮效果不明顯,因此不進行壓縮;第四部分數據(由最低字節尾數組成)均為零,可采用游程編碼。
3.2 差分編碼
差分編碼又稱相關編碼。當源數據之間差值不大時,用數據間的差值代替源數據序列。較小的差值可以用較少的位數表示。本文用4 位二進制表示一個差值。
源數據中序列E1E2…EN 為數據的指數,其差值約在-4 ~ 4之間,用4 位二進制表示此差值:最高位用來表示差值的符號,其余三位表示差值,-7 保留。可表示的差值范圍為-6~+7 ;若差值大于此范圍,則不壓縮,用原碼輸出。為了區分是差值輸出還是原碼輸出,用保留的-7 表示下一字節為原碼輸出。N 字節源序列,若每一字節都可以用相鄰差值來表示,其理想壓縮比為1:(N/2+1)/N=1:0.5+1/N.
圖2 為樣本數據差分編碼壓縮后字節分布??梢钥吹?,源數據中表示指數的部分已經被有效壓縮。樣本數據由825 字節壓縮到726 字節,實際壓縮率為88.0%.
3.3 游程編碼
游程編碼的思路是:若數據項d 在源數據中連續出現n 次(n稱為重復因子),則在輸出流中以nd 代替n 個重復項d.游程編碼也可能出現壓縮比大于1 的情況。為了區分輸出項是重復因子還是被壓縮數據,規定當重復因子n ≥ 3 時,輸出ddd(n-3) ;n < 3時,輸出n 個d,即不壓縮輸出。另外重復因子3 ≤ n ≤ 255,若數據項d 重復次數大于255,則要重新進行游程編碼。設源數據長度為N,包含M 次重復,每次重復平均長度L,則游程編碼壓縮比為1:(N-M×(L-4))/N.
樣本數據經預處理后第一部分(由符號位組成)和第四部分(由最低位尾數組成)可以用游程編碼。這部分數據可以獲得很高的壓縮比。第一部分理想壓縮比為1:4/25=1:0.16 ;第四部分理想壓縮比為1:4/200=1:0.015.
圖3 為經游程編碼壓縮后的數據分布圖。由上一級差分編碼壓縮后的726 字節壓縮至510 字節,實際壓縮比為1:0.70.
4 結論
200 個樣本數據經預處理,對一部分數據進行差分編碼、對另一部分數據進行游程編碼,最終有510 個字節。因此綜合壓縮比為1:510/800 ≈ 1:0.64,節省約36% 的空間。由于樣本數據的隨機性,因此可以推廣到一般情況。得到以下結論:
(1)分部壓縮方法可以獲得約1:0.64 的壓縮比;
(2)分部壓縮方法為二級壓縮算法構成。分別針對模擬量中不同信息類型的數據進行分部壓縮;
(3)差分編碼和游程編碼的算法的復雜度低,其時間復雜度和空間復雜度均為O(n),故算法效率很高。
(4)壓縮過程未涉及到數據的工程特性,因此算法可推廣至工業過程控制領域,具有一定的實用價值。
-
存儲
+關注
關注
13文章
4353瀏覽量
86105 -
計算機
+關注
關注
19文章
7534瀏覽量
88502 -
DCS
+關注
關注
20文章
613瀏覽量
50235
發布評論請先 登錄
相關推薦
評論