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