matlab 滤波_MATLAB之简单卡尔曼滤波
????卡爾曼濾波在控制中是一種常用的且非常有效的算法,前段時間在學(xué)習(xí)使用之后加深了對其的認(rèn)識,濾波后的數(shù)據(jù)著實(shí)令我大吃一驚,今天我用MATLAB進(jìn)行了一個簡單的仿真,分享給大家一起來學(xué)習(xí)。
在這節(jié)教程中還包含了一些文件數(shù)據(jù)的讀寫操作,可以一并學(xué)習(xí)。
首先我們新建一個表格,在表格中定義實(shí)際值和測量值。
這里我做了50次的數(shù)據(jù),其中DATE為真實(shí)值,Z為測量值,HAT為將要保存的估計(jì)值。
接下來打開MATLAB,我們先規(guī)定一個測量誤差,我這里假設(shè)為3,當(dāng)然前面表格中填寫的測量值也要滿足這個結(jié)果。
MEAK就是我規(guī)定的測量誤差。
接下來我們假設(shè)一個我們認(rèn)為的估計(jì)誤差MEAK,我這里假設(shè)為5,再估計(jì)一個估計(jì)值,我這里估計(jì)為40.
接下來我們導(dǎo)入表格中的測量數(shù)據(jù)。
這里使用xlsread這個函數(shù),其中第一個參數(shù)為表格文件的名稱,第二個數(shù)據(jù)為要使用的數(shù)據(jù)范圍,將這些數(shù)據(jù)存儲到數(shù)組Z中。
下面我們需要知道一些公式:
系數(shù)K(i) = ESTK(i) /ESTK(i-1)+MEAK(i)
估計(jì)值HAT(i) = HAT(i-1) + K(i)*(Z(i)-HAT(i-1))
估計(jì)誤差ESTK(i) = (1-K(i))*ESTK(i-1)
因?yàn)榈谝粋€數(shù)據(jù)是我們自己估計(jì)的,從第二個數(shù)據(jù)開始需要帶入公式去計(jì)算,所以需要循環(huán)使用公式49次:
這里同時注意for語句的使用。
到這里我們已經(jīng)將50組數(shù)據(jù)的估計(jì)值計(jì)算出來了,在下面的命令行窗口中可以觀察到相應(yīng)數(shù)據(jù)。
我們可以將這些數(shù)據(jù)寫到剛才的表格中:
因?yàn)樵贛ATLAB我們定義的數(shù)組為行向量,我們要寫道表格的一列中去,所以我們需要轉(zhuǎn)置一下,將其變?yōu)樾邢蛄?#xff0c;HAT‘即為轉(zhuǎn)置后的結(jié)果。
我們查看一下表格:
成功寫入指定位置。
為了更加直觀的看出卡爾曼濾波的效果,我們來將其圖像畫出來,先來看看測量值的圖像:
可見測量值是非常不規(guī)則,浮動比較大的。
下面我們看一下估計(jì)值:
可見雖然我們一開始給的估計(jì)值誤差比較大,為百分之二十,但是之后的數(shù)據(jù)在逐漸逼近準(zhǔn)確值50.
我們將圖像放到一起來看一下:
在畫完第一張圖后使用hold on命令,可以使下一張圖顯示在一起,結(jié)束后使用hold off即可開始新的繪制。
可見從第7個數(shù)據(jù)開始,數(shù)據(jù)就已經(jīng)接近了真實(shí)值,其速度是非常快的,從這張圖像中可以非常直觀的看出卡爾曼濾波的效果。而且一次的數(shù)據(jù)只需要前一次的數(shù)據(jù)進(jìn)行計(jì)算,可見使用卡爾曼濾波進(jìn)行數(shù)據(jù)處理是非常方便準(zhǔn)確的。
下面附上整個代碼:
MEAK = 3ESTK(1) = 5
HAT(1) = 40
Z = xlsread('KEM.xlsx','B2:B51')
for i=1:49
K(i+1) = ESTK(i)/(ESTK(i)+MEAK)
HAT(i+1) = HAT(i) + K(i+1)*(Z(i+1)-HAT(i))
ESTK(i+1) = (1-K(i+1))*ESTK(i)
end
xlswrite('KEM.xlsx',HAT','C2:C51')
figure(1)
plot(Z)
hold on
plot(HAT)
hold on
plot(S)
hold on
plot([0,20],[50,50])
hold off
grid on
##以上就是本節(jié)的全部內(nèi)容,后續(xù)內(nèi)容會逐漸上傳,相關(guān)源碼也會統(tǒng)一上傳,也可以到公眾號私聊我要。
##本節(jié)內(nèi)容已上傳博客,請查看。
https://blog.csdn.net/weixin_44936771/article/details/109407602
##不足之處請及時指出,相互學(xué)習(xí)
##不懂得小伙伴可以公眾號私信我,看到后會回復(fù)的,歡迎交流學(xué)習(xí)!
長按圖片關(guān)注
點(diǎn)點(diǎn)“在看”
總結(jié)
以上是生活随笔為你收集整理的matlab 滤波_MATLAB之简单卡尔曼滤波的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特征图注意力_向往的GAT(图注意力模型
- 下一篇: movielens推荐系统_浅谈推荐系统