MATLAB 状态空间设计 —— LQG/LQR 和极点配置算法

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、相关函数 —— LQG/LQR 和极点配置算法
    • 1.1 LQR —— lqr 函数
      • 1.1.1 函数用法
      • 1.1.2 举例
        • 1.1.2.1 倒摆模型的 LQR 控制
    • 1.2 LQG —— lqg() 函数
      • 1.2.1 函数用法
      • 1.2.2 举例
    • 1.3 极点配置 —— place() 函数
      • 1.3.1 函数用法
      • 1.3.2 示例
        • 1.3.2.1 二阶系统的极点配置设计
        • 1.3.2.2 极点配置观测器设计


前言

状态空间控制设计方法,如 LQG/LQR 和极点配置算法,适用于 MIMO 设计。


一、相关函数 —— LQG/LQR 和极点配置算法

1.1 LQR —— lqr 函数

1.1.1 函数用法

[K,S,P] = lqr(sys,Q,R,N)
[K,S,P] = lqr(A,B,Q,R,N)

说明

[K,S,P] = lqr(sys,Q,R,N) 计算连续时间或离散时间状态空间模型 sys 的最优增益矩阵
K、相关代数黎卡提方程的解 S 和闭环极点 PQR 分别是状态和输入的权重矩阵。交叉项矩阵 N
在省略时设为零。

[K,S,P] = lqr(A,B,Q,R,N) 使用连续时间状态空间矩阵 AB 计算最佳增益矩阵 K、相关黎卡提方程的解 S 以及闭环极点 P。对于离散时间模型,请使用 dlqr

输入参数

sys - 动态系统模型,动态系统模型,以 ss 模型对象的形式指定。

A - 状态矩阵,状态矩阵,指定为 n x n 矩阵,其中 n 为状态数。

B - 输入到状态矩阵,输入 - 状态矩阵,指定为 n x m 的输入 - 状态矩阵,其中 m 为输入个数。

Q - 状态成本权重矩阵,状态-成本加权矩阵,指定为 n x n 矩阵,其中 n 为状态数。你可以使用 Bryson 规则来设置 Q 的初始值,其给定值为
Q i , i = 1 m a x i m u m a c c e p t a b l e v a l u e o f ( e r r o r s t a t e s ) 2 , i ∈ { 1 , 2 , . . . , n } Q_{i,i}=\dfrac{1}{\mathrm{maximum~acceptable~value~of~(error_{states})^{2}}},~\mathrm{i}\in\{1,2,...,n\} Qi,i=maximum acceptable value of (errorstates)21, i{1,2,...,n}
Q = [ Q 1 , 1 0 ⋯ 0 0 Q 2 , 2 ⋯ 0 0 0 ⋱ ⋮ 0 0 ⋯ Q n , n ] Q=\left[\begin{array}{c c c c}{{Q_{1,1}}}&{{0}}&{{\cdots}}&{{0}}\\ {{0}}&{{Q_{2,2}}}&{{\cdots}}&{{0}}\\ {{0}}&{{0}}&{{\ddots}}&{{\vdots}}\\ {{0}}&{{0}}&{{\cdots}}&{{Q_{n,n}}}\end{array}\right] Q=Q1,10000Q2,20000Qn,n

R - 输入成本权重矩阵,输入成本加权矩阵,指定为标量或与 D'D 相同大小的矩阵。这里,D 是馈通状态空间矩阵。可以使用 Bryson 规则设置 R 的初始值,其给定值为
R i , i = 1 m a x i m u m a c c e p t a b l e v a l u e o f ( e r r o r s t a t e s ) 2 , i ∈ { 1 , 2 , . . . , m } R_{i,i}=\dfrac{1}{\mathrm{maximum~acceptable~value~of~(error_{states})^{2}}},~\mathrm{i}\in\{1,2,...,m\} Ri,i=maximum acceptable value of (errorstates)21, i{1,2,...,m}
R = [ R 1 , 1 0 ⋯ 0 0 R 2 , 2 ⋯ 0 0 0 ⋱ ⋮ 0 0 ⋯ R n , n ] R=\left[\begin{array}{c c c c}{{R_{1,1}}}&{{0}}&{{\cdots}}&{{0}}\\ {{0}}&{{R_{2,2}}}&{{\cdots}}&{{0}}\\ {{0}}&{{0}}&{{\ddots}}&{{\vdots}}\\ {{0}}&{{0}}&{{\cdots}}&{{R_{n,n}}}\end{array}\right] R=R1,10000R2,20000Rn,n
这里,m 是输入的个数。

