智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: Oner
打印 上一主题 下一主题

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

  [复制链接]

2

主题

19

帖子

0

精华

高级会员

Rank: 4

积分
987
威望
573
贡献
254
兑换币
102
注册时间
2011-5-18
在线时间
80 小时
21#
发表于 2011-12-17 02:20:29 | 只看该作者
顶!!!
回复 支持 反对

使用道具 举报

2

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
972

活跃会员奖章优秀会员奖章

QQ
威望
574
贡献
200
兑换币
0
注册时间
2011-3-21
在线时间
99 小时
22#
发表于 2011-12-17 12:00:42 | 只看该作者
这个,,,看起来挺费劲的
回复 支持 反对

使用道具 举报

39

主题

593

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1694
威望
989
贡献
401
兑换币
86
注册时间
2008-12-13
在线时间
152 小时
23#
发表于 2011-12-18 18:18:37 | 只看该作者
卡尔曼原来是需要建模的啊,  这个很麻烦啊
回复 支持 反对

使用道具 举报

1

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
威望
312
贡献
97
兑换币
0
注册时间
2011-3-2
在线时间
21 小时
24#
发表于 2011-12-18 19:20:04 | 只看该作者
多谢啦
回复 支持 反对

使用道具 举报

1

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
威望
312
贡献
97
兑换币
0
注册时间
2011-3-2
在线时间
21 小时
25#
发表于 2011-12-18 19:20:10 | 只看该作者
谢谢啦
回复 支持 反对

使用道具 举报

23

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1952
QQ
威望
981
贡献
785
兑换币
168
注册时间
2011-3-30
在线时间
93 小时
26#
发表于 2011-12-18 19:25:55 | 只看该作者
matlab是个好东西,建议兄弟们好好学习下
回复 支持 反对

使用道具 举报

9

主题

239

帖子

0

精华

金牌会员

未来,我手中!

Rank: 6Rank: 6

积分
2201

推广达人奖章热心会员奖章

QQ
威望
774
贡献
1249
兑换币
0
注册时间
2011-11-17
在线时间
89 小时
27#
发表于 2011-12-18 20:17:50 | 只看该作者
好吧,看不懂
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
威望
221
贡献
52
兑换币
0
注册时间
2011-2-27
在线时间
3 小时
28#
发表于 2011-12-19 21:35:04 | 只看该作者
mark一下,哈哈,很高深啊。
http://bbs.21ic.com/icview-292853-1-1.html
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
威望
221
贡献
52
兑换币
0
注册时间
2011-2-27
在线时间
3 小时
29#
发表于 2011-12-19 21:37:15 | 只看该作者
有木有?
第一个例子中的代码
  1. Ts = 1;                    采样时间
  2. s = tf('s');
  3. sysc = 100/(60*s +1);      真实系统的传递函数
  4. sysd = c2d(sysc, Ts);

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

  9. A = [1, 0; 0, 1];
  10. B = [1; 0];
  11. C = [1, 0];
  12. N = length(A);          系统维数
  13. Len = length(u);

  14. yout = zeros(Len, 1);   滤波器输出
  15. Xh = zeros(N, 1);       状态变量
  16. P = eye(N);              
  17. Q = 2 * eye(N);         系统噪声
  18. R = 50;                 测量噪声
  19. for i = 1 : Len
  20.     Xh = A*Xh + B*u(i);
  21.     P = A*P*A' + Q;
  22.     K = P*C'* inv(C*P*C' + R);
  23.     Xh = Xh + K*(ys(i) - C*Xh);
  24.     P = P - K*C*P;
  25.     yout(i) = C*Xh;
  26. end
  27. Ts = 1;                    采样时间
  28. s = tf('s');
  29. sysc = 100/(60*s +1);      真实系统的传递函数
  30. sysd = c2d(sysc, Ts);

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

  35. A = [1, 0; 0, 1];
  36. B = [1; 0];
  37. C = [1, 0];
  38. N = length(A);          系统维数
  39. Len = length(u);

  40. yout = zeros(Len, 1);   滤波器输出
  41. Xh = zeros(N, 1);       状态变量
  42. P = eye(N);              
  43. Q = 2 * eye(N);         系统噪声
  44. R = 50;                 测量噪声
  45. for i = 1 : Len
  46.     Xh = A*Xh + B*u(i);
  47.     P = A*P*A' + Q;
  48.     K = P*C'* inv(C*P*C' + R);
  49.     Xh = Xh + K*(ys(i) - C*Xh);
  50.     P = P - K*C*P;
  51.     yout(i) = C*Xh;
  52. end

  53. plot(t, ys, t, yout);
复制代码
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
威望
221
贡献
52
兑换币
0
注册时间
2011-2-27
在线时间
3 小时
30#
发表于 2011-12-19 21:38:12 | 只看该作者
使用最小二乘法例子的代码:


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

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

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

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

  21.         K = P*C'* inv(C*P*C' + R);
  22.         Xh = Xh + K*(ys(i) - C*Xh);
  23.         P = P - K*C*P;
  24.         yout(i) = C*Xh;
  25.     end

  26.     plot(t, ys, t, yout);
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 06:31 , Processed in 0.170031 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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