基于matlab仿真对卡尔曼滤波的理解

clear
clc;
N = 200;           
t = 1:N;
w = randn(1,N);          %噪声w
x(1) = 0;
for i = 2:N
x(i) = x(i-1)+w(i-1);    
end
subplot(311);
plot(t,x);             %输出带噪声函数
xlabel('原始数据');
v = randn(1,N);        %噪声v
c = 0.2;               %同样一个干扰系数
y = c*x+v;             %输出带噪声函数

q1 = std(v);          
q2 = std(w);
p(1) = 2;           %协方差初始化
Q = q2.^2;          %预测(过程)噪声方差
R = q1.^2;          %测量(观测)噪声方差

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);           %修正 协方差为下次计算
end
subplot(312);
plot(t,x);
xlabel('卡尔曼滤波结果');



Filter_Width = 10;                 %对x滑动滤波处理
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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值