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 为小车上的水平力。
[ x ˙ x ¨ ϕ ˙ ϕ ¨ ] = [ 0 1 0 0 0 − 0.1 3 0 0 0 0 1 0 − 0.5 30 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 2 0 5 ] u \begin{equation} \begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}= \begin{bmatrix} 0 &1& 0& 0 \\ 0&-0.1 &3 &0 \\ 0&0&0&1 \\ 0&-0.5&30&0 \end{bmatrix} \begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+ \begin{bmatrix}0 \\ 2 \\ 0 \\ 5 \end{bmatrix}u \end{equation} x˙x¨ϕ˙ϕ¨ = 000010.100.5030300010 xx˙ϕϕ˙ + 0205 u
y = [ 1 0 0 0 0 0 1 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 0 ] u \begin{equation} \bm{y}=\begin{bmatrix}1&0&0&0 \\ 0&0&1&0 \end{bmatrix}\begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+\begin{bmatrix}0 \\ 0 \end{bmatrix}u \end{equation} y=[10000100] xx˙ϕϕ˙ +[00]u
首先,将状态空间模型 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 { lim ⁡ τ → ∞ 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 均为具有协方差的高斯白噪声:

E ( [ w ν ] ⋅ [ w ′ ν ′ ] ) = Q W V E\left(\begin{bmatrix} w \\ \nu \end{bmatrix}\cdot[w^{\prime}\;\;\;\nu^{\prime}]\right)={\cal Q}{\cal W}V E([wν][wν])=QWV

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

在这里插入图片描述

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

J = E { lim ⁡ τ → ∞ 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]Qxu ux +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= 001100010 B= 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+1∣n]=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.rhkb.cn/news/194622.html

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

相关文章

矿区安全检查VR模拟仿真培训系统更全面、生动有效

矿山企业岗位基数大,生产过程中会持续有新入矿的施工人员及不定期接待的参观人员,下井安全须知培训需求量大。传统实景拍摄的视频剪辑表达方式有限,拍摄机位受限,难以生动表达安全须知的内容,且井下现场拍摄光线不理想…

Python爬虫教程:从入门到实战

