许多系统内部状态无法直接观测,因此无法进行状态反馈。我们可以尝试设计一个单独的系统,称为 **观测器** 或 **估计器**,尝试复制工厂状态向量的值,但以可观察的方式用于状态反馈。一些文献称这些组件为“观测器”,尽管它们并不严格直接观察状态。相反,这些设备使用数学关系来尝试确定状态的估计值。因此,我们将使用术语“估计器”,尽管这些术语可以互换使用。
存在多种观测器结构,包括卡尔曼、滑模、高增益、Tau、扩展、三次和线性观测器。为了说明观测器设计的原理,考虑一个线性观测器,用于估计线性系统的状态。请注意,我们知道工厂的 *A*、*B*、*C* 和 *D* 矩阵,因此我们可以在估计器中使用这些精确的值。我们知道系统的输入,我们知道系统的输出,我们拥有系统的系统矩阵。我们不一定知道的是工厂的初始条件。估计器试图做的是使估计状态向量快速地接近实际状态向量,然后镜像实际状态向量。我们使用以下系统来构建观测器


*L* 是我们定义的矩阵,它将帮助将误差驱动为零,因此将估计值驱动为状态的实际值。我们通过取工厂输出和估计器输出之间的差来做到这一点。
为了使估计器状态接近工厂状态,我们需要定义一个新的附加状态向量,称为 *状态误差信号*
. 我们将此误差信号定义为

及其导数

我们可以证明误差信号将满足以下关系



我们知道,如果矩阵 *(A - LC)* 的所有特征值的实部都为负,那么
当
.
这
表示,当时间趋于无穷大时,工厂状态
与观测器估计状态
之间的差异会逐渐消失。
我们有两个方程
![{\displaystyle e_{x}[k+1]=(A-LC)e_{x}[k]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b8389bf180c839fb302a5267b3b8b739acb65df1)
![{\displaystyle x[k+1]=(A-BK)x[k]+BK\cdot e_{x}[k]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/05dd25a083705c254c9d36961bb36537ac8dc5a4)
我们可以将它们组合成一个方程组来表示整个系统
![{\displaystyle {\begin{bmatrix}e_{x}[k+1]\\x[k+1]\end{bmatrix}}={\begin{bmatrix}A-LC&0\\+BK&A-BK\end{bmatrix}}{\begin{bmatrix}e_{x}[k]\\x[k]\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0944e171d660d396ee867f5ec22eb2b88d0c9cd7)
我们可以使用分离原理轻松找到特征方程。我们将这个数字系统的Z变换,并取系数矩阵的行列式来找到特征方程。整个系统的特征方程是:(记住众所周知的
)

请注意,大矩阵的行列式可以分解成两个较小行列式的乘积。第一个行列式显然是估计器的特征方程,第二个行列式显然是工厂的特征方程。还要注意,我们可以独立地设计L 和K矩阵。
值得一提的是,如果系统的阶数为n,则此特征方程(全阶状态观测器加上原始系统)将变为2n阶,因此根的个数是原始系统的两倍。
您应该选择L矩阵,以便尽快将误差信号驱动为零。估计器的瞬态响应,即误差大约达到零所需的时间,应该明显短于被控对象的瞬态响应。根据经验法则,估计器的极点应该至少比被控对象的极点快 2-6 倍。我们从经典控制的研究中知道,为了使极点更快,我们需要
- S域
- 将它们移开虚轴(在左半平面!)。
- Z域
- 将它们移近原点。
请注意,在这些情况下,估计器的更快极点对系统的影响较小,我们说被控对象的极点支配了系统的响应。可以使用Ackerman 公式的对偶来计算估计器增益L,用于选择状态反馈控制器的增益K

其中Q是被控对象的观测性矩阵,αe是您估计器的特征方程。
这可以使用以下命令在 MATLAB 中计算
可以使用此
MATLAB 命令执行此操作
acker
L=acker(A', C', K)';
其中 L 是估计器增益,K 是估计器的极点。
一旦我们有了L和K矩阵,我们就可以将它们组合成一个用于状态反馈和零输入情况的单个复合系统方程
![{\displaystyle {\begin{bmatrix}x[n+1]\\{\bar {x}}[n+1]\end{bmatrix}}={\begin{bmatrix}A&-BK\\LH&A-BK-LH\end{bmatrix}}{\begin{bmatrix}x[n]\\{\bar {x}}[n]\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b87389d7375abd932c034231338144254782f988)
![{\displaystyle u[n]=-K{\bar {x}}[n]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2ad57098c2013b35ae8c0832f3d60ea42d9c9106)
对该离散系统进行 Z 变换并求解输入输出关系,得到
![{\displaystyle {\frac {U(z)}{Y(z)}}=-K[zI-A+BK+LC]^{-1}L}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bb21c2df7ac6adb9ac9f40a7991019e54710f735)
请注意,这不是传递函数,因为输入在分数的顶部,输出在底部。为了从该方程获得传递函数,我们需要对两边取逆。然后,该逆的行列式将是复合系统的特征方程。
请注意,此方程使我们能够推导出产生特定输出的系统输入。这在以后将很有用。
在许多系统中,至少一个状态变量可以被直接测量,或者可以从输出轻松计算出来。当C矩阵在每个系统输出中只有一个非零项时,就会发生这种情况。
如果一个或多个状态变量可以被直接测量或观察,则该系统只需要一个降阶观测器,即一个阶数低于被控对象的观测器。降阶观测器可以估计不可测量的状态,并且可以使用直接反馈路径来获取可测量的状态值。