微機控制系統(tǒng)的數(shù)字濾波算法_第1頁
微機控制系統(tǒng)的數(shù)字濾波算法_第2頁
微機控制系統(tǒng)的數(shù)字濾波算法_第3頁
微機控制系統(tǒng)的數(shù)字濾波算法_第4頁
微機控制系統(tǒng)的數(shù)字濾波算法_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、微機控制系統(tǒng)的數(shù)字濾波算法字體: 小 中 大 | 打印 發(fā)布: 2007-7-24 17:25    作者: 網(wǎng)絡(luò)轉(zhuǎn)載    來源: 網(wǎng)絡(luò)    查看: 11次摘 要:分析了采用數(shù)字濾波消除隨機干擾的優(yōu)點,詳細論述了微機控制系統(tǒng)中常用的8種數(shù)字濾波算法,并討論了各種數(shù)字濾波算法的適用范圍。    關(guān)鍵詞:數(shù)字濾波;控制系統(tǒng);隨機干擾;數(shù)字濾波算法 1引言在微機控制系統(tǒng)的模擬輸入信號中,一般均含有各種噪聲和干擾,他們來自被測信號源本身、傳感器、外界干擾等。為了進行準確測量和控制,必須消除被測信號中的噪聲和干

2、擾。噪聲有2大類:一類為周期性的,其典型代表為50 Hz的工頻干擾,對于這類信號,采用積分時間等于20 ms整倍數(shù)的雙積分A/D轉(zhuǎn)換器,可有效地消除其影響;另一類為非周期的不規(guī)則隨機信號,對于隨機干擾,可以用數(shù)字濾波方法予以削弱或濾除。所謂數(shù)字濾波,就是通過一定的計算或判斷程序減少干擾信號在有用信號中的比重,因此他實際上是一個程序濾波。數(shù)字濾波器克服了模擬濾波器的許多不足,他與模擬濾波器相比有以下優(yōu)點:(1)數(shù)字濾波器是用軟件實現(xiàn)的,不需要增加硬設(shè)備,因而可靠性高、穩(wěn)定性好,不存在阻抗匹配問題。(2)模擬濾波器通常是各通道專用,而數(shù)字濾波器則可多通道共享,從而降低了成本。(3)數(shù)字濾波器可以對

3、頻率很低(如0.01 Hz)的信號進行濾波,而模擬濾波器由于受電容容量的限制,頻率不可能太低。   (4)數(shù)字濾波器可以根據(jù)信號的不同,采用不同的濾波方法或濾波參數(shù),具有靈活、方便、功能強的特點。2常用數(shù)字濾波算法數(shù)字濾波器是將一組輸入數(shù)字序列進行一定的運算而轉(zhuǎn)換成另一組輸出數(shù)字序列的裝置。設(shè)數(shù)字濾波器的輸入為X(n),輸出為Y(n),則輸入序列和輸出序列之間的關(guān)系可用差分方程式表示為:其中:輸入信號X(n)可以是模擬信號經(jīng)采樣和A/D變換后得到的數(shù)字序列,也可以是計算機的輸出信號。具有上述關(guān)系的數(shù)字濾波器的當前輸出與現(xiàn)在的和過去的輸入、過去的輸出有關(guān)。由這樣的差

4、分方程式組成的濾波器稱為遞歸型數(shù)字濾波器。如果將上述差分方程式中bK取0,則可得:說明輸出只和現(xiàn)在的輸入和過去的輸入有關(guān)。這種類型的濾波器稱為非遞歸型數(shù)字濾波器。參數(shù)aK、bK的選擇不同,可以實現(xiàn)低通、高通、帶通、帶阻等不同的數(shù)字濾波器。2.1算術(shù)平均值濾波算術(shù)平均值濾波是要尋找一個Y,使該值與各采樣值X(K)(K=1N)之間誤差的平方和為最小,即:這時,可滿足式(3)。式(4)便是算術(shù)平均值濾波的算法。設(shè)第二次測量的測量值包含信號成分Si和噪聲成分Ci,則進行N次測量的信號成分之和為:   噪聲的強度是用均方根來衡量的,當噪聲為隨機信號時,進行N次測量的噪聲強度

