第5章 LTI系统的MATLAB辅助 设计与仿真,5.1 控制系统工具箱的使用 5.2 LTI模型数组 5.3 LTI系统分析和设计的图形操作环境 5.4 LTI控制系统的设计实例,5.1 控制系统工具箱的使用,5.1.1 创建LTI模型对象 MATLAB 6.X中的控制系统工具箱(控制系统工具箱)为线性时不变系统(LTI)的建模和分析提供了丰富的函数和工具, 既支持连续和离散系统, 也能够处理SISO和MIMO系统。 并且, 用户可以将多个LTI模型放在同一个数组中统一进行计算和分析。,使用控制系统工具箱的第一步是为系统选择适当的模型。 MATLAB 6.X支持的LTI模型包括: · 传递函数模型(TF), 例如,· 零极点-增益模型(ZPK), 例如,· 状态空间模型(SS), 例如,· 频率响应数据模型(FRD), 由系统频率响应的采样测量值构成。 例如, 可以在FRD模型中存放实验中测量的系统频率响应值。 一旦在MATLAB工作空间中创建了上述模型, 就可以使用各种函数来对系统模型进行分析和计算。 例如, 可以针对系统的各种模型设计补偿器, 分析系统的各种属性, 如可控性、 可观性、 时域和频域响应等等。,不同的系统模型在MATLAB中的存储形式是不同的。 例如, 用简单的分子分母多项式表示传递函数模型; 用四个矩阵 A、 B、 C和D 表示状态空间模型; 用零极点集合来说明系统的零极点-增益模型等等。 MATLAB分别用定制的数据结构来存储这些模型, 称为LTI对象, 包括TF、 ZPK、 SS和 FRD对象。 这些对象将所有模型的信息封装起来, 从而让用户可以从整体上对模型代表的系统进行操作。,表 5.1 LTI模型的创建函数,1.创建传递函数模型 1) SISO传递函数模型 连续SISO系统的传递函数为 ??,(5.1),可以采用两种方法创建SISO传递函数模型。 一种是使用tf命令, 另一种则可以直接引用Laplace变量s的多项式。 使用tf命令的方法是 h = tf(num, den),其中, 行向量num和兽穴分别是多项式n(s)和d(s)的系数。 注意这里的多项式是按照s的降幂排列的。 例如, 如果某个SISO系统的传递函数是h(s)=s/(s2+2s+10), 则可以通过下面的命令来创建该系统的传递函数模型: h = tf([1 0], [1 2 10]) MATLAB的输出结果为 传送功能: s -------------- s^2 + 2 s + 10 h是一个TF对象, 存放传递函数的分子分母多项式数据。,当然也可以按照通常习惯用s的多项式来直接表示SISO系统的传递函数。 为此, 首先将s定义为Laplace算子: s = tf(′s′); 然后输入s的多项表达式。 例如, 输入 H = s/(s^2 + 2*s +10); 将产生与h = tf([1 0], [1 2 10])相同的系统模型。,2) MIMO传递函数模型 MIMO系统的传递函数是由基本的SISO传递函数所组成的二维数组。 同样有两种方法来创建MIMO系统模型: 一种是将组成该MIMO系统的多个SISO传递函数进行串联; 另一种方法则可以使用带元胞数组参数的tf命令。 考虑下面的有理传递函数矩阵,可以将 H(s)定义为两个SISO系统的组合: h11 = tf([1 -1], [1 1]); h21 = tf([1 2], [1 4 5]); H = [h11; h21] 如果使用tf命令方式, 则必须首先定义两个元胞数组N和D: N = {[1 -1];[1 2]}; D = {[1 1];[1 4 5]}; H = tf(N, D),传送功能从输入到输出. s - 1 #1:--- s + 1 s + 2 #2:------- s^2 + 4 s + 5,使用tf命令可以创建只有单个增益或增益矩阵的TF对象, 例如G = tf([1 0; 2 1])将产生增益矩阵,而E = tf将创建空的传递函数。 2.创建零极点-增益模型 1) SISO零极点-增益模型 连续SISO系统的零极点-增益模型的一般形式为,(5.2),3) 创建状态空间模型 状态空间模型是采用线性微分或差分方程来描述系统的动态行为。 连续时间系统具有如下的一般形式,(5.3),使用ss命令创建系统的状态空间模型的调用格式为,sys = ss(A, B, C, D),例 5.1 在MATLAB中创建下面系统的状态空间模型:,输入sys = ss([0 1;-5 -2], [0;3], [0 1], 0) 创建的系统状态空间模型为,= x1 x2 x1 0 1.00000 x2 -5.00000 -2.00000 b = u1 x1 0 x2 3.00000 c = x1 x2 y1 0 1.00000 d = u1 y1 0,4) 创建描述符状态空间模型 描述符状态空间(DSS)模型是上述标准状态空间模型的一般形式。 其基本形式为,(5.4),控制系统工具箱仅仅支持 E 为非奇异矩阵的 情况。 这时, 式(5.4)与下面的形式相同,(5.5),当E矩阵的条件数很小时, 采用式(5.4)将比式(5.5)计算更加方便。 dss命令的调用格式是 sys = dss(A, B, C, D, E) 5) 创建频率响应(RFD)模型 如果我们无法直接建立研究对象的传递函数或状态空间模型, 而只知道该系统在某些频率处的频率响应值, 仍然可以采用frd命令创建该系统的频率响应模型。 frd命令的调用格式是 sys = frd(response, frequencies, units),其中, 频率是由不同频率值构成的长度为Nf的实数向量, 回答是与这些频率值对应的复数形式的频率响应值。 单位是频率所采用的单位, 为“拉德/s”(缺省值)和“Hz”之一。 例如, 假设数据文件LTIexamples.mat存储有测量的频率向量freq和相应的响应值respG, 则创建FRD对象的步骤是 载入LTIexamples sys = frd(respG, freq) MATLAB输出结果为 从输入1到:,频率(拉德/s) 输出1 ------- ------- 1 -0.812505-0.000312i 2 -0.175077-0.001596i 3 -0.092593-0.462963i 4 -0.075781-0.001625i 5 -0.043735-0.000390i 创建MIMO系统的FRD模型与SISO的情况类似, 只不过这时的频率响应回答是p×m×Nf维数组, 其中p和m分别是系统的输出和输入维数。,6) 创建离散系统模型 离散系统模型的创建过程与连续系统模型的创建过程几乎相同, 唯一的区别在于创建离散系统模型必须指定系统的采样周期或采样时间。 下面的命令将分别创建离散系统的TF、 ZPK、 SS和FRD模型对象: sys1 = tf(num, 兽穴, Ts) sys2 = zpk(z, p, k, Ts) sys3 = ss(a, b, c, d, Ts) sys4 = frd(回答, 频率, Ts),7) 创建DSP格式的离散传递函数 在数字信号处理中, 我们习惯于将离散系统的传递函数写成z-1的有理分式, 并且z-1在多项式中按照升幂排列。 例如,可以用行向量[1 0.5]和[1 2 3]来定义。 使用filt函数可以创建具有DSP格式的离散传递函数 h = filt(num, 兽穴) h = filt(num, 兽穴, Ts) 第一式没有指定系统的采样时间, 而第二式通过Ts指定该系统的采样时间。 例如 h = filt([1 0.5], [1 2 3]) 产生的输出为 传送功能: 1 + 0.5 z^-1,----------- 1 + 2 z^-1 + 3 z^-2 标本时间: 未指明的,5.1.2 设置LTI对象的属性 前一节讨论了如何在MATLAB环境中创建LTI对象来封装系统模型的数据和采样时间。 实际上创建的LTI对象具有大量的附加属性。 其中一些属性是四种LTI对象共有的, 称为一般属性。 另一些属性是某种LTI对象独有的, 称为特殊属性。 表5.2列举了LTI对象所有的一般属性。,表 5.2 LTI对象的一般属性,有两种方法可以获取和设置LTI对象的属性值。 一种是使用获得和设置命令, 如 PropertyValue = 获得(sys, ′PropertyName′) 设置(sys, ′PropertyName′, PropertyValue) 另一种是直接运用结构的属性访问, 如下面的语句与上面采用设置和获得函数的功能相同。,PropertyValue = sys.PropertyName% 获得财产价值 sys.PropertyName = PropertyValue% 设置财产价值 例如 sys = ss(1, 2, 3, 4, ′InputName′, ′u′); sys.a ans = 1,5.1.3 LTI模型之间的相互转换 可以分别使用tf、 ss、 zpk和frd命令显式地将一种LTI对象转换成相应的LTI对象。 sys = tf(sys) % 转换成TF模型 sys = zpk(sys) % 转换成ZPK模型 sys = ss(sys) % 转换成SS模型 sys = frd(sys, 频率) % 转换成FRD模型,表 5.3 LTI模型的转换函数,例如, 如果输入 sys = ss(-2, 1, 1, 3) zpk(sys) 则将一个状态空间模型转换成一个零极点-增益模型, 其结果为 Zero/pole/gain: 3 (s+2.333) ------ (s+2) 控制系统工具箱中的某些函数可能只处理某种类型的LTI模型。,例如, tfdata命令只支持TF对象。 如果此时的输入参数是其它类型的LTI对象, 则调用函数可以自动将输入的LTI对象转换成本身支持的LTI对象类型, 而不需要用户显式地进行转换。 例如 sys = ss(0, 1, 1, 0) [num, 兽穴] = tfdata(sys) tfdata函数首先将sys的状态方程模型转换成等价的传递函数模型, 从而得到相应的分子和分母多项式的数据。,说明: (1) TF、 ZPK和SS这三种LTI对象的计算精度是不同的。 尤其在处理高维传递函数模型时, 计算的准确度可能会很差。 因此, 一般使用系统的状态空间模型(SS)来进行相关的操作。 (2) 使用tf函数将其它类型的模型转换成传递函数模型, 可能会降低原系统的表示精度。 其结果将可能导致转换后的传递函数极点位置与原始的零极点-增益模型或状态空间模型不完全相同。,(3) 对于SISO系统, 向状态空间模型的转换过程不是唯一的; 对于MIMO系统, 这种转换也不能保证产生系统的最小实现。 例如, 对于状态空间模型sys, ss(tf(sys))也许会得到不同的状态空间矩阵, 对于MIMO系统设置会得到不同数量的状态变量。 因此, 用户应尽可能避免其它LTI对象与状态空间对象之间的相互转换。,5.1.4 Simulink 中的LTI系统模块 Simulink的基本模块库中包含LTI系统模块(如图5.1所示)。 通过该模块, 用户可以在Simulink模型方框图中使用LTI对象。 用户可以在MATLAB的命令窗口中输入ltiblock命令来得到LTI系统模块。 双击该模块, 将出现图5.2所示的属性对话框。,其中最重要的属性是LTI系统变量, 用户在该编辑框中输入LTI对象的创建命令, 缺省值是tf(1, [1 1])。 LTI系统模块支持连续和离散系统的传递函数、 状态空间和零极点-增益模型。 但是在实际仿真中都将它们转换成状态空间模型进行计算。,图 5.1 Simulink中的LTI模块,图 5.2 LTI模型的属性对话框,5.1.5 LTI模型的运算 在MATLAB环境中, 用户可以对所建立的LTI模型对象进行简单的运算, 例如, 加、 减、 乘、 除和串、 并联等。 例如, 输入 tf(1, [1 0]) + tf([1 1], [1 2]) % 相当于1/s + (s+1)/(s+2) 计算得到一个新的传递函数 传送功能: s^2 + 2 s + 2 ------- s^2 + 2 s,图 5.3 两个LTI对象的加法,图 5.4 两个LTI对象的乘法,传递函数之间的乘法表示两个LTI系统之间的串联, 如图5.4所示。 例如输入 2 * tf(1, [1 0])*tf([1 1], [1 2]) % 相当于2*1/s*(s+1)/(s+2) 产生新的LTI模型 传送功能: 2 s + 2 ----- s^2 + 2 s 其它的运算还包括系统求逆和系统转置等。,5.1.6 系统分析工具 控制系统工具箱为用户提供了一整套用于LTI模型的时域和频域分析工具。 这些函数大都支持所有类型的系统, 包括连续和离散系统、 SISO或MIMO系统甚至由多个模型组成的LTI数组。 不过其中的FRD模型比较特殊, 它只能对系统进行频域分析。 读者可能已经注意到, 本书前面几章的介绍中已经或多或少地使用到了其中的某些函数。,系统的时域响应可用来研究线性模型在特定输入和干扰条件下的暂态行为。 用户可以从系统时域响应中确定诸如上升时间、 稳定时间、 最大超调量和稳态误差等系统时域特性。 控制系统工具箱提供的函数可以完成系统的阶跃响应、 脉冲响应、 初始条件响应和一般线性系统仿真。 例如可以借助randn和lsim函数仿真系统在白噪声输入情况下的响应曲线。 除了对系统进行时域仿真, 控制系统工具箱还可以完成系统的频域分析, 包括绘制系统的预示图、 Nichols图和Nyquist曲线等等。 表5.4列举了控制系统工具箱中有关系统分析的函数。,表 5.4 LTI模型的分析函数,5.1.7 模型属性的分析 模型的一般特点包括模型类型、 我/O维数和连续或离散属性。 表5.5中列出了与模型属性相关的命令。 这些命令可以用来处理连续、 离散点着模型或任何LTI模型组成的数组。,表 5.5 模型属性相关命令,下面的代码显示了模型属性操作函数的一些使用方法。 H = tf({1 [1 -1]}, {[1 0.1] [1 2 10]}) 传送功能从输入1到输出: 1 ---- s + 0.1 传送功能从输入2到输出: s - 1 ------ s^2 + 2 s + 10 班级(H),ans = tf 大小(H) 传送功能有2输入(s) 和1输出(s). [ny, nu] = 大小(H) % 注意: ny = 输出的个数 ny = 1 nu = 2 isct(H) % 系统是连续的吗? ans = 1,isdt(H) % 系统是离散的吗? ans = 0 控制系统工具箱还可以确定系统的零极点位置和DC增益以及范数等。 表 5.6 是相关指令的简要说明。,表 5.6 模型动态属性命令,除了L∞范数外, 这些命令都不支持FRD模型。 下面的代码显示了模型动态属性操作函数的一些使用方法。 h = tf([4 8.4 30.8 60], [1 4.12 17.4 30.8 60]) 传送功能: 4 s^3 + 8.4 s^2 + 30.8 s + 60 ---------------- s^4 + 4.12 s^3 + 17.4 s^2 + 30.8 s + 60 棒(h),ans = -1.7971 + 2.2137i -1.7971 - 2.2137i -0.2629 + 2.7039i -0.2629 - 2.7039i 零点(h) ans = -0.0500 + 2.7382i -0.0500 - 2.7382i -2.0000 dcgain(h) ans =,1 [ninf, fpeak] = 标准(h, inf)% 的山顶财物增加freq.response ninf = 1.3402 % 山顶财物增加 fpeak = 1.8537 % 频率什么地方财物增加山顶 ?,这些函数还可以处理LTI数组, 并且其返回值也为数组。 例如, 可以分析一个三维LTI数组sysarray(具体构造方法参考5.2节)的极点情况。 sysarray = tf(rss(2, 1, 1, 3)) 模型sysarray(:, :, 1, 1) = = = = = = = = = = = = = = = = = = = = = = = 传送功能: -0.6201 s - 1.905 -----------,s^2 + 5.672 s + 7.405 模型sysarray(:, :, 2, 1) ======================= 传送功能: 0.4282 s^2 + 0.3706 s + 0.04264 --------------- s^2 + 1.056 s + 0.1719 模型sysarray(:, :, 3, 1) ======================= 传送功能: 0.621 s + 0.7567,----------- s^2 + 2.942 s + 2.113 3x1连续的的数组时间传送功能. 棒(sysarray) ans(:, :, 1) = -3.6337 -2.0379 ans(:, :, 2) = -0.8549 -0.2011 ans(:, :, 3) = -1.6968 -1.2452,表 5.7 系统状态空间实现命令,5.2 LTI模型数组,5.2.1 基本概念 在实际的系统分析和设计工程中, 有时同时考虑几个线性时不变(LTI)系统的模型所组成的集合会给工作带来很大的方便。 例如, 可以考虑某个参数变化下的一组模型: sys1 = tf(1, [1 1 1]); sys2 = tf(1, [1 1 2]); sys3 = tf(1, [1 1 3]);,可以采用LTI数组(LTI数组)来存储这一系列模型。 例如, 对于上面的例子, 可以创建一个包含三个LTI传递函数模型的LTI数组: sys-ltia = (sys1, sys2, sys3); 为了形象地说明LTI数组的存储形式, 考虑图 5.5 中由5个传递函数模型组成的集合。 在这个例子中, 每个模型都具有两个输入和输出, 但每个模型的系统参数不同。,图 5.5 5个LTI模型组成的LTI数组,如同可以在一个多维数组中定义2×2矩阵的集合, 我们也可以在一个LTI数组sysa中定义这5个传递函数模型。 LTI数组的每个元素都是某个具体的LTI模型。 例如, 可以通过sysa(: , : , 3)来访问其中第三个模型, 而sysa(2, 2, 3)则表示第三个模型中第 2 个输入到第2个输出的传递函数, 如图5.6所示。,图 5.6 LTI数组元素的访问方法,5.2.2 LTI数组的维数和形状 单个LTI模型的维数和形状是由其输入和输出通道决定的。 但是一个LTI数组则具有不同的维数和形状的概念。 我/O维数: LTI数组中所有模型共同具有的输入和输出维数。 数组维数: 模型数组自身所具有的维数。 LTI数组的尺寸大小是由下面的因素决定的。 我/O维数的长度: LTI数组中所有模型共同具有的输入或输出的个数。,图5.7显示了一个2×3的LTI数组m2d, 其中每一个元素都是一个输入和两个输出的传递函数模型。 我们可以使用下面的代码将该LTI数组装入MATLAB工作空间, 并分析它的大小: 载入LTIexamples 大小(m2d) 2×3连续的的数组时间传送功能 各自的传送功能2输出和1输入.,图 5.7 LTI数组的维数和尺寸大小,5.2.3 创建LTI数组 可以采用下面三种方法来创建一个LTI模型: (1) 使用为了循环语句对LTI数组的每个元素赋值。 (2) 使用堆命令将多个LTI模型组合成一个LTI数组。 (3) 使用tf、 zpk、 ss和frd指令。 而且, 我们还可以使用rss命令来创建以随机状态空间模型为元素的LTI数组。,1) 使用rss命令 使用rss命令可以很方便地创建状态空间模型所组成的LTI数组, 其中每个模型具有相同数目的状态变量。 该命令的调用方法是 rss(N, P, M, sdim1, …, sdimk) 其中, N是LTI数组中每个模型的状态数目; P是每个模型的输出量数目; M是每个模型的输入量数目; sdim1, …, sdimk是数组维数的长度。,例如, 下面的程序将创建由随机状态空间模型所组成的4×2数组。 其中每个模型具有三个状态、 两个输出和一个输入。 sys = rss(3, 2, 1, 4, 2); 大小(sys) 4×2连续的的数组时间情形空间模型 各自的模型2输出, 1输入, 和3情形.,2) 使用循环语句 假设我们要创建包含4个二阶LTI传递函数模型的LTI模型数组, 这些模型具有如下所示的相同的结构,每个模型中的阻尼系数ξ和自然频率ω不同。 假如分别取ξ1=0.66, ξ2=0.76,ω=1.2, ω=1.5, 可以输入下面的程序创建需要的LTI模型数组:,zeta = [0.66, 0.75]; w = [1.2, 1.5]; 为了我= 1:2 为了j = 1:2 H(:, :, i, j) = tf(w(j)^2, [1 2*zeta(i)*w(j) w(j)^2]); 末端 末端,3) 使用堆函数 创建LTI模型数组的方法是使用堆函数。 该函数既可以处理单个的LTI模型, 也可以处理LTI数组。 它可以将多个LTI数组或单个的LTI模型组合成更大的LTI数组。 例如, 如果两个TF模型sys1和sys2具有相同数目的输入和输出, 则可以输入 sys = 堆(1, sys1, sys2) 它可以将这两个模型组合成为2×1的模型数组。,4) 直接使用tf、 zpk、 ss和frd函数 如果我们将多维数组作为tf、 zpk、 ss和frd等函数的参数, 同样可以创建LTI数组的功能。 例如, 对于TF模型, 可以使用 sys = tf(num, 兽穴) 其中, num和兽穴都是相同大小的多维元胞数组(单元数组)。 对于ZPK模型, 可以使用 sys = zpk(零点, 棒, 财物增加),其中的零点和棒都是元胞数组, 其元胞元素包含每个模型中每个我/O对的零极点向量。 而财物增加则是包含每个模型中每个我/O对的标量增益的多维数组。 对于状态空间模型, 则可以使用 sys = ss(a, b, c, d) 其中的a、 b、 c和d都是多维实数数组。 注意, 在创建的SS模型数组中的所有模型都具有相同数目的状态和输入输出。,5.2.4 LTI数组的下标运用 我们可以像操作多维数组那样使用下标来对LTI数组中的元素进行操作, 包括访问模型、 抽取子系统、 调整LTI数组中的元素、 删除LTI数组中的元素等。 LTI数组下标的使用格式为 ?sys(输出, 输入, n1, … , nk) 其中, 输出和输入分别代表选择的输入和输出通道; n1, … , nk为数组维的下标, 用来选择LTI数组中的一个模型或模型的子集。,1) 访问LTI数组中的模型 可以用此方法访问LTI数组中的模型: 对前两个下标使用冒号参数(: , :), 表示选择该模型的所有我/O通道, 剩下的下标指定待选择模型在LTI数组中的位置。 例如, 如果sys是由下面的命令定义的一个5×2的状态空间模型所组成的LTI数组 sys = rss(4, 3, 2, 5, 2); 我们可以访问位于LTI数组sys中(3, 2)位置的模型 sys(:, :, 3, 2),2) 数组维的单参数下标的使用 我们也可以使用数组维的单参数下标来访问LTI数组中的模型。 例如, 对于上面的5×2 数组, 下面的命令同样可以访问sys中(3, 2)位置的模型: sys(:, :, 8) 这里的8正好是对数组进行逐行扫描时(3, 2)模型的位置。,3) 获取子系统的LTI数组 我们也可以从LTI数组中的所有模型中选择指定我/O通道的子集。 例如 sys = rss(4, 3, 2, 5, 2); = sys(1, [1 2]) 或者 = sys(1, [1 2], :, :) 选择LTI数组的每个模型中最靠前的两个输入通道和第一个输出通道, 返回5×2的单输出二输入的子系统数组。 也可以在LTI数组中选择模型的同时指定我/O通道。,4) 修改LTI数组 我们可以修改LTI数组中的整个模型或模型中的输入输出通道。 例如 sys = rss(4, 3, 2, 5, 2); % 由状态空间模型组成的5×2数组 H = rss(4, 1, 1, 5, 2); % 由SISO模型组成的5×2数组 sys(1, 2) = H 将修改LTI数组sys的所有模型中从输入2到输入1的子系统。 这些LTI数组中的SISO子系统将被SISO模型组成的LTI数组H所替换。 也可以通过循环来实现LTI数组的赋值:,为了k = 1:5 为了j = 1:2 sys(1, 2, k, j) = H(:, :, k, j); 末端 末端,5) 删除LTI数组中的元素 我们可以将LTI数组中的相应部分赋值为空([ ])来实现对该部分的删除。 例如 sys = rss(4, 3, 2, 5, 2); sys(1, :) = [ ]; 大小(sys) 5×2连续的的数组时间情形空间模型 各自的模型2输出, 2输入, 和4情形.,5.2.5 LTI数组的相关运算 我们可以像操作单个的LTI模型那样对整个LTI数组进行基本的模型操作。 这些操作包括 · 算术操作: +、 -、 *、 /、 \等。 · 函数操作: 沿我/O维([,], [;])的组合, 反馈、 附加、 系列、 平行的和lft。 当这些操作涉及两个或两个以上的LTI数组时, 相当于对这些LTI数组中对应的模型之间的操作。,因此, 结果中的第k个模型是由sys1中的第k个模型与sys2中的第k个模型进行相应的操作计算得到的。 例如, 假设sys1和sys2是两个LTI数组, 输入 sysa = op(sys1, sys2) 则结果LTI数组sys的第k个模型是由sys1中的第k个模型与sys2中的第k个模型相加得到的。 对单个LTI模型的分析工具, 例如脚步、 预示和nyquist等, 也可以适用于LTI数组。 这时, 相当于同时对多个LTI模型完成相同的分析计算。,5.3 LTI系统分析和设计的图形操作环境,LTI观测器(LTI查看)是控制系统工具箱自带的用于线性时不变(LTI)系统分析的图形界面(GUI)工具, 支持10种不同类型的系统响应分析, 包括阶跃、 脉冲、 预示、 Nyquist、 Nichols、 零极点、 sigma(奇异值)、 lsim和最初的图形等。 最后两种仅仅在LTI观测器初始化时有效。,通过配置LTI观测器, 可以实现在同一个观测器中同时显示六种分析曲线和任何数量的模型, 而且可以随时获取指定响应曲线的信息, 诸如峰值响应和幅值或相位裕度等等。 在MATLAB的命令窗口中输入ltiview命令可以打开一个新的LTI观测器, 也可以在SISO设计工具中启动它(参考5.3.2节内容)。 图5.8是对某个LTI系统的分析结果。,图 5.8 LTI系统的图形分析工具(LTI查看),1) 使用【输入】菜单命令载入模型 可以通过点击【文件】菜单中的【输入.】命令将所要分析的模型载入到观测器中。 该命令执行后将出现一个选择对话框, 其中列举了当前MATLAB工作空间中的所有模型对象(如图5.10所示), 用户可以选择其中的单个或多个模型将其载入到观测器中。,2) 使用【输出】菜单命令删除观测器中的模型 如果不再需要观测器中的某个模型, 可以通过【文件】菜单中的【输出.】命令将该模型从观测器中删除。 弹出的模型选择框列举了目前观测器中存在的所有模型, 如图5.11所示。 通过对话框右边的按钮, 用户还可以选择被删除模型的存放位置, 例如存放到磁盘中(保存为.垫数据文件形式)或者MATLAB的工作空间中。,图 5.9 LTI查看的鼠标右键快捷菜单,图 5.10 将模型载入到观测器中,图 5.11 从观测器中删除模型,3) 观测器的显示配置 通过【编辑】中的【小块土地配置】菜单, 可以对观测器分析曲线的显示数目、 曲线类型等进行配置, 如图5.12所示。,图 5.12 观测器的配置对话框,5.3.2 SISO系统设计工具(SISO设计工具) SISO系统设计工具(SISO设计工具)是用于单输入单输出反馈控制系统补偿器设计的图形设计环境。 通过该工具, 用户可以快速完成以下工作: · 利用根轨迹方法计算系统闭环特性。 · 针对开环系统预示图的系统设计。 · 添加补偿器的零极点。 · 设计超前/滞后网络和滤波器。 · 分析闭环系统响应(使用LTI查看)。 · 调整系统幅值或相位裕度。 · 系统在连续或离散状态下的互换。,1) 打开SISO系统设计工具 在MATLAB命令窗口中输入sisotool命令, 可以打开一个空的SISO设计工具, 也可以在sisotool命令的输入参数中指定SISO设计工具启动时缺省打开的模型。 注意该模型必须存在于MATLAB的当前工作空间中。 一个DC电机的设计环境如图5.13所示。,图 5.13 SISO系统的图形设计工具,2) 将模型载入SISO设计工具 通过【文件】菜单下的【输入模型】命令, 可以将所要研究的模型载入SISO设计工具中。 点击该菜单项后, 将弹出输入系统数据对话框, 如图5.14所示。 3) 当前的补偿器(当前的赔偿者) 当前的补偿器(当前的赔偿者)一栏显示的是目前设计的系统补偿器的结构。 缺省的补偿器增益是一个没有任何动态属性的单位增益。 一旦用户在根轨迹图中添加零极点, 该栏将会采用零极点-增益格式显示补偿器的结构。,图 5.14 输入系统数据对话框,4) 反馈结构 SISO设计工具在缺省条件下将补偿器放在系统的前向通道中。 另一种反馈结构是将补偿器放置于系统的反馈回路中。 用户可以通过【FS】按钮在两种结构之间进行切换, 如图5.15所示。,图 5.15 SISO设计工具中的反馈控制结构 (a) 补偿器(C)位于前向回路中; (b) 补偿器(C)位于反馈回路中,5.4 LTI控制系统的设计实例,5.4.1 LQG调节器的设计 这一节将结合MATLAB自带的一个例子来演示LQG调节器的设计方法。 在MATLAB的命令窗口中输入milldemo可以运行相应的演示程序。 该例是为热轧机设计一套控制系统, 以控制钢材在热轧过程中的水平和垂直厚度。 图5.16是热轧机水平(x轴方向)压轧过程的简单示意图。,压轧机的完整模型属于MIMO系统。 图5.17 显示了该系统的开环模型, 各部分的含义为:u为控制输入, δ为厚度间隙, f为增量式轧力,wf,我们为干扰模型的驱动白噪声。 测量的轧力变化f包括由水压驱动器驱动的力矩增量和由于偏心作用和输入厚度变化所引起的干扰力的大小。,图 5.16 热轧机水平压轧过程示意图,图 5.17 热轧机的开环模型框图,值得注意的是, H(s)、 铁(s)和Fi(s)的输出是增量式的,增加水压或偏心力的作用可以减小成型工件的厚度,同时增加工件的输入厚度也会导致成型工件的厚度间隙。 系统x、 y轴的相应模型分别为 x轴(水平方向),y轴(垂直方向),1) x轴方向的LQG设计 为了简化设计过程, 首先忽略系统x和y轴之间的耦合, 将它们作为独立的回路看待, 也就是说为每个轴设计SISO LQG调节器。 调节器的设计目标是减小因偏心和输入厚度变化所带来的工件的压轧厚度变化δx、 δy。 设计的第一步是定义模型的传递函数对象: % 水压驱动器 Hx = tf(2.4e8, [1 72 90^2], ′inputname′, ′u-x′),% 输入厚度/硬度等干扰模型 使固定= tf(1e4, [1 0.05], ′inputn′, ′w-ix′) % 滚压偏心模型 Fex = tf([3e4 0], [1 0.125 6^2], ′inputn′, ′w-不包括′) % 增益 gx = 1e-6;,接下来建立图5.16的开环系统模型: % 从输入到力f1和f2的我/O映射 Px = 附加([ss(Hx) Fex], 使固定) % 加入从f1, f2到输出 “x-缺口“和 “x-力量“的静态增益 Px = [-gx gx;1 1] * Px % 为系统输出命名 设置(Px, ′outputn′, {′x-缺口′ ′x-力量′}),变量Px现在包含一个开环状态空间模型: ?Px.inputname ans = ′u-x′ ′w-不包括′ ′w-ix′ Px.outputname ans = ′x-缺口′ ′x-力量′,第2个系统输出′x-力量′是测量的滚轧力大小。 LQG调节器使用该测量值来驱动水压驱动器和减小由于扰动所引起的厚度变化δX。 LQG调节器的设计分为如下两步: (1) 设计全状态反馈控制器, 使下面的线性二次判据最小,(5.6),(2) 设计Kalman滤波器估计给定测量力′x-力量′的状态向量。 线性二次判据J(uX)将同时考虑低频和高频特性。 因为用户主要关心的是系统的低频特性, 因此通过低通滤波器30/(s+30)来减小高频影响。 lpf = tf(30, [1 30]) % 将低通滤波器加入第一个系统输出Px Pxdes = 附加(lpf, 1) * Px 设置(Pxdes, ′outputn′, {′x-缺口*′ ′x-力量′}) % 使用LQRY设计状态反馈增益 (q=1, r=1e-4) kx = lqry(Pxdes(1, 1), 1, 1e-4),下面使用kalman函数设计Kalman观测器。 系统噪声,(5.7),具有单位方差; 而测量噪声方差限制在1000以下。 输入下面的命令: estx = kalman(Pxdes(2, :), 眼睛(2), 1000) 最后连接状态反馈增益kx和状态观测器estx形成 LQG调节器: Regx = lqgreg(estx, kx),以上就完成了x轴方向的LQG设计。 图5.18是调节 器在0.1~1000拉德/s范围内的预示响应曲线。 预示(Regx, {0.1 1000}) 观察图5.19可以验证LQG调节器的控制效果。 首先考虑输入厚度的增长影响。 这类低频扰动会同时影响输出厚度和滚轧力的大小。 因为调节器在低频段的相位近似为0°, 反馈回路将充分增加水压驱动力以抵消厚度增长的影响。,图 5.18 x轴LQG调节器的预示响应曲线,观察图5.19可以验证LQG调节器的控制效果。 首先考虑输入厚度的增长影响。 这类低频扰动会同时影响输出厚度和滚轧力的大小。 因为调节器在低频段的相位近似为0°, 反馈回路将充分增加水压驱动力以抵消厚度增长的影响。 如果考虑偏心的影响, 由于滚轧圆柱的偏心作用会引起滚轧间隙的波动, 当滚轧间隙减小时, 滚轧力将随之增加使得工件厚度减小,而水压驱动力必定会减小(负反馈作用)来恢复期望的滚轧厚度。 这个过程可以通过图5.18 的Bode曲线得到验证: LQG调节器在偏心干扰的自然频率(6 rad/s)附近的相位为-180°以下。,最后创建闭环系统模型, 并比较开/闭环系统在输入白噪声wex和wix下的时间响应, 其中采样时间选择 dt = 0.01。 dt = 0.01 t = 0:dt:50 % 仿真时间范围time samples % 创建单位方差的系统噪声wx = [w-ex;w-ix], 相应的离散化方差为1/dt wx = sqrt(1/dt) * randn(2, length(t)) lsim(Px(1, 2:3), ′:′, clx(1, 2:3), ′-′, wx, t) 图5.19中虚线对应于系统的开环响应, 显然, 由于LQG调节器的作用, 热轧机的厚度控制误差减小为原来的1/4。,图 5.19 白噪声影响下x轴开/闭环系统的时间响应,2) y轴LQG调节器的设计 按照类似的过程, 我们可以设计y轴方向的LQG调节器(用于控制垂直方向的压轧厚度)。 % 定义模型的各个组成部分 Hy = tf(7.8e8, [1 71 88^2], ′inputn′, ′u-y′) Fiy = tf(2e4, [1 0.05], ′inputn′, ′w-iy′) Fey = tf([1e5 0], [1 0.19 9.4^2], ′inputn′, ′w-ey′) gy = 0.5e-6 % 压轧力与控制间隙之间的增益比例常数,% 创建开环模型 Py = append([ss(Hy) Fey], Fiy) Py = [-gy gy;1 1] * Py set(Py, ′outputn′, {′y-gap′ ′y-force′}) % 状态反馈增益设计 Pydes = append(lpf, 1) * Py % 加入低频段权重 set(Pydes, ′outputn′, {′y-gap*′ ′y-force′}) ky = lqry(Pydes(1, 1), 1, 1e-4) % Kalman 观测器设计 esty = kalman(Pydes(2, :), eye(2), 1e3),% 创建闭环系统, 设计y轴方向的SISO LQG调节器 Regy = lqgreg(esty, ky) cly = feedback(Py, Regy, 1, 2, +1) 为了比较y轴方向的开/闭环系统响应, 输入 dt = 0.01 t = 0:dt:50 wy = sqrt(1/dt) * randn(2, length(t)) lsim(Py(1, 2:3), ′:′, cly(1, 2:3), ′-′, wy, t),图 5.20 y轴方向开/闭环系统的响应比较,3) 不同轴之间的耦合 本节开始讲到x/y轴厚度调节问题属于典型的MIMO问题。 但是到目前为止, 仅仅为单个独立的x或y通道设计了LQG调节器。 如果两个轴之间能够充分解耦, 则上述设计过程是有效的。 实际上, 热轧机的两轴之间存在一定的耦合作用, 这点从物理上也不难理解, 当沿一个轴锻压工件时, 工件由于受到挤压作用, 势必将从另一个轴方向(与锻压轴垂直)进行伸展, 从而增大了另一个轴方向上的压轧间隙。 两轴之间的耦合作用如图5.21 所示。,相应的耦合系统模型可以写成,图5.21 x/y轴间的耦合作用框图(gxy=0.1, gyx=0.4),下面通过仿真来观察两轴之间的耦合作用对独立通道LQG调节器的影响。 为此创建图5.21所示的耦合系统模型。 P = append(Px, Py) % 将x/y轴模型组合成一个系统 P = P([1 3 2 4], [1 4 2 3 5 6]) % 加入轴间的耦合作用 gxy = 0.1; gyx = 0.4; CCmat = [eye(2) [0 gyx*gx;gxy*gy 0] ; zeros(2) [1 -gyx;-gxy 1]] Pc = CCmat * P Pc.outputname = P.outputname,% 创建闭环系统模型 feedin = 1:2 % Pc的前两个输入是控制输入 feedout = 3:4 % Pc的后两个输出是测量值 cl = feedback(Pc, append(Regx, Regy), feedin, feedout, +1) wxy = [wx ; wy] lsim(Pc(1:2, 3:6), ′:′, cl(1:2, 3:6), ′-′, wxy, t),图5.22显示出比较的结果。 从图中可以看出, 由于两轴之间的耦合作用, x轴方向的调节效果变差(x轴厚度的峰值变化大约是不考虑耦合作用时的4倍以上), 因此, 在设计LQG调节器时不能忽略轴间耦合的影响, 必须针对整个MIMO的LQG设计才能抵消两轴之间耦合作用所带来的干扰。,4) 整个MIMO系统设计LQG调节器 Pdes = append(lpf, lpf, eye(2)) * Pc % 加入低通滤波器 Pdes.outputn = Pc.outputn k = lqry(Pdes(1:2, 1:2), eye(2), 1e-4*eye(2)) % LQ 增益 est = kalman(Pdes(3:4, :), eye(4), 1e3*eye(2)) % Kalman 观测器 RegMIMO = lqgreg(est, k) % 创建MIMO LQG 调节器 %创建闭环系统模型 cl = feedback(Pc, RegMIMO, 1:2, 3:4, +1);,% 使用相同的噪声输入对系统进行仿真 lsim(Pc(1:2, 3:6), ′:′, cl(1:2, 3:6), ′-′, wxy, t) 最后的仿真结果如图5.23所示。 比较图5.22和图5.23, 显然针对MIMO系统设计的LQG调节器很大程度上提高了系统的调节性能。 这从另一方面也验证了x/y轴的耦合作用对系统动态特性的影响。,图 5.22 考虑轴间耦合作用与独立通道设计的结果比较,图 5.23 MIMO调节器的闭环仿真结果,5.4.2 Kalman滤波器的设计 这一节将讨论如何使用控制系统工具箱进行Kalman滤波器的设计和仿真。 考虑下面的离散系统: x[n+1]=Ax[n]+B(u[n]+w[n]) (5.9) y[n]=Cx[n] (5.10) 其中, w[n]是在输入端加入的高斯噪声。 状态矩阵参数分别为,A = [1.1269-0.49400.1129 1.0000 0 0 0 1.0000 0]; B = [-0.3832 0.5919 0.5191]; C = [1 0 0];,我们的目标是设计Kalman滤波器, 在给定输入u[n]和带噪输出测量值 yv[n]=Cx[n]+v[n]的情况下估计系统的输出。 其中, v[n]是高斯白噪声。 1) 离散Kalman滤波器 上述问题的稳态Kalman滤波器方程如下: 测量值修正计算,(5.11),(5.12),2) 稳态设计 我们可以通过kalman函数设计上述稳态滤波器。 首先定义带噪声的系统模型: x[n+1]=Ax[n]+Bu[n]+Bw[n] (状态方程) y[n]=Cx[n] (测量方程) 具体的程序代码如下: % 注意:设置采样时间为-1表示模型为离散的 Plant = ss(A, [B B], C, 0, -1, ′inputname′, {′u′ ′w′}, ′outputname′, ′y′);,假设Q=R=1, 下面可以设计离散Kalman滤波器: Q = 1; R = 1; [kalmf, L, P, M] = kalman(Plant, Q, R); 函数将返回Kalman滤波器的状态模型kalmf和修正增益M。 M M = 3.7980e-01 8.1732e-02 -2.5704e-01,图5.24 Kalman滤波器,因为我们对输出估计ye比较感兴趣, 因此只需要保留kalmf的第一个输出。 为此输入 kalmf = kalmf(1, :); kalmf a = x1-e x2-e x3-e x1-e 0.7683-0.494 0.1129 x2-e 0.62020 0 x3-e -0.0817321 0,b = u y x1-e -0.3832 0.3586 x2-e 0.5919 0.3798 x3-e 0.5191 0.081732 c = x1-e x2-e x3-e y -e 0.6202 0 0 d = u y y-e 0 0.3798,I/O groups: Group name I/O Channel(s) KnownInput I 1 Measurement I 2 OutputEstimate O 1 Sampling time: unspecified Discretetime model.,滤波器的功能是在已知输入噪声方差的条件下尽可能消除输出信号中的噪声影响。 图5.25显示了滤波前后的不同输出信号。 下面用程序来比较滤波后输出信号与系统实际信号相对理想输出的误差。 a = A; b = [B B 0*B]; c = [C;C]; d = [0 0 0;0 0 1]; P = ss(a, b, c, d, -1, ′inputname′, {′u′ ′w′ ′v′}, ′outputname′, {′y′ ′yv′});,sys = parallel(P, kalmf, 1, 1, [ ], [ ]) % 创建并联系统 % 将系统输出yv正反馈到滤波器的输入端, 形成闭环系统 SimModel = feedback(sys, 1, 4, 2, 1) % 从I/O列表中删除yv SimModel = SimModel([1 3], [1 2 3]) % 产生高斯噪声信号 t = [0:100]′; u = sin(t/5); n = length(t) randn(′seed′, 0),图 5.25 滤波前后输出信号的比较,w = sqrt(Q)*randn(n, 1); v = sqrt(R)*randn(n, 1); % 系统仿真 [out, x] = lsim(SimModel, [w, v, u]); y = out(:, 1); % 系统真实(理想)输出响应 ye = out(:, 2);% 滤波后的系统输出 yv = y + v;% 系统输出的测量值 % 比较结果 subplot(211), plot(t, y, ′--′, t, ye, ′-′), xlabel(′No. of samples′), ylabel(′Output′),title(′Kalman filter response′) subplot(212), plot(t, y-yv, ′-.′, t, y-ye, ′-′), xlabel(′No. of samples′), ylabel(′Error′) 比较结果如图5.26所示。 图中上面的图形显示的是真实响应y(虚线)和滤波后的输出ye(实线), 下面的图形比较测量误差(虚线)与估计误差(实线)。 该图表明, 滤波器最大程度地消除了系统输出中的噪声影响。 这可以通过计算误差的协方差进行验证。,MeasErr = y-yv; MeasErrCov = sum(MeasErr.*MeasErr)/length(MeasErr); EstErr = y-ye; EstErrCov = sum(EstErr.*EstErr)/length(EstErr); 滤波前误差(测量误差)的协方差为 MeasErrCov MeasErrCov = 1.1138,而滤波后的误差(估计误差)的协方差仅为 EstErrCov EstErrCov = 0.2722,图 5.26 滤波前后的输出响应与真实输出的比较,3) 时变Kalman滤波器 时变Kalman滤波器是稳态滤波器在时变系统或具有可变协方差噪声的LTI系统的推广。 假定系统状态方程和测量方程分别为 x[n+1]=Ax[n]+Bu[n]+Gw
展开阅读全文