高 宇,回朝妍,張 輝,賈夢涵,馬仡男,佟美琪
(北京科技大學能源與環(huán)境工程學院,北京 100083)
在工業(yè)生產和實驗研究的控制系統(tǒng)中,需要對現(xiàn)場的相關物理量如溫度、壓力、液位等連續(xù)變化的數(shù)據進行采集和記錄[1]。這些被測量以模擬量為主,因此需要將連續(xù)的模擬量轉換為離散的數(shù)字量,然而,在數(shù)據采集過程中,信號源、傳感器、放大電路、A/D轉換模塊等都會因噪聲污染影響測量結果的準確性[2],并且在測定過程中也會出現(xiàn)未知干擾,使采集到的信號呈現(xiàn)不規(guī)則的隨機波動,從而影響最終的檢測結果。
在儀器控制系統(tǒng)中,常見的噪聲為周期性噪聲和非周期性奇異型噪聲。為了提高測量的準確性,抑制噪聲對檢測結果的影響,可以采用數(shù)字濾波技術對采樣數(shù)據進行濾波處理[3]。數(shù)字濾波技術不需要額外增加硬件設備,而是通過軟件實現(xiàn)濾波,是一種常用的濾除噪聲的數(shù)據預處理方法。數(shù)字濾波根據數(shù)學算法編寫出相應的程序來對采集到的數(shù)據進行計算和轉換,從而獲得一組可靠性更高的數(shù)據。常用的數(shù)字濾波方法有限幅濾波、消抖濾波、算術平均值濾波[4]和中值濾波等[5]。
圖1為采用不同濾波方法得到的數(shù)字濾波效果對比圖,從圖1中可以發(fā)現(xiàn):圖1(b)所示的限幅濾波[6]對于偶然出現(xiàn)的脈沖噪聲有較強的抑制作用,可以將尖峰完全消去,但是無法處理周期性、小幅度的信號波動,并且濾波后的曲線呈一條直線完全丟失原始數(shù)據的特征信息,不同數(shù)據的脈沖噪聲幅度大小不同,也會影響濾波的處理效果[7];圖1(c)中,均值濾波不能處理偶然出現(xiàn)的脈沖型的干擾峰,計算得到的有效值會受到脈沖峰極值的影響,數(shù)據產生偏差,造成數(shù)據的上浮或者下沉;圖1(d)所示的消抖濾波算法適用于緩慢變化的數(shù)據序列,不能處理快速變化的數(shù)據,并且會將采樣數(shù)據最重要的特征峰消去,此外,處理后的數(shù)據呈階梯狀,平滑度差;圖1(e)中的中值濾波算法處理得到的曲線光滑,噪聲和尖峰都能被有效地去除,對比原始數(shù)據曲線,在濾波效果較好的情況下吻合度也較高[8]。通過對常見的濾波算法的優(yōu)缺點進行分析,將遞推算法和中值濾波算法相結合,并且對濾波寬度進行動態(tài)調整,改進后的濾波算法能夠獲得很好的濾波效果,并且能夠依據數(shù)據自身基底特征對邊界處的數(shù)據進行外延。
圖1 數(shù)字濾波效果對比圖
中值濾波算法是一種基于統(tǒng)計排序理論的非線性濾波方法,其基本思路是連續(xù)讀取N個(N一般為奇數(shù),N=2L+1)采樣值,然后將N個采樣值按照大小排成有序數(shù)列,取有序數(shù)列的中間位置的值作為有效值輸出,即經過濾波處理后輸出的第k個數(shù)據為[k-L,k+L]的中位值。其中,排序算法可以采用“冒泡排序法”、“快速排序法”等常用算法。這種濾波算法能夠很好地濾除由于偶然的外界因素干擾或者是傳感器自身不穩(wěn)定而形成的脈沖峰,并且還能夠較好地保留原始數(shù)據的趨勢和特征。
利用該算法進行數(shù)據處理首先設置遞推隊列長度N,即程序讀取N個數(shù)據,運行中值濾波算法進行處理,排序得到當前N個數(shù)據序列中間位置對應數(shù)據的值,然后將其作為有效值輸出。
將遞推算法的思路與中值濾波結合,可實現(xiàn)精確濾波。如圖2所示,首先建立可存放N(N=2L+1)個數(shù)據的遞推隊列,開始讀取數(shù)據并且判斷隊列是否已經填充滿。當隊列填充滿后,進行排序將當前隊列中的中位值作為濾波后的有效數(shù)據輸出;然后遞推滑動隊列后移一位,遵循先進先出的原則[9],剔除數(shù)據序列中的第一個數(shù)據,并且獲取原始數(shù)據序列后一位的新數(shù)據,將其填充到隊列中。保持隊列長度N固定,再次進行中值濾波處理。依照這種方式依次滑動遞推隊列,直至將全部數(shù)據處理完畢。
圖2 遞推中值濾波算法流程圖
利用遞推中值濾波算法可以對信號進行光滑處理。為了驗證其光滑處理的效果,對中值濾波分別進行遞推算法采樣和分段采樣的對比分析,均設置采樣數(shù)N=31進行濾波處理,利用Origin繪制各自濾波處理后的數(shù)據曲線,所得結果如圖3所示。
圖3 分段中值與遞推中值濾波效果對比圖
可以看出分段中值濾波算法處理得到的數(shù)據明顯呈階梯狀,光滑度較差。在圖3(a)中,分段中值濾波在遞推隊列長度選擇不當時,會出現(xiàn)不能有效去除噪聲干擾的現(xiàn)象,并且圖3(b)中,在特征峰部位峰谷極值點被濾除,出現(xiàn)了數(shù)據畸變失真,造成重要信號丟失,影響后續(xù)的數(shù)據處理。而遞推中值濾波處理后的數(shù)據保持了原始數(shù)據的趨勢,并且曲線光滑,數(shù)據準確度高。
圖4為遞推中值濾波算法主體程序圖。算法使用C語言編寫,圖4左側為程序的源代碼,通過自定義數(shù)據結構將代碼函數(shù)模塊化,便于濾波處理功能的實現(xiàn);右側為對應的N-S流程圖,采用順序、選擇和循環(huán)結構展示程序運行邏輯。
圖4 遞推中值濾波算法主體程序圖
遞推中值濾波算法除了需要獲取原始被測量數(shù)據外,還需要設置遞推隊列長度N這一參數(shù),遞推隊列長度影響濾波的處理效果[10-11]以及程序運行速度等性能。為分析遞推隊列長度的選擇對濾波效果產生的影響,對比設置不同隊列長度條件下的濾波處理結果,如圖5所示。
圖5 不同遞推隊列長度濾波效果對比圖
首先遞推隊列長度N=2L+1[12],當L設置為大于干擾峰的寬度時就可以將干擾峰全部濾除,當實驗數(shù)據的特征峰寬度大于L時,特征峰就會在進行濾波處理的過程中保留下來,達到去除噪聲和干擾的目的。圖5為不同的遞推隊列長度濾波的效果對比圖,可以看到當N=21時,濾波算法已經具備去除原始數(shù)據部分噪聲的能力,但處理后的數(shù)據中仍存在寬度較大的干擾峰未被去除;當N=31時,可以有效地去除干擾;當N=51時,此時的濾波效果與N=31時無明顯差別,但是遞推隊列長度設置過大時,可能會出現(xiàn)將原始數(shù)據中重要信號判定為干擾信號而去除的現(xiàn)象。因此,N設置較小時,除了對原始數(shù)據能夠進行濾波外,還保留了一部分寬度較大的峰;隨著遞推隊列長度的增大,大部分的峰都被濾除。綜上,算法的分辨能力會受到遞推隊列長度的影響,即判定寬度小于L的峰為干擾信號將其消除,并保留寬度大于L的峰,防止了重要信號的缺失[13]。
遞推中值濾波算法的基本思路是選取一組數(shù)據的中位值作為有效值,剔除掉干擾附近的最大值和最小值,因此在特征峰的峰頂或者峰谷處會形成平臺,出現(xiàn)峰高的損失為了保證數(shù)據的準確性,在應用遞推中值濾波的過程中,需要檢測峰頂或峰谷的位置對其進行數(shù)據還原。
核心算法N-S圖如圖6所示,當峰頂或峰谷經過濾波產生平臺后,在定義的鏈表中記錄平臺的起始位置、結束位置以及平臺寬度。在平臺的起始點重新設置遞推隊列長度并且將其設置為平臺寬度,從起始點開始之后的數(shù)據依次將遞推隊列長度遞減,直至在平臺中心處隊列長度遞減為1,即輸出原始數(shù)據。此時,特征峰的峰高和峰位等重要信息得到保留和還原。然后將隊列長度依次遞增直至平臺結束后,隊列長度還原至初始設定值N,程序依據原始設定長度N利用遞推中值濾波算法繼續(xù)對數(shù)據序列進行濾波處理。處理完當前平臺的數(shù)據后,鏈表指向下一個節(jié)點,獲取下一個平臺的信息,再次進行隊列長度動態(tài)調整。這種算法保留了原始特征峰的峰高和峰位等重要參數(shù)。
圖6 遞推隊列長度動態(tài)調整算法N-S圖
該算法不僅需要對平臺的信息進行記錄,還需要對平臺進行判定,即當濾波輸出的相鄰兩次數(shù)據相同時,才將其判定為平臺。在此基礎上,利用flag_decline和flag_rise 2個狀態(tài)變量判斷曲線的變化趨勢,將在峰頂處形成高于兩側數(shù)據的平臺或者在峰谷處形成低于兩側數(shù)據的平臺判定為需要進行動態(tài)調整的平臺,并記錄在鏈表中。
圖7為遞推隊列長度動態(tài)調整示意圖。從圖中可以看出,當數(shù)據出現(xiàn)平臺時,將起始點Xstart處隊列長度調整為平臺寬度width,然后遞推隊列長度開始遞減;當?shù)竭_平臺中心處時,遞推隊列長度為1,此時輸出的數(shù)據為隊列中唯一的數(shù)據,即還原了采樣值,同時平臺的中心處通常對應于峰頂或峰谷的極值點;平臺中心處之后數(shù)據的隊列長度依次遞增,直至平臺結束點Xend處,遞推隊列長度增加至平臺寬度。當遞推隊列處于上升或者下降趨勢的曲線處時,濾波處理輸出的數(shù)據就是排序后的中位值,此時與原始數(shù)據序列不存在位置上的偏移[14]。
圖7 遞推隊列長度調整示意圖
遞推中值濾波算法是將一組采樣信號進行排序后選取中值作為序列中間位置的有效值輸出,因此在數(shù)據的邊界(即數(shù)據的開始和結尾處)會出現(xiàn)部分數(shù)據的缺失,為保證數(shù)據的完整性需要對其進行補充,數(shù)據補充可以通過數(shù)據擬合的方式實現(xiàn)。
根據數(shù)據離散的特征,提出使用最小二乘法對原始數(shù)據進行擬合并依據擬合結果獲得原始數(shù)據序列的特征,然后對曲線進行預測以達到補充缺失數(shù)據的目的。最小二乘法是以殘差平方和最小為條件進行求解得出參數(shù)的最佳值以及最佳函數(shù)方程[15]。將遞推中值濾波算法與最小二乘法相結合,在邊界數(shù)據部分利用最小二乘法對其進行運算,建立橫坐標與縱坐標的函數(shù)關系,得到確定其基底特征的參數(shù)。
在求解擬合函數(shù)的過程中,首先取出邊界處的N個數(shù)據,假設數(shù)據點間的函數(shù)關系滿足線性變化規(guī)律,并且根據擬合函數(shù)計算出的值與實際數(shù)據的偏差平方和最小,此擬合函數(shù)用數(shù)學語言可描述為Y=kX+b,其中X是自變量,Y是擬合目標[16]。依據取得的N個數(shù)據確定一個最佳的擬合方程,計算出方程中的2個待定參數(shù)就能夠確定原始基底數(shù)據的特征。根據建立的一元線性函數(shù)模型,將缺失的數(shù)據按基底特征進行計算補充。
將處理后的數(shù)據在Origin中繪制,其結果如圖8所示。可以看到,對比原始數(shù)據,當僅使用遞推中值濾波算法處理時,起始段與結尾段存在部分數(shù)據缺失;對原始數(shù)據采用最小二乘法擬合,獲得其基底特征進行邊界數(shù)據補充后,得到的數(shù)據曲線完整且光滑。
(a)起始段
遞推中值濾波算法結合最小二乘法計算原始數(shù)據的特征并根據特征進行數(shù)據預測,不僅將經過遞推中值濾波算法前后缺失的數(shù)據補充完整,還利用擬合的一元函數(shù)方程對原始數(shù)據進行了光滑優(yōu)化處理,達到了較好的濾波效果。
通過對常用數(shù)字濾波算法進行比較提出了一種基于濾波寬度動態(tài)調節(jié)的遞推中值與基底特征外延算法,提高了濾波效果。主要創(chuàng)新點為:將遞推算法與中值濾波算法結合,保證了濾波效果的精確性并且使得信號曲線更加光滑;對遞推隊列長度進行了討論和分析,針對含有重要信息的峰頂和峰谷區(qū)域動態(tài)地調整遞推隊列長度,還原并保留了數(shù)據特征;在數(shù)據邊界處,針對遞推中值算法數(shù)據缺失的問題,提出使用最小二乘法對原始數(shù)據基底特征進行擬合,根據基底特征對缺失數(shù)據進行預測和補充。為了實現(xiàn)更加精確的濾波效果,還需對不同數(shù)據進行濾波實驗并且對代碼進行優(yōu)化,后續(xù)將進一步深化研究。