打印

授之以渔: 卡尔曼滤波器 ....大泻蜜 .........................

[复制链接]
楼主: highgear
手机看帖
扫描二维码
随时随地手机跟帖
61
Cortex-M0| | 2011-12-8 18:15 | 只看该作者 回帖奖励 |倒序浏览
继续听highgear老师上课~~~

使用特权

评论回复
62
highgear|  楼主 | 2011-12-8 21:46 | 只看该作者
第一个例子中的代码


 
Ts = 1;                    采样时间
s = tf('s');
sysc = 100/(60*s +1);      真实系统的传递函数
sysd = c2d(sysc, Ts);

t = 0:TsTs*300);
u = ones(1, length(t));     系统输入
ys = lsim(sysd, u, t, 0);   系统输出
ys = ys + 10*rand(size(ys));  测量量 = 系统输出 + 噪声

A = [1, 0; 0, 1];
B = [1; 0];
C = [1, 0];
N = length(A);          系统维数
Len = length(u);

yout = zeros(Len, 1);   滤波器输出
Xh = zeros(N, 1);       状态变量
P = eye(N);              
Q = 2 * eye(N);         系统噪声
R = 50;                 测量噪声
for i = 1 : Len
    Xh = A*Xh + B*u(i);
    P = A*P*A' + Q;
    K = P*C'* inv(C*P*C' + R);
    Xh = Xh + K*(ys(i) - C*Xh);
    P = P - K*C*P;
    yout(i) = C*Xh;
end
Ts = 1;                    采样时间
s = tf('s');
sysc = 100/(60*s +1);      真实系统的传递函数
sysd = c2d(sysc, Ts);

t = 0:Ts:(Ts*300);
u = ones(1, length(t));     系统输入
ys = lsim(sysd, u, t, 0);   系统输出
ys = ys + 10*rand(size(ys));  测量量 = 系统输出 + 噪声

A = [1, 0; 0, 1];
B = [1; 0];
C = [1, 0];
N = length(A);          系统维数
Len = length(u);

yout = zeros(Len, 1);   滤波器输出
Xh = zeros(N, 1);       状态变量
P = eye(N);              
Q = 2 * eye(N);         系统噪声
R = 50;                 测量噪声
for i = 1 : Len
    Xh = A*Xh + B*u(i);
    P = A*P*A' + Q;
    K = P*C'* inv(C*P*C' + R);
    Xh = Xh + K*(ys(i) - C*Xh);
    P = P - K*C*P;
    yout(i) = C*Xh;
end

plot(t, ys, t, yout);


, t, yout);

使用特权

评论回复
63
highgear|  楼主 | 2011-12-8 21:50 | 只看该作者
使用最小二乘法例子的代码:
 

Ts = 1;               采样时间
s = tf('s');
sysc = 100/(60*s +1);   真实系统的传递函数
sysd = c2d(sysc, Ts);

t = 0:Ts:(Ts*300);
u = ones(1, length(t));   系统输入
ys = lsim(sysd, u, t, 0); 系统输出
ys = ys + 10*rand(size(ys)); 测量量 = 系统输出 + 噪声

[numd, dend] = LeastSquare(u, ys, 3);   最小二乘法获取预测系统模型
[A, B, C, D] = tf2ss(numd, dend);       变换到状态空间形式
Len = length(u);
N = length(A);         系统维数

yout = zeros(Len, 1);  滤波器输出
Xh = zeros(N, 1);      状态变量
P = eye(N);
Q = 0.02 * eye(N);     系统噪声
R = 50;                测量噪声
for i = 1 : Len
    Xh = A*Xh + B*u(i);
    P = A*P*A' + Q;

    K = P*C'* inv(C*P*C' + R);
    Xh = Xh + K*(ys(i) - C*Xh);
    P = P - K*C*P;
    yout(i) = C*Xh;
end

plot(t, ys, t, yout);


超过 100 楼则公布如何通过输入输出获取系统模型的最小二乘法程序

使用特权

评论回复
64
Cortex-M0| | 2011-12-9 08:27 | 只看该作者
顶~~~

继续听highgear老师上课~~~

使用特权

评论回复
65
Cortex-M0| | 2011-12-9 08:28 | 只看该作者
有钱出钱

使用特权

评论回复
66
Cortex-M0| | 2011-12-9 08:28 | 只看该作者
有力出力

使用特权

评论回复
67
Cortex-M0| | 2011-12-9 08:29 | 只看该作者
没本事的多灌灌水

使用特权

评论回复
68
Cortex-M0| | 2011-12-9 08:29 | 只看该作者
多顶顶highgear老师之贴

使用特权

评论回复
69
Cortex-M0| | 2011-12-9 08:30 | 只看该作者
多听听highgear老师上课

使用特权

评论回复
70
lxyppc| | 2011-12-9 08:30 | 只看该作者
100楼太容易了

使用特权

评论回复
71
Cortex-M0| | 2011-12-9 10:18 | 只看该作者
LS盆友正解~~~

这该上1000楼才对~~~ :lol

使用特权

评论回复
72
DownCloud| | 2011-12-9 10:50 | 只看该作者
100楼,必须的。

使用特权

评论回复
73
skyfight| | 2011-12-9 11:01 | 只看该作者
不错,支持一下

使用特权

评论回复
74
DreamNk| | 2011-12-9 11:14 | 只看该作者
:lol

使用特权

评论回复
75
pidcontrol| | 2011-12-9 12:44 | 只看该作者
精彩精彩

使用特权

评论回复
76
xxmmtt| | 2011-12-9 13:46 | 只看该作者
:D

使用特权

评论回复
77
Periodic| | 2011-12-9 15:02 | 只看该作者
高深 目前还是听不大 懂  功底不太好

使用特权

评论回复
78
Periodic| | 2011-12-9 15:03 | 只看该作者
呵呵 没有钱出力

使用特权

评论回复
79
Periodic| | 2011-12-9 15:04 | 只看该作者
21家 上 谈技术的 热情 大不如前了啊 !!现在 才 79楼

使用特权

评论回复
80
Cortex-M0| | 2011-12-9 15:28 | 只看该作者
80楼 :victory:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则