1-D Lookup Table
逼近一维函数

库:
Simulink /
Lookup Tables
HDL Coder /
Lookup Tables
描述
支持的模块运算
1-D、2-D 和 n-D Lookup Table 模块计算一个函数的 N 变量采样表示
其中函数 F 可以是经验函数。此模块通过查找或插入您使用模块参数定义的值表,将输入映射到输出值。该模块支持均一(常量)、线性(线性点-斜率)、拉格朗日(线性拉格朗日)、最近、三次样条和 Akima 样条插值方法。您可以将这些方法应用于从 1 维到 30 维的表。
在下面的模块中,第一个输入标识第一个维度(行)断点,第二个输入标识第二个维度(列)断点,依此类推。
有关各种模块方向的端口顺序的描述,请参阅标识旋转或翻转模块上的端口位置。
设置数学和数据类型 > 使用针对行优先数组布局优化的算法配置参数后,2-D 和 n-D Lookup Table 模块行为会从列优先更改为行优先。对于这些模块,列优先算法和行优先算法可能在输出计算的顺序上有所不同,从而可能导致数值略有不同。此功能需要 Simulink® Coder™ 或 Embedded Coder® 许可证。有关行优先支持的详细信息,请参阅Code Generation of Matrices and Arrays (Simulink Coder)。
指定断点和表数据
以下模块参数定义断点和表数据。
模块参数 | 用途 |
---|---|
表维数 | 指定查找表的维数。 |
断点 | 指定与查找表的每个维度对应的断点向量。 |
表数据 | 定义关联的一组输出值。 |
提示
等间距断点可以使生成的代码无分割。有关详细信息,请参阅 fixpt_evenspace_cleanup
和Identify questionable fixed-point operations (Embedded Coder)。
模块如何生成输出
n-D、1-D 和 2-D Lookup Table 模块通过基于输入值查找或估计表值来生成输出。
模块输入 | n-D Lookup Table 模块行为 |
---|---|
与断点向量中的索引值匹配 | 输出位于行、列和更高维度断点的交点处的表值 |
与断点向量中的索引值不匹配,但在范围内 | 使用您选择的内插方法内插适当的表值 |
与断点向量中的索引值不匹配,且不在范围内 | 使用您选择的外插方法外插输出值 |
执行等效操作的其他模块
您可以将 Interpolation Using Prelookup 模块与 Prelookup 模块一起使用,以执行等效于一个 n-D Lookup Table 模块的操作。这种模块组合可以提供更大的灵活性,从而为线性插值实现更高效的仿真性能。
当查找操作是不需要插值的数组访问时,请使用 Direct Lookup Table (n-D) 模块。例如,如果您有一个整数值 k
,而您需要表的第 k
个元素 y = table(k)
,则不需要插值。
扩展示例
端口
输入
u1 端口的实数值输入,通过查找您定义的值表或对其进行插值来映射到输出值。
示例: 0:10
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
用运行时可调的信号指定输出值表。
在仿真期间,矩阵大小必须与表维数参数定义的维度匹配。但是,在编辑模块图的过程中,您可以输入空矩阵(指定为 []
)或者未定义的工作区变量。利用此方法,您可以推迟为表数据指定正确设置维度的矩阵,并继续编辑模块图。
依存关系
要启用此端口,请进行如下设置:
将数据设定设置为表和断点。
将表数据设置为输入端口。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
根据断点设定参数的值,使用运行时可调的信号显式指定断点数据。
如果您将断点设定设置为显式值,请在每个断点行中输入与表数据的每个维度对应的断点向量。对于每个维度,将断点指定为值严格单调递增的 1×n 或 n×1 向量。
注意
要以等间距设定格式指定断点,请将断点设定设置为等间距,并使用断点的第一个点和间距参数。
依存关系
要启用此端口,请进行如下设置:
将数据设定设置为表和断点。
将断点设定设置为显式值。
将断点 1 设置为输入端口。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
输出
通过查找或基于输入值估算表值生成的输出。
如果模块输入... | n-D Lookup Table 模块... |
---|---|
与断点向量中的索引值匹配 | 输出位于行、列和更高维度断点的交点处的表值 |
与断点向量中的索引值不匹配,但在范围内 | 使用您选择的内插方法内插适当的表值 |
与断点向量中的索引值不匹配,且不在范围内 | 使用您选择的外插方法外插输出值 |
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
参数
表和断点
输入查找表的维数。此参数确定:
表的自变量数量以及模块输入的数量
要指定的断点向量数目
要指定... | 执行此操作... |
---|---|
1、2、3 或 4 | 从下拉列表中选择值。 |
更高的表维数 | 直接在字段中输入正整数。 此模块支持的最大表维数为 30。 |
例如,大小为 M×N×... 的表表示维度 1 的大小是 M,维度 2 的大小是 N,依此类推。M 必须匹配第一个断点长度,N 必须匹配第二个断点长度,依此类推。
编程用法
模块参数:NumberOfTableDimensions |
类型:字符向量 |
值:'1' | '2' | '3' | '4' | ... | 30 |
默认值:'1' |
从列表中,选择:
表和断点 - 指定表数据和断点。选中此选项将启用下列参数:
表数据
断点设定
断点 1
编辑表和断点
要使用输入端口指定表和断点,请查看源参数。
查找表对象 - 使用现有查找表 (
Simulink.LookupTable
) 对象。选中此选项将启用名称字段和编辑表和断点按钮。
编程用法
模块参数:DataSpecification |
类型:字符向量 |
值:'Table and breakpoints' | 'Lookup table object' |
默认值:'Table and breakpoints' |
要将此参数从 'Table and breakpoints'
设置为 'Lookup table object'
,请使用相同的 set_param
调用来设置 LookupTableObject
参数。例如:
set_param('myModel/myLookupBlock',... 'DataSpecification','Lookup table object',... 'LookupTableObject','myLUTObject')
输入查找表 (Simulink.LookupTable
) 对象的名称。如果 Simulink.LookupTable
对象不存在,请点击操作按钮 并选择创建。新查找表对象的对应参数会自动用模块信息填充。
依存关系
要启用此参数,请将数据设定设置为查找表对象。
编程用法
模块参数:LookupTableObject |
类型:字符向量 |
值:Simulink.LookupTable 对象的名称 |
默认值:'' |
指定是以显式断点形式还是参数形式输入数据,以生成等间距断点。
要显式指定断点数据,请将此参数设置为显式值,并在断点参数旁边的文本框中输入断点数据。
要指定参数以生成等间距断点,请将此参数设置为等间距,并为断点数据的每个维度的第一个点和间距参数输入值。模块将根据表数据计算要生成的点数。
依存关系
要启用此参数,请将数据设定设置为表和断点。
编程用法
模块参数:BreakpointsSpecification |
类型:字符向量 |
值:'Explicit values' | 'Even spacing' |
默认值:'Explicit values' |
选中此复选框,以使仿真中和生成的代码中具有可调表大小。利用此选项,您可以更改生成的代码中的查找表与断点数据的大小和值,无需重新生成或重新编译代码。您只能减小查找表和断点数据的大小。
依存关系
如果您将插值方法设置为三次样条,支持可调大小将不可用。
编程用法
模块参数:SupportTunableSize |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
表和断点数据的源,指定为:
对话框 - 在值参数中指定表或断点数据。
输入端口 - 通过关联的输入端口指定表或断点数据。
您最多可以创建三个断点数据输入端口。对于断点 4 到 30,您只能通过对应的断点参数指定断点数据。
使用输入端口指定表或断点数据可能会因为运行时检查对仿真的模块性能产生负面影响。
依存关系
要启用此参数,请将数据设定设置为表和断点。
要启用关联的值,请将此参数设置为对话框。
要启用相关联的输入端口,请将此参数设置为输入端口。
将此参数设置为输入端口将禁用值字段,并隐藏数据类型选项卡上的对应参数。
对于任一参数,将此参数设置为输入端口都会禁用编辑表和断点按钮。
编程用法
模块参数:TableSource | BreakpointsForDimension1Source | BreakpointsForDimension2Source | BreakpointsForDimension3Source
|
类型:字符向量 |
值:Dialog | Input port |
默认值:'Dialog' |
将每个数组的最大大小指定为以下值之一:
-1
- 数组中的所有元素实整数标量 - 每个数组的最大元素数
可调大小必须小于或等于数组的大小。
依存关系
要启用此参数,请进行如下设置:
将数据设定设置为表和断点。
选择支持可调大小参数。
编程用法
模块参数:N1 到 N31 |
类型:字符向量 |
值:-1 | 实整数标量 |
默认值:-1 |
在相关联的值字段中输入输出值的表。
在仿真期间,矩阵大小必须与表维数参数定义的维度匹配。但是,在编辑模块图的过程中,您可以输入空矩阵(指定为 []
)或者未定义的工作区变量。利用此方法,您可以推迟为表数据指定正确设置维度的矩阵,并继续编辑模块图。
依存关系
要启用此参数,请进行如下设置:
将数据设定设置为表和断点。
将表数据:源设置为对话框。
编程用法
模块参数:Table |
类型:字符向量 |
值:表值的向量 |
默认值:'tanh([-5:5])' |
显式指定断点数据或者指定为等间距断点,具体取决于断点设定参数。
如果您将断点设定设置为显式值,请在每个断点行中输入与表数据的每个维度对应的断点向量。对于每个维度,将断点指定为值严格单调递增的 1×n 或 n×1 向量。
如果您将断点设定设置为等间距,请在每个断点行中输入参数第一个点和间距,以便在各自的维度生成等间距断点。您的表数据决定等间距点数。
依存关系
要启用此参数,请进行如下设置:
将数据设定设置为表和断点。
将表数据:源设置为对话框。
当断点设定参数设置为等间距时,您只能通过对话框指定断点数据。
编程用法
模块参数:BreakpointsForDimension1 |
类型:字符向量 |
值:单调递增值的 1×n 或 n×1 向量 |
默认值:'[-5:5]' |
将等间距断点数据中的第一个点指定为实数值有限标量。当断点设定设置为等间距时,此参数可用。
依存关系
要启用此参数,请将数据设定设置为表和断点,并将断点设定设置为等间距。
编程用法
模块参数:BreakpointsForDimension1FirstPoint |
类型:字符向量 |
值:实数值有限标量 |
默认值:'1' |
指定等间距断点数据中各点之间的距离。
依存关系
要启用此参数,请将数据设定设置为表和断点,并将断点设定设置为等间距。
编程用法
模块参数:BreakpointsForDimension1Spacing |
类型:字符向量 |
值:正实数值有限标量 |
默认值:'1' |
点击此按钮以打开查找表编辑器。有关详细信息,请参阅 。
对于查找表对象,点击此按钮可以编辑该对象并为该对象保存新值。
算法
查找方法
当输入位于两个断点值之间时,模块将根据相邻断点内插输出值。有关插值方法的详细信息,请参阅内插方法。
依存关系
如果您选择三次样条,则模块仅支持标量信号。其他插值方法支持非标量信号。
如果选择 Akima 样条,外插方法只能是 Akima 样条。
当设置为修正 Akima 插值方法时,此模块不支持:
行优先数组布局和针对行优先数组布局优化的算法
定标的双精度和定点数据类型
Simulink.LookupTable
对象选中配置参数代码生成 > 接口 > 支持非有限数复选框时的代码生成
当设置为修正 Akima 插值方法时,如果以下条件成立,此模块的运行速度会更慢:
基于代码生成的仿真目标,如加速模式、快速加速模式、受保护模型等的仿真目标。
为大型断点和数据表生成的代码。例如,表大小为 629×1601。
编程用法
模块参数:InterpMethod |
类型:字符向量 |
值:'Linear point-slope' | 'Flat' | 'Nearest' | 'Linear Lagrange' | 'Cubic spline' | 'Akima spline' |
默认值:'Linear point-slope' |
选择裁剪、线性或三次样条。有关详细信息,请参阅外插方法。
如果外插方法是线性,则基于所选择的线性插值方法计算外插值。例如,如果插值方法是线性拉格朗日,则外插方法继承线性拉格朗日方程以计算外插值。
依存关系
要为外插方法选择三次样条,还必须为内插方法选择三次样条。
要为外插方法选择 Akima 样条,您还必须为内插方法选择 Akima 样条。
编程用法
模块参数:ExtrapMethod |
类型:字符向量 |
值:'Linear' | 'Clip' | 'Cubic spline' | 'Akima spline' |
默认值:'Linear' |
选择等间距点、线性搜索或二分搜索。每一种搜索方法在不同的情况下均有各自的速度优势:
对于等间距断点向量(例如,10、20、30 等),您可以选择等间距点来计算表索引,以获得最佳速度。
此算法仅使用断点集的前两个断点来确定其余点的偏移量和间距。
注意
当使用
Simulink.LookupTable
对象指定表数据且引用的Simulink.LookupTable
对象的断点设定参数设置为等间距时,请将索引搜索方法设置为等间距点。对于非等间距的断点向量,请遵循以下规范:
如果输入信号在时间步之间的变化不大,选择线性搜索与使用上一个索引结果开始索引搜索可以获得最佳性能。
如果输入信号在每个时间步中跳过的表间隔超过一个或两个,选择二分搜索可以获得最佳性能。
对于严重依赖查找表的模型,选择次优索引搜索方法可能会导致性能下降。
注意
在以下情况下,生成的代码只存储第一个断点、间距和断点数量:
断点数据不可调。
索引搜索方法是等间距点。
编程用法
模块参数:IndexSearchMethod |
类型:字符向量 |
值:'Binary search' | 'Evenly spaced points' | 'Linear search' |
默认值:'Binary search' |
选中此复选框可尽可能启用高效舍入到最接近的实现。启用此选项会将舍入模式设置为 Nearest
,并调整小数长度和中间数据类型以在准确度和效率之间取得平衡。如果不能得到高效实现,则舍入模式、小数长度和中间数据类型保持不变。
依存关系
要启用此参数,请进行如下设置:
将表维数设置为 2。
将内插方法设置为线性点-斜率。
将外插方法设置为裁剪。
编程用法
模块参数:ApplyAccurateEfficientRounding |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
如果您希望模块使用在上一个时间步中找到的索引开始搜索,请选中此复选框。对于相对于间隔大小而言变化缓慢的输入,启用此选项可以提高性能。否则,线性搜索和二分搜索方法可能需要更长的时间,尤其是对于大型断点向量来说。
依存关系
要启用此参数,请将索引搜索方法设置为线性搜索或二分搜索。
编程用法
模块参数:BeginIndexSearchUsingPreviousIndexResult |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
指定当输入超出范围时,是否生成警告或错误消息。选项包括:
无 - 不产生任何响应。
警告 - 显示警告并继续进行仿真。
错误 - 终止仿真并显示错误。
编程用法
模块参数:DiagnosticForOutOfRangeInput |
类型:字符向量 |
值:'None' | 'Warning' | 'Error' |
默认值:'None' |
尽可能使用此复选框为线性插值查找启用全精度定点算法查找。对于硬件效率高的定点舍入模式,此算法通常可以实现更高的精度。
依存关系
要启用此参数,请进行如下设置:
将表维数设置为 1。
将内插方法设置为线性点-斜率。
将外插方法设置为裁剪。
编程用法
模块参数:ApplyFullPrecisionForLinearInterpolation |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
使用此复选框,指定模块用来定位断点向量的最后一个元素及其对应表值的索引约定。当输入等于或大于断点数据的最后一个元素时,此复选框才有意义。由于舍入原因,选中和清除此复选框可能会导致仿真与代码生成之间最后一个断点的结果不同。
复选框 | 模块使用的索引 | 区间比 |
---|---|---|
选中 | 表和断点选项卡上的断点数据的最后一个元素 | 0 |
清除 | 表和断点选项卡上的断点数据的倒数第二个元素 | 1 |
假设输入 u 在断点向量 bp 的范围内,区间比 f(在 0≦f<1 范围内)按如下所示进行计算。
假设断点向量为 [1 4 5]
,输入 u 为 5.5
。如果您选中此复选框,索引则是最后一个元素 (5
) 的索引,区间比为 0。如果您清除此复选框,索引则是倒数第二个元素 (4
) 的索引,区间比为 1。
依存关系
要启用此参数,请进行如下设置:
将内插方法设置为线性。
将外插方法设置为裁剪。
编程用法
模块参数:UseLastTableValue |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
输入设置
选中此复选框,从而对 N 维表只使用一个输入端口,此端口需要宽度为 n
个元素的信号。此选项可以有效减少包含许多查找表的模块图中的杂乱线条。
注意
如果您选中此复选框,模块上将出现一个带有 u
标签的输入端口。
编程用法
模块参数:UseOneInputPortForAllInputData |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
代码生成
指定是否包含代码以检查超出范围的输入值。
复选框 | 结果 | 何时使用 |
---|---|---|
| 生成的代码中未包含用来检查超出范围的断点输入的条件语句。 当输入超出范围时,生成的代码可能会发生未定义的行为。 | 提高代码效率 |
| 生成的代码包含用来检查超出范围的输入的条件语句。 | 适用于安全性至关重要的应用领域 |
如果您的输入没有超出范围,则可以选中删除生成代码中防止超范围索引的代码复选框以提高代码效率。默认情况下,此复选框处于清除状态。对于安全性至关重要的应用,不要选中此复选框。要选中删除生成代码中防止超范围索引的代码复选框,请先检查模型输入是否在范围内。例如:
清除删除生成代码中防止超范围索引的代码复选框。
将输入超出范围的诊断参数设置为
Error
。在普通模式下进行模型仿真。
如果发生超出范围错误,请将它们更正到范围之内,然后再次运行仿真。
当仿真不再生成超出范围的输入错误时,选中删除生成代码中防止超范围索引的代码复选框。
注意
如果选中了删除生成代码中防止超范围索引的代码复选框而输入超出范围,生成的代码将发生未定义的行为。
根据您的具体应用,您可以运行以下模型顾问检查,以验证此复选框的使用情形:
按产品 > Embedded Coder > 标识哪些查找表模块会生成检查超范围值的高成本代码
按产品 > Simulink Check > 建模标准 > DO-178C/DO-331 检查 > 检查 Lookup Table 模块的使用情形
有关模型顾问的详细信息,请参阅运行模型顾问检查。
此外,要确定选中此复选框是否安全,如果您拥有 Simulink Design Verifier™ 许可证,请考虑使用 检测模块输入范围违规 (Simulink Design Verifier) 检查。
编程用法
模块参数:RemoveProtectionInput |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1
。有关详细信息,请参阅指定采样时间。
依存关系
仅当您将此参数设置为 -1
以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | SampleTime |
值: | "-1" (默认) | scalar or vector in quotes |
数据类型
指定表数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 与输出相同
内置数据类型的名称,例如
single
数据类型对象的名称,例如
Simulink.NumericType
对象计算结果为数据类型的表达式,例如
fixdt(1,16,0)
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
提示
对于以下情况,指定与输出数据类型不同的表数据类型:
存储表数据(使用的类型小于输出信号)的内存要求较低
在具有不同输出数据类型的两个 n-D Lookup Table 模块之间共享预缩放的表数据
在为具有不同输出数据类型的模块生成的代码中共享自定义存储表数据
依存关系
要启用此参数,请将表和断点选项卡中的表数据设置为对话框。
编程用法
模块参数:TableDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit from 'Table data'' | 'Inherit: Same as output' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)'|'<data type expression>' |
默认值:'Inherit: Same as output' |
指定表数据的最小值。默认值为 []
(未指定)。
编程用法
模块参数:TableMin |
类型:字符向量 |
值:标量 |
默认值:'[]' |
指定表数据的最大值。默认值为 []
(未指定)。
编程用法
模块参数:TableMax |
类型:字符向量 |
值:标量 |
默认值:'[]' |
指定一组断点数据的数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 与对应的输入相同
内置数据类型的名称,例如
single
数据类型类的名称,例如枚举数据类型类
数据类型对象的名称,例如
Simulink.NumericType
对象计算结果为数据类型的表达式,例如
fixdt(1,16,0)
提示
断点支持无序枚举数据。因此,线性搜索也是无序的,这就提供了灵活性,但可能影响性能。搜索从断点中的第一个元素开始。
如果选中使用上一个索引结果开始索引搜索复选框,则必须使用有序单调递增数据。这种排序可提高性能。
对于枚举数据,外插方法必须是
Clip
。该模块不支持枚举数据的超出范围的输入。指定枚举数据时,请将整个枚举集包含在断点向量中。例如,使用
enumeration
函数。
以下是对此模块使用枚举数据的限制:
该模块不支持枚举数据的超出范围的输入。指定枚举数据时,请将整个枚举集包含在断点向量中。例如,使用
enumeration
函数。
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
提示
对于以下情况,指定的断点数据类型可以不同于对应的输入数据类型:
存储断点数据(使用的类型小于输出信号)的内存要求较低
在具有不同输入数据类型的两个 n-D Lookup Table 模块之间共享预缩放的断点数据
在为具有不同输入数据类型的模块生成的代码中共享自定义存储断点数据
如果断点数据类型或其对应的输入数据类型具有定点数据类型,请为二者指定相同的斜率和偏置。
依存关系
要启用此参数,请将表和断点选项卡中对应的断点参数设置为对话框。
编程用法
模块参数:BreakpointsForDimension1DataTypeStr | BreakpointsForDimension2DataTypeStr| ... | BreakpointsForDimension30DataTypeStr |
类型:字符向量 |
值:'Inherit: Same as corresponding input' | 'Inherit: Inherit from 'Breakpoint data'' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)'|'<data type expression>' |
默认值:'Inherit: Same as corresponding input' |
指定一组断点数据可以具有的最小值。默认值为 []
(未指定)。
编程用法
模块参数:BreakpointsForDimension1Min | BreakpointsForDimension2Min | ... | BreakpointsForDimension30Min |
类型:字符向量 |
值:标量 |
默认值:'[]' |
指定一组断点数据可以具有的最大值。默认值为 []
(未指定)。
编程用法
模块参数:BreakpointsForDimension1Max | BreakpointsForDimension2Max | ... | BreakpointsForDimension30Max |
类型:字符向量 |
值:标量 |
默认值:'[]' |
指定区间比数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 从内部规则继承
内置数据类型的名称,例如
single
数据类型对象的名称,例如
Simulink.NumericType
对象计算结果为数据类型的表达式,例如
fixdt(1,16,0)
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
编程用法
模块参数:FractionDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule' | 'double' | 'single' | 'fixdt(1,16,0)'|'<data type expression>' |
默认值:'Inherit: Inherit via internal rule' |
指定中间结果数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 与输出相同
内置数据类型的名称,例如
single
数据类型对象的名称,例如
Simulink.NumericType
对象计算结果为数据类型的表达式,例如
fixdt(1,16,0)
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
提示
使用此参数为内部计算指定高于(或低于)表数据或输出数据的精度。
编程用法
模块参数:IntermediateResultsDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule' | 'Inherit: Same as output' | 'double' | 'single' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)'|'<data type expression>' |
默认值:'Inherit: Same as output' |
指定输出数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 通过反向传播继承
内置数据类型的名称,例如
single
数据类型对象的名称,例如
Simulink.NumericType
对象计算结果为数据类型的表达式,例如
fixdt(1,16,0)
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
编程用法
模块参数:OutDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via back propagation' | 'Inherit: Inherit from table data' | 'Inherit: Same as first input' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)'|'<data type expression' |
默认值:'Inherit: Same as first input' |
指定模块输出的最小值。默认值为 []
(未指定)。Simulink 软件使用此值执行:
参数范围检查(请参阅指定模块参数的最小值和最大值)。
仿真范围检查(请参阅指定信号范围)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。
编程用法
模块参数:OutMin |
类型:字符向量 |
值:标量 |
默认值:'[]' |
指定模块可以输出的最大值。默认值为 []
(未指定)。Simulink 软件使用此值执行:
参数范围检查(请参阅指定模块参数的最小值和最大值)。
仿真范围检查(请参阅指定信号范围)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。
编程用法
模块参数:OutMax |
类型:字符向量 |
值:标量 |
默认值:'[]' |
指定进行中间计算的内部规则。选择速度可以提高计算速度。但这样可能会损失精度,通常最多 2 位。
依存关系
仅当中间结果参数设置为继承:从内部规则继承。
编程用法
模块参数:InternalRulePriority |
类型:字符向量 |
值:'Speed' | 'Precision' |
默认值:'Speed' |
选中此项会要求所有输入具有相同的数据类型。
编程用法
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'on' |
选择此参数可防止定点工具覆盖您对此模块指定的数据类型。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
指定在仿真过程中或在执行从模型中生成的代码时发生的定点查找表计算的舍入模式。有关详细信息,请参阅舍入模式 (Fixed-Point Designer)。
此选项不影响模块参数值的舍入。Simulink 将此类值舍入到最邻近的可表示整数值。要控制模块参数的舍入方法,请使用 MATLAB® 舍入函数在模块对话框上的编辑字段中输入表达式。
编程用法
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Simplest' |
操作 | 执行此操作的原因 | 溢出时会发生的情况 | 示例 |
---|---|---|---|
选中此复选框 ( | 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 | 将溢出饱和处理为数据类型能够表示的最小值或最大值。 | 一个有符号的 8 位整数的溢出可以饱和处理为 -128 或 127。 |
不选中此复选框 ( | 您需要优化所生成代码的效率。 您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。 | 溢出会绕回到由数据类型表示的适当值。 | 数字 130 不适合一个有符号 8 位整数,因此绕回 -126。 |
提示
如果您将模型保存为 R2009a 或更早版本,此复选框设置将不起作用,且不会显示饱和代码。此行为保留了向后兼容性。
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
详细信息
假设您有一个查找表,您希望它在生成的代码中可以调整大小。当使用 Simulink.LookupTable
和 Simulink.Breakpoint
对象来配置用于在生成的代码中进行标定的查找表数据时,请使用对象的 SupportTunableSize
属性启用可调表大小。如果不使用这些类,请使用 n-D Lookup Table 模块中的支持可调大小参数启用可调表大小。
假设:
您在模型的
preload
函数中定义了一个Simulink.Parameter
结构体:p = Simulink.Parameter; p.Value.MaxIdx = [2 2]; p.Value.BP1 = [1 2 3]; p.Value.BP2 = [1 4 16]; p.Value.Table = [4 5 6; 16 19 20; 10 18 23]; p.DataType = 'Bus: slLookupTable'; p.CoderInfo.StorageClass = 'ExportedGlobal'; % Create bus object slBus1 from MATLAB structure Simulink.Bus.createObject(p.Value); slLookupTable = slBus1; slLookupTable.Elements(1).DataType = 'uint32';
以下模块参数适用于 n-D Lookup Table 模块。
参数 值 表维数 2
表数据 p.Table
断点 1 p.BP1
断点 2 p.BP2
支持可调大小 on
每个维度的最大索引 p.MaxIdx
生成的
头文件包含与下面类似的类型定义。model
_types.h
typedef struct { uint32_T MaxIdx[2]; real_T BP1[3]; real_T BP2[3]; real_T Table[9]; } slLookupTable;
生成的
文件包含与下面类似的代码。model
.c
/* Exported block parameters */ slLookupTable p = { { 2U, 2U }, { 1.0, 2.0, 3.0 }, { 1.0, 4.0, 16.0 }, { 4.0, 16.0, 10.0, 5.0, 19.0, 18.0, 6.0, 20.0, 23.0 } } ; /* More code */ /* Model output function */ static void ex_lut_nd_tunable_table_output(int_T tid) { /* Lookup_n-D: '<Root>/n-D Lookup Table' incorporates: * Inport: '<Root>/In1' * Inport: '<Root>/In2' */ Y = look2_binlcpw(U1, U2, p.BP1, p.BP2, p.Table, ... p.MaxIdx, p.MaxIdx[0] + 1U); /* Outport: '<Root>/Out1' */ ex_lut_nd_tunable_table_Y.Out1 = Y; /* tid is required for a uniform function interface. * Argument tid is not used in the function. */ UNUSED_PARAMETER(tid); }
突出显示的代码行为查找表指定了可调表大小。您可以更改查找表与断点数据的大小和值,无需重新生成或重新编译代码。
假设您有一个具有类似如下定义的枚举类的查找表:
classdef(Enumeration) Gears < Simulink.IntEnumType enumeration GEAR1(1), GEAR2(2), GEAR3(4), GEAR4(8), SPORTS(16), REVERSE(-1), NEUTRAL(0) end end
n-D Lookup Table 模块具有以下设置:
维数设置为 1。
表数据值为
[5 10 20 40 80 -5 0]
。断点 1 值为
enumeration('Gears')
。内插方法为“均一”。
对于无序搜索,请将索引搜索方法设置为线性搜索并清除使用上一个索引结果开始索引搜索复选框。
仿真产生对应于 GEAR2
、REVERSE
和 SPORTS
的向量 [10 -5 80]
。
扩展功能
版本历史记录
在 R2011a 中推出在 Lookup Table 模块中,在代码生成中支持可调表大小参数已替换为支持可调表大小。此变更造成的影响是:
如果您使用
SupportTunableTableSize
以编程方式设置表和断点 > 支持可调大小参数,则下次打开 Lookup Table 模块时,该模块将显示一条警告。现有模型继续正常工作。表和断点选项卡上的支持可调大小参数取代了算法选项卡上的在代码生成中支持可调表大小和每个维度的最大索引参数。在 R2024b 之前,选择在代码生成中支持可调表大小参数将启用每个维度的最大索引参数,该参数设置每个表维度的最大索引值。从 R2024b 开始,选择支持可调大小参数将为断点参数启用可调大小字段。这些可调大小字段取代了每个维度的最大索引参数的功能。模块在模块对话框中显示警告。现有模型继续正常工作。有关详细信息,请参阅可调大小。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)