N - 可选的交叉项矩阵,可选的交叉项矩阵,以矩阵形式指定。如果没有指定 Nlqr 默认将 N 设为 0。

输出参数

K - 最优增益,闭环系统的最优增益,以大小为 n 的行向量形式返回,其中 n 为状态数。

S - 相关代数黎卡提方程的解,相关代数黎卡提方程的解,以 n x n 矩阵形式返回,其中 n 为状态数。换句话说,S
的维度与状态空间矩阵 A 相同。更多信息,请参见 icare 和 idare。

P - 闭环系统的极点,闭环系统的极点,以大小为 n 的列向量形式返回,其中 n 为状态数。

局限性

输入数据必须满足以下条件:

  • 一对矩阵 A 和 B 必须是可稳定的。

  • [ Q , N ; N ′ , R ] [Q,N;N',R] [Q,N;N,R] 必须是非负定。

  • R > 0 R>0 R>0 并且 Q − N R − 1 N T ≥ 0. Q-N R^{-1}N^{T}\ge0. QNR1NT0.

  • ( Q − N R − 1 N T , A − B R − 1 N T ) (Q-N R^{-1}N^{T},\,A-B R^{-1}N^{T}) (QNR1NT,ABR1NT) 在虚轴(或离散时间中的单位圆)上没有不可观测的模式。

提示: lqr 支持非奇异 E 的描述符模型。lqr 的输出 S 是等效显式状态空间模型的代数黎卡提方程的解: d x d t = E − 1 A x + E − 1 B u {\dfrac{d x}{d t}}=E^{-1}A x+E^{-1}B u dtdx=E1Ax+E1Bu

LQR 算法

对于连续时间系统,lqr 计算的状态反馈控制 u=-Kx 可使二次成本函数最小化
J ( u ) = ∫ 0 ∞ ( x T Q x + u T R u + 2 x T N u ) d t J(u)=\int_{0}^{\infty}(x^{T}Q x+u^{T}R u+2x^{T}N u)d t J(u)=0(xTQx+uTRu+2xTNu)dt 系统动力学
x ˙ = A x + B u . {\dot{x}}=A x+B u. x˙=Ax+Bu.

除了状态反馈增益 K 之外,lqr 还返回相关代数黎卡提方程的解 S A T S + S A − ( S B + N ) R − 1 ( B T S + N T ) + Q = 0 A^{T}S+S A-(S B+N)R^{-1}(B^{T}S+N^{T})+Q=0 ATS+SA(SB+N)R1(BTS+NT)+Q=0 和闭环极点 P = eig(A-BK)。增益矩阵 K 由 S 得出,计算公式为
K = R − 1 ( B T S + N T ) . K=R^{-1}(B^{T}S+N^{T}). K=R1(BTS+NT). 对于离散时间系统,lqr 可计算状态反馈控制 u n = − K x n u_{n}=-K x_{n} un=Kxn
最小化 J = ∑ n = 0 ∞ { x T Q x + u T R u + 2 x T N u } J=\sum_{n=0}^{\infty}\{x^{T}Q x+u^{T}R u+2x^{T}N u\} J=n=0{xTQx+uTRu+2xTNu} 系统动力学
x n + 1 = A x n + B u n x_{n+1}=A x_{n}+B u_{n} xn+1=Axn+Bun

在任何情况下,如果省略交叉项矩阵 N,lqr 都会将 N 设为 0。

1.1.2 举例

1.1.2.1 倒摆模型的 LQR 控制

pendulumModelCart.mat 包含小车上倒立摆的状态空间模型,其输出为小车位移 x 和摆角 θ,控制输入 u 为小车上的水平力。
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \begin{bmatrix…
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \bm{y}=\begin{…
首先,将状态空间模型 sys 加载到工作区。

load('pendulumCartModel.mat','sys')

由于输出为 x x x θ \theta θ,而输入只有一个,因此使用 Bryson 规则确定 QR

Q = [1,0,0,0;...0,0,0,0;...0,0,1,0;...0,0,0,0];
R = 1;

使用 lqr 求增益矩阵 K。由于没有指定 N,lqr 将 N 设为 0。

[K,S,P] = lqr(sys,Q,R)
K = 1×4-1.0000   -1.7559   16.9145    3.2274S = 4×41.5346    1.2127   -3.2274   -0.68511.2127    1.5321   -4.5626   -0.9640-3.2274   -4.5626   26.5487    5.2079-0.6851   -0.9640    5.2079    1.0311P = 4×1 complex-0.8684 + 0.8523i-0.8684 - 0.8523i-5.4941 + 0.4564i-5.4941 - 0.4564i

虽然 Bryson 规则通常能提供令人满意的结果,但它通常只是根据设计要求调整闭环系统响应的试错迭代设计程序的起点。

1.2 LQG —— lqg() 函数

1.2.1 函数用法

reg = lqg(sys,QXU,QWV)
reg = lqg(sys,QXU,QWV,QI)
reg = lqg(sys,QXU,QWV,QI,'1dof')
reg = lqg(sys,QXU,QWV,QI,'2dof')
reg = lqg(___,'current')
[reg,info] = lqg(___)

说明

reg = lqg(sys,QXU,QWV) 给定一个被控对象的状态空间模型 sys 以及权重矩阵 QXU
QWV,计算出一个最优线性二次高斯(LQG)调节器 reg。动态调节器 reg 利用测量值 y 生成控制信号 u,将
y 调节到零值附近。使用正反馈将该调节器与被控对象的输出 y 连接起来。

在这里插入图片描述

LQG 调节器使成本函数最小化
J = E { * ⁡ l i m τ → ∞ 1 τ ∫ 0 τ [ x T , u T ] Q x u [ x u ] d t } J=E\left\{\operatorname*{lim}_{\tau\rightarrow\infty}\frac{1}{\tau}\int_{0}^{\tau}[x^{T},u^{T}]Q x u\begin{bmatrix} x \\ u \end{bmatrix}d t\right\} J=E{*limττ10τ[xT,uT]Qxu[xu]dt}

受被控对象方程的约束

d x / d t = A x + B u + w y = C x + D u + ν \begin{array}{c}{{d x/d t=A x+B u+w}}\\ {{y=C x+D u+\nu}}\end{array} dx/dt=Ax+Bu+wy=Cx+Du+ν

其中,过程噪声 w 和测量噪声 v 均为具有协方差的高斯白噪声:

KaTeX parse error: Undefined control sequence: \cal at position 95: …rime}]\right)={\̲c̲a̲l̲ ̲Q}{\cal W}V

