中级会员
- 积分
- 279
- 威望
- 221
- 贡献
- 52
- 兑换币
- 0
- 注册时间
- 2011-2-27
- 在线时间
- 3 小时
|
有木有?
第一个例子中的代码- 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);
复制代码 |
|