5、之和為:式(5)和式(6)中,S、C分別表示進行N次測量后信號和噪聲的平均幅度。這樣對N次測量進行算術(shù)平均后的信噪比為:其中,SC是求算術(shù)平均值前的信噪比。因此采用算術(shù)平均值后,使信噪比提高了倍。算術(shù)平均值法適用于對一般具有隨機干擾的信號進行濾波,這種信號的特點是有一個平均值,信號在某一數(shù)值范圍附近作上下波動,此時僅取一個采樣值作依據(jù)顯然是不準確的,如壓力、流量、液平面等信號的測量。但對脈沖性干擾的平滑作用尚不理想,因此他不適用于脈沖性干擾比較嚴重的場合。由式(7)可知,算術(shù)平均值法對信號的平滑濾波程度完全取決于N。當N較大時,平滑度高,但靈敏度低,即外界信號的變化對測量計算結(jié)果Y的影響??;當

6、N較小時,平滑度低,但靈敏度高。應(yīng)視具體情況選取N,以便既少占用計算時間,又達到最好的效果,如對一般流量測量,可取N=816,對壓力等測量,可取N=4。2.2加權(quán)平均值濾波算術(shù)平均值法對每次采樣值給出相同的加權(quán)系數(shù),即1N。但有些場合為了改進濾波效果,提高系統(tǒng)對當前所受干擾的靈敏度,需要增加新采樣值在平均值中的比重,即將各采樣值取不同的比例,然后再相加,此方法稱為加權(quán)平均值法。一個N項加權(quán)平均式為:   常數(shù)C1,C2,CN的選取是多種多樣的,其中常用的是加權(quán)系數(shù)法,即:加權(quán)平均值法適用于系統(tǒng)純滯后時間常數(shù)較大、采樣周期較短的過程,他給不同的相對采樣時間得到的采樣

7、值以不同的權(quán)系數(shù),以便能迅速反應(yīng)系統(tǒng)當前所受干擾的嚴重程度。但采用加權(quán)平均值法需要測試不同過程的純滯后時間,同時要不斷計算各權(quán)系數(shù),增加了計算量,降低了控制速度,因而他的實際應(yīng)用不如算術(shù)平均值法廣泛。2.3滑動平均值濾波以上平均濾波算法有一個共同點,即每計算1次有效采樣值必須連續(xù)采樣N次。對于采樣速度較慢或要求數(shù)據(jù)計算速率較高的實時系統(tǒng),這些方法是無法使用的。例如AD數(shù)據(jù),數(shù)據(jù)采樣速率為每秒10次,而要求每秒輸入4次數(shù)據(jù)時,則N不能大于2?;瑒悠骄捣ㄖ徊蓸?次,將本次采樣值和以前的N1次采樣值一起求平均,得到當前的有效采樣值?;瑒悠骄捣ò袾個采樣數(shù)據(jù)看成一個隊列,對列的長度固定為N,每進行

8、一次新的采樣,把采樣結(jié)果放入隊尾,而扔掉原來隊首的一個數(shù)據(jù),這樣在隊列中始終有N個“最新”的數(shù)據(jù)。計算濾波值時,只要把隊列中的N個數(shù)據(jù)進行平均,就可得到新的濾波值?;瑒悠骄捣▽χ芷谛愿蓴_有良好的抑制作用,平滑度高,靈敏度低;但對偶然出現(xiàn)的脈沖性干擾的抑制作用差,不易消除由于脈沖干擾引起的采樣值的偏差。因此他不適用于脈沖干擾比較嚴重的場合,而適用于高頻振蕩系統(tǒng)。通過觀察不同N值下滑動平均的輸出響應(yīng)來選取N值,以便既少占用時間,又能達到最好的濾波效果。其工程經(jīng)驗值為:流量N取12,壓力N取4,液面N取412,溫度N取14。2.4中值濾波中值濾波是對某一被測參數(shù)連續(xù)采樣N次(一般N取奇數(shù)),然后把

