隨著基于模型設計的廣泛應用,模型在環仿真也逐漸多了起來,我們今天介紹幾種嵌入式常用濾波演算法的matlab實作,
一、采用數字濾波演算法克服隨機干擾的誤差具有以下優點:
數字濾波無需其他的硬體成本,只用一個計算程序,可靠性高,不存在阻抗匹配問題,尤其是數字濾波可以對頻率很低的信號進行濾波,這是模擬濾波器做不到的,
數字濾波使用軟體演算法實作,多輸入通道可共用一個濾波程式,降低系統開支,
只要適當改變濾波器的濾波程式或運算,就能方便地改變其濾波特性,這對于濾除低頻干擾和隨機信號會有較大的效果,
在單片機系統中常用的濾波演算法有限幅濾波法、中值濾波法、算術平均濾波法、加權平均濾波法、滑動平均濾波等,
%% 代碼測驗框架 clear signal=wgn(1,1000,10); signal=10+signal; signalFited=zeros(1,1000); for i=1:1000 signalFited(i)=MyFilter(@LowPasFilter,signal(i)); % 改一下句柄名字就可以了, end plot(signal); hold on; plot(signalFited); function output = MyFilter(fun,input) %MyFilter 濾波測驗函式 % MyFilter.m output=fun(input); end
二、限幅濾波 該運算的程序中將兩次相鄰的采樣相減,求出其增量,然后將增量的絕對值,與兩次采樣允許的最大差值maxErr進行比較,maxErr的大小由被測物件的具體情況而定,如果小于或等于允許的最大差值,則本次采樣有效;否則取上次采樣值作為本次資料的樣本,
限幅濾波法主要用于處理變化較為緩慢的資料,如溫度、物體的位置等,使用時,關鍵要選取合適的門限制maxErr,通常這可由經驗資料獲得,必要時可通過實驗得到,
function out = LimRanFilter(input) %LimRan 限幅度濾波函式 % LimRanFilter.m maxErr=5;%允許最大誤差 persistent last; if isempty(last) last=input; end%上一次的值 if((input-last)>maxErr||(last-input)>maxErr) out=last; else out=input; end end

三、中值濾波
該運算的程序是對某一引數連續采樣N次(N一般為奇數),然后把N次采樣的值按從小到大排列,再取中間值作為本次采樣值,整個程序實際上是一個序列排序的程序,
中值濾波比較適用于去掉由偶然因素引起的波動和采樣器不穩定而引起的脈動干擾,若被測量值變化比較慢,采用中值濾波法效果會比較好,但如果資料變化比較快,則不宜采用此方法,
function output= MeanFilter(input) %MeanFilter 中值濾波 % MeanFilter.m persistent 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%初始化濾波緩沖區 output=buff(4); end

四、滑動平均濾波
平均濾波演算法有一個特點,即每獲取一個有效采樣值必須連續進行若干次采樣,當采速度慢時,系統的實時得不到保證,這里介紹的滑動平均濾波演算法只采樣一次,將一次采樣值和過去的若干次采樣值一起求平均,得到的有效采樣值即可投入使用,如果取N個采樣值求平均,存盤區中必須開辟N個資料的暫存區,每新采集一個資料便存入暫存區中,同時去掉一個最老資料,保存這N個資料始終是最新更新的資料,采用環型佇列結構可以方便地實作這種資料存放方式,
function output= MovAveFilter(input) %MovAveFilter 滑動平均濾波 % ′MovAveFilter.m persistent 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%計數器 buff(k)=input; k=mod((k+1),5)+1; numOfBuff=numOfBuff+1; if(numOfBuff>5) numOfBuff=5; end output=sum(buff)/numOfBuff; end

五、低通濾波
將普通硬體RC低通濾波器的微分方程用差分方程來表求,變可以采用軟體演算法來模擬硬體濾波的功能,經推導,低通濾波演算法如下:
Yn=a* Xn+(1-a) *Yn-1 式中 Xn——本次采樣值 Yn-1——上次的濾波輸出值; a——濾波系數,其值通常遠小于1; Yn——本次濾波的輸出值,
function output= LowPasFilter(input) %LowPasFilter低通濾波 % ′LowPasFilter.m persistent yn0; if isempty(yn0) yn0=0; end%上次輸出值 a=0.5;%濾波系數 output=inputa+yn0(1-a); yn0=output; end

這幾種是使用較多的濾波演算法,比較方便進行仿真與撰寫,還有擴展卡爾曼等的實作可以根據實際情況來運用,在一般領域這幾種濾波演算法已經能夠達到很好的效果了,
- End -
技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬體推薦給大家,看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值,如果你在機器人行業,就請關注我們的公眾號,我們將持續發布機器人行業最有價值的資訊和技術,
阿木實驗室致力于前沿IT科技的教育和智能裝備,讓機器人研發更高效!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303920.html
標籤:其他
上一篇:桌面寵物開發——羅小黑(二)