reg = lqg(sys,QXU,QWV,QI) 使用设定点指令 r 和测量值 y 来生成控制信号 u

在这里插入图片描述

LQG 伺服控制器可使成本函数最小化

J = E { * ⁡ l i m τ → ∞ 1 τ ∫ 0 τ ( [ x T , u T ] Q x u ∣ u x ∣ + x i T Q i x i ) d t } J=E\left\{\operatorname*{lim}_{\tau\rightarrow\infty}\frac{1}{\tau}\int_{0}^{\tau}\left([x^{T},u^{T}]Q x u\biggl|_{u}^{x}\biggr|+x_{i}^{T}Q_i x_{i}\right)d t\right\} J=E{*limττ10τ([xT,uT]Qxuux+xiTQixi)dt}

对于多输入多输出系统,ry x i x_i xi 的长度必须相同。

reg = lqg(sys,QXU,QWV,QI,'1dof')计算以 e = r - y 而不是 [r ; y]
作为输入的一自由度伺服控制器。

reg = lqg(sys,QXU,QWV,QI,'2dof') 等价于
LQG(sys,QXU,QWV,QI),并产生前面显示的二自由度伺服控制器。

reg = lqg(____,'current')使用 "current "卡尔曼估计器,该估计器在计算离散时间系统的 LQG
调节器时使用 x[n|n] 作为状态估计值。

[reg,info] = lqg(____)返回前面任何语法结构 info
中的控制器和估计器增益矩阵。例如,您可以使用控制器和估计器增益以观测器形式实现控制器。更多信息,请参阅算法。

1.2.2 举例

线性-二次高斯 (LQG) 调节器和伺服控制器设计

本例介绍如何为以下系统设计线性二次高斯(LQG)调节器、一自由度 LQG 伺服控制器和二自由度 LQG 伺服控制器。

在这里插入图片描述

被控对象有三个状态 (x)、两个控制输入 (u)、三个随机输入 (w)、一个输出 (y)、输出的测量噪声 (v),以及以下状态方程和测量方程。

d x d t = A x + B u + w y = C x + D u + ν \dfrac{d x}{d t}=A x+B u+w \\ y=C x+D u+\nu dtdx=Ax+Bu+wy=Cx+Du+ν

