我想在状态空间模型中输入正弦波(作为输入力)。主要问题是,当我执行系统的阶跃响应时,在一个图中可以得到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)
谢谢。
答案 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)
结果是
为了定义任意输入,可以使用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)