靳 松, 朱兆林, 張 旺, 格日勒?qǐng)D
(中機(jī)生產(chǎn)力促進(jìn)中心, 北京 100044)
數(shù)據(jù)采集和控制系統(tǒng)在實(shí)際運(yùn)行中會(huì)受到各種電磁干擾, 一般通過(guò)硬件濾波電路和軟件濾波算法的形式來(lái)消除電磁干擾對(duì)系統(tǒng)的影響。 但是當(dāng)現(xiàn)場(chǎng)有大功率的設(shè)備頻繁啟?;騻鞲衅鞯牟杉娐反嬖谠O(shè)計(jì)缺陷時(shí),數(shù)據(jù)采集系統(tǒng)容易受到尖脈沖干擾,當(dāng)系統(tǒng)受到強(qiáng)烈的尖脈沖干擾時(shí), 采集的數(shù)據(jù)中會(huì)疊加一些尖脈沖干擾信號(hào),這種干擾信號(hào)具有干擾能力強(qiáng)、無(wú)規(guī)律的特點(diǎn)。 尖脈沖干擾信號(hào)引起的粗大誤差會(huì)使采集數(shù)據(jù)瞬間增大或減少, 引起安全系統(tǒng)誤動(dòng)作甚至使整個(gè)系統(tǒng)無(wú)法正常運(yùn)行。
當(dāng)周圍有大功率設(shè)備頻繁啟動(dòng)時(shí)某試驗(yàn)臺(tái)潤(rùn)滑油箱油溫采集受到嚴(yán)重的尖脈沖干擾, 油箱油溫曲線上布滿了尖峰,見(jiàn)圖1,溫度超限頻繁,安全系統(tǒng)報(bào)警停機(jī),試驗(yàn)臺(tái)無(wú)法正常工作。
圖1 縱坐標(biāo)為20℃~80℃時(shí)油箱油溫曲線
從圖1 可以看出油箱油溫在50 ℃左右變化時(shí),油溫曲線縱坐標(biāo)為20℃~80℃時(shí)無(wú)法看到尖脈沖干擾的最大值。改變縱坐標(biāo)的溫度值為-1000℃~6000℃,如圖2 所示,從圖2 中可以看到數(shù)據(jù)受到尖脈沖干擾時(shí)油箱溫度采集值可以瞬間增到5455℃,是油箱正常溫度的100 多倍,最低到0 度,無(wú)法設(shè)置報(bào)警閾值,安全系統(tǒng)遇到這種尖脈沖干擾就會(huì)立即報(bào)警停機(jī)。
圖2 縱坐標(biāo)為-1000℃~6000℃時(shí)油箱溫度曲線
1971 年著名學(xué)者J.W.Tukey 提出了中值濾波概念并將其用作時(shí)間序列平滑, 中值濾波一出現(xiàn)就因其對(duì)尖脈沖具有良好的擬制能力而備受矚目。 中值濾波是一種非線性濾波, 在一定條件下可以克服線性濾波器所帶來(lái)的細(xì)節(jié)模糊,而且對(duì)濾除脈沖干擾最為有效。
所謂“中值”是指將一個(gè)數(shù)列中的數(shù)據(jù)按照從大到?。ɑ蛘邚男〉酱螅┑捻樞蚺帕校邕@個(gè)序列的長(zhǎng)度為奇數(shù),則排在中間的那個(gè)數(shù)就是此序列的中值; 如果數(shù)據(jù)序列長(zhǎng)度為偶數(shù), 可以定義處于中間的兩個(gè)數(shù)的平均值為中值。因此,中值濾波最簡(jiǎn)單的辦法就是用一個(gè)條形或方形滑動(dòng)窗口在被處理的數(shù)據(jù)數(shù)列上逐點(diǎn)滑動(dòng), 將窗口正中那點(diǎn)的值作為窗口的中值來(lái)代替窗口內(nèi)各點(diǎn)的值, 中值濾波可以這樣進(jìn)行定義:
設(shè)有一個(gè)一維序列{x1,x2,…,xn},取窗口長(zhǎng)度為N(N為奇數(shù)),對(duì)此序列進(jìn)行中值濾波,就是從輸入序列中相繼抽出m 個(gè)數(shù),xi-v,…,xi-1,xi,xi+1,…,xi+v,其中i 為窗口的中心位置,v=(N-1)/2, 再將這N 個(gè)數(shù)按其數(shù)值大小排列,取其序號(hào)為正中間的那個(gè)數(shù)據(jù)作為濾波輸出,其數(shù)學(xué)公式表示為:
例如對(duì)某一測(cè)量過(guò)程進(jìn)行連續(xù)5 次采樣,將采樣數(shù)值存儲(chǔ)在數(shù)列{Si}(i=5),按照采集時(shí)間順序數(shù)據(jù)排列為:
然后將數(shù)列(2)中的數(shù)據(jù)按照數(shù)值大小順序重新排列:
重新排列后數(shù)列{Si}(i=5)的中值為S3,則S3就作為此次濾波的輸出值。 若窗口長(zhǎng)度N 取奇數(shù)則中值為從大到小排列的中間元素, 若N 取偶數(shù)則中值為從大到小排列的中間兩個(gè)元素的平均值。
窗口長(zhǎng)度N 的取值影響濾波效果, 在實(shí)際應(yīng)用中要根據(jù)實(shí)際情況進(jìn)行選擇,一般窗口長(zhǎng)度N 選擇為奇數(shù),若N 選擇為偶數(shù)干擾脈沖如果排在中間的兩個(gè)數(shù)據(jù)時(shí)干擾脈沖值就會(huì)參與平均值運(yùn)算求出的中值是含有脈沖干擾的,在這種情況下就不能夠?qū)⒚}沖干擾剔除出去。窗口長(zhǎng)度N 選擇為奇數(shù)時(shí), 只取序列的中間位置的元素不進(jìn)行平均值運(yùn)算,就避免了脈沖值參與運(yùn)算可能性。但是如果N 取值太小, 假設(shè)N 取3 時(shí)三個(gè)數(shù)據(jù)中有一個(gè)為干擾脈沖時(shí),不管干擾發(fā)生在什么位置,都能將其濾除,如果三個(gè)數(shù)據(jù)有兩個(gè)為脈沖干擾時(shí)而干擾是異向時(shí)則仍可以將干擾脈沖濾去, 但如果有兩次同向干擾或三次干擾時(shí)則無(wú)法將干擾脈沖完全濾去,甚至?xí)迅蓴_信息記錄下來(lái)。為了有效的濾除兩次或三次脈沖干擾將窗口長(zhǎng)度N 適當(dāng)放大取5 或7。 因?yàn)檫@種干擾尖脈沖大都偶然因素引起的波動(dòng)或者采樣器不穩(wěn)定引起的, 實(shí)際中很少會(huì)出現(xiàn)連續(xù)多個(gè)干擾脈沖出現(xiàn)的情景。
為了考察中值濾波對(duì)尖脈沖的濾波效果, 并找出合適的窗口長(zhǎng)度N 的取值,對(duì)中值濾波進(jìn)行仿真。生成振幅為10 頻率為1/180Hz 初始相位為0 的正弦波:
x(t)=10*sin(π/90*t) (5)
在正弦波x(t)上隨機(jī)加入幅值在區(qū)間[-50,50]之間的脈沖干擾信號(hào)r(t),形成帶有隨機(jī)脈沖干擾的正弦信號(hào)y(t)
對(duì)信號(hào)y(t)進(jìn)行中值濾波,窗口長(zhǎng)度N 分別取3 和5,其濾波效果如圖3 所示,從圖3 中可以看出當(dāng)窗口長(zhǎng)度N 取3 時(shí)根據(jù)隨機(jī)干擾產(chǎn)生的位置不同會(huì)偶爾存在個(gè)別濾不去的干擾存在, 當(dāng)窗口長(zhǎng)度N 取5 時(shí)濾波效果會(huì)好很多,能夠滿足大部分應(yīng)用場(chǎng)合。
圖3 中值濾波仿真
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)實(shí)驗(yàn)室虛擬儀器集成環(huán)境的簡(jiǎn)稱, LabVIEW 是專為測(cè)試、 測(cè)量和控制應(yīng)用而設(shè)計(jì)的系統(tǒng)工程軟件,包含大量的用于數(shù)據(jù)采集、分析的工具。 利用LabVIEW 自帶的中值函數(shù)就可以方便的實(shí)現(xiàn)中值濾波。
利用LabVIEW 自帶的中值函數(shù)可以方便獲得一個(gè)數(shù)列的中值。 圖4 為L(zhǎng)abVIEW 的中值函數(shù)。
圖4 LabVIEW 中值函數(shù)
其中X 為輸入序列,函數(shù)對(duì)輸入序列X 進(jìn)行排序,如果序列X 有奇數(shù)個(gè)元素則輸出中值為序列中間元素, 如果序列X 有偶數(shù)個(gè)元素則輸出中值為中間兩個(gè)元素的平均值。
只要?jiǎng)?chuàng)建一個(gè)X 序列將傳感器采集的數(shù)值不斷的放入X 序列里就可以實(shí)現(xiàn)對(duì)采集數(shù)字進(jìn)行中值濾波。 采用LabVIEW 的數(shù)據(jù)隊(duì)列將采集的數(shù)據(jù)值逐點(diǎn)放到數(shù)據(jù)量隊(duì)列里,選擇隊(duì)列長(zhǎng)度為5,即中值濾波窗口長(zhǎng)度N 為5,一般選擇奇數(shù), 防止干擾脈沖值參與平均值運(yùn)算而引起誤差。這樣就創(chuàng)建了一個(gè)含有5 個(gè)元素的X 序列。LabVIEW中值濾波程序見(jiàn)圖5。
圖5 LabVIEW 中值濾波程序
該程序首先從緩沖區(qū)里讀取采集數(shù)據(jù), 將讀取的數(shù)據(jù)逐點(diǎn)放入數(shù)據(jù)隊(duì)列, 數(shù)據(jù)隊(duì)列將每5 個(gè)數(shù)據(jù)作為一個(gè)隊(duì)列輸出給中值函數(shù), 中值函數(shù)將數(shù)據(jù)隊(duì)列里的5 個(gè)數(shù)據(jù)從大到小進(jìn)行排序,選取中間的數(shù)據(jù)作為輸出值輸出。
將中值濾波程序應(yīng)用到試驗(yàn)臺(tái)油箱溫度采集中,油箱由侵入式加熱器進(jìn)行加熱, 上位機(jī)根據(jù)設(shè)定溫度控制加熱器的啟停, 例如設(shè)定溫度為50℃, 則油箱油溫高于50 ℃時(shí)停止加熱,當(dāng)溫度低于48℃時(shí)開(kāi)始加熱。 試驗(yàn)臺(tái)油箱溫度控制采集系統(tǒng)界面,見(jiàn)圖6。
圖6 溫度采集和控制界面如圖所示
上位機(jī)通過(guò)串口采集溫度傳感器的數(shù)據(jù), 為了方便對(duì)比將沒(méi)有經(jīng)過(guò)濾波的原始數(shù)據(jù)曲線顯示在界面上方,將經(jīng)過(guò)中值濾波的數(shù)據(jù)曲線顯示在界面的下方。 從原始數(shù)據(jù)曲線中可以看出當(dāng)采集系統(tǒng)受到尖脈沖干擾時(shí)會(huì)出現(xiàn)很多遠(yuǎn)遠(yuǎn)大于真實(shí)值的干擾噪聲, 曲線上出現(xiàn)了很多尖峰毛刺。 經(jīng)過(guò)中值濾波后可以很好的將尖脈沖干擾信號(hào)濾去, 從原始數(shù)據(jù)曲線和中值濾波數(shù)據(jù)曲線中可以看出中值濾波數(shù)據(jù)曲線上的尖峰脈沖被有效的剔除了,曲線平滑沒(méi)有突變的粗大值。采集數(shù)據(jù)真實(shí)準(zhǔn)確,整個(gè)系統(tǒng)運(yùn)行穩(wěn)定可靠。
試驗(yàn)設(shè)備遇到尖脈沖干擾時(shí)采集數(shù)據(jù)因尖脈沖干擾會(huì)產(chǎn)生粗大誤差, 這種粗大誤差會(huì)引起試驗(yàn)設(shè)備安全系統(tǒng)誤動(dòng)作,嚴(yán)重時(shí)設(shè)備無(wú)法正常運(yùn)行。采用中值濾波算法可以有效的剔除這種因尖脈沖干擾而產(chǎn)生的粗大誤差,利用LabVIEW 的中值函數(shù)實(shí)現(xiàn)了中值濾波算法,并應(yīng)用在試驗(yàn)臺(tái)油箱溫度采集中,獲得了良好的效果。
中值濾波對(duì)因尖脈沖干擾、 偶然波動(dòng)或采集系統(tǒng)不穩(wěn)定而引起的尖峰干擾具有良好的剔除作用,對(duì)溫度、液位等具有一定滯后性、 響應(yīng)比較慢的被測(cè)量具有良好的濾波效果。