9、N次采樣值從小到大,或從大到小排隊,再取其中間值作為本次采樣值。中值濾波對于去掉偶然因素引起的波動或采樣器不穩(wěn)定而造成的誤差所引起的脈沖干擾比較有效,對溫度、液位等變化緩慢的被測參數(shù)采用此法能收到良好的濾波效果,但對流量、速度等快速變化的參數(shù)一般不易采用。2.5防脈沖干擾平均值濾波在脈沖干擾比較嚴重的場合,若采用一般的平均值法,則干擾將“平均”到計算結(jié)果中去,故平均值法不易消除由于脈沖干擾而引起的采樣值偏差。防脈沖干擾平均值法先對N個數(shù)據(jù)進行比較,去掉其中的最大值和最小值,然后計算余下的N-2個數(shù)據(jù)的算術(shù)平均值。即:在實際應(yīng)用中,N可取任何值,但為了加快測量計算速度,N一般不能太大,常取為4,

10、即為四取二再取平均值法。他具有計算方便、速度快、存儲量小等特點,故得到了廣泛應(yīng)用。 2.6程序判斷濾波工程實踐表明,許多物理量的變化都需要一定的時間,相鄰兩次采樣值之間的變化有一定的限度。程序判斷濾波就是根據(jù)實踐經(jīng)驗確定出相鄰兩次采樣信號之間可能出現(xiàn)的最大偏差Y,若超出此偏差值,則表明該輸入信號是干擾信號,應(yīng)該去掉;若小于此偏差值,可將信號作為本次采樣值。當采樣信號由于隨機干擾,如大功率用電設(shè)備的啟動或停止,造成電流的尖峰干擾或誤檢測,以及變送器不穩(wěn)定而引起的嚴重失真等,可采用程序判斷法進行濾波。程序判斷濾波根據(jù)濾波方法的不同,可分為限幅濾波和限速濾波2種。 限幅濾波限幅濾波把兩次相鄰的采樣值

11、相減,求出其增量(以絕對值表示),然后與兩次采樣允許的最大差值(由被控對象的實際情況決定)Y進行比較,若小于或等于Y,則取本次采樣值;若大于Y,則仍取上次采樣值作為本次采樣值。即:   限幅濾波主要用于變化比較緩慢的參數(shù),如溫度、物理位置等測量系統(tǒng)。具體應(yīng)用時,關(guān)鍵的問題是最大允差Y的選取,Y太大,各種干擾信號將“乘虛而入”,使系統(tǒng)誤差增大;Y太小,又會使某些有用信號被“拒之門外”,使計算機采樣效率變低。因此,門限值Y的選取是非常重要的。通??筛鶕?jù)經(jīng)驗數(shù)據(jù)獲得,必要時也可由實驗得出。限速濾波限速濾波最多可用3次采樣值來決定采樣結(jié)果,設(shè)順序采樣時刻t1,t2,t3的

12、采樣值分別為Y(1),Y(2),Y(3),則限速濾波較為折中,既照顧了采樣的實時性,又顧及了采樣值變化的連續(xù)性。但這種方法也有明顯的缺點:    (1)Y的確定不夠靈活,必須根據(jù)現(xiàn)場的情況不斷更換新值;     (2)不能反映采樣點數(shù)N3時各采樣值受干擾的情況,因而其應(yīng)用受到一定的限制。具體應(yīng)用時,可用(|Y(1)-Y(2)|+|Y(2)-Y(3)|)/2作為Y,這樣也可基本保持限速濾波的特性,雖增加計算量,但靈活性提高了。2.7低通濾波將普通硬件RC低通濾波器的微分方程用差分方程來表示,便可以用軟件算法來模擬硬件濾波的功能。經(jīng)推導(dǎo),

