声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1979|回复: 3

[综合讨论] 菜鸟请教卡尔曼滤波在matlab里的程序实现

[复制链接]
发表于 2006-8-30 10:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
因为毕业设计里边牵扯倒利用卡尔曼滤波法实现一定的检测,所以我很需要关于这方面的程序,不管是哪种语言的都可以,matlab语言编的那更是感激不禁了。很希望能与各位高手交流一下,请大家不吝赐教!

[ 本帖最后由 lxq 于 2006-10-13 15:51 编辑 ]

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2006-9-8 14:49 | 显示全部楼层
我有不过我不知道如何上传文件
发表于 2006-10-13 15:05 | 显示全部楼层
clear;clc;
A = [1.1269   -0.4940    0.1129
     1.0000         0         0
          0    1.0000         0];
B = [-0.3832
      0.5919
      0.5191];
C = [1 0 0];
Plant = ss(A,[B B],C,0,-1,'inputname',{'u' 'w'},'outputname','y');
Q = 1; R = 1;
[kalmf,L,P,M] = kalman(Plant,Q,R);

a = A;
b = [B B 0*B];
c = [C;C];
d = [0 0 0;0 0 1];
P = ss(a,b,c,d,-1,'inputname',{'u' 'w' 'v'},'outputname',{'y' 'yv'});
sys = parallel(P,kalmf,1,1,[],[])
% Close loop around input #4 and output #2
SimModel = feedback(sys,1,4,2,1)
% Delete yv from I/O list
SimModel = SimModel([1 3],[1 2 3])

t = [0:100]';
u = sin(t/5);

n = length(t)
randn('seed',0)
w = sqrt(Q)*randn(n,1);
v = sqrt(R)*randn(n,1);

[out,x] = lsim(SimModel,[w,v,u]);

y = out(:,1);   % true response
ye = out(:,2);  % filtered response
yv = y + v;     % measured response

subplot(211), plot(t,y,'--',t,ye,'-'),
xlabel('No. of samples'), ylabel('Output')
title('Kalman filter response')
subplot(212), plot(t,y-yv,'-.',t,y-ye,'-'),
xlabel('No. of samples'), ylabel('Error')

MeasErr = y-yv;
MeasErrCov = sum(MeasErr.*MeasErr)/length(MeasErr);
EstErr = y-ye;
EstErrCov = sum(EstErr.*EstErr)/length(EstErr);

评分

1

查看全部评分

发表于 2012-6-9 08:19 | 显示全部楼层
[out,x] = lsim(SimModel,[w,v,u]);

这语句如何理解参数作用,如果u为采集的输入信号,w,v各是什么意思?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-23 11:23 , Processed in 0.060689 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表