使用matlab使用lsim执行闭环系统响应

时间:2016-09-16 07:50:52

标签: matlab

我正在尝试使用lsim函数复制某个系统的阶跃响应,但结果输出不太正确。有什么我做错了吗?

以下是我的代码的比较:

使用STEP():

s = tf('s');
G = 56.54/(0.12*s^2+0.6*s+58.31);
D = 0.21 + 19.95/s + 0.04*s;
H = G*D/(1+G*D);
y = 2.5*step(H);
plot(y)

使用LSIM():

ya = 0;
e = 2.5;
t1 = 0:.05:10;
er = 2.5*ones(length(t1),1);
G = 56.54/(0.12*s^2+0.6*s+58.31);
D = 0.21 + 19.95/s + 0.04*s;
GDss = ss(D*G);
x = [0 0 0];
for k = 1:100
[y,t,x] = lsim(GDss,er,t1,x);
    ya(k) = y(length(t1));
    er = (e - y(length(t1)))*ones(length(t1),1);
    x = x(98:100);  
end
plot(ya)

情节y和ya“应该”是相同的,但它不会出现什么。 帮助

2 个答案:

答案 0 :(得分:0)

据我所知,您正在使用" step()"计算H = G*D/(1+G*D);的阶跃响应,但使用&#34计算GDss = D*G;的阶跃响应; lsim()&#34 ;.由于系统不一样,结果也不一样。

答案 1 :(得分:0)

正如船长未来所提到的,你没有检查相同的东西。当然,因为开环系统不稳定而且爆炸。

但是对于这样的事情,为了你自己的缘故,它会更加结构化,lsim已经为你做了循环。

H = minreal(feedback(series(D,G),1));
opt = stepDataOptions('StepAmplitude',2.5);
step(H,1,opt)
% 
t = 0:0.01:1;
u = ones(1,length(t));
figure,lsim(H,u,t)