A = [ 0 1 0 0 0 1 1 0 0 ] B = [ 0.3 1 0 1 − 0.3 0.9 ] \begin{array}{r l}{A={\left[\begin{array}{l l l}{0}&{1}&{0}\\ {0}&{0}&{1}\\ {1}&{0}&{0}\end{array}\right]}}&{{}B={\left[\begin{array}{l l}{0.3}& {1}\\ 0& 1 \\ {-0.3} &{0.9}\end{array}\right]}}\end{array} \\ A=001100010B=0.300.3110.9 C = [ 1.9 1.3 1 ] D = [ 0.53 − 0.61 ] C=\left[1.9\quad\ 1.3\quad\ 1\right]\quad D=\left[0.53-0.61\right] C=[1.9 1.3 1]D=[0.530.61]

系统的噪声协方差数据如下

Q n = E ( w w T ) = [ 4 2 0 2 1 0 0 0 1 ] Q n=E(w w^{T})=\left[{\begin{array}{c c c}{4}&{2}&{0}\\ {2}&{1}&{0}\\ {0}&{0}&{1}\end{array}}\right] Qn=E(wwT)=420210001

R n = E ( ν ν T ) = 0.7 R_{n}=E(\nu\nu^{T})=0.7 Rn=E(ννT)=0.7

对于调节器,使用以下成本函数来定义调节性能和控制输入之间的权衡:

J ( u ) = ∫ 0 ∞ ( 0.1 x T x + u T [ 1 0 0 2 ] u ) d t J(u)=\int_{0}^{\infty}(0.1x^{T}x+u^{T}\begin{bmatrix} 1&0 \\ 0&2 \end{bmatrix}u)d t J(u)=0(0.1xTx+uT[1002]u)dt

对于伺服控制器,使用以下成本函数来定义跟踪器性能和控制力之间的权衡:

J ( u ) = ∫ 0 ∞ ( 0.1 x T x + x i 2 + u T [ 1 0 0 2 ] u ) d t J(u)=\int_{0}^{\infty}(0.1x^{T}x+x_{i}^{2}+u^{T}\begin{bmatrix} 1&0 \\ 0&2 \end{bmatrix}u)d t J(u)=0(0.1xTx+xi2+uT[1002]u)dt

为该系统设计 LQG 控制器:

  1. 在 MATLAB 命令窗口中输入以下内容,创建状态空间系统:
A = [0 1 0;0 0 1;1 0 0];    
B = [0.3 1;0 1;-0.3 0.9];
C = [1.9 1.3 1];  
D = [0.53 -0.61];
sys = ss(A,B,C,D);
  1. 输入以下命令,定义噪声协方差数据和加权矩阵:
nx = 3;    %Number of states
ny = 1;    %Number of outputs
Qn = [4 2 0; 2 1 0; 0 0 1];
Rn = 0.7;
R = [1 0;0 2]
QXU = blkdiag(0.1*eye(nx),R);
QWV = blkdiag(Qn,Rn);
QI = eye(ny);
  1. 键入以下命令,组建 LQG 调节器:
KLQG = lqg(sys,QXU,QWV)
This command returns the following LQG regulator:
A = x1_e    x2_e    x3_ex1_e  -6.212  -3.814  -4.136x2_e  -4.038  -3.196  -1.791x3_e  -1.418  -1.973  -1.766B = y1x1_e   2.365x2_e   1.432x3_e  0.7684C = x1_e       x2_e       x3_eu1   -0.02904  0.0008272     0.0303u2    -0.7147    -0.7115    -0.7132D = y1u1   0u2   0Input groups:              Name        ChannelsMeasurement       1    Output groups:             Name      Channels   Controls      1,2      Continuous-time model.
  1. 键入以下命令,形成单自由度 LQG 伺服控制器:
KLQG1 = lqg(sys,QXU,QWV,QI,'1dof')
This command returns the following LQG servo controller:
A = x1_e    x2_e    x3_e     xi1x1_e  -7.626  -5.068  -4.891  0.9018x2_e  -5.108  -4.146  -2.362  0.6762x3_e  -2.121  -2.604  -2.141  0.4088xi1        0       0       0       0B = e1x1_e   -2.365x2_e   -1.432x3_e  -0.7684xi1         1C = x1_e     x2_e     x3_e      xi1u1  -0.5388  -0.4173  -0.2481   0.5578u2   -1.492   -1.388   -1.131   0.5869D = e1u1   0u2   0Input groups:           Name     Channels   Error       1       Output groups:          Name      ChannelsControls      1,2   Continuous-time model.
  1. 输入以下命令,生成二自由度 LQG 伺服控制器:
