kalman滤波matlab代码demo

kalman滤波其实是一个自回归,自我调整的预测系统,对有白噪声干扰的信号有很好的去除效果

网上找了些maltab代码,修改了一下

帮助自己理解:

clear
clc;
N = 600;
t = 1:N;
CON = 25;
%x = zeros(1,N);
w = randn(1,N);
x(1) = 0;
for i = 2:N
    x(i) = x(i-1)+w(i-1);
end
subplot(311);
plot(t,x);
v = randn(1,N);
q1 = std(v);
q2 = std(w);
c = 0.2;
y = c*x+v;
% im = imread('lake.bmp');
% [z j] = size(im);
% y = im;
% x(1) = 20;
p(1) = 2;
Q = q2.^2;
R = q1.^2;
% x = zeros(512,512);
% x(1,1) = y(1,1);
c = 0.2
for k = 2:N
    x(k) = x(k-1);
    p(k) = p(k-1)+Q;
    Kg(k) = c*p(k)/(c^2*p(k)+R);
    x(k) = x(k)+Kg(k)*(y(k)-c*x(k));
    p(k) = (1-c*Kg(k))*p(k);
    k
end

Filter_Width = 10;
Smooth_Result = zeros(1,N);
for i = Filter_Width+1:N
    Temp_Sum = 0;
    for j = i-Filter_Width:(i-1)
        Temp_Sum = x(j)+Temp_Sum;
    end
    Smooth_Result(i) = Temp_Sum/Filter_Width;
end

t = 1:N;
% figure('Name','Kalman Filter Simulation','NumberTitle','off');
expected_Value = zeros(1,N);
for i = i:N
    expected_Value(i) = CON;
end
t = 1:N;
subplot(312);
plot(t,y);
subplot(313);
plot(t,x);
% plot(t,expected_Value,'-b',t,y,'-g',t,x,'-k',t,Smooth_Result,'-m');
% legend('expected','measure','estimate','smooth_result');
% xlabel('sample time');
% ylabel('temperature');
% title('Kalman Filter Simulation');



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kalman滤波是一种常用的估计和预测技术,在神经网络中的应用也非常广泛。在MATLAB中实现Kalman滤波代码,可以通过以下步骤完成: 1. 初始化Kalman滤波器参数: 首先,定义系统的状态转移矩阵、观测矩阵、控制矩阵、噪声协方差矩阵和测量噪声协方差矩阵等参数。 2. 初始化状态向量和协方差矩阵: 定义系统的初始状态和初始状态协方差矩阵。 3. 预测: 根据系统的状态转移矩阵、控制矩阵和上一步的状态估计值,可以通过以下公式进行状态预测: x_predict = A * x_previous + B * u 其中,x_predict为预测的状态值,x_previous为上一步的状态值,A为状态转移矩阵,B为控制矩阵,u为控制向量。 同样,根据状态转移矩阵、上一步的协方差矩阵和系统噪声协方差矩阵,可以进行协方差预测: P_predict = A * P_previous * A' + Q 其中,P_predict为预测的状态协方差矩阵,P_previous为上一步的状态协方差矩阵,Q为系统噪声协方差矩阵。 4. 更新: 根据观测矩阵和测量噪声协方差矩阵,可以通过以下公式进行状态更新: K = P_predict * H' * inv(H * P_predict * H' + R) x_update = x_predict + K * (z - H * x_predict) 其中,K为卡尔曼增益矩阵,z为观测值,H为观测矩阵,R为测量噪声协方差矩阵,x_update为更新后的状态值。 同样,根据观测矩阵和测量噪声协方差矩阵,可以进行协方差更新: P_update = (I - K * H) * P_predict 其中,I为单位矩阵,P_update为更新后的状态协方差矩阵。 5. 重复预测和更新步骤: 在获取到新的观测值后,可以重复进行预测和更新步骤,得到更精确的状态估计值。 以上就是用MATLAB实现神经网络Kalman滤波的基本步骤。具体的代码实现可能根据具体的问题和需求而有所不同,可以根据以上的步骤进行相应的代码编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值