隨著基于模型設(shè)計的廣泛應(yīng)用,模型在環(huán)仿真也逐漸多了起來,我們今天介紹幾種嵌入式常用濾波算法的matlab實現(xiàn)。
一、采用數(shù)字濾波算法克服隨機干擾的誤差具有以下優(yōu)點:
-
數(shù)字濾波無需其他的硬件成本,只用一個計算過程,可靠性高,不存在阻抗匹配問題。尤其是數(shù)字濾波可以對頻率很低的信號進行濾波,這是模擬濾波器做不到的。
-
數(shù)字濾波使用軟件算法實現(xiàn),多輸入通道可共用一個濾波程序,降低系統(tǒng)開支。
-
只要適當改變?yōu)V波器的濾波程序或運算,就能方便地改變其濾波特性,這對于濾除低頻干擾和隨機信號會有較大的效果。
-
在單片機系統(tǒng)中常用的濾波算法有限幅濾波法、中值濾波法、算術(shù)平均濾波法、加權(quán)平均濾波法、滑動平均濾波等。
%% 代碼測試框架clearsignal=wgn(1,1000,10);signal=10+signal;signalFited=zeros(1,1000);for i=1:1000signalFited(i)=MyFilter(@LowPasFilter,signal(i)); % 改一下句柄名字就可以了。endplot(signal);hold on;plot(signalFited);function output = MyFilter(fun,input)%MyFilter 濾波測試函數(shù)% MyFilter.m output=fun(input);end
二、限幅濾波該運算的過程中將兩次相鄰的采樣相減,求出其增量,然后將增量的絕對值,與兩次采樣允許的最大差值maxErr進行比較。maxErr的大小由被測對象的具體情況而定,如果小于或等于允許的最大差值,則本次采樣有效;否則取上次采樣值作為本次數(shù)據(jù)的樣本。
限幅濾波法主要用于處理變化較為緩慢的數(shù)據(jù),如溫度、物體的位置等。使用時,關(guān)鍵要選取合適的門限制maxErr。通常這可由經(jīng)驗數(shù)據(jù)獲得,必要時可通過實驗得到。
function out = LimRanFilter(input)%LimRan 限幅度濾波函數(shù)% LimRanFilter.mmaxErr=5;%允許最大誤差 persistent last;if isempty(last) last=input;end%上一次的值if((input-last)>maxErr||(last-input)>maxErr) out=last;else out=input;endend
三、中值濾波
該運算的過程是對某一參數(shù)連續(xù)采樣N次(N一般為奇數(shù)),然后把N次采樣的值按從小到大排列,再取中間值作為本次采樣值,整個過程實際上是一個序列排序的過程。
中值濾波比較適用于去掉由偶然因素引起的波動和采樣器不穩(wěn)定而引起的脈動干擾。若被測量值變化比較慢,采用中值濾波法效果會比較好,但如果數(shù)據(jù)變化比較快,則不宜采用此方法。
function output= MeanFilter(input)%MeanFilter 中值濾波% MeanFilter.mpersistent buff;if isempty(buff) buff=[2 0 0 0 0 0];end%選擇序列if(buff(1)<7) buff(buff(1))=input; buff(buff(1))=buff(buff(1))+1;else for i=2:5 if(buff(i)>buff(i+1)) temp=buff(i); buff(i)=buff(i+1); buff(i+1)=temp; end end buff(2:6)=0; buff(1)=2;end%初始化濾波緩沖區(qū)output=buff(4);end
四、滑動平均濾波
平均濾波算法有一個特點,即每獲取一個有效采樣值必須連續(xù)進行若干次采樣,當采速度慢時,系統(tǒng)的實時得不到保證。這里介紹的滑動平均濾波算法只采樣一次,將一次采樣值和過去的若干次采樣值一起求平均,得到的有效采樣值即可投入使用。如果取N個采樣值求平均,存儲區(qū)中必須開辟N個數(shù)據(jù)的暫存區(qū)。每新采集一個數(shù)據(jù)便存入暫存區(qū)中,同時去掉一個最老數(shù)據(jù),保存這N個數(shù)據(jù)始終是最新更新的數(shù)據(jù)。采用環(huán)型隊列結(jié)構(gòu)可以方便地實現(xiàn)這種數(shù)據(jù)存放方式。
function output= MovAveFilter(input)%MovAveFilter 滑動平均濾波% ´MovAveFilter.mpersistent buff;if isempty(buff) buff=[ 0 0 0 0 0 ];end%滑動窗口persistent numOfBuff;if isempty(numOfBuff) numOfBuff=0;end%´當前窗口元素persistent k;if isempty(k) k=1;end%計數(shù)器buff(k)=input;k=mod((k+1),5)+1;numOfBuff=numOfBuff+1;if(numOfBuff>5) numOfBuff=5;endoutput=sum(buff)/numOfBuff;end
五、低通濾波
將普通硬件RC低通濾波器的微分方程用差分方程來表求,變可以采用軟件算法來模擬硬件濾波的功能,經(jīng)推導,低通濾波算法如下:
Yn=a* Xn+(1-a) *Yn-1式中 Xn——本次采樣值Yn-1——上次的濾波輸出值;a——濾波系數(shù),其值通常遠小于1;Yn——本次濾波的輸出值。
function output= LowPasFilter(input)%LowPasFilter低通濾波% ´LowPasFilter.mpersistent yn0;if isempty(yn0) yn0=0;end%上次輸出值a=0.5;%濾波系數(shù)output=inputa+yn0(1-a);yn0=output;end
這幾種是使用較多的濾波算法,比較方便進行仿真與編寫,還有擴展卡爾曼等的實現(xiàn)可以根據(jù)實際情況來運用,在一般領(lǐng)域這幾種濾波算法已經(jīng)能夠達到很好的效果了。
- End -
技術(shù)發(fā)展的日新月異,阿木實驗室將緊跟技術(shù)的腳步,不斷把機器人行業(yè)最新的技術(shù)和硬件推薦給大家。看到經(jīng)過我們培訓的學員在技術(shù)上突飛猛進,是我們培訓最大的價值。如果你在機器人行業(yè),就請關(guān)注我們的公眾號,我們將持續(xù)發(fā)布機器人行業(yè)最有價值的信息和技術(shù)。
阿木實驗室致力于前沿IT科技的教育和智能裝備,讓機器人研發(fā)更高效!