KLQG2 = lqg(sys,QXU,QWV,QI,'2dof')
This command returns the following LQG servo controller:
A = x1_e    x2_e    x3_e     xi1x1_e  -7.626  -5.068  -4.891  0.9018x2_e  -5.108  -4.146  -2.362  0.6762x3_e  -2.121  -2.604  -2.141  0.4088xi1        0       0       0       0B = r1      y1x1_e       0   2.365x2_e       0   1.432x3_e       0  0.7684xi1        1      -1C = x1_e     x2_e     x3_e      xi1u1  -0.5388  -0.4173  -0.2481   0.5578u2   -1.492   -1.388   -1.131   0.5869D = r1  y1u1   0   0u2   0   0Input groups:              Name        ChannelsSetpoint         1    Measurement       2    Output groups:             Name      Channels   Controls      1,2      Continuous-time model.

小贴士

  • lqg 可用于连续时间和离散时间被控对象。在离散时间情况下,lqg 默认使用 x[n|n-1] 作为状态估计值。要使用 x[n|n] 作为状态估计并计算最优 LQG 控制器,请使用 "current "输入参数。有关状态估计器的详细信息,请参见
    kalman

  • 计算 LQG调节器时,lqg 使用 lqr 和 kalman 命令。要计算伺服控制器,lqg 使用 lqikalman 命令。

  • 如果希望更灵活地设计调节器,可以使用 lqrkalmanlqgreg 命令。在设计伺服控制器时,如果需要更大的灵活性,可以使用 lqikalmanlqgtrack
    命令。有关使用这些命令以及如何决定何时使用这些命令的更多信息,请参阅线性-二次方-高斯 (LQG)
    调节设计和带积分动作的伺服控制器的线性-二次方-高斯 (LQG) 设计。

LQG 算法

控制器方程为

  • 对于连续时间: d x e = A x e + B u + L ( y − C x e − D u ) u = − K x e − K i x i d x_e=A x_e+B u+L(y-C x_e-D u) \\ u=-K x_e-K_i x_i dxe=Axe+Bu+L(yCxeDu)u=KxeKixi
  • 对于离散时间: x [ n + 1 ∣ n ] = A x [ n ∣ n − 1 ] + B u [ n ] + L ( y [ n ] − C x [ n ] n − 1 ] − D u [ n ] ) x[n+1|n]=A x[n|n-1]+B u[n]+L(y[n]-C x[n]n-1]-D u[n]) x[n+1n]=Ax[nn1]+Bu[n]+L(y[n]Cx[n]n1]Du[n])
    • 延迟估计器: u [ n ] = − K x x [ n ] n − 1 ] − K i x i [ n ] u[n]=-K_{x}x[n]n-1]-K_{i}x_{i}[n] u[n]=Kxx[n]n1]Kixi[n]
    • 目前的估算器: u [ n ] = − K x x [ n ] n ] − K i x i [ n ] − K w w [ n ] = − K x x [ n ] n − 1 ] − K i x i [ n ] − ( K x M x + K w M w ) y i n n [ n ] {u[n]=-K_{x}x[n]n]-K_{i}x_{i}[n]-K_{w}w[n]=-K_{x}x[n]n-1]-K_{i}x_{i}[n]-(K_{x}M_{x}+K_{w}M_{w})y_{ i n n}[n]} u[n]=Kxx[n]n]Kixi[n]Kww[n]=Kxx[n]n1]Kixi[n](KxMx+KwMw)yinn[n] y i n n [ n ] = y [ n ] − C x [ n ] n − 1 ] − D u [ n ] y_{i n n}[n]=y[n]-C x[n]n-1]-D u[n] yinn[n]=y[n]Cx[n]n1]Du[n]

这里

  • A、B、C 和 D 是 LQG 调节器的状态空间矩阵,reg.

  • x i x_i xi 是跟踪误差 r - y 的积分。

  • K x K_x Kx K w K_w Kw K i K_i Ki、L、 M x M_x Mx M w M_w Mw 是信息中返回的控制器和估计器增益矩阵。

1.3 极点配置 —— place() 函数

1.3.1 函数用法

