桂 勛
(電子科技大學(xué) 航空航天學(xué)院,四川 成都 610054)
電力系統(tǒng)電磁暫態(tài)過程是電力系統(tǒng)中短暫的、但非常重要的物理過程。所有的故障都伴隨著相應(yīng)的電磁暫態(tài)過程,現(xiàn)代電力系統(tǒng)故障診斷、廣域保護(hù)和穩(wěn)定分析愈加依賴于電網(wǎng)動態(tài)監(jiān)測系統(tǒng)采集的含豐富故障信息的暫態(tài)過程信號。因此,對電磁暫態(tài)的監(jiān)測、記錄和分析一直是電力系統(tǒng)中一個重要的研究方向。近年來隨著電子技術(shù)的快速發(fā)展,電力系統(tǒng)內(nèi)暫態(tài)錄波逐步向高采樣率、連續(xù)穩(wěn)態(tài)記錄和海量存儲方向發(fā)展[1]。為了提高故障錄波數(shù)據(jù)的傳輸效率和降低存儲空間,眾多文獻(xiàn)提出了各種壓縮算法[2-15],其中可分為直接離散小波變換壓縮[2-7]、直接熵編碼[8-9]壓縮以及這 2 種算法的綜合[10-13]共 3 類。其中在離散小波壓縮研究領(lǐng)域,由于第1代離散小波變換Mallat算法[14]相對于第2代基于提升格式的離散小波變換算法[15]無法實(shí)現(xiàn)無損壓縮,且計算量大、需要額外內(nèi)存[10-12,15],第 2 代基于提升格式的離散小波變換和熵編碼的綜合壓縮算法[10-12]成為當(dāng)前此領(lǐng)域內(nèi)的研究熱點(diǎn)。
然而到目前為止這些壓縮算法在實(shí)際應(yīng)用中卻存在以下問題。
a.以往壓縮算法是為了解決電話線傳輸速率過低的問題,但隨著電力通信網(wǎng)絡(luò)的改善,百兆、千兆以太網(wǎng)大規(guī)模安裝,通信效率已經(jīng)不再是難以克服的瓶頸,因此,目前眾多廠家已經(jīng)放棄了原有的復(fù)雜壓縮、解壓方案,而直接在高速以太網(wǎng)上傳輸錄波文件。而另一方面,保信系統(tǒng)廠家不可能讓負(fù)責(zé)上傳錄波文件的子站和主站軟件系統(tǒng)為每個錄波器廠家實(shí)現(xiàn)復(fù)雜的壓縮/解壓通信協(xié)議。正因?yàn)檫@兩方面的原因,限制了原有壓縮算法的實(shí)際應(yīng)用范圍。
b.以往壓縮算法是為了解決海量錄波數(shù)據(jù)的存儲問題。但在電力系統(tǒng)內(nèi),目前所有的暫態(tài)記錄格式逐漸被統(tǒng)一到了 IEEE COMTRADE 1999[16](下文簡稱COMTRADE)標(biāo)準(zhǔn)上,而幾乎所有的第三方暫態(tài)分析軟件都是以COMTRADE標(biāo)準(zhǔn)為輸入格式的。因此,即使在保信系統(tǒng)上采用了壓縮/解壓通信協(xié)議,在主站上還是要解壓后以COMTRADE標(biāo)準(zhǔn)保存,否則第三方分析軟件無法使用。因此壓縮算法也沒有解決實(shí)際中面臨的海量COMTRADE數(shù)據(jù)存儲問題。
c.隨著多核和嵌入式多核的大規(guī)模普及,帶來了一場計算技術(shù)革命:傳統(tǒng)的串行編程技術(shù)被完全顛覆,逐漸被基于多線程模式的并行編程技術(shù)所取代。軟件要提高運(yùn)行速度和效率已經(jīng)不能依賴CPU主頻,而要使軟件系統(tǒng)本身在設(shè)計上適應(yīng)新的計算機(jī)體系結(jié)構(gòu)。而此領(lǐng)域內(nèi)以往提出的算法都是串行算法,已經(jīng)無法適應(yīng)計算機(jī)體系結(jié)構(gòu)的發(fā)展。
筆者經(jīng)過現(xiàn)場調(diào)研后認(rèn)為,只有直接面向COMTRADE標(biāo)準(zhǔn)文件的壓縮算法才能徹底解決問題a、b,假如實(shí)現(xiàn)了通用的COMTRADE標(biāo)準(zhǔn)壓縮/解壓算法及其工具,就可利用所有保信系統(tǒng)內(nèi)都具有的文件傳輸協(xié)議來直接傳輸,在主站內(nèi)就可免去解壓,直接進(jìn)行存儲,需要分析的時候,只需調(diào)用相應(yīng)的解壓軟件。這種應(yīng)用模式可把以往算法和傳輸?shù)木o密關(guān)系完全解耦,更加簡單可靠,而各種第三方分析軟件系統(tǒng)也可攜帶此工具,為各種電力用戶節(jié)約存儲空間。基于這種思路,筆者在已有研究的基礎(chǔ)上,結(jié)合多年的電力系統(tǒng)故障分析軟件研發(fā)經(jīng)驗(yàn),提出了面向COMTRADE標(biāo)準(zhǔn)的并行壓縮/解壓算法,并構(gòu)建了相應(yīng)的壓縮/解壓工具。算法根據(jù)COMTRADE中不同種類記錄信息的特點(diǎn),采用不同的壓縮算法或混合壓縮算法,獲得極大的壓縮比,且具有線性加速比,可較好地解決以往算法在實(shí)際應(yīng)用中出現(xiàn)的問題。
IEEE Std C37.111—1999規(guī)定和記錄信息相關(guān)的文件有4個:頭標(biāo)文件(文件擴(kuò)展名為HDR)、配置文件(文件擴(kuò)展名為CFG)、數(shù)據(jù)文件(文件擴(kuò)展名為DAT)以及1個可選的信息文件(文件擴(kuò)展名為INF)。其中對于第三方暫態(tài)數(shù)據(jù)分析軟件而言最重要的是配置文件和數(shù)據(jù)文件,其他文件是可選的。對于壓縮算法而言,除了數(shù)據(jù)文件外,其他文件都可視為純文本文件,以文本流的方式進(jìn)行壓縮。
要求計算機(jī)程序能夠讀取配置文件,獲取內(nèi)部的屬性信息,并采用這些屬性信息正確地讀取數(shù)據(jù)文件(*.DAT)中的記錄數(shù)據(jù)。配置文件為ASCII文本文件,包含著計算機(jī)程序?yàn)榱苏_解讀數(shù)據(jù)文件而需要的信息。配置文件由若干行組成,每個字段都有對應(yīng)的明確物理意義。其具體內(nèi)容為:站名,記錄裝置的特征,COMTRADE標(biāo)準(zhǔn)的修改年份;模擬量和狀態(tài)量通道的數(shù)量;模擬量通道采樣信息(包括模擬通道索引號、通道識別名稱等配置信息);狀態(tài)量通道采樣信息(包括狀態(tài)通道索引號、通道識別名稱等配置信息);被采樣線路的頻率;采樣頻率個數(shù),實(shí)際采樣頻率及其對應(yīng)的結(jié)束采樣下標(biāo);第1個數(shù)據(jù)點(diǎn)的日期和時間;觸發(fā)點(diǎn)的日期和時間;數(shù)據(jù)文件類型,表示數(shù)據(jù)文件是ASCII文本文件還是二進(jìn)制文件;時間標(biāo)記倍乘系數(shù)。
數(shù)據(jù)文件記錄著每個采樣通道中的每個采樣數(shù)值。數(shù)據(jù)文件可以是ASCII或二進(jìn)制格式。二進(jìn)制數(shù)據(jù)文件和ASCII數(shù)據(jù)文件格式類似,每行應(yīng)分為T+2列,其中T是配置文件中模擬量通道和狀態(tài)量通道的總和,另外2列是采樣序號和時間標(biāo)記。二進(jìn)制文件以BIT形式集中存放狀態(tài)量通道數(shù)據(jù)。各個數(shù)據(jù)之間沒有分隔符,每組采樣值之間沒有回車換行符隔開。各列的具體內(nèi)容如下:第1列為采樣序號;第2列為采樣數(shù)據(jù)的時間標(biāo)記;第3組的列為表示模擬量通道信息的采樣數(shù)據(jù)值;第4組的列為表示狀態(tài)量通道信息的采樣數(shù)據(jù)值。其數(shù)據(jù)文件格式的例子如圖1所示。
圖1 數(shù)據(jù)文件格式Fig.1 Format of data file
從圖1可見數(shù)據(jù)文件分為采樣序號、時間標(biāo)記數(shù)據(jù)、模擬量通道數(shù)據(jù)、狀態(tài)量通道數(shù)據(jù)4個部分。其中采樣序號在壓縮時可以完全丟棄,下面分別討論其他3個部分的壓縮算法。
由于采樣時間標(biāo)記是一個遞增的量,可通過配置文件中的采樣頻率間接計算得到,因此壓縮此項(xiàng)數(shù)據(jù)時只需記錄數(shù)據(jù)文件中記錄的第1個時間標(biāo)記數(shù)據(jù)、配置文件中的采樣率個數(shù)和實(shí)際采樣頻率及其對應(yīng)的結(jié)束采樣下標(biāo)、配置文件中的時間標(biāo)記乘數(shù)3種信息,即可在解壓時進(jìn)行無損恢復(fù)。解壓算法公式為:
其中,ta為累加偏移時間,初值為0;f為當(dāng)前采樣頻率;n為當(dāng)前采樣頻率下從0開始的序號;t1為數(shù)據(jù)文件中的第1個采樣時間;tm為配置文件中的時間標(biāo)記乘數(shù);ts為采樣時間標(biāo)記。算法首先計算累加偏移時間,并將采樣間隔時間單位轉(zhuǎn)換為COMTRADE標(biāo)準(zhǔn)規(guī)定的微秒。將累加偏移時間除以時間標(biāo)記乘數(shù)后加上t1,再取整就可無損恢復(fù)出所有的時間標(biāo)記。
在COMTRADE標(biāo)準(zhǔn)中,BIANRY格式數(shù)據(jù)文件中的狀態(tài)量數(shù)據(jù)是以BIT形式保存的,而在ASCII碼中則是以1個字符(“0”或“1”)來表示。在BINARY格式中,狀態(tài)量通道所占存儲空間的計算公式為:
其中,mod為取整運(yùn)算,%為取余數(shù)運(yùn)算。
由式(2)可以知道,即使是只有1個狀態(tài)量通道,狀態(tài)量數(shù)據(jù)也要占據(jù)2 Byte的存儲空間,即對于COMTRADE標(biāo)準(zhǔn)而言狀態(tài)量數(shù)據(jù)保存是有冗余量的。并且通過電力系統(tǒng)內(nèi)大量COMTRADE標(biāo)準(zhǔn)歷史數(shù)據(jù)的驗(yàn)證,在所有狀態(tài)量通道中,95%以上的通道記錄根本沒有狀態(tài)變化,而只有極少量的狀態(tài)量通道記錄了開關(guān)量變位信息。
對于這種只有2種變化的量,結(jié)合COMTRADE狀態(tài)量的特點(diǎn),算法設(shè)計了最簡游程編碼RLE(Run Length Encoding),即采用游程L的正表示狀態(tài)1,L的負(fù)表示狀態(tài)0,而L的絕對值表示游程長度,例如對于 111111110000000,就可用(+8,-7)來表示,而對于沒有狀態(tài)量變換的狀態(tài)量通道,將其分別歸為全1狀態(tài)量通道和全0狀態(tài)量通道類,其中每一類只是記錄對應(yīng)的通道編號,通道編號的整型字節(jié)長度依據(jù)通道數(shù)量的多少而定,通常情況下數(shù)字量通道數(shù)都在256以內(nèi),所以可以將通道編號整型長度的初值設(shè)為1Byte。通過這種壓縮編碼就可對具有大量狀態(tài)量信息的COMTRADE標(biāo)準(zhǔn)記錄文件進(jìn)行大幅壓縮。
高頻采樣模擬量數(shù)據(jù)在IEEE COMTRADE數(shù)據(jù)文件中是以2 Byte的整型數(shù)保存的。因此,基于浮點(diǎn)數(shù)運(yùn)算的Mallat算法將無法實(shí)現(xiàn)無損壓縮,且計算量也比第2代提升格式的離散小波變換至少高出一倍。因此本算法中針對模擬量數(shù)據(jù)的壓縮首先采用提升格式的離散小波變換,根據(jù)用戶選擇是否進(jìn)行有損壓縮,進(jìn)一步采用硬閾值方法進(jìn)行量化[7],最后采用熵編碼算法進(jìn)行壓縮的混合壓縮算法。
2.3.1 提升格式小波變換
提升格式小波變換與Mallat算法相比的區(qū)別在于不依賴傅里葉變換,在時域內(nèi)就可實(shí)現(xiàn)小波構(gòu)造。對信號進(jìn)行一次提升變換就相當(dāng)于進(jìn)行一次小波分解,一個典型的提升格式離散小波變換包括分裂、預(yù)測和更新3個步驟。而重構(gòu)則是此過程的逆,即更新、預(yù)測和合并。整個提升小波的分解和重構(gòu)如圖2所示。
圖2 小波提升方法的分解與重構(gòu)Fig.2 Decomposition and reconstruction of lifting wavelet transform
從圖2可知,提升格式小波變換就是不斷對偶數(shù)序列(把原始序列也看作偶數(shù)序列)減半后進(jìn)行分解的過程,而重構(gòu)過程則是分解過程的逆。對應(yīng)于計算內(nèi)部實(shí)現(xiàn),對其分解和重構(gòu)的原理如圖3所示。
圖3 提升方法的計算機(jī)實(shí)現(xiàn)Fig.3 Computer implementation of lifting wavelet transform
從圖3可知,小波分解的第1步分裂,就是將原始序列Sj的偶數(shù)部分移動到前半部分,奇數(shù)部分移動到后半部分,而后進(jìn)行預(yù)測和更新,一直持續(xù)該過程,而重構(gòu)是此過程的逆,不需要任何格外的內(nèi)存就可完成全部變換。對于一個有2H個點(diǎn)的輸入原始數(shù)據(jù),經(jīng)過h(h<H)次小波變換后,尺度系數(shù)的點(diǎn)為序列左邊的2H-h個點(diǎn),其余點(diǎn)為小波系數(shù),由此可見小波分解層數(shù)越深,可供量化的小波系數(shù)也就越多,故壓縮效率也就更高。本文算法中提供了多種整數(shù)小波變換,可供用戶進(jìn)行選擇,它們在尺度j上的變換公式如下所示。
其中,Sj、Dj為經(jīng)過j-1層分解后得到的偶序列和奇序列,l為序列數(shù)組下標(biāo)。
2.3.2 熵編碼壓縮算法
熵編碼壓縮主要是利用數(shù)據(jù)或數(shù)據(jù)序列出現(xiàn)概率的分布特性來尋求概率與碼字長度間的最優(yōu)匹配。 常用的熵 編碼有 Huffman、LZ77、LZ78、LZW、RLE、算術(shù)編碼等[17]。眾多文獻(xiàn)已經(jīng)證明了單純采用一種熵編碼很難取得高壓縮比,文獻(xiàn)[12]采用了RLE和LZW的混合編碼,取得了較好的壓縮效果。本文中采用了著名的混合熵編碼Deflate算法,其采用了經(jīng)過優(yōu)化后的LZ77和Huffman的混合熵編碼算法,壓縮比和速度更快。由于Deflate算法很好地平衡了壓縮效率和速度,所以很多壓縮軟件(PKZIP、WinZip、gzip)均采用了Deflate算法或由其衍生出來的其他算法,Deflate算法的解壓算法名稱為Inflate。
LZ77編碼算法是由Lempel和Ziv于1977年提出的一種字典壓縮算法,其核心思想是把已輸入的數(shù)據(jù)流的一部分作為字典,編碼器為輸入流開一個滑動窗口,隨著字符串編碼的輸入把窗口中的數(shù)據(jù)從右向左移動,并在其中尋找數(shù)據(jù)中相同的部分,即尋找最長字符串匹配,由此在編碼過程中形成一種內(nèi)容形式為(距離,匹配長度)的動態(tài)字典。LZ77在壓縮時需要進(jìn)行大量的字符串匹配工作,這也是LZ77效率上最低的地方,為此Deflate算法采用哈希表來提高匹配速度。在哈希表匹配過程中,采用當(dāng)前字符串中頭3個字符來計算1個哈希值,并將具有相同哈希值的匹配字符串利用鏈表連接起來,而尋找最長匹配字符串的過程,即通過哈希值找到鏈表頭后,遍歷鏈表,最后確認(rèn)最長匹配字符串。
在經(jīng)過LZ77編碼輸出后,Deflate算法采用Huffman編碼進(jìn)一步壓縮數(shù)據(jù)。Deflate算法在對一塊數(shù)據(jù)進(jìn)行Huffman編碼前,會同時建立靜態(tài)Huffman樹和動態(tài)Huffman樹;然后根據(jù)要輸出的內(nèi)容和生成的Huffman樹,計算靜態(tài)和動態(tài)Huffman樹的最終生成塊大小,而后進(jìn)行比較,采用生成塊較小的算法進(jìn)行編碼。采用這種方法,Deflate算法避免了由于文件較小時動態(tài)Huffman樹編碼比靜態(tài)Huffman編碼生成塊大的情況,保證最終輸出塊始終小于編碼輸入塊,這一點(diǎn)是其他算法很難做到的。
在電力系統(tǒng)內(nèi)部,很多COMTRADE標(biāo)準(zhǔn)記錄文件中的最后一個采樣段都是低頻采樣的(小于100Hz)模擬量數(shù)據(jù),這些低頻數(shù)據(jù)通常是當(dāng)前模擬量通道的有效值。這些數(shù)據(jù)對于故障分析沒有太大意義,并且通常也是沒有任何變化的量,對于這類低頻數(shù)據(jù)本算法缺省采用RLE算法,將數(shù)據(jù)壓縮成(數(shù)值,長度)對。
由于COMTRADE標(biāo)準(zhǔn)記錄文件內(nèi)通常包含多個采樣頻率下的數(shù)據(jù),壓縮算法不可能一次性加載全部模擬量通道數(shù)據(jù),并且待壓縮數(shù)據(jù)點(diǎn)數(shù)也不太可能是2的冪級數(shù),因此可能需要在采樣頻段尾部補(bǔ)零,壓縮算法就面臨一次讀取多少采樣數(shù)據(jù)進(jìn)行小波分解、壓縮的問題。為此本文提出了一種采用配置文件中提供的采樣頻率信息的壓縮數(shù)據(jù)區(qū)間最佳劃分算法。
為防止小波分解層數(shù)過多而導(dǎo)致基頻分量在小波變換過程中被分解,影響壓縮效率,本文算法采用式(7)[7]計算最佳小波分解層數(shù),并由此倒推出要獲取最佳壓縮效果的最小數(shù)據(jù)點(diǎn)數(shù)公式見式(8):
式(8)的意義是在采樣頻率fs下,經(jīng)過n層小波分解,最后剛好有2個點(diǎn)為尺度系數(shù),即實(shí)際中要求的待分析數(shù)據(jù)量必須為 B 的 2k(k=0,1,2,…)倍,才能獲取最佳壓縮效果。根據(jù)式(8)可得到在采樣頻率為fs、采樣數(shù)據(jù)總數(shù)為K時的最小補(bǔ)零個數(shù)為:
假設(shè)處理數(shù)據(jù)緩沖區(qū)大小為SB=2m(m>n+1),于是可得以SB劃分的數(shù)據(jù)區(qū)間個數(shù)M為:
而對余下的數(shù)據(jù)則需要計算出其相對于B的倍數(shù)L。
對式(11)中的L以二進(jìn)制方式從最高BIT位起依次判斷P位是0還是1,如果是1則利用式(12)獲取一個數(shù)據(jù)劃分大小Y:
通過以上算法就可得到一組可最少補(bǔ)零的數(shù)據(jù)劃分,例如在fs=9600 Hz時,共采集了15543點(diǎn)數(shù)據(jù),當(dāng)前計算緩沖區(qū)為4096個整型數(shù)據(jù),則采用以上算法可自動將數(shù)據(jù)劃分為3個大小為4096的區(qū)間、1個大小為2048的區(qū)間、1個大小為1024的區(qū)間和1個大小為256的區(qū)間。最小的一個區(qū)間需要補(bǔ)零73個。由此可見采用此算法所劃分的區(qū)間,滿足了最佳小波分解層數(shù)的要求,且補(bǔ)零個數(shù)最少,在壓縮效果和壓縮效率間找到了一個較好的平衡點(diǎn)。
如圖4所示,并行壓縮算法首先解析COMTRADE配置文件,再利用其內(nèi)信息創(chuàng)建壓縮文件頭并寫入壓縮文件后,將COMTRADE配套文本文件(*.cfg等)依次采用Deflate算法進(jìn)行壓縮,并寫入壓縮文件中。隨后通過第3節(jié)提供的劃分算法,依據(jù)采樣率信息自動創(chuàng)建數(shù)據(jù)壓縮劃分區(qū)間,并根據(jù)此區(qū)間依次將原始數(shù)據(jù)讀入并解析到模擬量通道數(shù)據(jù)壓縮共享管理器內(nèi)預(yù)先分配好的通道數(shù)據(jù)緩沖區(qū)中。此時通知激活已經(jīng)創(chuàng)建并等待的模擬量壓縮線程組和狀態(tài)量壓縮線程組(并行壓縮算法采用的線程CPU核心映射原則是:每個核心映射1個模擬量壓縮線程和1個狀態(tài)量壓縮線程)。而后這些線程將向模擬量通道數(shù)據(jù)壓縮管理器請求待壓縮通道序號。
對于模擬量數(shù)據(jù)而言,壓縮線程通過判斷采樣頻率是否高于100Hz選用不同的壓縮策略。對于有損壓縮,當(dāng)采用提升格式小波變換后,采用文獻(xiàn)[7]中介紹的閾值處理方法,該方法在閾值選擇過程中考慮了噪聲的小波變換系數(shù)在小波系數(shù)空間的傳播特性,能夠很好地抑制噪聲對壓縮性能的影響。壓縮后的數(shù)據(jù)直接寫入壓縮文件內(nèi)。
圖4 COMTRADE并行壓縮算法Fig.4 COMTRADE parallel compression algorithm
其中,tj為在尺度j下的硬閾值;σ為噪聲強(qiáng)度;N為尺度j下的小波系數(shù)個數(shù);γ為常數(shù),選擇范圍為1~3。其中噪聲強(qiáng)度σ可根據(jù)第i次小波變換后的小波系數(shù)計算得到,計算公式為:
其中,di為第i次小波變換后的小波系數(shù),為均值,N為小波系數(shù)個數(shù)。本算法中,γ取值1、2、3分別被映射為“一般”、“較好”、“最好”3種壓縮選項(xiàng)。
對于狀態(tài)量數(shù)據(jù)而言,壓縮線程每次更新在狀態(tài)量通道數(shù)據(jù)緩沖區(qū)的壓縮數(shù)據(jù),只有當(dāng)壓縮線程遍歷狀態(tài)量通道的全部狀態(tài)量數(shù)據(jù)后,才提煉得出全1通道序號數(shù)組、全0通道序號數(shù)組和狀態(tài)量發(fā)生變化通道壓縮數(shù)據(jù),最后將這3類壓縮數(shù)據(jù)寫入文件。
這種基于申請序號的線程競爭計算方式,可使壓縮算法效率隨著CPU核心數(shù)量的增加而提高。
經(jīng)過第4節(jié)的并行壓縮算法,最終壓縮文件形成了如圖5所示的壓縮存儲格式,其中每個部分都是一個可根據(jù)壓縮數(shù)據(jù)變化的量,不能直接采用固定大小結(jié)構(gòu)體設(shè)計,為此設(shè)計了如下所示的通用變長結(jié)構(gòu)體。
此結(jié)構(gòu)的大小計算程序公式為:
其中,Count為實(shí)際存儲數(shù)據(jù)大小,采用此大小分配內(nèi)存后,對于type類型數(shù)據(jù)Data,可直接用數(shù)組形式訪問,這樣就形成了一個變長的結(jié)構(gòu)體。
圖5 壓縮文件格式Fig.5 Format of compressed file
壓縮文件的讀取就是利用nStructSize來確定讀寫大小,采用nStructType來判斷數(shù)據(jù)類型,進(jìn)而準(zhǔn)確讀取所有的壓縮數(shù)據(jù)塊。在此壓縮存儲格式中,模擬量數(shù)據(jù)以壓縮時數(shù)據(jù)劃分的形式順序保存,而狀態(tài)量數(shù)據(jù)則集中保存在文件最后,在壓縮文件頭中有指向狀態(tài)量壓縮數(shù)據(jù)的具體偏移數(shù)據(jù)。
圖6 并行解壓算法Fig6 Parallel decompression algorithm
對于第5節(jié)闡述的壓縮文件格式,采用如圖6所示的并行解壓算法進(jìn)行解壓。在解壓主線程內(nèi),首先采用Inflate算法對COMTRADE配套文本文件壓縮數(shù)據(jù)進(jìn)行解壓,并保存到文件。之后解壓主線程通過壓縮文件頭內(nèi)提供的狀態(tài)量壓縮數(shù)據(jù)偏移量信息,直接定位并一次性將壓縮數(shù)據(jù)讀入到狀態(tài)量壓縮數(shù)據(jù)共享存儲器內(nèi)。隨后依據(jù)壓縮文件頭內(nèi)提供的數(shù)據(jù)劃分信息,將一次數(shù)據(jù)劃分的全部數(shù)據(jù)讀入模擬量通道壓縮數(shù)據(jù)共享管理器內(nèi),之后解壓主線程將激活模擬量通道數(shù)據(jù)解壓線程,并等待解壓完畢(并行壓縮算法采用的線程CPU核心映射原則是每個核心映射1個模擬量解壓線程)。激活后的各個解壓線程向共享管理器申請解壓通道序號,根據(jù)原始采樣率判斷是否為高頻模擬量壓縮數(shù)據(jù),之后采用不同的解壓策略。當(dāng)一次數(shù)據(jù)劃分并行解壓完畢后,解壓主線程等待結(jié)束,隨后采用狀態(tài)量壓縮數(shù)據(jù)解壓出當(dāng)前數(shù)據(jù)劃分下的狀態(tài)量信息,再將時間信息還原后加上采樣編號,最后寫入解壓文件。持續(xù)此過程直到所有數(shù)據(jù)劃分區(qū)間被讀取并被并行解壓完畢。同第4節(jié)所述并行壓縮算法類似,此并行解壓算法采用基于申請序號的線程競爭處理方式,可使解壓效率隨著CPU核心數(shù)量的增加而提高。
將本文算法應(yīng)用于4核CPU計算機(jī),配置為:單核主頻 2.4GHz,內(nèi)存 1GByte,硬盤轉(zhuǎn)速 7 200 r/min。
從表1可見Deflate算法的速度很快,而其解壓算法Inflate的速度是Deflate算法是5~9倍。從表2可見,對于同樣大小的原始計算數(shù)據(jù),不同插值點(diǎn)的提升格式小波變換計算時間的差別并不明顯,以6.4×104個計算點(diǎn)為例,CDF(2,2)和 CDF(8,2)計算時間相差208 ms。
表1 Deflate/Inflate算法效率試驗(yàn)結(jié)果Tab.1 Results of Deflate/Inflate algorithm efficiency test
表2 提升格式小波變換效率試驗(yàn)結(jié)果Tab.2 Results of lifting wavelet transform efficiency test
為了體現(xiàn)算法在實(shí)際應(yīng)用中的壓縮效果,選用了在電力系統(tǒng)內(nèi)部具有典型意義的4種COMTRADE文件(文件詳細(xì)信息如表3所示),其具體分類如下所表述。
文件1:典型的單相接地故障記錄數(shù)據(jù)文件,記錄末尾有少量低頻采樣數(shù)據(jù)。
文件2:典型的保信系統(tǒng)上傳文件,記錄大量意義不大的穩(wěn)態(tài)數(shù)據(jù)及其開關(guān)量變位信息,記錄末尾有較多低頻采樣數(shù)據(jù)。
文件3:故障持續(xù)時間較長,采樣頻率高,記錄中沒有低頻數(shù)據(jù)。
文件4:系統(tǒng)發(fā)生較長時間擾動,錄波器連續(xù)進(jìn)行長時間錄波,完整記錄整個過程,此類連續(xù)長時間采樣也是未來電力系統(tǒng)自動化錄波的發(fā)展趨勢。
為和以往文獻(xiàn)試驗(yàn)結(jié)果對比,試驗(yàn)采用以往眾多文獻(xiàn)推薦的 CDF(4,2)小波,從表 4、5 所示的壓縮比試驗(yàn)結(jié)果上看,本文算法均可獲得非常大的壓縮比,當(dāng)COMTRADE文件逐漸變大后,壓縮比也逐漸變大,特別是文件4,在有損壓縮時取得了高達(dá)96.6和287.0的壓縮比。而對于無損壓縮,此算法也取得了很好的效果,文件4取得了5.7和16.9的高無損壓縮比,而文件2由于尾部有較多低頻數(shù)據(jù),取得了更高的壓縮比。
表3 壓縮/解壓試驗(yàn)COMTRADE數(shù)據(jù)Tab.3 COMTRADE data of compression/decompression test
表4 有損壓縮試驗(yàn)結(jié)果Tab.4 Results of loss compression test
表5 無損壓縮試驗(yàn)結(jié)果Tab.5 Results of lossless compression test
表6中針對文件4類型的COMTRADE文件,采用4種小波分別進(jìn)行有損壓縮,可見隨著參與插值的點(diǎn)數(shù)增加,獲得了更小的壓縮文件。筆者還通過大量試驗(yàn)證明,在諸多文獻(xiàn)中提到的CDF(4,2)的壓縮效果最好的結(jié)論,實(shí)際上過于片面,試驗(yàn)中CDF(6,2)、CDF(8,2)小波對于COMTRADE中大量存在的小擾動系統(tǒng)錄波數(shù)據(jù)具有更高的壓縮比。并且由表2可見插值點(diǎn)數(shù)的增加對于提升小波變換速度的影響有限,所以筆者認(rèn)為對于實(shí)際中的COMTRADE文件而言,推薦采用 CDF(6,2)和 CDF(8,2)這類插值點(diǎn)更多的小波,使得變換后得到的小波系數(shù)更加平滑,有利于壓縮。
表6 不同小波選擇的壓縮結(jié)果Tab.6 Results of compression by different wavelets
表7顯示了對4種不同文件的內(nèi)故障記錄通道有損壓縮后和原始通道數(shù)據(jù)計算均方誤差,采用的小波為CDF(8,2)。從表中可見有損壓縮后的解壓數(shù)據(jù)和原始數(shù)據(jù)誤差都在小數(shù)點(diǎn)后3位,滿足有損壓縮后的可用要求。
表7 故障通道數(shù)據(jù)有損壓縮最大均方誤差Tab.7 Maximum deviation of loss compression for different faulty channels
表8中采用文件4類型COMTRADE數(shù)據(jù)在2核、3核、4核計算機(jī)上進(jìn)行了加速比試驗(yàn)。可見,此算法可隨著未來COMTRADE數(shù)據(jù)文件的加大、CPU核心數(shù)的增加,獲取到線性加速比。
表8 并行壓縮/解壓加速比試驗(yàn)結(jié)果Tab.8 Results of parallel compression/decompression acceleration ratio test
以往壓縮算法文獻(xiàn)都只是針對模擬量數(shù)據(jù)進(jìn)行討論的,而完全忽視了電力系統(tǒng)內(nèi)絕大部分錄波數(shù)據(jù)都是以IEEE COMTRADE格式進(jìn)行保存的情況,并且由于電力系統(tǒng)通信網(wǎng)的快速發(fā)展,原有算法的應(yīng)用背景也發(fā)生較大變化,原有研究已經(jīng)不能適應(yīng)電力系統(tǒng)的發(fā)展,因此本文提出了直接面向IEEE COMTRADE格式的并行壓縮/解壓算法,并構(gòu)建了相應(yīng)的通用壓縮/解壓工具,大量試驗(yàn)證明對于絕大部分現(xiàn)場運(yùn)行,COMTRADE文件都可獲得很大的壓縮比,并且算法適應(yīng)了多核并行計算的發(fā)展趨勢,具備線性加速比。