如何将正弦波函数用作状态空间模型的输入(用于B矩阵)并仅获得一个图?

时间:2018-06-26 23:25:20

标签: matlab

我想在状态空间模型中输入正弦波(作为输入力)。主要问题是,当我执行系统的阶跃响应时,在一个图中可以得到10个子图,而我只想看到一个图。我不确定我是否正确设置了正弦输入。我想我可能需要做一个循环,这样我才不会得到多个情节?不确定。

以下是我的简单弹簧阻尼车系统代码:

k1=150;
k2=700;
b1=15;
b2=30;
M1=5;
M2=20;
w=1;
t=1e-10:.1:1;
F=sin(w*t); %Sinewave input

A=[0 0 1 0; 0 0 0 1; -k1/M1 k1/M1 -b1/M1 b1/M1; k1/M2 -(k1+k2)/M2 b1/M2 -(b1+b2)/M2];
B=[0 0 1/M1 0]'*F;
C=[1 0 0 0];
D=0;

sys=ss(A,B,C,D); %State Space Model

step(sys)
margin(sys)

Want this to be only ONE plot

谢谢。

1 个答案:

答案 0 :(得分:1)

步进功能将应用单位步进输入,因此此行B=[0 0 1/M1 0]'*F;不正确。您正在修改输入矩阵。为了查看由于步进输入引起的系统响应,您可以进行

k1=150;
k2=700;
b1=15;
b2=30;
M1=5;
M2=20;
w=1;
t=1e-10:.1:1;
%F=sin(w*t); %Sinewave input

A=[0 0 1 0; 0 0 0 1; -k1/M1 k1/M1 -b1/M1 b1/M1; k1/M2 -(k1+k2)/M2 b1/M2 -(b1+b2)/M2];
B=[0 0 1/M1 0]';
C=[1 0 0 0];
D=0;

sys=ss(A,B,C,D); %State Space Model

step(sys)
figure % create a new figure for Bode plot
margin(sys)

结果是

enter image description here

enter image description here

为了定义任意输入,可以使用lsim。就您而言,您可以执行以下

k1=150;
k2=700;
b1=15;
b2=30;
M1=5;
M2=20;
w=1;
%t=1e-10:.1:1;
t = linspace(0, 100, 1000);
F=sin(w*t); %Sinewave input

A=[0 0 1 0; 0 0 0 1; -k1/M1 k1/M1 -b1/M1 b1/M1; k1/M2 -(k1+k2)/M2 b1/M2 -(b1+b2)/M2];
B=[0 0 1/M1 0]';
C=[1 0 0 0];
D=0;

sys=ss(A,B,C,D); %State Space Model

% step(sys)
% figure
% margin(sys)

output = lsim(sys, F, t);                                
plot(t, output)

enter image description here