Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

LPV System

对线性参数变化 (LPV) 系统进行仿真

描述

在 Simulink® 中表示和仿真线性参数变化 (LPV) 系统。该模块还支持代码生成。

线性参数变化 (LPV) 系统是一种线性状态空间模型,其动态特性作为某些称为调度参数的时变参数的函数而变化。在 MATLAB® 中,LPV 模型表示为使用参数相关系数的状态空间形式。

在数学上,LPV 系统表示为:

dx(t)=A(p)x(t)+B(p)u(t)y(t)=C(p)x(t)+D(p)u(t)x(0)=xinit(1)

其中

  • u(t) 是输入

  • y(t) 是输出

  • x(t) 是具有初始值 x0 的模型状态

  • dx(t) 是连续时间系统的状态导数向量 x˙,是离散时间系统的状态更新向量 x(t+ΔT)。ΔT 是采样时间。

  • A(p)B(p)C(p)D(p) 是由调度参数向量 p 参数化的状态空间矩阵。

  • 参数 p = p(t) 是模型的输入和状态的可测量函数。它们可以是标量,也可以是由几个参数组成的向量。这组调度参数定义调度空间,在该空间上定义 LPV 模型。

小心

避免使 C(p) 和 D(p) 依赖系统输出 y。否则,得到的状态空间方程 y = C(y)x + D(y)u 会创建一个代数环,因为计算输出值 y 需要知道输出值。这种代数环容易带来不稳定性和发散性。在这种情况下,请尝试用时间 t、模块输入 u 和状态输出 x 来表示 C 和 D。

出于类似的原因,请避免根据 dx 输出来调度 A(p) 和 B(p)。请注意,当 y 是状态和输入的固定组合时(即当 y = Cx + Du 时,其中 C 和 D 是常量矩阵),A 和 B 依赖于 y 是安全的。

该模块实现 LPV 系统的基于网格的表示。您需要为调度参数选择网格值。在每个值 p = p* 处,将对应的线性系统指定为状态空间(ssidss (System Identification Toolbox))模型对象。使用生成的状态空间模型数组来配置 LPV System 模块。

该模块接受具有工作点信息的状态空间模型数组。有关调度变量的信息是从 LTI 数组的 SamplingGrid 属性中提取的。调度变量定义 LPV 模型的网格。它们是标量值,可以是时间、输入和状态的函数,也可以是常量。它们用于捕获操作空间中的局部动态特性。软件对这些变量的值进行插值。该模块对此数组采用数据内插和外插方法来进行仿真。

LPV 系统表示可以扩展到允许 dxxuy 变量中的偏移量。这种形式称为 LPV 模型的仿射形式。在数学上,LPV 系统的表示如下:

dx(t)=dx0(p)+A(p)(x(t)x0(p))+B(p)(u(t)u0(p))y(t)=y0(p)+C(p)(x(t)x0(p))+D(p)(u(t)u0(p))x(0)=xinit(2)

dx¯(p),  x¯(p),  u¯(p),  y¯(p)dx(t)x(t)u(t)y(t) 的值在给定参数值 p = p(t) 下的偏移量。

为了获得线性系统数组的这种表示,您需要在一批工作点上线性化 Simulink 模型(请参阅批量线性化 (Simulink Control Design))。偏移量对应于在其上线性化模型的工作点。

当调用 linearize (Simulink Control Design)getIOTransfer (Simulink Control Design) 等函数时,您可以通过返回额外的线性化信息来获得偏移量。然后,您可以使用 getOffsetsForLPV (Simulink Control Design) 提取偏移量。有关示例,请参阅LPV Approximation of Boost Converter Model (Simulink Control Design)

LPV System 模块存在以下限制:

  • 内部延迟无法外插为小于它在状态空间模型数组中的最小值。

  • 当使用线性模型的不规则网格来定义 LPV 系统时,仅使用最近邻点插值方案。这可能会降低仿真结果的准确度。推荐使用规则网格。要了解有关规则和不规则网格的更多信息,请参阅Regular vs. Irregular Grids

  • LPV System block

数据类型支持

单精度和双精度数据。您必须将输入信号或模型属性的任何其他数据类型转换为这些数据类型。

参数

LPV System 的“模块参数”对话框包含五个选项卡,用于指定系统数据、调度算法和输出端口。下表总结了这些模块参数。

任务参数
指定状态空间模型数组和初始状态

LPV 模型选项卡中:

指定工作点偏移量

LPV 模型选项卡中:

指定状态导数或更新变量中的偏移量

LPV 模型选项卡中:

