在Simulink中,n-D Lookup Table模块是一个用于多维插值和查表运算的功能模块。它的核心作用是:根据输入信号的数值,在用户预先定义的n维数据表中找到对应的输出值,并可通过插值计算获得非格点上的结果。
主要功能
实现一维、二维、三维及更高维度(n ≥ 1)的查表和插值运算
支持在输入范围内进行插值,在范围外可选择外推或饱和
可配置不同的数据类型、查找方法和插值算法,适应控制系统和建模需求
典型应用场景
标定曲线或标定面:例如,ECU模型中,输入为发动机转速和节气门开度,二维查表输出燃油喷射量
复杂非线性函数近似:当函数关系难以直接建模时,用离散数据点表格+插值方式实现
模块参数-表和断点
表维数
可设为大于等于1的正整数
数据设定
表和断点
在模块参数中定义表数据和断点数据,可以直接在对话框中输入,也可以定义为从外部端口输入
查找表对象
在工作空间或数据字典中定义Simulink.LookupTable类型的查表对象,通过变量名将n-D Lookup Table模块绑定到该查表对象
断点设置
显式值:直接定义断点向量,例如[1 2 3 4 5]
等间距:通过定义起始断点值和间距值,由Simulink自动构建断点
模块参数-算法
内插方法
均一(Flat)
直接取当前分段区间左侧断点(或输入值刚好匹配到的断点)的表格值作为输出。
换句话说,输入只决定选中哪一个区间,而输出就是该区间的常数值,因此Flat插值的结果是阶梯状的。
最邻近值(Nearest)
当输入落在两个断点之间时,直接选择距离输入值最近的那个断点的表格值作为输出。
和Flat插值不同的是,Flat总是取区间的左侧断点,而Nearest会比较左右侧断点距离,取最近的。
线性点-斜率(Linear point-slope)
分段折线插值,用点—斜率公式计算,是最常用的查表插值方式。
线性拉格朗日(Linear Lagrange)
它和前面的线性点-斜率插值方法在数学意义上是等价的,只是推导公式不同。
point-slope强调“使用斜率公式”,而Lagrange强调“用插值基函数组合”。
三次样条(Cubic spline)
每一段区间用一个三次多项式连接数据点,并要求在相邻区间的连接点处,函数值、一阶导数、二阶导数都连续。
相比线性插值,它能生成更加平滑的曲线,但可能产生过冲(overshoot)的问题,即曲线在两个数据点之间弯曲过头,导致超出范围。
Akima样条(Akima spline)
一种改进的三次样条插值,兼顾平滑性和稳定性,但计算量更大。
选定后,外插方法也将自动切换为Akima样条。
外插方法
剪裁(Clip)
当输入超过断点区间范围时,固定取边界值。
线性(Linear)
内插方法选择线性时,继承内插线性插值方法。
内插方法选择样条时,取边界点的“切线斜率”,用线性方程外插。
三次样条(Cubic spline)
要求内插方法也选择三次样条才能生效。
索引搜索方法
等间距点(spaced points)
利用等间距的特性,直接通过数学公式计算输入值对应的索引位置,而无需逐点查找。
查找速度最快,接近常数时间,内存开销较小。
断点必须严格等间隔,否则无法使用该方法。
线性搜索(Linear search)
逐个扫描断点区间,直到找到输入值所在的区间,如果输入值连续变化且变化不大,可以利用“使用上一个索引结果开始索引搜索”的优化。
对于大规模断点表效率低下,时间复杂度 O(n)。
二分搜索(Binary search)
默认方法,采用二分查找法,将搜索区间一分为二,逐步缩小范围,直到找到对应区间。
时间复杂度O(log n),在断点较多时明显优于线性搜索,对小规模表未必比线性搜索快,因为二分查找有额外逻辑开销。