K = place(A,B,p)
[K,prec] = place(A,B,p)

说明

极点配置是一种计算最优增益矩阵的方法,用于将闭环极点分配给指定位置,从而确保系统稳定性。闭环极点位置会直接影响上升时间、稳定时间和瞬变振荡等时间响应特性。有关详细信息,请参阅极点配置。
在这里插入图片描述
从图中,假设有以下状态空间形式的线性动态系统:
x ˙ = A x + B u y = C x + D u \begin{array}{c}{{\dot{x}=A x+B u}}\\ {{}}\\ {{y=C x+D u}}\end{array} x˙=Ax+Buy=Cx+Du
对于期望的自共轭闭环极点位置的给定向量 pplace 计算增益矩阵 K,使得状态反馈 u = –Kx 将极点配置在位置 p。换句话说,A - BK 的特征值将匹配 p 的条目(取决于排序)。

K = place(A,B,p) 通过计算状态反馈增益矩阵 K,配置所需的闭环极点 p。被控对象的所有输入都假定为控制输入。
place也适用于多输入系统,并且基于 [1] 中的算法。此算法使用额外的自由度来求一个解,以使闭环极点对于 AB 中的扰动具有最小的敏感度。

[K,prec] = place(A,B,p) 还返回 prec,用于精确估计 A - BK 的特征值与指定位置 p 的匹配程度(prec 可计算实际闭环极点中的精确小数位数)。如果某个非零闭环极点偏离期望位置超出 10%,则系统会发出警告。

输入参数

A — 状态矩阵 状态矩阵,指定为一个 Nx×Nx 矩阵,其中 Nx 是状态数。

B — 输入-状态矩阵 输入-状态矩阵,指定为 Nx×Nu 矩阵,其中 Nx 是状态数,Nu 是输入数。

p — 闭环极点位置 闭环极点位置,指定为长度为 Nx 的向量,其中 Nx 是状态数。换句话说,p 的长度必须与 A 的行大小匹配。闭环极点位置会直接影响上升时间、稳定时间和瞬变振荡等时间响应特性。有关选择极点的示例,请参阅二阶系统的极点配置设计。

如果 p 中某些极点的重数大于 rank(B),则 place 返回错误。

在高阶问题中,选择某些极点位置会导致增益非常大。大增益会带来敏感性问题,这表明在使用极点配置方法时要小心。有关数值测试的结果,请参阅 [2]。

输出参数

K — 最优增益 最优增益或全状态反馈增益,以 Ny×Nx 矩阵形式返回,其中 Nx 是状态数,Ny 是输出数。place 计算增益矩阵
K,使得状态反馈 u = -Kx 将闭环极点配置于位置 p。

当矩阵 A 和 B 为实数时,则 K 为:

  • 实数,前提是 p 具有自共轭性。

  • 复数,前提是极点位置不具有复共轭性。

prec — 指定极点的准确性估计值 指定极点的准确性估计值,以标量形式返回。prec 对比 p
中指定的极点位置来计算实际闭环极点的精确小数位数。

1.3.2 示例

1.3.2.1 二阶系统的极点配置设计

对于此示例,假设有一个具有以下状态空间矩阵的简单二阶系统:
A = [ − 1 − 2 1 0 ] B = [ 2 0 ] C = [ 0 1 ] D = 0 A={\left[\begin{array}{l l}{-1}&{-2}\\ {1}&{0}\end{array}\right]}\quad B={\left[\begin{array}{l l}2\\ {0}\end{array}\right]}\quad C=\left[0\quad1\right]\quad D=0 A=[1120]B=[20]C=[01]D=0
输入矩阵并创建状态空间系统。

A = [-1,-2;1,0];
B = [2;0];
C = [0,1];
D = 0;
sys = ss(A,B,C,D);

计算开环极点并检查开环系统的阶跃响应。

Pol  = pole(sys)
Pol = 2×1 complex-0.5000 + 1.3229i-0.5000 - 1.3229i
figure(1)
step(sys)
hold on;

在这里插入图片描述

请注意,生成的系统为欠阻尼系统。因此,选择复平面左半部分的实极点来消除振荡。

p = [-1,-2];

使用极点配置求增益矩阵 K,并检查 syscl 的闭环极点。

K = place(A,B,p);
Acl = A-B*K;
syscl = ss(Acl,B,C,D);
Pcl = pole(syscl)
Pcl = 2×1-2.0000-1.0000

现在,比较闭环系统的阶跃响应。

