十一種通用濾波算法_第1頁
十一種通用濾波算法_第2頁
十一種通用濾波算法_第3頁
十一種通用濾波算法_第4頁
十一種通用濾波算法_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、tdyizhen1314Easy Code(轉(zhuǎn))十一種通用濾波算法一.十一種通用濾波算法(轉(zhuǎn))1、限幅濾波法(又稱程序判斷濾波法)A、方法:   根據(jù)經(jīng)驗判斷,確定兩次采樣允許的最大偏差值(設(shè)為A)   每次檢測到新值時判斷:   如果本次值與上次值之差<=A,則本次值有效   如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值B、優(yōu)點:   能有效克服因偶然因素引起的脈沖干擾C、缺點   無法抑制那種周期性的干擾   平

2、滑度差2、中位值濾波法A、方法:   連續(xù)采樣N次(N取奇數(shù))   把N次采樣值按大小排列   取中間值為本次有效值B、優(yōu)點:   能有效克服因偶然因素引起的波動干擾   對溫度、液位的變化緩慢的被測參數(shù)有良好的濾波效果C、缺點:   對流量、速度等快速變化的參數(shù)不宜3、算術(shù)平均濾波法A、方法:   連續(xù)取N個采樣值進行算術(shù)平均運算   N值較大時:信號平滑度較高,但靈敏度較低   N值較小時:信號平滑度較低,但靈敏

3、度較高   N值的選?。阂话懔髁?,N=12;壓力:N=4B、優(yōu)點:   適用于對一般具有隨機干擾的信號進行濾波   這樣信號的特點是有一個平均值,信號在某一數(shù)值范圍附近上下波動C、缺點:   對于測量速度較慢或要求數(shù)據(jù)計算速度較快的實時控制不適用   比較浪費RAM   4、遞推平均濾波法(又稱滑動平均濾波法)A、方法:   把連續(xù)取N個采樣值看成一個隊列   隊列的長度固定為N   每次采樣到一個新數(shù)據(jù)放

4、入隊尾,并扔掉原來隊首的一次數(shù)據(jù).(先進先出原則)   把隊列中的N個數(shù)據(jù)進行算術(shù)平均運算,就可獲得新的濾波結(jié)果   N值的選?。毫髁?,N=12;壓力:N=4;液面,N=412;溫度,N=14B、優(yōu)點:   對周期性干擾有良好的抑制作用,平滑度高   適用于高頻振蕩的系統(tǒng) C、缺點:   靈敏度低   對偶然出現(xiàn)的脈沖性干擾的抑制作用較差   不易消除由于脈沖干擾所引起的采樣值偏差   不適用于脈沖干擾比較嚴重的場合 

5、;  比較浪費RAM   5、中位值平均濾波法(又稱防脈沖干擾平均濾波法)A、方法:   相當于“中位值濾波法”+“算術(shù)平均濾波法”   連續(xù)采樣N個數(shù)據(jù),去掉一個最大值和一個最小值   然后計算N-2個數(shù)據(jù)的算術(shù)平均值   N值的選?。?14B、優(yōu)點:   融合了兩種濾波法的優(yōu)點   對于偶然出現(xiàn)的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差C、缺點:   測量速度較慢,和算術(shù)平均濾波法一樣 

6、0; 比較浪費RAM6、限幅平均濾波法A、方法:   相當于“限幅濾波法”+“遞推平均濾波法”   每次采樣到的新數(shù)據(jù)先進行限幅處理,   再送入隊列進行遞推平均濾波處理B、優(yōu)點:   融合了兩種濾波法的優(yōu)點   對于偶然出現(xiàn)的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差C、缺點:   比較浪費RAM7、一階滯后濾波法A、方法:   取a=01   本次濾波結(jié)果=(1-a)*本次采樣值+a*上次濾波結(jié)果B、優(yōu)點: 

7、0; 對周期性干擾具有良好的抑制作用   適用于波動頻率較高的場合C、缺點:   相位滯后,靈敏度低   滯后程度取決于a值大小   不能消除濾波頻率高于采樣頻率的1/2的干擾信號   8、加權(quán)遞推平均濾波法A、方法:   是對遞推平均濾波法的改進,即不同時刻的數(shù)據(jù)加以不同的權(quán)   通常是,越接近現(xiàn)時刻的數(shù)據(jù),權(quán)取得越大。   給予新采樣值的權(quán)系數(shù)越大,則靈敏度越高,但信號平滑度越低B、優(yōu)點:   適用于有

8、較大純滯后時間常數(shù)的對象   和采樣周期較短的系統(tǒng)C、缺點:   對于純滯后時間常數(shù)較小,采樣周期較長,變化緩慢的信號   不能迅速反應(yīng)系統(tǒng)當前所受干擾的嚴重程度,濾波效果差9、消抖濾波法A、方法:   設(shè)置一個濾波計數(shù)器   將每次采樣值與當前有效值比較:   如果采樣值當前有效值,則計數(shù)器清零   如果采樣值<>當前有效值,則計數(shù)器+1,并判斷計數(shù)器是否>=上限N(溢出)      如果計數(shù)器溢

