这个例子展示了如何将系统的非线性行为近似为一组相互关联的LTI模型。
这个例子描述了在一系列操作条件下机身俯仰轴动力学的线性近似。所得到的线性系统阵列用于创建动力学的线性参数变化(LPV)表示。LPV模型作为非线性俯仰动力学的近似。
在许多情况下,必须用更简单的线性系统来近似系统的非线性动力学。一个单一的线性系统提供了一个合理的行为模型,其行为限制在非线性系统的工作点周围的一个小的邻域内。当您必须在一定的操作条件范围内近似非线性行为需求时,您可以使用一组通过适当的插值规则相互连接的线性模型。这样的模型称为LPV模型。
为了产生LPV模型,在操作点的网格上修整非线性模型并线性化。为此,操作空间由少数参数化调度参数.这些参数通常是非线性系统的输入,状态和输出变量的子集。在LPV模型的创建中的重要考虑是识别调度参数集和选择一个参数值的选择,用于线性化模型。
为了说明这种方法,该示例近似于机身的音高动态。
考虑机身的俯仰轴动力学的三维自由度模型。国家是地球坐标,身体坐标,俯仰角,以及音高速率.下图总结了惯性和车身框架之间的关系,飞行路径角,入射角,以及俯仰角度.
机身动力学是非线性的,气动力和力矩依赖于速度和发病率.这scdairframeTRIM
模型scdairframeTRIM
描述这些动态。
open_system (“scdairframeTRIM”)
使用速度和发病角度作为调度参数;也就是说,在网格上修剪机身模型和价值观。这些值是五个输出中的两个scdairframeTRIM
模型。
假设发病率在-20到20度之间变化,速度在700到1400米/秒之间变化。使用15×12网格线性间隔对调度。
na = 15;%alpha值数nV = 12;V值的百分比alphaRange = linspace (20, -20 nA) *π/ 180;VRange = linspace(700、1400、nV);(α,V) = ndgrid (alphaRange VRange);
对于每个飞行条件,以修剪(零正常加速度和俯仰时刻)线性化空气框架动力学。这样做需要计算电梯偏转和球场结果是稳定的和.
对于每种飞行条件,您:
使用该方法指定修剪条件operspec
函数。
计算的配平值和使用findop
函数。
线性化机身动力学的结果工作点使用线性化
函数。
身体坐标,美国是众所周知的善于削减开支的国家。因此,您必须为它们提供适当的值,您可以显式地指定这些值。但是,在本例中,让模型根据每个值派生这些已知值对。对于每个飞行条件,更新模型中的值并创建操作点规范。在所有180种飞行条件下重复以上步骤。
清晰的人事处报告为ct = 1:na * nv alpha_ini = alpha(ct);% (rad)发生率V_INI = V(CT);%的速度(米/秒)指定纵倾条件opspec (ct) = operspec (“scdairframeTRIM”);% Xe、Ze:已知,不稳定。opspec(ct).states(1).known = [1; 1];opspec(ct).states(1).steadystate = [0; 0];% u,w:已知,w稳定opspec (ct) .States(3)。已知= [1 1];opspec (ct) .States(3)。SteadyState = [0 1];% θ:已知,不稳定opspec (ct) .States(2)。= 1;opspec (ct) .States(2)。稳态= 0;% q:未知,稳定opspec (ct) .States(4)。知道= 0;opspec (ct) .States(4)。稳态= 1;结束OPSPEC = REPAPE(OPSPEC,[NA NV]);
修剪所有操作点规范的模型。
opt = findopoptions(“DisplayReport”那“关闭”那“OptimizerType”那“lsqnonlin”);opt.OptimizationOptions.Algorithm =“trust-region-reflective”;[op,报告] =查找(“scdairframeTRIM”、opspec选择);
这人事处
数组包含找到的操作点findop
这将用于线性化。这报告
数组包含每个点的输入、输出和状态值的记录。
要对模型进行线性化,首先指定线性化的输入和输出点。
io = [linio('scdairframetrim / delta',1,'在');%detta.linio (“scdairframeTRIM /机身模型”,1,“出”);%αlinio (“scdairframeTRIM /机身模型”2,“出”);% Vlinio (“scdairframeTRIM /机身模型”3,“出”);%问linio (“scdairframeTRIM /机身模型”4“出”);%az.linio (“scdairframeTRIM /机身模型”,5,“出”));%伽玛
线性化每个修剪条件的模型。将线性化偏移信息存储在信息
结构体。
linOpt = linearizeOptions ('storeoffsets',真的);[g,〜,info] =线性化(“scdairframeTRIM”,op,io,linopt);g =重塑(g,[na nv]);G.U =“δ”;G.y = {“α”那“V”那'Q'那“阿兹”那'伽玛'};g.samplinggrid = struct(“α”,α,“V”,v);
G
是一个15乘12的线性化植物模型阵列在180飞行条件下吗.植物动态基本上变化在飞行信封上,包括调度位置,其中局部动态不稳定。
bodemag (G(3:5,::,:))标题(“机身动力学的变化”)
LPV系统块有助于模拟线性参数变化系统。该块需要状态空间系统数组G
您使用批次线性化生成。您还使用来自的输入,输出,状态和状态衍生物偏移来增加此信息信息
结构体。
提取偏移信息。
offsets = getoffsetsforlpv(信息);xoffset = offsets.x;Yoffset =偏移.Y;uoffset = offsets.u;dxoffset = offsets.dx;
这scdairframelpv.
模型,其中包含使用线性系统阵列的LPV System块G
以及相应的偏移量。
这个模型使用一个输入信号基于一个期望的轨迹的机身。这个信号你
对应的时间向量T.
保存在scdairframelpvsimdata.mat.mat.
文件,由模型加载。指定模拟的初始条件。
alpha_ini = 0;v_ini = 700;x0 = [0;700;0;0];
打开并模拟模型。
open_system (“scdairframeLPV”)sim(“scdairframeLPV”)
仿真结果表明,LPV系统能较好地仿真机体的响应。对于这个模拟,您指定了调度空间的精细网格,导致大量(180)线性模型。大数组会增加实现成本。然而,LPV表示的优势在于,您可以根据以下条件调整调度网格,从而调整数组中线性系统的数量:
预期轨迹跨越的调度子空间
应用中所需的准确性水平
前者有助于减少调度变量的范围。后者有助于在调度空间中选择样本的最佳分辨率(间距)。
绘制在以前的仿真中的调度变量的实际轨迹对网格调度空间背景的背景。这使用它们的相应范围记录输出(包含在比较响应块内scdairframelpv.
).
稳定=假(Na,NV);为ct = 1:nA*nV Stable(ct) = isstable(G(:,:,ct));结束alpha_trajectory = Alpha_V_Data.signals (1) . values (: 1);V_trajectory = Alpha_V_Data.signals (2) . values (: 1);情节(α(稳定)* 180 /π,V(稳定),“g”。那......α(〜稳定)* 180 / pi,v(〜稳定),“k”。那......alpha_trajectory V_trajectory,'r。')标题('调度变量的轨迹')包含('\α') ylabel (“V”) 传奇('稳定的地方'那的不稳定的位置那“实际轨迹”)
仿真过程中轨迹用红色表示。它遍历调度空间的稳定区域和不稳定区域。
假设您希望在目标硬件上实现此模型,使其与前面模拟使用的模型类似,同时使用最少的内存。仿真结果表明,弹道主要停留在890 ~ 1200m /s的速度范围和-15 ~ 12度的入射角范围。找到调度空间中与该操作区域对应的索引。
if (alphaRange <=12*pi/180), if (alphaRange <=12*pi/180), color0000ff;I2 = find(VRange>=890 & VRange<=1200);
为了减少飞行条件的数量,还可以增加采样点之间的间隔。例如,抽取每三个样本的指数尺寸和每一秒的样品沿维度。
I1 = I1(1:2:结束);I2 = I2(1:3:结束);
提取LTI系统数组的子集。
Gr = G (:,:, I1、I2);大小(Gr)
5x2状态空间模型数组。每个模型都有5个输出,1个输入和4个状态。
新的采样网格,Gr
它的尺寸更经济,为5乘2。模拟简化后的模型,并在再现原始行为时检查其逼真度。
配置LPV System块以使用简化的模型和相应的偏移量。
lpvblk =“scdairframeLPV / LPV系统”;set_param(lpvblk,......“sys”那“Gr”那......“uOffset”那“uOffset (:,:, I1、I2) '那......'yoffset'那“yOffset (:,:, I1、I2) '那......“xOffset”那“xOffset (:,:, I1、I2) '那......'dxoffset'那'dxoffset(:,:,i1,i2)')sim(“scdairframeLPV”)
在原始模型及其LPV代理的响应之间没有显着减少。
在需要更快模拟的情况下,LPV模型可以作为原始系统的代理。LPV模型所使用的线性系统也可以通过系统识别技术获得(需要额外注意保持整个阵列的状态一致性)。LPV模型可以为初始化Simulink®Design Optimization™问题和执行快速硬件在环模拟提供很好的代理金宝app。
bdclose (“scdairframeLPV”) bdclose (“scdairframeTRIM”)