figure(1)
step(syscl)

在这里插入图片描述

因此,使用极点配置获得的闭环系统是稳定的,具有良好的稳态响应。

请注意,选择远离虚轴的极点可以缩短响应时间,但会减小系统的稳态增益。例如,假设上述系统使用极点 [-2,-3]。

p = [-2, -3];
K2 = place(A,B,p);
syscl2 = ss(A-B*K2,B,C,D);
figure(1);
step(syscl2);

在这里插入图片描述

stepinfo(syscl)
ans = struct with fields:RiseTime: 2.5901TransientTime: 4.6002SettlingTime: 4.6002SettlingMin: 0.9023SettlingMax: 0.9992Overshoot: 0Undershoot: 0Peak: 0.9992PeakTime: 7.7827
stepinfo(syscl2)
ans = struct with fields:RiseTime: 1.4130TransientTime: 2.4766SettlingTime: 2.4766SettlingMin: 0.3003SettlingMax: 0.3331Overshoot: 0Undershoot: 0Peak: 0.3331PeakTime: 4.1216
1.3.2.2 极点配置观测器设计

对于此示例,假设有以下 SISO 状态空间模型:

A = [ − 1 − 0.75 1 0 ] B = [ 1 0 ] C = [ 1 1 ] D = 0 A={\left[\begin{array}{l l}{-1}&{-0.75}\\ {1}&{0}\end{array}\right]}\quad B={\left[\begin{array}{l l}1\\ {0}\end{array}\right]}\quad C=\left[1\quad1\right]\quad D=0 A=[110.750]B=[10]C=[11]D=0

创建由以下状态空间矩阵定义的 SISO 状态空间模型:

创建由以下状态空间矩阵定义的 SISO 状态空间模型:

现在,向被控对象提供一个脉冲,并使用 lsim 对其进行仿真。绘制输出。

N = 250;
t = linspace(0,25,N);
u = [ones(N/2,1); zeros(N/2,1)];
x0 = [1;2];
[y,t,x] = lsim(Plant,u,t,x0);figure
plot(t,y);
title('Output');

在这里插入图片描述

对于此示例,假设所有状态变量都无法测量,只有输出才能测量。因此,使用这种测量方法设计一个观测器。使用 place 来计算估计器增益,方法是转置 A 矩阵,并用 C’ 代换矩阵 B。对于此实例,将所需的极点位置选为 -2 和 -3。

L = place(A',C',[-2,-3])';

使用估计器增益,依据对偶/分离原理代换状态矩阵,并创建估计的状态空间模型。

At = A-L*C;
Bt = [B,L];
Ct = [C;eye(2)];
sysObserver = ss(At,Bt,Ct,0);

使用相同的脉冲输入对系统的时间响应进行仿真。

[observerOutput,t] = lsim(sysObserver,[u,y],t);
yHat = observerOutput(:,1);
xHat = observerOutput(:,[2 3]);

比较实际系统和估计系统的响应。

figure;
plot(t,x);
hold on;
plot(t,xHat,'--');
legend('x_1','x_2','xHat_1','xHat_2')
title('Comparison - Actual vs. Estimated');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium安装WebDriver最新Chrome驱动(含116/117/118/119)

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

如何在虚拟机的Ubuntu22.04中设置静态IP地址

为了让Linux系统的IP地址在重新启动电脑之后IP地址不进行变更,所以将其IP地址设置为静态IP地址。 查看虚拟机中虚拟网络编辑器获取当前的子网IP端 修改文件/etc/netplan/00-installer-config.yaml文件,打开你会看到以下内容 # This is the network conf…

面向开发者的Android

Developerhttps://developer.android.google.cn/?hlzh-cn SDK 平台工具版本说明https://developer.android.google.cn/studio/releases/platform-tools?hlzh-cn#revisions Android SDK Platform-Tools 是 Android SDK 的一个组件。它包含与 Android 平台进行交互的工具…

【Redis】springboot整合redis(模拟短信注册)

要保证redis的服务器处于打开状态 上一篇: 基于session的模拟短信注册 https://blog.csdn.net/m0_67930426/article/details/134420531 整个流程是,前端点击获取验证码这个按钮,后端拿到这个请求,通过RandomUtil 工具类的方法生…

Labview中for循环“无法终止”问题?即使添加了条线接线端,达到终止条件后,仍在持续运行?