9、出,則將本次值替換當前有效值,并清計數(shù)器B、優(yōu)點:   對于變化緩慢的被測參數(shù)有較好的濾波效果,   可避免在臨界值附近控制器的反復開/關(guān)跳動或顯示器上數(shù)值抖動C、缺點:   對于快速變化的參數(shù)不宜   如果在計數(shù)器溢出的那一次采樣到的值恰好是干擾值,則會將干擾值當作有效值導入系統(tǒng)10、限幅消抖濾波法A、方法:   相當于“限幅濾波法”+“消抖濾波法”   先限幅,后消抖B、優(yōu)點:   繼承了“限幅”和“消抖”的優(yōu)點   改進了“消抖濾

10、波法”中的某些缺陷,避免將干擾值導入系統(tǒng)C、缺點:   對于快速變化的參數(shù)不宜第11種方法:IIR 數(shù)字濾波器 A. 方法:確定信號帶寬, 濾之。Y(n) = a1*Y(n-1) + a2*Y(n-2) + . + ak*Y(n-k) + b0*X(n) + b1*X(n-1) + b2*X(n-2) + . + bk*X(n-k)B. 優(yōu)點:高通,低通,帶通,帶阻任意。設(shè)計簡單(用matlab)C. 缺點:運算量大。/- 軟件濾波的C程序樣例10種軟件濾波方法的示例程序假定從8位AD中讀取數(shù)據(jù)(如果是更高位的AD可定義數(shù)據(jù)類型為int),子程序為get

11、_ad();1、限副濾波/* A值可根據(jù)實際情況調(diào)整value為有效值,new_value為當前采樣值 濾波程序返回有效的實際值 */#define A 10char value;char filter()char new_value;new_value = get_ad();if ( ( new_value - value > A ) | ( value - new_value > A )return value;return new_value;   2、中位值濾波法/* N值可根據(jù)實際情況調(diào)整排序采用冒泡法*/#define N 11c

12、har filter()char value_bufN;char count,i,j,temp;for ( count=0;count<N;count+)value_bufcount = get_ad();delay();for (j=0;j<N-1;j+)for (i=0;i<N-j;i+)   if ( value_buf>value_bufi+1 )         temp = value_buf;      value_buf = value

13、_bufi+1;          value_bufi+1 = temp;   return value_buf(N-1)/2; 3、算術(shù)平均濾波法/*/#define N 12char filter()int sum = 0;for ( count=0;count<N;count+)sum + = get_ad();delay();return (char)(sum/N);4、遞推平均濾波法(又稱滑動平均濾波法)/*/#define N 12 char value_bufN;

14、char i=0;char filter()char count;int sum=0;value_bufi+ = get_ad();if ( i = N ) i = 0;for ( count=0;count<N,count+)sum = value_bufcount;return (char)(sum/N);5、中位值平均濾波法(又稱防脈沖干擾平均濾波法)/*/#define N 12char filter()char count,i,j;char value_bufN;int sum=0;for (count=0;count<N;count+)value_bufcount =

15、get_ad();delay();for (j=0;j<N-1;j+)for (i=0;i<N-j;i+)   if ( value_buf>value_bufi+1 )         temp = value_buf;      value_buf = value_bufi+1;          value_bufi+1 = temp;   for(count=1

16、;count<N-1;count+)sum += valuecount;return (char)(sum/(N-2);6、限幅平均濾波法/*/ 略 參考子程序1、37、一階滯后濾波法/* 為加快程序處理速度假定基數(shù)為100,a=0100 */#define a 50char value;char filter()char new_value;new_value = get_ad();return (100-a)*value + a*new_value; 8、加權(quán)遞推平均濾波法/* coe數(shù)組為加權(quán)系數(shù)表,存在程序存儲區(qū)。*/#define N 12char code

17、 coeN = 1,2,3,4,5,6,7,8,9,10,11,12;char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;char filter()char count;char value_bufN;int sum=0;for (count=0,count<N;count+)value_bufcount = get_ad();delay();for (count=0,count<N;count+)sum += value_bufcount*coecount;return (char)(sum/sum_coe);9、消抖濾波法#define

