第6章线性控制系统分析与设计.docx
《第6章线性控制系统分析与设计.docx》由会员分享,可在线阅读,更多相关《第6章线性控制系统分析与设计.docx(60页珍藏版)》请在冰豆网上搜索。
第6章线性控制系统分析与设计
第6章线性控制系统分析与设计
MATLAB的控制系统工具箱(ControlSystemToolbox)可以提供对线性系统分析、设计和建模的各种算法。
6.1线性系统的描述
6.1.1状态空间描述法
状态空间描述法是使用状态方程模型来描述控制系统,MATLAB中状态方程模型的建立使用ss和dss命令。
语法:
G=ss(a,b,c,d)%由a、b、c、d参数获得状态方程模型
G=dss(a,b,c,d,e)%由a、b、c、d、e参数获得状态方程模型
【例6.1】写出二阶系统
,当
=0.707,
=1时的状态方程。
zeta=0.707;wn=1;
A=[01;-wn^2-2*zeta*wn];
B=[0;wn^2];
C=[10];
D=0;
G=ss(A,B,C,D)%建立状态方程模型
a=
x1x2
x101
x2-1-1.414
b=
u1
x10
x21
c=
x1x2
y110
d=
u1
y10
Continuous-timemodel.
6.1.2传递函数描述法
MATLAB中使用tf命令来建立传递函数。
语法:
G=tf(num,den)%由传递函数分子分母得出
说明:
num为分子向量,num=[b1,b2,…,bm,bm+1];den为分母向量,den=[a1,a2,…,an-1,an]。
【例6.1续】将二阶系统描述为传递函数的形式。
num=1;
den=[11.4141];
G=tf(num,den)%得出传递函数
Transferfunction:
1
-----------------
s^2+1.414s+1
6.1.3零极点描述法
MATLAB中使用zpk命令可以来实现由零极点得到传递函数模型。
语法:
G=zpk(z,p,k)%由零点、极点和增益获得
说明:
z为零点列向量;p为极点列向量;k为增益。
【例6.1续】得出二阶系统的零极点,并得出传递函数。
z=roots(num)
z=
Emptymatrix:
0-by-1
p=roots(den)
p=
-0.7070+0.7072i
-0.7070-0.7072i
zpk(z,p,1)
Zero/pole/gain:
1
-------------------
(s^2+1.414s+1)
程序分析:
roots函数可以得出多项式的根,零极点形式是以实数形式表示的。
部分分式法是将传递函数表示成部分分式或留数形式:
【例6.1续】将传递函数转换成部分分式法,得出各系数。
[r,p,k]=residue(num,den)
r=
0-0.7070i
0+0.7070i
p=
-0.7070+0.7072i
-0.7070-0.7072i
k=
[]
6.1.4离散系统的数学描述
1.状态空间描述法
状态空间描述离散系统也可使用ss和dss命令。
语法:
G=ss(a,b,c,d,Ts)%由a、b、c、d参数获得状态方程模型
G=dss(a,b,c,d,e,Ts)%由a、b、c、d、e参数获得状态方程模型
说明:
Ts为采样周期,为标量,当采样周期未指明可以用-1表示。
【例6.2】用状态空间法建立离散系统。
a=[-1.5-0.5;10];
b=[1;0];
c=[00.5];
d=0;
G=ss(a,b,c,d,0.1)%采样周期为0.1s
a=
x1x2
x1-1.5-0.5
x210
b=
u1
x11
x20
c=
x1x2
y100.5
d=
u1
y10
Samplingtime:
0.1
Discrete-timemodel.
2.脉冲传递函数描述法
脉冲传递函数也可以用tf命令实现。
语法:
G=tf(num,den,Ts)%由分子分母得出脉冲传递函数
说明:
Ts为采样周期,为标量,当采样周期未指明可以用-1表示,自变量用'z'表示。
【例6.2续】创建离散系统脉冲传递函数
。
num1=[0.50];
den=[1-1.50.5];
G1=tf(num1,den,-1)
Transferfunction:
0.5z
-----------------
z^2-1.5z+0.5
Samplingtime:
unspecified
MATLAB中还可以用filt命令产生脉冲传递函数。
语法:
G=filt(num,den,Ts)%由分子分母得出脉冲传递函数
说明:
Ts为采样周期,当采样周期未指明Ts可以省略,也可以用-1表示,自变量用'z-1'表示。
【例6.2续】使用filt命令产生脉冲传递函数。
num2=[00.5];
G2=filt(num2,den)
Transferfunction:
0.5z^-1
-----------------------
1-1.5z^-1+0.5z^-2
Samplingtime:
unspecified
程序说明:
用filt命令生成的脉冲传递函数的自变量不是z而是z-1,因此分子应改为“[00.5]”。
3.零极点增益描述法
离散系统的零极点增益用zpk命令实现。
语法:
G=zpk(z,p,k,Ts)%由零极点得出脉冲传递函数
【例6.2续】使用zpk命令产生零极点增益传递函数。
G3=zpk([0],[0.51],0.5,-1)
Zero/pole/gain:
0.5z
-------------
(z-0.5)(z-1)
Samplingtime:
unspecified
6.2线性系统模型之间的转换
6.2.1连续系统模型之间的转换
在MATLAB5.3版及以前的控制系统工具箱中有各种不同模型转换的函数,如下表6.1所示为线性系统模型转换的函数。
表6.1线性系统模型转换函数表
函数
调用格式
功能
tf2ss
[a,b,c,d]=tf2ss(num,den)
传递函数转换为状态空间
tf2zp
[z,p,k]=tf2zp(num,den)
传递函数转换为零极点描述
ss2tf
[num,den]=ss2tf(a,b,c,d,iu)
状态空间转换为传递函数
ss2zp
[z,p,k]=ss2zp(a,b,c,d,iu)
状态空间转换为零极点描述
zp2ss
[a,b,c,d]=zp2ss(z,p,k)
零极点描述转换为状态空间
zp2tf
[num,den]=zp2tf(z,p,k)
零极点描述转换为传递函数
1.系统模型的转换
(1)状态空间模型的获得
由命令ss和dss实现将传递函数和零极点增益转换为状态空间模型。
语法:
G=ss(传递函数)%由传递函数转换获得
G=ss(零极点模型)%由零极点模型转换获得
【例6.3】将单输入双输出的系统传递函数
转换为状态空间描述。
num=[032;
123];
den=[3521];
G11=tf(num(1,:
),den)
Transferfunction:
3s+2
-----------------------
3s^3+5s^2+2s+1
G12=tf(num(2,:
),den)
Transferfunction:
s^2+2s+3
-----------------------
3s^3+5s^2+2s+1
G=ss([G11;G12])
a=
x1x2x3
x1-1.667-0.3333-0.08333
x2200
x3020
b=
u1
x11
x20
x30
c=
x1x2x3
y100.50.1667
y20.33330.33330.25
d=
u1
y10
y20
Continuous-timemodel.
(2)传递函数的获得
由tf命令实现将系统的状态空间法和零极点增益模型转换为传递函数。
语法:
G=tf(状态方程模型)%由状态空间转换
G=tf(零极点模型)%由零极点模型转换
【例6.3续】由状态空间描述转换为传递函数。
G1=tf(G)
Transferfunctionfrominputtooutput...
s+0.6667
#1:
-----------------------------------
s^3+1.667s^2+0.6667s+0.3333
0.3333s^2+0.6667s+1
#2:
-----------------------------------
s^3+1.667s^2+0.6667s+0.3333
(3)零极点模型的获得
由zpk命令实现将状态空间法、传递函数转换为零极点模型。
语法:
G=zpk(状态方程模型)%由状态方程模型转换
G=zpk(传递函数)%由传递函数转换
【例6.3续】由传递函数和状态方程模型转换零极点模型。
G2=zpk(G)%由状态方程模型转换
Zero/pole/gainfrominputtooutput...
(s+0.6667)
#1:
-----------------------------------
(s+1.356)(s^2+0.3103s+0.2458)
0.33333(s^2+2s+3)
#2:
-----------------------------------
(s+1.356)(s^2+0.3103s+0.2458)
G2=zpk(G1);%由传递函数转换
2.模型参数的获取
语法:
[a,b,c,d]=ssdata(G)%获取状态空间参数
[a,b,c,d,e]=dssdata(G)%获取状态空间参数
[num,den]=tfdata(G)%获取传递函数参数
[z,p,k]=zpkdata(G)%获取零极点参数
【例6.3续】获取各模型的参数。
[a,b,c,d]=ssdata(G1)%获取状态方程参数
a=
-1.6667-0.3333-0.0833
2.000000
02.00000
b=
1
0
0
c=
00.50000.1667
0.33330.33330.2500
d=
0
0
[num,den]=tfdata(G2)%获取传递函数参数
num=
[1x4double]
[1x4double]
den=
[1x4double]
[1x4double]
[z,p,k]=zpkdata(G)%获取零极点参数
z=
[-0.6667]
[2x1double]
p=
[3x1double]
[3x1double]
k=
1.0000
0.3333
3.模型类型的检验
【例6.3续】检验模型的类型。
class(G)%得出系统模型类型
ans=
ss
isa(G,'tf')%检验系统模型类型
ans=
0
6.2.2连续系统与离散系统之间的转换
表6.2模型类型检验函数表
函数
调用格式
功能
class
class(G)
得出系统模型的类型
isa
isa(G,'类型名')
判断G是否对应的类型名,是则为1(True)
isct
isct(G)
判断G是否连续系统,是则为1(True)
isdt
isdt(G)
判断G是否离散系统,是则为1(True)
issiso
issiso(G)
判断G是否SISO系统,是则为1(True)
1.c2d命令
c2d命令用于将连续系统转换为离散系统。
语法:
Gd=c2d(G,Ts,method)%以采样周期Ts和method方法转换为离散系统
说明:
G为连续系统模型;Gd为离散系统模型;Ts为采样周期;method为转换方法,可省略,包括五种:
zoh(默认零阶保持器)、foh(一阶保持器)、tustin(双线性变换法)、prewarp(频率预修正双线性变换法)、mached(根匹配法)。
【例6.4】将二阶连续系统转换为离散系统。
a=[01;-1-1.414];
b=[0;1];
c=[10];
d=0;
G=ss(a,b,c,d);
Gd=c2d(G,0.1)
a=
x1x2
x10.99520.0931
x2-0.09310.8636
b=
u1
x10.004768
x20.0931
c=
x1x2
y110
d=
u1
y10
Samplingtime:
0.1
Discrete-timemodel.
2.d2c命令
d2c命令是c2d的逆运算,用于将离散系统转换为连续系统。
语法:
G=d2c(Gd,method)%转换为连续系统
说明:
method为转换方法可省略,与c2d相似,少了foh(一阶保持器)方法。
【例6.4续】将二阶离散系统转换为连续系统。
G=d2c(Gd)
a=
x1x2
x15.551e-0161
x2-1-1.414
b=
u1
x1-2.776e-016
x21
c=
x1x2
y110
d=
u1
y10
Continuous-timemodel.
3.d2d命令
d2d命令是将离散系统改变采样频率。
语法:
Gd2=d2d(Gd1,Ts2)%转换离散系统的采样频率为Ts2
说明:
其实际的转换过程是先把Gd1按零阶保持器转换为原连续系统,然后再用Ts2和零阶保持器转换为Gd2。
【例6.4续】将二阶离散系统改变采样频率。
Gd2=d2d(Gd,0.3)
a=
x1x2
x10.9610.2408
x2-0.24080.6205
b=
u1
x10.03897
x20.2408
c=
x1x2
y110
d=
u1
y10
Samplingtime:
0.3
Discrete-timemodel.
6.2.3模型对象的属性
1.模型对象的属性
ss、tf和zpk三种对象除了具有线性时不变系统共有的属性以外,还具有其各自的属性,共有属性如表6.3所示,其各自的属性如表6.4所示。
表6.3对象共有属性表
属性名
属性值的数据类型
意义
Ts
标量
采样周期,为0表示连续系统,为-1表示采样周期未定
Td
数组
输入延时,仅对连续系统有效,省略表示无延时
InputName
字符串数组
输入变量名
OutputName
字符串数组
输出变量名
Notes
字符串
描述模型的文本说明
Userdata
任意数据类型
用户需要的其它数据
表6.4三种子对象特有属性表
对象名
属性名
属性值的数据类型
意义
tf
den
行数组组成的单元阵列
传递函数分母系数
num
行数组组成的单元阵列
传递函数分子系数
variable
s,p,z,q,z-1之一
传递函数变量
ss
a
矩阵
系数
b
矩阵
系数
c
矩阵
系数
d
矩阵
系数
e
矩阵
系数
StateName
字符串向量
用于定义每个状态变量的名称
zpk
z
矩阵
零点
p
矩阵
极点
k
矩阵
增益
variable
s,p,z,q,z-1之一
零极点增益模型变量
在表6.3和表6.4中的三种子对象的属性,在前面都已使用过,MATLAB提供了get和set命令来对属性进行获取和修改。
2.get命令和set命令
(1)get命令可以获取模型对象的所有属性
语法:
get(G)%获取对象的所有属性值
get(G,’PropertyName’,…)%获取对象的某些属性值
说明:
G为模型对象名;’PropertyName’为属性名。
(2)set命令用于修改对象属性名
语法:
set(G,’PropertyName’,PropertyValue,…)%修改对象的某些属性值
【例6.5】已知二阶系统的传递函数
,获取其传递函数模型的属性,并将传递函数修改为
。
num=1;
den=[11.4141];
G=tf(num,den);
get(G)%获取所有属性
num:
{[001]}
den:
{[11.411]}
Variable:
's'
Ts:
0
ioDelay:
0
InputDelay:
0
OutputDelay:
0
InputName:
{''}
OutputName:
{''}
InputGroup:
{0x2cell}
OutputGroup:
{0x2cell}
Notes:
{}
UserData:
[]
set(G,'den',[121],'Variable','z')%设置属性
G
Transferfunction:
1
-------------
z^2+2z+1
Samplingtime:
unspecified
3.直接获取和修改属性
【例6.5续】将上面的传递函数模型对象的分母修改为原来的值。
G.den=[11.4141];
G
Transferfunction:
1
-----------------
z^2+1.414z+1
Samplingtime:
unspecified
6.3结构框图的模型表示
1.串联结构
SISO的串联结构是两个模块串联在一起,如图6.1所示。
实现串联结构传递函数的命令:
G=G1*G2
G=series(G1,G2)
2.并联结构
SISO的并联结构是两个模块并联在一起,如图6.2所示。
实现并联结构传递函数的命令:
G=G1+G2
G=parallel(G1,G2)
3.反馈结构
反馈结构是前向通道和反馈通道模块构成正反馈和负反馈,如图6.3所示。
实现反馈结构传递函数的命令:
G=feedback(G1,G2,Sign)
说明:
Sign用来表示正反馈或负反馈,Sign=-1或省略则表示为负反馈。
【例6.6】根据系统的结构框图求出整个系统的传递函数,结构框图如图6.4所示,其中
,
,
,
。
G1=tf(1,[121])
Transferfunction:
1
-------------
s^2+2s+1
G2=tf(1,[11]);
G3=tf(1,[21]);
G4=tf(1,[10]);
G12=G1+G2%并联结构
Transferfunction:
s^2+3s+2
---------------------
s^3+3s^2+3s+1
G34=G3-G4%并联结构
Transferfunction:
-s-1
---------
2s^2+s
G=feedback(G12,G34,-1)%反馈结构
Transferfunction:
2s^4+7s^3+7s^2+2s
-------------------------------------
2s^5+7s^4+8s^3+s^2-4s-2
例如,上图的两个并联结构G1和G2,如果G1用状态空间描述,则并联运算的结果也是用状态空间法描述:
G1=ss(tf(1,[121]));%状态空间描述
G2=tf(1,[11]);
G1+G2
a=
x1x2x3
x1-2-0.250
x2400
x300-1
b=
u1
x10.5
x20
x31
c=
x1x2x3
y100.51
d=
u1
y10
Continuous-timemodel.
4.复杂的结构框图
求取复杂结构框图的数学模型的步骤:
(1)将各模块的通路排序编号;
(2)建立无连接的数学模型:
使用append命令实现各模块未连接的系统矩阵。
G=append(G1,G2,G3,…)
(3)指定连接关系:
写出各通路的输入输出关系矩阵Q,第一列是模块通路编号,从第二列开始的几列分别为进入该模块的所有通路编号;INPUTS变量存储输入信号所加入的通路编号;OUTPUTS变量存储输出信号所在通路编号。
(4)使用connect命令构造整个系统的模型。
Sys=connect(G,Q,INPUTS,OUTPUTS)
如果各模块都使用传递函数,也可以用blkbuild命令建立无连接的数学模型,则第二步修改如下:
将各通路的信息存放在变量中:
通路数放在nblocks,各通路传递函数的分子和分母分别放在不同的变量中;用blkbuild命令求取系统的状态方程模型。
【例6.7】根