指定固定的模型矩阵及其标称值以覆盖模型数据中的条目。
在某些情况下,您可能希望用固定值 A* 替换参数相关矩阵(如 A(p))来进行仿真。例如,A* 可以表示调度范围内的平均值。

固定条目数选项卡中:

指定内插和外插选项

调度选项卡中:

指定模块的附加输出

输出选项卡中:

指定代码生成设置

代码生成选项卡中:

状态空间数组

状态空间(ssidss (System Identification Toolbox))模型数组。数组中的所有模型必须使用相同的状态定义。使用状态空间对象的 SamplingGrid 属性来指定模型的调度参数。有关 SamplingGrid 属性的详细信息,请参阅 ssidss 模型参考页。

当模块位于具有同步状态控制(请参阅 State Control (HDL Coder) 模块)的模型中时,必须指定由离散时间模型组成的数组。

初始状态

与本地模型结合使用以开始仿真的初始条件,指定为以下值之一:

  • 0(默认值

  • 长度等于模型状态数的双精度向量

输入偏移量

输入 u(t) 中的偏移量,指定为以下值之一:

  • 0(默认值)- 在没有输入偏移量时使用 (u¯(p)=0  p)。

  • 长度等于输入数目的双精度向量 - 当输入偏移量在调度空间中相同时使用。

  • 大小为 [nu 1 sysArraySize] 的双精度数组 - 当偏移量存在并且它们在调度空间中变化时使用。此处,nu = 输入数目,sysArraySize = 状态空间数组 sys 的大小。使用 sysArraySize = getArraySize(sys) 来确定数组大小。

您可以在线性化过程中获得偏移量,并将其转换为 LPV System 模块支持的格式。有关详细信息,请参阅Approximate Nonlinear Behavior Using Array of LTI Systems (Simulink Control Design)getOffsetsForLPV (Simulink Control Design)

输出偏移量

输出 y(t) 中的偏移量,指定为以下项之一:

  • 0(默认值)- 在没有输出偏移量 y¯(p)=0  p 时使用。

  • 长度等于输出数目的双精度向量。当输出偏移量在调度空间中相同时使用。

  • 大小为 [ny 1 sysArraySize] 的双精度数组。当偏移量存在并且它们在调度空间中变化时使用。此处,ny = 输出数目,sysArraySize = 状态空间数组的大小。使用 sysArraySize = getArraySize(sys) 来确定数组大小。

您可以在线性化过程中获得偏移量,并将其转换为 LPV System 模块支持的格式。有关详细信息,请参阅Approximate Nonlinear Behavior Using Array of LTI Systems (Simulink Control Design)getOffsetsForLPV (Simulink Control Design)

状态偏移量

状态 x(t) 中的偏移量,指定为以下项之一:

  • 0(默认值)- 在没有状态偏移量 x¯(p)=0  p 时使用。

  • 长度等于状态数目的双精度向量。当状态偏移量在调度空间中相同时使用。

  • 大小为 [nx 1 sysArraySize] 的双精度数组,其中 nx = 状态数目,sysArraySize = 状态空间数组的大小。当偏移量存在并且它们在调度空间中变化时使用。此处,nx = 状态数目,sysArraySize = 状态空间数组的数组大小。使用 sysArraySize = getArraySize(sys) 来确定数组大小。

您可以在线性化过程中获得偏移量,并将其转换为 LPV System 模块支持的格式。有关详细信息,请参阅Approximate Nonlinear Behavior Using Array of LTI Systems (Simulink Control Design)getOffsetsForLPV (Simulink Control Design)

状态导数/更新偏移量

状态导数或更新变量 dx(t) 中的偏移量,指定为以下项之一:

  • 如果您在均衡条件下通过线性化获得了线性系统数组,请选择假设均衡工况选项。对于连续时间系统,此选项对应于偏移量 dx¯(p)=0;对于离散时间系统,此选项对应于偏移量 dx¯(p)=x¯(p)。默认情况下,此选项处于选中状态。

  • 如果线性系统包含至少一个在非均衡条件下获得的系统,请清除假设均衡工况选项。在偏移量值字段中指定以下值之一:

    • 如果 dx 偏移量值在调度空间中相同,则指定为长度等于状态数的双精度向量。

    • 如果 dx 偏移量存在并且它们在调度空间中变化,则指定为大小为 [nx 1 sysArraySize] 的双精度数组,其中 nx = 状态数目,sysArraySize = 状态空间数组的大小。

您可以在线性化过程中获得偏移量,并将其转换为 LPV System 模块支持的格式。有关详细信息,请参阅Approximate Nonlinear Behavior Using Array of LTI Systems (Simulink Control Design)getOffsetsForLPV (Simulink Control Design)

标称模型

提供固定系数值的状态空间模型,指定为以下项之一:

  • 使用状态空间数组中的第一个模型默认值)- 状态空间数组中的第一个模型用于表示 LPV 模型。在以下示例中,状态空间数组由对象 sys 指定,固定系数取自模型 sys(:,:,1)

    % Specify a 4-by-5 array of state-space models.
    sys = rss(4,2,3,4,5);
    a = 1:4; 
    b = 10:10:50;
    [av,bv] = ndgrid(a,b);
    % Use "alpha" and "beta" variables as scheduling parameters.
    sys.SamplingGrid = struct('alpha',av,'beta',bv);  

    固定系数取自模型 sysFixed = sys(:,:,1),该模型对应于 [alpha=1, beta=10]。如果 A 矩阵的 (2,1) 条目强制设为固定,则它在仿真期间使用的值为 sysFixed.A(2,1)

  • 自定义值 - 为固定条目指定不同的状态空间模型。在状态空间模型字段中为固定模型指定变量。固定模型必须使用与 LPV 模型中的状态空间数组相同的状态基。