18、 N 12char filter()char count=0;char new_value;new_value = get_ad();while (value !=new_value);count+;if (count>=N) return new_value;   delay();new_value = get_ad();return value; 10、限幅消抖濾波法/*/略 參考子程序1、911、IIR濾波例子int BandpassFilter4(int InputAD4)int ReturnValue; int ii;RESLO=0;RE

19、SHI=0;MACS=*PdelIn;OP2=1068; /FilterCoeff44;MACS=*(PdelIn+1);OP2=8; /FilterCoeff43;MACS=*(PdelIn+2);OP2=-2001;/FilterCoeff42;MACS=*(PdelIn+3);OP2=8; /FilterCoeff41;MACS=InputAD4;OP2=1068; /FilterCoeff40;MACS=*PdelOu;OP2=-7190;/FilterCoeff48;MACS=*(PdelOu+1);OP2=-1973; /FilterCoeff47;MACS=*(PdelOu+2)

20、;OP2=-19578;/FilterCoeff46;MACS=*(PdelOu+3);OP2=-3047; /FilterCoeff45;*p=RESLO;*(p+1)=RESHI;mytestmul<<=2;ReturnValue=*(p+1);for (ii=0;ii<3;ii+)DelayInputii=DelayInputii+1;DelayOutputii=DelayOutputii+1; DelayInput3=InputAD4;DelayOutput3=ReturnValue;/ if (ReturnValue<0)/ / ReturnValu

21、e=-ReturnValue;/ return ReturnValue; 二.在圖像處理中應(yīng)用到的濾波算法實例:BOOL   WINAPI   MedianFilter(LPSTR   lpDIBBits,   LONG   lWidth,   LONG   lHeight,         int   iFilterH,  

22、int   iFilterW,         int   iFilterMX,   int   iFilterMY)          /   指向源圖像的指針   unsigned   char* lpSrc;    

23、0;  /   指向要復制區(qū)域的指針   unsigned   char* lpDst;       /   指向復制圖像的指針   LPSTR lpNewDIBBits;   HLOCAL hNewDIBBits;       /   指向濾波器數(shù)組的指針 

24、  unsigned   char *   aValue;   HLOCAL hArray;       /   循環(huán)變量   LONG i;   LONG j;   LONG k;   LONG l;       / 

25、  圖像每行的字節(jié)數(shù)   LONG lLineBytes;       /   計算圖像每行的字節(jié)數(shù)   lLineBytes   =   WIDTHBYTES(lWidth   *   8);       /   暫時分配內(nèi)存,以保存新圖像  &#

26、160;hNewDIBBits   =   LocalAlloc(LHND,   lLineBytes   *   lHeight);       /   判斷是否內(nèi)存分配失敗   if   (hNewDIBBits   =   NULL)      /

27、60;  分配內(nèi)存失敗   return   FALSE;          /   鎖定內(nèi)存   lpNewDIBBits   =   (char   *   )LocalLock(hNewDIBBits);       / &

28、#160; 初始化圖像為原始圖像   memcpy(lpNewDIBBits,   lpDIBBits,   lLineBytes   *   lHeight);       /   暫時分配內(nèi)存,以保存濾波器數(shù)組   hArray   =   LocalAlloc(LHND,   iFilterH 

29、;  *   iFilterW);       /   判斷是否內(nèi)存分配失敗   if   (hArray   =   NULL)      /   釋放內(nèi)存   LocalUnlock(hNewDIBBits);   LocalFree(hNewD

30、IBBits);       /   分配內(nèi)存失敗   return   FALSE;          /   鎖定內(nèi)存   aValue   =   (unsigned   char   *   )Loca

31、lLock(hArray);       /   開始中值濾波   /   行(除去邊緣幾行)   for(i   =   iFilterMY;   i   <   lHeight   -   iFilterH   +   iFilterMY&

32、#160;  +   1;   i+)      /   列(除去邊緣幾列)   for(j   =   iFilterMX;   j   <   lWidth   -   iFilterW   +   iFilterMX   +&#

33、160;  1;   j+)      /   指向新DIB第i行,第j個象素的指針   lpDst   =   (unsigned   char*)lpNewDIBBits   +   lLineBytes   *   (lHeight   -   1  

34、-   i)   +   j;       /   讀取濾波器數(shù)組   for   (k   =   0;   k   <   iFilterH;   k+)      for   (l

35、0;  =   0;   l   <   iFilterW;   l+)      /   指向DIB第i   -   iFilterMY   +   k行,第j   -   iFilterMX   +   l個象素的指針  

36、; lpSrc   =   (unsigned   char*)lpDIBBits   +   lLineBytes   *   (lHeight   -   1   -   i   +   iFilterMY   -   k)   +   j

37、60;  -   iFilterMX   +   l;       /   保存象素值   aValuek   *   iFilterW   +   l   =   *lpSrc;         &

38、#160;   /   獲取中值   *   lpDst   =   GetMedianNum(aValue,   iFilterH   *   iFilterW);             /   復制變換后的圖像   

39、;memcpy(lpDIBBits,   lpNewDIBBits,   lLineBytes   *   lHeight);       /   釋放內(nèi)存   LocalUnlock(hNewDIBBits);   LocalFree(hNewDIBBits);   LocalUnlock(hArray);   LocalFree(hArray);       /   返回   return   TRUE;      三.RC濾波的一種實現(xiàn).RcDigital(double & X, double & Y)static int MidFlag;static double Yn_1,Xn_1;d

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論