13、低通濾波算法如下:其中,X(K)為本次采樣值;Y(K-1)為上次的濾波輸出值;為濾波系數(shù),其值通常遠小于1;Y(K)為本次濾波的輸出值。由式(13)可以看出,本次濾波的輸出值主要取決于上次濾波的輸出值(注意不是上次的采樣值,這和加權(quán)平均濾波是有本質(zhì)區(qū)別的),本次采樣值對濾波輸出的影響是比較小的,但多少有些修正作用。這種算法模擬了具有較大慣性的低通濾波功能,當目標參數(shù)為變化很慢的物理量時,效果很好,但他不能濾除高于12采樣頻率的干擾信號。除低通濾波外,同樣可用軟件來模擬高通濾波和帶通濾波。2.8復(fù)合數(shù)字濾波為了進一步提高濾波效果,有時可以把2種或2種以上不同濾波功能的數(shù)字濾波器組合起來,組成復(fù)合

14、數(shù)字濾波器,或稱多級數(shù)字濾波器。例如防脈沖干擾平均值濾波就是一種應(yīng)用實例,由于這種濾波方法兼顧了中值濾波和算術(shù)平均值濾波的優(yōu)點,所以無論對緩慢變化的信號,還是對快速變化的信號,都能獲得較好的濾波效果。此外,也可采用雙重濾波的方法,即把采樣值經(jīng)過低通濾波后,再經(jīng)過一次高通濾波。這樣,結(jié)果更接近理想值,這實際上相當于多級RC濾波器。3結(jié)語本文討論了8種數(shù)字濾波算法,每種濾波算法都有其各自的特點,在實際應(yīng)用中,究竟選取哪一種數(shù)字濾波算法,應(yīng)根據(jù)具體的測量參數(shù)合理的選用。不適當?shù)貞?yīng)用數(shù)字濾波,不僅達不到濾波效果,反而會降低控制品質(zhì),甚至失控,這點必須予以注意。 /在許多的數(shù)據(jù)采集系統(tǒng)中,現(xiàn)場的強電設(shè)備

15、較多,不可避免  地會產(chǎn)生尖脈沖干擾,這種干擾一般持續(xù)時間短,峰值大,對這樣  的數(shù)據(jù)進行數(shù)字濾波處理時,僅僅采用算術(shù)平均或移動平均濾波  時,盡管對脈沖干擾進行了1/n的處理,但,其剩余值仍然較大。  這種場合最好的策略是:將被認為是受干擾的信號數(shù)據(jù)去掉,這  就是防脈沖干擾平均值濾波法的原理。   防脈沖干擾平均值濾波法的算法是:對連續(xù)的n個數(shù)據(jù)進行排序,  去掉其中最大和最小的2個數(shù)據(jù),將剩余數(shù)據(jù)示平均值。   在一般8051單片機的應(yīng)用中為了加快數(shù)據(jù)處理速度,n可以取值6。 

16、而對于具有較快速度的處理器,則n值可以適當取大一些。但最好是  n=2k+2,  k為整數(shù),因為這樣在求平均值average=SUM/(n-2)=SUM/2k時,  可以寫成average=SUM>>k,用移位的方法,可以加快處理速度。      上述算法顯然還存在一個不足之處,就是每采集一個數(shù)據(jù)就要進行一次排序,  這樣會大量占用系統(tǒng)寶貴的時間。這可以通過存儲當前數(shù)據(jù)中的最大值和最小值來改進。具體做法是:    系統(tǒng)中用兩個變量來存儲當前n個數(shù)據(jù)的最大值和最小值在這個數(shù)組

