MATLAB/simulink时域分析之输入响应(0基础)

邮差的信 提交于 2019-12-04 19:54:49

目录

6.2 输入响应

6.2.1 MATLAB中

(1)零初始条件响应函数

(2)阶跃响应函数

(3)单位脉冲响应函数

(4)任意输入响应函数

(5)ode45函数

6.2.2 simulink中


6.2 输入响应

6.2.1 MATLAB中

空间模型求解:一个动态系统的性能常用典型输入作用下的响应来描述,响应是指零初始值条件下某种典型的输入函数作用下对象的响应。

initial、step、lsim只能计算出状态响应的计算值,若需要计算状态响应的表达式,则需要根据前面介绍的符号工具箱,自己编程实现状态响应函数表达式的求解。

(1)零初始条件响应函数

  • initial(sys,x0,t);   %绘制输出响应曲线图
  • [y,t,x] = initial(sys,x0,t);

sys为输入的状态空间模型;

x0为给定的初始状态;

t为指定仿真计算状态响应的时间区间变量(数组);

y输出数组形式的输出变量响应值;

t仿真时间坐标数组;

x状态变量响应值

eg.计算如下系统在[0,5s]的初始状态响应

A=[0 1; -2 -3];

B=[];  C=[];  D=[];% 输入状态空间模型各矩阵,若没有相应值,可赋空矩阵

x0=[1; 2];% 输入初始状态

sys=ss(A,B,C,D);%计算系统的状态空间模型

[y,t,x]=initial(sys,x0,0:5);% 求系统在[0,5s]的初始状态响应

plot(t,x) % 绘以时间为横坐标的状态响应曲线图

  • 时间t

Matlab中,时间区间变量(数组) t有四种格式:

t=linspace(x,y,n);

%在x-y间等间距取n个数产生向量t

t=Tintial:dt:Tfinal

表示仿真时间段为[Tintial,Tfinal],仿真时间步长为dt

t=Tintial:Tfinal

表示仿真时间段为[Tintial,Tfinal],仿真时间步长dt缺省为1

t=Tfinal

表示仿真时间段为[0,Tfinal],系统自动选择仿真时间步长dt

缺省

表示系统自动选择仿真时间区间[0,Tfinal]/仿真时间步长dt

(2)阶跃响应函数

step()将绘制出由向量num和den表示的连续传递函数模型系统的阶跃响应在指定时间范围内的波形图,或数值解。

  • step(sys,t);    step(num,den,t);   step(A,B,C,D,iu);

 

%绘制输出响应曲线图

  • [y,t] = step(sys,t);[y,t,x] = step(sys,t)

 

%这种调用格式的输出为将输出响应、时间坐标数组、状态响应赋值给指定的数组变量

sys为传递函数模型变量或状态空间模型变量;

num和den分别为系统传递函数描述中的分子和分母多项式系数;

t为选定的仿真时间向量;

y返回值为系统在仿真时刻各个输出所组成的矩阵;

A,B,C,D为系统的状态空间描述矩阵;

iu用来指明输入变量的序号;

eg:t=linspace(0,20,200)’;%生成t向量

s1=tf(num,den);%传递函数

sys=feedback(s1,1);%单位负反馈系统传递函数

for i=1:6

y(:,i)=step(sys,t);%求取单位阶跃响应输出

end

plot(t,y(:,1:6));%绘制多个单位阶跃响应曲线

(3)单位脉冲响应函数

  • impulse(sys,t);     inpulse(num, den, t);  impulse(A,B,C,D);

%绘制输出响应曲线图

  • [y,t,x] =impulse(num,den);   [y,x,t]=impulse(A,B,C,D,iu,t);

 

 

(4)任意输入响应函数

  • lsim(sys,u,t,x0);%绘制输出响应曲线图
  • [y,t,x] = lsim(sys,u,t,x0);

sys为传递函数模型变量或状态空间模型变量;

t为时间坐标数组;

u是输入信号u(t)对应于时间坐标数组t的各时刻输入信号采样值组成的数组,是求解系统响应必须给定的;

  • 信号生成函数

[u,t] = gensig(type,tau,Tf,Ts);%根据时间坐标数组t采样获得任意输入函数u

type:信号类型字符串,正弦信号sin、方波信号square、周期脉冲信号pulse

tau:信号周期,以秒为单位的;

Tf:信号时长;

Ts:信号的采样周期;

所有信号的幅值为1

eg.计算如下系统在[0,10s]内周期为3s的单位方波输入下的状态响应

A=[0 1; -2 -3];B=[0; 1];  C=[];  D=[];

x0=[1; 2];

sys=ss(A,B,C,D);

[u t]=gensig(‘square’,3,10,0.1);% 产生信号周期为3s,时间10s,采样周期为0.1s方波信号

[y,t,x] = lsim(sys,u,t,x0);% 计算系统在输入序列u下的响应

plot(t,u,t,x); % 将输入和状态响应绘于一张图内

(5)ode45函数

常微分方程求解

解析解

(dsolve函数)

解的具体函数形式,从解的表达式中就可以算出任何对应值

数值解

(ode45函数)

用数值方法求出近似解,给出一系列对应的自变量和解

ode45表示采用变步长(variable-step)四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(Δx)^5。

步骤

①[T,Y] = ode45(@odefun,tspan,y0)

 

odefun 是函数名,@表示这是句柄(实际是一个指针,指向一块包含具体信息数据的内存)

tspan 是区间 [t0 tf] 或者一系列散点[t0,t1,...,tf]

y0 是初始值/向量

T 返回列向量的时间点

Y 返回对应T的求解列向量

②function y=odefun(t,x)

y=[y;y’’];  %其中y’、y’’用(1)、x(2)表示,且x(1)=y;x(2)=y’;

end

 

function y=odefun(t,x)

y=zeros(2,1); %必须列向量

y(1)=x(2);

y(2)=-t*x(1)+exp(t)*x(2)+3*sin(2*t);

end

function y=odefun(t,x)

y=[x(2);-t*x(1)+exp(t)*x(2)+3*sin(2*t)];

end

 

 

6.2.2 simulink中

 

类别

Simulink对应模块

输入信号

Source

零输入响应信号

Constant:值为0

阶跃响应信号

Step

单位脉冲响应函数

Pulse Gnerator

sine正弦、

 square 方波、sawtooth锯齿、random随机波形

Signal Generator

单位斜坡信号

Ramp

单位加速度信号

Acceleration=ramp+Integrator(1/s)串联

输出

 

Scope

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!