卡尔曼滤波一KF
卡尔曼经典公式:
概念简介:
滤波:滤除噪声,增强有用信息。
白噪声:
高斯白噪声:噪声的功率谱密度函数呈现均匀分布,且干扰信号的幅度呈现高斯分布
主要出现在一些测量仪器中,测量噪声
滤波器:针对随机信号的统计估计方法(现代滤波器)
卡尔曼滤波:
线性领域:经典卡尔曼滤波
非线性领域:EKF扩展的卡尔曼滤波和无迹卡尔曼滤波
系统建模:
状态方程,观测方程
最优滤波或者最优估计:
最小方差意义下的最优估计和滤波,要求信号或状态的最优估值应与相应的真实值的误差的方差最小
经典方法包括:维纳滤波(频域),卡尔曼(时域)
基本公式:
举例如下:
一维空间的卡尔曼滤波,主要参考严老师教材
其中均值0,单位的高斯白噪声
clear; % 系统参数 Phik = 0.95; Bk = 1.0;Hk = 1.0; % 噪声参数,分别是标准差和方差 q =1;r = 3;Qk = q*q;Rk = r*r; len =100; %含有噪声的标准正太分布 w = q*randn(len,1);v = r*randn(len,1); xk = zeros(len,1);yk = zeros(len,1); xk(1) =r*randn(1,1); for k = 2:len xk(k) = Phik*xk(k-1) + Bk*w(k); yk(k)= Hk*xk(k)+v(k); end % Kalman 滤波估计,初始状态为0 Xk = 0; % 第一步的误差,这个数比较大,为很大的正实数???意义 Pxk = 100*Rk/(Hk^2*Phik^2); for k=1:len [Xk, Pxk, Kk] = kalman(Phik, Bk, Qk, Xk, Pxk, Hk, Rk, yk(k)); res(k,:) = [Xk,Pxk,Kk]; end % 稳态滤波 ss = [Hk^2*Phik^2 Hk^2*Bk^2*Qk+Rk-Phik^2*Rk -Bk^2*Qk*Rk]; Px = ( - ss(2) + sqrt(ss(2)^2-4*ss(1)*ss(3)) ) / (2*ss(1)); K = Hk*(Phik^2*Px+Bk^2*Qk)/(Hk^2*(Phik^2*Px+Bk^2*Qk)+Rk); G = (1-K*Hk)*Phik; % 这里获取真值 Xk_IIR = filter(K, [1 -G], yk); % 作图 subplot(1,2,1), hold off, plot(sqrt(res(:,2)),'-'), hold on, plot(res(:,3),'r:'); grid xlabel('\itk'); ylabel('\it\surd P_x_k , K_k'); subplot(122), hold off, plot(yk,'x'), hold on, plot(xk,'m:'); plot(res(:,1),'k'); plot(Xk_IIR,'r-.'); grid xlabel('\itk'); ylabel('\ity_k, x_k, x^\^_k, x^\^_k_,_I_I_R'); function [Xk, Pxk, Kk] = kalman(Phikk_1, Bk, Qk, Xk_1, Pxk_1, Hk, Rk, Yk) Xkk_1 = Phikk_1*Xk_1; Pxkk_1 = Phikk_1*Pxk_1*Phikk_1' + Bk*Qk*Bk'; Pxykk_1 = Pxkk_1*Hk'; Pykk_1 = Hk*Pxykk_1 + Rk; Kk = Pxykk_1*Pykk_1^-1; Xk = Xkk_1 + Kk*(Yk-Hk*Xkk_1); Pxk = Pxkk_1 - Kk*Pykk_1*Kk'; end
结果图如下:
结果如下:
误差和滤波增益很快收敛,滤波曲线存在滞后的情况,数字滤波器的相位延迟特点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~