17、中的  偏移量(也就是數(shù)組下標,存儲數(shù)組下標而直接不存儲數(shù)據(jù)本身是因為:在一般的系統(tǒng)中,n不會超無符號短整形的表示范圍,因此用一個char形變量就可以存儲了,而如果直接存儲數(shù)據(jù)本身,則許多情況下要用int形變量,甚至更長的類型)。這樣只要在當前輸入的數(shù)據(jù)將要覆蓋的數(shù)據(jù)正好是當前的最大值或最小值時才在下個數(shù)組中查找最大值或最小值,而其他情況下則只要將輸入的數(shù)據(jù)與最大值和最小值比較就可以修改下最大值和最小值了,而且不用進行數(shù)據(jù)排序。  這個算法很簡單,下面是對應(yīng)的C語言代碼實現(xiàn),可以很方便的應(yīng)用的具體的51單片機,或其他處理器上,只須做少量的修改。i nclude"s

18、tdio.h"#define dtype unsigned int / 采集數(shù)據(jù)的數(shù)據(jù)類型#define uint8 char#define LEN  6   /移動算術(shù)平均的個數(shù)+2=SHIFT<<2+2#define SHIFT 2   /2SHIFTuint8 pdata;    /移動指針uint8 pmax,pmin;   /記錄數(shù)據(jù)表中最大值和最小值的位置,

19、60;      /在一般的數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)的長度>=8,       /因此用指針記錄而不是直接記錄最大值和最小值dtype datasLEN;dtype szlb(dtype _data)  /*/* 在調(diào)用此子程序前必須對 */* pdata,datas數(shù)組,  */* pmax,pmin進行初始化  */*/ uint8 i; dtype

20、average=0;  /清零,用來計算平均值 pdata=(pdata+1)%LEN; /指針下標在0到LEN-1上滑動 dataspdata=_data;  /采樣所得數(shù)據(jù)存入數(shù)據(jù)表中 for(i=0;i<LEN;i+)         average+=datasi; /求所有數(shù)據(jù)總和/*去除被認為是脈沖的數(shù)據(jù)*/ if(_data>dataspmax)    

21、0; pmax=pdata;   /得到最大值的指針 else if(_data<dataspmin)      pmin=pdata;   /得到最小值的指針 if(pdata=pmax)   /如果當前輸入值將存入當前最大值的位置時       /由以上方法將不可行,必須從其他位置中查找極值      for

22、(i=0;i<LEN;i+)          if(datasi>dataspmax)          pmax=i;  else if(pdata=pmin)/如果當前輸入值將存入當前最大值的位置時       /由以上方法將不可行,必須從其他位置中查找極值     for(i=0

23、;i<LEN;i+)          if(datasi<dataspmin)           pmin=i;  average=average-dataspmax-dataspmin;/減去脈沖 return (average>>SHIFT);    /求算術(shù)平均值/*以下是在VC6.0環(huán)境下運行的測試程序*/*通過

24、手動輸入來模擬數(shù)據(jù)采集過程*/void main() uint8 i; dtype _data; pdata=0; pmax=0; pmin=0; for(i=0;i<LEN;i+)   datasi=0; printf("數(shù)據(jù):                      

25、    最大       最小n"); while(1)       scanf("%u",&_data);      szlb(_data);      for(i=0;i<LEN;i+)      printf("%-3u 

26、; ",datasi);      printf("    %-3u      %-3u",dataspmax,dataspmin);      printf("n");   uchar ReadADCVal()  /   static uchar num=0;   static ucha

27、r cVin7=0,0,0,0,0,0,0;/220,220,220,220,220,220,220;/設(shè)輸入電壓緩沖區(qū)    /uchar i,j,v,t;   uchar i,j,v,t;   if(bAdcVOk)     iVtmp=iAdcVal;/從ADC中讀出數(shù)據(jù)       iVtmp/=(5000/220);      if(iVtmp>255) v=255; &

28、#160;    else v=(char)iVtmp;              for(i=0;i<7;i+)        if(v<=cVini)            break;            if(i<=3) /小于中值   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論