分享

MATLAB《自动控制原理》相关编程

 myallmy 2021-10-03
传递函数表示
显示多项式传递函数

图片

matlab语句:分子分母的各项式系数按照降次排序分别计入

num=[ ],den=[ ]中,缺项系数补零。

传递函数 sys=tf(num,den)

程序:

clc;clear all;close all;num = [13 4 0 6];den = [5 3 16 1 7];sys = tf(num,den)G = tf(num,den)

结果:

图片

因子形式的传递函数

图片

matlab语句:利用conv()实现两个多项式降次系数乘积运算。

程序:

clc;clear all;close all;num = conv([1 3],[1 7 6]);den = conv([1 1],[1 3 0 5]);sys = tf(num,den)G = tf(num,den)

结果:

图片

显示零极点式传递函数

图片

matlab语句:zpk()函数用法。z=[ ]输入零点 ,p=[ ]输入极点;k =[ ]输入增益。

sys=zpk(z,p,k);

程序:

clc;clear all;close all;z = [-3];p = [-2 -4 -5];k = 7;sys = zpk(z,p,k)

结果:

图片

直接传递函数输入

matlab语句:s=tf('s’);

程序:

clc;clear all;close all;s = tf('s');sys = 1/(s*(s+1)*(s+2))

结果:

图片

图片

传递函数多项式形式和零极点形式的转换

1零极点形式转换为多项式形式

zp2tf函数

clc;clear all;close all;z=[-7,-2]';p=[-3,-5,-9]';k=4 ;spk=zpk (z, p,k) [num, den]=zp2tf(z,p,k) stf=tf(num, den)

图片

2多项式形式转换为零极点形式

tf2zp()函数

程序:

clc;clear all;close all;num=[4,36,56];den=[1,17,87,135];stf=tf(num, den) [z, p,k]=tf2zp(num, den) ;spk=zpk(z,p, k)

结果:

图片

图片

求系统的单位冲击响应和单位阶跃响应

1单位冲激响应

impulse函数

impulse函数可以求得系统的单位冲击响应,参数为sys和t,其中sys为系统对应的微分方程,t为持续时间.

sys变量由tf函数生成,其参数为输入部分的方程系数矩阵和响应部分的方程系数矩阵.

使用格式:

impulse(sys);

impulse(sys, t);

程序:

clc;clear all;close all;sys = tf([2, 1],[1, 4, 3]);t = 0:0.1:10;y = impulse(sys, t);plot(t, y);figure;impulse(sys)

结果:

图片

图片

2单位阶跃响应

step函数可以求得系统的单位阶跃响应,其用法与impulse函数类似.

step:动态系统的阶跃响应绘图。  

具体描述:

 1.step:计算一个动态系统的阶跃响应。在状态空间的情况下,假定初始状态为零。当它没有输出参数时,调用这个函数在屏幕上的画出阶跃响应。 

2.step(sys):画出任意一个动态系统模型sys的阶跃响应。这个模型可以是连续的或离散的,和单输入单输出或多输入多输出。多端输入系统的阶跃响应对于每一个输入方式来说都是阶跃响应的集合。模拟持续的时间根据系统的极点和零点自动地被确定。 

3.step(sys,Tfinal):模拟了系统sys从时间t=0到t=Tfinal的阶跃响应。在系统时间单位中,表达式Tfinal在sys的时间单位属性中是被指定的。对于未指定采样时间(Ts=1)的离散时间系统,阶跃将Tfinal作为采样周期的数量来模拟。 

4.step(sys,t):使用用户提供的时间矢量t来模拟。在系统时间单位中,表达式t在sys的时间单位属性中是指定的。对于离散时间模型,t应该是Ti:Ts:Tf,这里Ts是采样时间。对于持续的时间模型,t应该是Ti:dt:Tf,这里dt变成近似于持续系统的一个离散采样。阶跃命令总是适用于在t=0时的阶跃输入,而忽视Ti。

 5.在一个图上画出一系列模型sys1,sys2,...sysN的阶跃响应:

 step(sys1,sys2,...,sysN); 

step(sys1,sys2,...,sysN,Tfinal); 

step(sys1,sys2,...,sysN,t); 

所有将被画在一个图上的系统必须有相同数量的输入和输出。当然也可以在一个单一的图上画连续时间系统和离散时间系统的混合。这个语法对于比较多个系统的阶跃响应是有用的。 

6.你也可以给每个系统指定一个独特的颜色,线型,标记,或者三者都有。例如:step(sys1,'y:',sys2,'g--');当调用输出参数时: 

y = step(sys,t); 

[y,t] = step(sys); 

[y,t] = step(sys,Tfinal);  

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

step返回输出响应y,模拟时间向量t(如果没有作为一个输入参数被提供)和状态轨迹x(仅为状态空间模型)。在屏幕上没有绘图生成。对于单输入系统来说,y有和采样时间一样多的行,和输出一样多的列。在多端输入的情况下,每个输入方式的阶跃响应沿着输出y的第三个维度被累积起来。

程序:

clc;clear all;close all;sys = tf([2, 1], [1, 4, 3]);t = 0:0.1:10;y = step(sys, t);plot(t, y);figure;step(sys)

结果:

图片

图片

3求系统的阶跃响应动态指标

图片

实例程序:

clc;%清除命令行空间clear all;%清除变量close all;%关闭图像num = 6;%传递函数分子den= conv(conv([1 0],[0.1 1]),[0.3 1]);sys=tf(num,den)%开环传递函数sysc = feedback(sys,1,-1)%系统闭环传递函数figure;%新建一个窗口bode(sys);%画Bode图margin(sys)% 画出bode所有参数figure;%新建一个窗口step(sysc)%闭环系统阶跃响应曲线[y, t, x]=step(sysc);mp=max(y);% 上升时间tr = 0.518%峰值时间tp=spline(y, t, mp)cs=length(t);%稳态值yss=y(cs)%稳态误差值ess = 1 -yss%超调量ct=(mp - yss)/yss

结果:

图片

图片

图片

零极点分布图、根轨迹图、奈奎斯特曲线图、bode图

1、零极点分布图和根轨迹图

图片

零极点分布图  pzmap()函数

根轨迹图 rlocus()函数

结果:

图片

图片

2奈奎斯特曲线图

奈奎斯特曲线图 nyquist() 函数

图片

3伯德图

伯德图bode()和margin()函数

[Lg,Y,Wg,Wc]=margin(G)%四者分别为幅值裕度、相位裕度、相位穿越频率、截止频率

图片

程序:

clc;clear all;close all;num = [13 4  0 6];den = [5 3 16 1 7];sys = tf(num,den);G = tf(num,den)figure;pzmap(G,'r')%画图figure;rlocus(G)figure;nyquist(G)figure;bode(G)margin(G);[Lg,Y,Wg,Wc]=margin(G)

%四者分别为幅值裕度、相位裕度、相位穿越频率、截止频率

%相位裕度:对于闭环稳定系统,如果系统开环相频特性再滞后Y 度,则系统将处于临界稳定状态

%相位穿越频率:系统开环频率特性上相位等于-180度时所对应的角频率称为相位穿越频率

%截止频率:系统开环频率特性上幅值为1时所对应的角频率称为幅值穿越频率或截止频率

结果如上四个图:

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多