固定系数索引

指定状态空间矩阵和延迟向量的哪些系数是固定的。

指定以下选项之一:

  • 标量布尔值(truefalse),如果矩阵的所有条目都以相同的方式处理。

    对于状态空间矩阵和延迟向量,默认值为 false,这意味着它们被视为自由的。

  • 大小与对应矩阵的大小兼容的逻辑矩阵:

    状态空间矩阵

    固定条目矩阵的大小

    矩阵

    nx×nx

    B 矩阵

    nx×nu

    C 矩阵

    ny×nx

    D 矩阵

    ny×nu

    输入延迟

    nu×1

    输出延迟

    ny×1

    内部延迟

    ni×1

    其中,nu = 输入数目,ny = 输出数目,nx = 状态数目,ni = 内部延迟向量的长度。

  • 用于指定固定条目位置的数值索引。有关如何为矩阵元素生成对应于给定下标 (i,j) 的数值索引的详细信息,请参阅 sub2ind 参考页。

内插方法

内插方法。定义对于远离其网格位置的调度参数值,必须如何计算状态空间数据。

指定以下选项之一:

  • 均一 - 选择最接近但不大于当前点的网格点处的状态空间数据。当前点是在当前时间的调度参数值。

  • 最近邻点 - 选择调度空间中最近邻网格点处的状态空间数据。

  • 线性 - 通过对调度空间中最近邻的 2d 个邻点进行线性内插来获得状态空间数据,其中 d = 调度参数数目。

对于调度参数值的规则网格,默认内插方案为线性。对于不规则网格,无论选择哪个选项,系统都始终使用最近邻点内插方案。要了解规则和不规则网格的更多信息,请参阅Regular vs. Irregular Grids

线性方法提供的准确度最高,但计算时间较长。均一最近邻点方法适用于具有模式切换动态特性的模型。

外插方法

外插方法。定义如何为所提供状态空间数组所处范围(在 SamplingGrid 属性指定)之外的调度参数值计算状态空间数据。

指定以下选项之一:

  • 裁剪默认值)- 禁用外插并返回与最接近当前点的最后一个可用调度网格点对应的数据。

  • 线性 - 根据当前值是小于第一个网格点值还是大于最后一个网格点值,分别在每个调度参数的第一对值或最后一对值之间拟合一条线。此方法返回该线上对应于当前值的点。线性外插要求内插方案也是线性的。

索引搜索方法

调度空间中当前调度参数值的位置由预查找算法确定。选择线性搜索二分搜索。每种搜索方法在不同情况下均有各自的速度优势。有关此参数的详细信息,请参阅 Prelookup (Simulink) 模块参考页。

使用上一个索引结果开始索引搜索

如果您希望模块使用在上一个时间步中找到的索引开始搜索,请选中此复选框。有关此参数的详细信息,请参阅 Prelookup (Simulink) 模块参考页。

输出状态

x 端口添加到模块中以输出状态值。默认情况下,此选项处于选中状态。

输出状态导数(连续时间)或更新(离散时间)

dx 端口添加到模块中,以输出状态导数值或更新这些值。默认情况下,此选项处于选中状态。

输出插值后的状态空间数据

ss 端口添加到模块中,以将状态空间数据作为结构体输出。默认情况下,此选项处于选中状态。

生成的结构体的字段包括:

  • 状态空间矩阵 ABCD

  • 延迟 InputDelayOutputDelayInternalDelayInternalDelay 字段仅在模型有内部延迟时可用。

输出插值后的偏移量