更多Python学习内容:ipengtao.com 大家好,我是涛哥,今天为大家分享 Python爬虫教程:从入门到实战,文章3800字,阅读大约15分钟,大家enjoy~~ 网络上的信息浩如烟海,而爬虫(…

【Proteus仿真】【51单片机】锂电池管理系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用LCD1602显示模块、DS18B20温度传感器、PCF8691 ADC模块、按键、LED蜂鸣器模块等。 主要功能: 系统运行后,LCD1602显示温度…

2023年09月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下选项中,不是tkinter变量类型的是?( ) A: IntVar() B: StringVar() C: DoubleVar() D: FloatVar() 答案:D tkinter 无 FloatVar()变量类型。 第2题 关于tkinter,以下说…

基于操作系统讨论Java线程与进程、浅谈Go的线程与管程

文章目录 操作系统中的进程进程概念进程的状态 Java中的进程Java进程的概念Java进程的特性Java进程的状态Java进程与操作系统进程的通信 操作系统的进程和Java进程的区别联系操作系统进程Java 进程区别和联系 操作系统中的线程动机优点多核编程 Java中的线程定义:特…

vscode 快速打印console.log

第一步 输入这些 {// Print Selected Variabl 为自定义快捷键中需要使用的name,可以自行修改"Print Selected Variable": {"body": ["\nconsole.log("," %c $CLIPBOARD: ,"," background-color: #3756d4; padding:…

freeRTOS--任务通知

一、什么是任务通知 使用任务通知可以替换二值信号量、计数信号量、事件标志组,可以替代长度为1的队列,任务通知速度更快、使用的RAM更少。 任务通知值的更新方式: 发消息给任务,如果有通知未读,不覆盖通知值。发消…

疑似openAI的BUG

Chat gpt 4.0 『最新数据2023年』 Chat gpt 3.5 智商不在线『最近数据2021年9月左右』 发现了疑似openAI的一个bug 通过固定连接访问就可以用chatgpt4.0 4.0版本的费用为20美金一个月 https://chat.openai.com/?modelgpt-4-gizmo

【深度学习】吴恩达课程笔记(五)——超参数调试、batch norm、Softmax 回归

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【吴恩达课程笔记专栏】 【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础 【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络 【深度学习】吴恩达课程笔记(三)——参数VS超参数、深度…

基于JAVA SpringBoot和HTML美食网站博客程序设计

摘要 美食网站是一个提供各种美食信息和食谱的网站,旨在帮助用户发现、学习和分享美食。旨在探讨美食网站在现代社会中的重要性和影响。随着互联网的普及,越来越多的人开始使用美食网站来获取各种美食信息和食谱。这些网站不仅提供了方便快捷的搜索功能&…

SpringBoot配置数据库密码加密的方法

由于系统安全的考虑,配置文件中不能出现明文密码的问题,本文就给大家详细介绍下springboot配置数据库密码加密的方法,下面话不多说了,来一起看看详细的介绍吧,需要的朋友可以参考下 1.导入依赖 <!--数据库密码加密--> <dependency><groupId>com.github.uli…

17. Series.dt.month-提取日期数据中的月份信息

【目录】 文章目录 17. Series.dt.month-提取日期数据中的月份信息1. 知识回顾-创建一个Series对象2. 知识回顾-pd.to_datetime()将数据转换为pandas中的日期时间格式3. 实例化类相关知识4. Series.dt.month是什么&#xff1f;5. 如何使用Series.dt.month&#xff1f;6. Series…

iApp祁天社区UI成品源码 功能齐全的社区应用

iApp祁天社区UI成品源码是一个非常实用的资源&#xff0c;提供了完整的源代码&#xff0c;可以帮助您快速搭建一个功能齐全的社区应用。 这个源码具有丰富的UI设计&#xff0c;经过精心调整和优化&#xff0c;确保用户体验流畅而舒适。它不仅具备基本的社区功能&#xff0c;如…

轮播图(多个一起轮播)

效果图 class MainActivity : Activity(), Runnable {private lateinit var viewPager: ViewPagerprivate lateinit var bannerAdapter: BannerAdapterprivate val images ArrayList<Int>() // 存储图片资源的列表private val handler Handler() // 用于定时发送消息…

基于 selenium 实现网站图片采集

写在前面 有小伙伴选题&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…

基于SSM的学生疫情信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Ubuntu 22.04 LTS ffmpeg mp4 gif 添加图片水印

ffmpeg编译安装6.0.1&#xff0c;参考 Ubuntu 20.04 LTS ffmpeg gif mp4 互转 许编译安装ffmpeg &#xff1b;解决gif转mp4转换后无法播放问题-CSDN博客 准备一个logo MP4添加水印 ffmpeg -i 2.mp4 -vf "movielogo.png[watermark];[in][watermark]overlayx10:y10[out]&…

大功率电源芯片WD5030L

电源管理芯片作为现代电子设备中最关键的元件之一&#xff0c;直接影响着设备的性能和效率。而大功率电源芯片作为电源管理芯片中的一种&#xff0c;其性能和应用领域更加广泛。本文将介绍一款具有宽VIN输入范围、高效率和多种优良性能的大功率电源芯片WD5030L&#xff0c;并探…

通付盾Web3专题 | KYT/AML:Web3合规展业的必要条件

与传统证券一样&#xff0c;基于区块链技术发展出来的虚拟资产交易所经历了快速发展而缺乏有效监管的行业早期。除了科技光环加持的各种区块链项目方、造富神话之外&#xff0c;交易所遭到黑客攻击、内部偷窃作恶、甚至经营主体异常而致使投资人血本无归的案例亦令人触目惊心。…

STM32 I2C详解

STM32 I2C详解 I2C简介 I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线 两根通信线&#xff1a; SCL&#xff08;Serial Clock&#xff09;串行时钟线&#xff0c;使用同步的时序&#xff0c;降低对硬件的依赖&#xff0c;同时同步的时序稳定…