关键: 搞清楚“运行”和“连续运行”两种运行模式的区别。 出现题目中所述问题,大概率是因为代码运行在“连续运行“模式下。 可以通过添加 探针 的方式,加深理解!

拼图游游戏代码

一.创建新项目 二.插入图片 三.游戏的主界面 1.代码 package com.itheima.ui;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Random;import javax.swing…

pnpm : 无法加载文件 E:\Soft\PromSoft\nodejs\node_global\pnpm.ps1,

pnpm : 无法加载文件 E:\Soft\PromSoft\nodejs\node_global\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中 的 about_Execution_Policies。 所在位置 行:1 字符: 1pnpm -v~~~~ CategoryI…

Django 入门学习总结6 - 测试

1、介绍自动化测试 测试的主要工作是检查代码的运行情况。测试有全覆盖和部分覆盖。 自动测试表示测试工作由系统自动完成。 在大型系统中,有许多组件有很复杂的交互。一个小的变化可能会带来意想不到的后果 测试能发现问题,并以此解决问题。 测试驱…

FPGA实现平衡小车(文末开源!!)

FPGA平衡小车 一. 硬件介绍 底板资源: TB6612电机驱动芯片 * 2 MPU6050陀螺仪 WS2812 RGB彩色灯 * 4 红外接收头 ESP-01S WIFI 核心板 微相 A7_Lite Artix-7 FPGA开发板 电机采用的是平衡小车之家的MG310(GMR编码器)电机。底板上有两个TB6612芯片,可以驱动…

C++设计模式——单例模式

单例设计模式 应用场景特点设计模式分类懒汉设计模式饿汉设计模式使用编写的测试代码运行结果 应用场景 当多个类都需要调用某一个类的一些公共接口,同时不想创建多个该类的对象,可以考虑将该类封装为一个单例模式。 特点 单例模式的特点:…

UnitTest框架

目标: 1.掌握UnitTest框架的基本使用方法 2.掌握断言的使用方法 3.掌握如何实现参数化 4.掌握测试报告的生成 1.定义 (1)框架(framework):为解决一类事情的功能集合。(需要按照框架的规定(套路) 去书写代码&…

echarts 横向柱状图示例

该示例有如下几个特点: ①实现tooltip自定义样式(echarts 实现tooltip提示框样式自定义-CSDN博客) ②实现数据过多时滚动展示(echarts 数据过多时展示滚动条-CSDN博客) ③柱状图首尾展示文字,文字内容嵌入图…

Android Studio常见问题

Run一直是上次的apk 内存占用太大,导致闪退

R语言——taxize(第二部分)

taxize(第二部分) 3. taxize 文档中译3.10. classification(根据类群ID检索分类阶元层级)示例1:传递单个ID值示例2:传递多个ID值示例3:传递单个名称示例4:传递多个名称示例5&#xf…

SpringCloud -Token传递之Feign

目录 方法一 RequestHeader 方法二 使用Feign的Interceptor 步骤一 实现RequestInterceptor接口 步骤二:配置Feign 通常微服务对于用户认证信息解析有两种方案 在 gateway 就解析用户的 token 然后路由的时候把 userId 等相关信息添加到 header 中传递下去。在…

YOLOv5 配置C2模块构造新模型

🍨 本文为[🔗365天深度学习训练营学习记录博客 🍦 参考文章:365天深度学习训练营 🍖 原作者:[K同学啊] 🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb4…

【Linux】Linux下的基础IO

❤️前言 大家好!今天这篇博客和大家聊一聊关于Linux下的基础IO。 正文 在阅读本篇博客之前,请大家先回顾一下C语言文件操作的一些方法,这里可以看看我之前记录的一些内容: 【C语言】C语言成长之路之文件操作_MO_lion的博客-CSD…

【PyQt小知识 - 3】: QComboBox下拉框内容的设置和更新、默认值的设置、值和下标的获取

QComboBox 内容的设置和更新 from PyQt5.QtWidgets import * import sysapp QApplication(sys.argv)mainwindow QMainWindow() mainwindow.resize(200, 200) # 设置下拉框 comboBox QComboBox(mainwindow) comboBox.addItems([上, 中, 下])button QPushButton(更新, main…

Colab跑项目

这里写目录标题 Colab文件目录路径显示更改colab当前工作文件夹Colab挂载谷歌云盘colab使用命令(从这开始看,前面no zuo no die)最紧要,首先,修改笔记本设置使用启用gpu![在这里插入图片描述](https://img-blog.csdnimg.cn/591a6c…