黑盒建模
选择黑盒模型的结构和阶数
当您的主要关注点是拟合数据,而不考虑模型的具体数学结构时,黑盒建模就很有用。该工具箱提供了多种线性和非线性黑盒模型结构,这些结构长期以来一直被广泛用于表示动态系统。这些模型结构的复杂程度因您需要多大程度的灵活性来处理系统中的动态和噪声而有所不同。您可以选择其中一种结构,并计算其参数以拟合测得的响应数据。
黑盒建模通常是一个试错过程,其中需要对各种结构的参数进行估计,并比较结果。通常,您会从简单的线性模型结构开始,然后逐步过渡到更复杂的结构。您选择某种模型结构,可能是因为您对这种结构更为熟悉,也可能是因为您有特定的应用需求。
最简单的线性黑盒结构所需的配置选项最少:
其中一些结构的估计还采用了非迭代估计算法,这进一步降低了计算复杂度。
您可以使用模型阶数 来配置模型结构。模型阶数的定义因您选择的模型类型而异。例如,如果选择传递函数表示法,则模型阶数与零极点的个数有关。对于状态空间表示,模型阶数与状态的数量相对应。在某些情况下,例如对于线性 ARX 模型和状态空间模型结构,您可以根据数据估计模型阶数。
如果简单的模型结构无法生成理想的模型,您可以通过以下方式选择更复杂的模型结构:
为相同的线性模型结构指定更高的模型阶数。模型阶数越高,模型在捕捉复杂现象方面的灵活性就越大。然而,过高的阶数可能会降低模型的可靠性。
通过引入 He(t) 项,对噪声进行显式建模,如下式所示。
y(t) = Gu(t) + He(t)
在此,H 将加性扰动建模为由白噪声源 e(t) 驱动的线性系统的输出。
使用一种能显式建模加性扰动的模型结构,有助于提高所测组件 G 的精度。此外,当您的主要目的是利用该模型预测未来的响应值时,这种模型结构非常有用。
使用不同的线性模型结构。
采用非线性模型结构。
与同阶的线性模型相比,非线性模型在描述复杂现象方面具有更大的灵活性。请参阅Nonlinear Model Structures。
最终,您应选择能够最好地拟合测量数据的最简单模型结构。有关详细信息,请参阅Estimating Linear Models Using Quick Start。
无论您选择何种估计结构,都可以根据应用需求对模型进行简化。例如,您可以将测得的动力学 (G) 与噪声动力学 (H) 分离出来,从而得到一个更简单的模型,该模型仅描述 y 与 u 之间的关系。您还可以围绕一个工作点对非线性模型进行线性化处理。
何时应使用非线性模型结构?
线性模型通常足以准确描述系统动力学,而且在大多数情况下,最佳做法是首先尝试拟合线性模型。如果线性模型的输出无法充分再现测量结果,您可能需要使用非线性模型。
可以通过绘制系统对输入的响应曲线,来评估是否需要使用非线性模型结构。如果您发现响应会因输入电平或输入符号的不同而有所差异,请尝试使用非线性模型。例如,如果系统对输入阶跃上升的输出响应比对阶跃下降的响应更快,那么可能需要使用非线性模型。
在为已知为非线性的系统构建非线性模型之前,请尝试对输入和输出变量进行变换,使变换后变量之间的关系呈线性。例如,考虑这样一个系统:其输入为浸入式加热器的电流和电压,输出为被加热液体的温度。输出取决于通过加热器输入的功率,该功率等于电流与电压的乘积。对于这个双输入单输出系统,与其构建一个非线性模型,不如通过将电流与电压相乘来创建一个新的输入变量,并构建一个描述功率与温度之间关系的线性模型。
如果无法确定能使输入变量与输出变量之间建立线性关系的变量变换,可以使用非线性结构,例如非线性 ARX 模型或哈默斯坦-维纳模型。有关支持的非线性模型结构列表及其适用场景,请参阅Nonlinear Model Structures。
黑盒估计示例
您可以使用系统辨识 App 或相关命令,估计各种结构的线性与非线性模型。在大多数情况下,您只需选择一种模型结构,然后通过一条命令即可估计模型参数。
考虑Dynamic Systems and Models中描述的质量-弹簧-阻尼系统。如果您不知道该系统的运动方程,可以采用黑盒建模方法来构建一个模型。例如,您可以通过指定这些模型结构的阶数来估计传递函数或状态空间模型。
传递函数是多项式的比:
对于质-弹簧-阻尼系统,该传递函数为
这是一个没有零点、有 2 个极点的系统。
在离散时间下,质量-弹簧-阻尼系统的传递函数可以表示为
其中,模型阶数分别对应分子和分母的系数个数(nb = 1 且 nf = 2),而输入-输出延迟等于 z–1 中的最低阶指数 (nk = 1)。
在连续时间下,您可以使用 tfest 命令构建一个线性传递函数模型。
m = tfest(data,2,0)
这里,data 是您测得的输入-输出数据,以 iddata 对象的形式表示,而模型阶数由极点数 (2) 和零点数 (0) 组成。
同样,您可以使用 oe 命令构建离散时间模型的输出误差结构。
m = oe(data,[1 2 1])
模型的阶数为 [nb nf nk] = [1 2 1]。通常情况下,您无法提前知道模型的阶数。尝试几种模型阶数值,直到找到能生成满意模型的阶数值为止。
此外,您还可以选择状态空间结构来表示质-弹-阻系统,并使用 ssest 或 n4sid 命令估计模型参数。
m = ssest(data,2)
这里,第二个参量 2 表示阶数,即模型中的状态数。
在黑盒建模中,您不需要该系统的运动方程 - 只需对模型阶数进行估算即可。