offset 端口添加到模块中,以输出 LPV 模型偏移量 (u¯(p), y¯(p), x¯(p),dx¯(p))

该结构体的字段包括:

  • 连续时间中的 InputOffsetOutputOffsetStateOffsetStateDerivativeOffset

  • 离散时间中的 InputOffsetOutputOffsetStateOffsetStateUpdateOffset

模块数据类型(仅限离散时间情形)

支持的数据类型。此选项仅用于离散时间状态空间模型。指定双精度单精度

初始缓冲区大小(用于延迟)

为针对包含延迟的模型而存储的输入点数所分配的初始内存。如果输入点的数量超出初始缓冲区大小,该模块将分配额外的内存。默认大小为 1024。

当您在加速模式下运行模型或编译模型时,请确保初始缓冲区大小足以处理模型中最大的预期延迟。

使用固定缓冲区大小

指定是否使用固定缓冲区大小来保存先前时间步的延迟输入和输出数据。对于包含输入或输出延迟的连续时间 LPV 系统,请使用此选项。如果缓冲区已满,新数据将替换缓冲区中已有的数据。软件使用线性外插来估计不在缓冲区中的输出值。

示例

配置调度参数输入端口

假设有一个包含 2 个输入、3 个输出、4 个状态的 LPV 模型。使用输入 u(2) 和状态 x(1) 作为调度参数。如下图所示配置 Simulink 模型。

仿真线性参数变化系统

假设有一个线性质量-弹簧-阻尼系统,其质量随外部加载命令函数而变化。控制方程是:

m(u)y¨+cy˙+k(y)y=F(t)

其中 m(u) 是取决于外部命令 u 的质量,c 是阻尼比,k 是弹簧的刚度,F(t) 是强制输入。y(t) 是质量在给定时间 t 的位置。如果 u 是固定值,则系统是线性系统,表示为:

A=[01kmcm],  B=[01m],  C=[10]x˙=Ax+Bu,  y=Cx

其中 x=[yy˙] 是状态向量,m 是给定 u 值的质量的值。

在此示例中,您要在 1 到 10 伏的输入值范围内研究模型行为。对于 u 的每个值,测量质量并计算系统的线性表示。假设质量与输入的关系是:m(u)=10u+0.1u2。如果 u 值的范围为 1:10,将产生以下线性系统数组。

% Specify damping coefficient.
c = 5;   
% Specify stiffness.
k = 300; 
% Specify load command.
u = 1:10;
% Specify mass.
m = 10*u + 0.1*u.^2;
% Compute linear system at a given mass value.
for i = 1:length(u)
   A = [0 1; -k/m(i), -c/m(i)];
   B = [0; 1/m(i)];
   C = [1 0];
   sys(:,:,i) = ss(A,B,C,0); 
end

变量 u 是调度输入。将以下信息添加到模型中。

sys.SamplingGrid = struct('LoadCommand',u);

配置 LPV System 模块:

  • 状态空间数组字段中键入 sys

  • 将输入端口 par 连接到一维源信号,该信号生成加载命令的值。如果源提供 1 到 10 之间的值,则使用内插来计算给定时间实例的线性模型。否则,请使用外插。

端口

端口名称

端口类型

(输入/输出)

描述
u 输入

前面公式 2 中所描述的输入信号 u(t)。在多输入情况下,此端口接受输入维度的信号。

par输入

为定义调度空间的变量(“采样网格”变量)提供信号。调度变量可以是时间、输入和状态的函数,也可以是常量。根据需要,可以通过使用 LPV 模块的时钟输入(对于时间)、输入信号 (u) 和输出信号(xdx/dty)准备调度信号来实现所需的依存关系。

小心

避免使 C(p) 和 D(p) 依赖系统输出 y。否则,得到的状态空间方程 y = C(y)x + D(y)u 会创建一个代数环,因为计算输出值 y 需要知道输出值。这种代数环容易带来不稳定性和发散性。在这种情况下,请尝试用时间 t、模块输入 u 和状态输出 x 来表示 C 和 D。

出于类似的原因,请避免根据 dx 输出来调度 A(p) 和 B(p)。请注意,当 y 是状态和输入的固定组合时(即当 y = Cx + Du 时,其中 C 和 D 是常量矩阵),A 和 B 依赖于 y 是安全的。

y输出

模型输出

x 输出

模型状态的值

dx输出

状态导数的值。状态导数有时用于定义调度参数。但请避免根据 dx 输出来调度 A 和 B。

ss输出

仿真主时间步的局部状态空间模型

offset输出LPV 模型偏移量

扩展功能

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2014b 中推出