逼近 N 维函数
Simulink / Lookup Tables
HDL Coder / Lookup Tables
1-D、2-D 和 n-D Lookup Table 模块计算一个函数的 N 变量采样表示形式
其中函数 F 可以是经验函数。此模块通过查找或插入您使用模块参数定义的值表,将输入映射到输出值。该模块支持均一(常量)、线性(线性点-斜率)、拉格朗日(线性拉格朗日)、最近、三次样条和 Akima 样条插值方法。您可以将这些方法应用于从 1 维到 30 维的表。
在下面的模块中,第一个输入标识第一个维度(行)断点,第二个输入标识第二个维度(列)断点,依此类推。
有关各种模块方向的端口顺序的说明,请参阅旋转或翻转后的端口位置。
设置 Math and Data Types > Use algorithms optimized for row-major array layout 配置参数后,2-D 和 n-D Lookup Table 模块行为会从列优先更改为行优先。对于这些模块,列优先算法和行优先算法可能在输出计算的顺序上有所不同,从而可能导致数值略有不同。此功能需要 Simulink® Coder™ 或 Embedded Coder® 许可证。有关行优先支持的详细信息,请参阅Code Generation of Matrices and Arrays (Simulink Coder)。
以下模块参数定义断点和表数据。
模块参数 | 用途 |
---|---|
Number of table dimensions | 指定查找表的维度数。 |
Breakpoints | 指定与查找表的每个维度对应的断点向量。 |
Table data | 定义关联的一组输出值。 |
提示
均匀分布的断点可以使生成的代码无分割。有关详细信息,请参阅 fixpt_evenspace_cleanup
和Identify questionable fixed-point operations (Embedded Coder)。
n-D、1-D 和 2-D Lookup Table 模块通过基于输入值查找或估计表值来生成输出。
模块输入 | n-D Lookup Table 模块行为 |
---|---|
与断点数据集中的索引值匹配 | 输出位于行、列和更高维度断点的交点处的表值 |
与断点数据集中的索引值不匹配,但在范围内 | 使用您选择的 Interpolation method 内插适当的表值 |
与断点数据集中的索引值不匹配,且不在范围内 | 使用您选择的 Extrapolation method 外插输出值 |
您可以将 Interpolation Using Prelookup 模块与 Prelookup 模块一起使用,以执行等效于一个 n-D Lookup Table 模块的操作。这种模块组合可以提供更大的灵活性,从而为线性插值实现更高效的仿真性能。
当查找操作是不需要插值的数组访问时,请使用 Direct Lookup Table (n-D) 模块。例如,如果您有一个整数值 k
,而您需要表的第 k
个元素 y = table(k)
,则不需要插值。
u1
- 第一个维度(行)输入u1 端口的实数值输入,通过查找您定义的值表或对其进行插值来映射到输出值。
示例: 0:10
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
uN
- 第 n 维输入值uN 端口的实数值输入,通过查找或对您定义的值表进行插值来映射到输出值。
示例: 0:10
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
T
- 定义输出值的表用运行时可调的信号指定输出值表。
在仿真期间,矩阵大小必须与 Number of table dimensions 参数定义的维度匹配。但是,在编辑模块图的过程中,您可以输入空矩阵(指定为 []
)或者未定义的工作区变量。利用此方法,您可以推迟为表数据指定正确设置维度的矩阵,并继续编辑模块图。
要启用此端口,请进行如下设置:
将 Data specification 设置为 “Table and breakpoints
”。
将 Table data 设置为 “Input port
”。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
bp1
- 显式断点值根据 Breakpoints specification 参数的值,使用运行时可调的信号显式指定断点数据
如果您将 Breakpoints specification 设置为 “Explicit values
”,请在每个 Breakpoints 行中输入与表数据的每个维度对应的断点集。对于每个维度,将断点指定为值严格单调递增的 1×n 或 n×1 向量。
您最多可以创建三个断点数据输入端口。对于断点 4 到 30,您只能通过对应的 Breakpoints 参数指定断点数据。
注意
要以均匀间距设定格式指定断点,请将 Breakpoints specification 设置为 “Even spacing
”,并使用 Breakpoints First 点和 Spacing 参数。
要启用此端口,请进行如下设置:
将 Data specification 设置为 “Table and breakpoints
”。
将 Breakpoints specification 设置为 “Explicit values
”。
将 Breakpoints 1 设置为 “Input port
”。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
bp2
- 显式断点值根据 Breakpoints specification 参数的值,使用运行时可调的信号显式指定断点数据。
如果您将 Breakpoints specification 设置为 “Explicit values
”,请在每个 Breakpoints 行中输入与表数据的每个维度对应的断点集。对于每个维度,将断点指定为值严格单调递增的 1×n 或 n×1 向量。
您最多可以创建三个断点数据输入端口。对于断点 4 到 30,您只能通过对应的 Breakpoints 参数指定断点数据。
注意
要指定均匀分布的断点数据,请使用 Breakpoints 参数。您无法通过输入端口指定均匀分布的断点数据。
要启用此端口,请进行如下设置:
将 Data specification 设置为 “Table and breakpoints
”。
将 Breakpoints specification 设置为 “Explicit values
”。
将 Breakpoints 2 设置为 “Input port
”。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
bp3
- 显式断点值根据 Breakpoints specification 参数的值,使用运行时可调的信号显式指定断点数据。
如果您将 Breakpoints specification 设置为 “Explicit values
”,请在每个 Breakpoints 行中输入与表数据的每个维度对应的断点集。对于每个维度,将断点指定为值严格单调递增的 1×n 或 n×1 向量。
您最多可以创建三个断点数据输入端口。对于断点 4 到 30,您只能通过对应的 Breakpoints 参数指定断点数据。
注意
要指定均匀分布的断点数据,请使用 Breakpoints 参数。您无法通过输入端口指定均匀分布的断点数据。
要启用此端口,请进行如下设置:
将 Data specification 设置为 “Table and breakpoints
”。
将 Breakpoints specification 设置为 “Explicit values
”。
将 Breakpoints 3 设置为 “Input port
”。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| enumerated
| fixed point
Port_1
- 通过查找或估算表值计算的输出通过查找或基于输入值估算表值生成的输出:
如果模块输入... | n-D Lookup Table 模块... |
---|---|
与断点数据集中的索引值匹配 | 输出位于行、列和更高维度断点的交点处的表值 |
与断点数据集中的索引值不匹配,但在范围内 | 使用您选择的 Interpolation method 内插适当的表值 |
与断点数据集中的索引值不匹配,且不在范围内 | 使用您选择的 Extrapolation method 外插输出值 |
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
Number of table dimensions
- 查找表维度的数量3
(默认) | 1
| 2
| 4
| ...
| 30
输入查找表的维数。此参数确定:
表的自变量数量以及模块输入的数量
要指定的断点集的数量
值 | 设置 |
---|---|
1、2、3 或 4 | 从下拉列表中选择值。 |
更高的表维度数 | 直接在字段中输入正整数。 此模块支持的最大表维度数为 30。 |
例如,大小为 M×N×... 的表表示维度 1 的大小是 M,维度 2 的大小是 N,依此类推。M 必须匹配第一个断点长度,N 必须匹配第二个断点长度,依此类推。
模块参数:NumberOfTableDimensions |
类型:字符向量 |
值:'1' | '2' | '3' | '4' | ... | 30 |
默认值:'3' |
Data specification
- 表和断点的设定方法Table and breakpoints
” (默认) | “Lookup table object
”从列表中,选择:
“Table and breakpoints
” - 指定表数据和断点。选择此选项将启用以下参数:
Table data
Breakpoints specification
Breakpoints 1
Breakpoints 2
Breakpoints 3
Edit table and breakpoints
要使用输入端口指定表和断点,请查看 Source 参数。
“Lookup table object
” - 使用现有查找表 (Simulink.LookupTable
) 对象。选中此选项将启用 Name 字段和 Edit table and breakpoints 按钮。
模块参数:DataSpecification |
类型:字符向量 |
值:'Table and breakpoints' | 'Lookup table
object' |
默认值:'Table and breakpoints' |
Name
- 查找表对象的名称[]
(默认) | Simulink.LookupTable
对象输入查找表 (Simulink.LookupTable
) 对象的名称。如果 Simulink.LookupTable
对象不存在,请点击操作按钮 并选择 Create。新查找表对象的对应参数会自动用模块信息填充。
要启用此参数,请将 Data specification 设置为 “Lookup table object
”。
模块参数:LookupTableObject |
类型:字符向量 |
值:Simulink.LookupTable 对象的名称 |
默认值:'' |
Breakpoints specification
- 断点设定的方法Explicit values
” (默认) | “Even spacing
”指定是以显式断点形式还是参数形式输入数据,以生成均匀分布的断点。
要显式指定断点数据,请将此参数设置为 “Explicit values
”,并在 Breakpoints 参数旁边的文本框中输入断点数据。
要指定参数以生成均匀分布的断点,请将此参数设置为 “Even spacing
”,并为断点数据的每个维度的 First point 和 Spacing 参数输入值。模块将根据表数据计算要生成的点数。
要启用此参数,请将 Data specification 设置为 “Table and breakpoints
”。
当此参数设置为 “Even spacing
” 时,您只能通过对话框指定断点数据。
模块参数:BreakpointsSpecification |
类型:字符向量 |
值:'Explicit values' | 'Even spacing' |
默认值:'Explicit values' |
Source
- 表和断点数据的源Dialog
” (默认) | “Input port
”将表和断点数据的源指定为:
“Dialog
” - 在 Value 参数中指定表或断点数据。
“Input port
” - 通过关联的输入端口指定表或断点数据。
您最多可以创建三个断点数据输入端口。对于断点 4 到 30,您只能通过对应的 Breakpoints 参数指定断点数据。
注意
使用输入端口指定表或断点数据可能会因为运行时检查对仿真的模块性能产生负面影响。
要启用此参数,请将 Data specification 设置为 “Table and breakpoints
”。
要启用关联的 Value,请将此参数设置为 “Dialog
”。
要启用相关联的输入端口,请将此参数设置为 “Input port
”。
将此参数设置为 “Input port
” 将禁用 Value 字段,并隐藏 Data Types 选项卡上的对应参数。
对于任一参数,将此参数设置为 “Input port
” 都会禁用 Edit Table and Breakpoints 按钮。
模块参数:TableSource | BreakpointsForDimension1Source | BreakpointsForDimension2Source | BreakpointsForDimension3Source
|
类型:字符向量 |
值:Dialog | Input
port |
默认值:'Dialog' |
Table data
- 定义输出值的表reshape(repmat([4 5 6;16 19 20;10 18
23],1,2),[3,3,2])
(默认) | 值组成的矩阵,其维度与 Number of table dimensions 匹配在相关联的 Value 字段中输入输出值的表。
在仿真期间,矩阵大小必须与 Number of table dimensions 参数定义的维度匹配。但是,在编辑模块图的过程中,您可以输入空矩阵(指定为 []
)或者未定义的工作区变量。利用此方法,您可以推迟为表数据指定正确设置维度的矩阵,并继续编辑模块图。
要启用此参数,请进行如下设置:
将 Data specification 设置为 “Table and breakpoints
”。
将 Table data:Source 设置为 “Dialog
”。
模块参数:Table |
类型:字符向量 |
值:表值构成的矩阵 |
默认值:'reshape(repmat([4 5 6;16 19 20;10 18
23],1,2),[3,3,2])' |
Breakpoints
- 显式断点值,或断点的第一个点和间距[10,22,31]
(默认) | 单调递增值的 1×n 或 n×1 向量显式指定断点数据或者指定为均匀分布断点,具体取决于 Breakpoints specification 参数。
如果您将 Breakpoints specification 设置为 “Explicit values
”,请在相关联的 Value 字段中的每个 Breakpoints 行中输入与表数据的每个维度对应的断点集。对于每个维度,将断点指定为值严格单调递增的 1×n 或 n×1 向量。
如果您将 Breakpoints specification 设置为 “Even spacing
”,请在每个 Breakpoints 行中输入参数 First point 和 Spacing,以便在各自的维度生成均匀分布的断点。您的表数据决定平均分布的点数。
要启用此参数,请进行如下设置:
将 Data specification 设置为 “Table and breakpoints
”。
将 Table data:Source 设置为 “Dialog
”。
当 Breakpoints specification 参数设置为 “Even spacing
” 时,您只能通过对话框指定断点数据。
模块参数:BreakpointsForDimension1 | BreakpointsForDimension2 |
... | BreakpointsForDimension30 | |
类型:字符向量 |
值:单调递增值的 1×n 或 n×1 向量 |
默认值:'[10, 22, 31]' |
First point
- 均匀分布的断点数据中的第一个点1
(默认) | 标量将均匀分布断点数据中的第一个点指定为实数值有限标量。当 Breakpoints specification 设置为 “Even spacing
” 时,此参数可用。
要启用此参数,请将 Data specification 设置为 “Table and breakpoints
”,并将 Breakpoints specification 设置为 “Even spacing
”。
模块参数:BreakpointsForDimension1FirstPoint |
BreakpointsForDimension2FirstPoint | ... |
BreakpointsForDimension30FirstPoint | |
类型:字符向量 |
值:实数值有限标量 |
默认值:'1' |
Spacing
- 均匀分布的断点之间的间距1
(默认) | 标量指定均匀分布的断点数据中各点之间的距离。
要启用此参数,请将 Data specification 设置为 “Table and breakpoints
”,并将 Breakpoints specification 设置为 “Even spacing
”。
模块参数:BreakpointsForDimension1Spacing |
BreakpointsForDimension2Spacing | ... |
BreakpointsForDimension30Spacing | |
类型:字符向量 |
值:正实数值有限标量 |
默认值:'1' |
Edit table and breakpoints
- 启动 Lookup Table Editor 对话框点击此按钮以打开查找表编辑器。有关详细信息,请参阅 Simulink 文档中的编辑查找表。
对于查找表对象,点击此按钮可以编辑该对象并为该对象保存新值。
Interpolation method
- 断点值之间插值的方法Linear point-slope
” (默认) | “Flat
” | “Nearest
” | “Linear Lagrange
” | “Cubic spline
” | “Akima spline
”当输入位于两个断点值之间时,模块将根据相邻断点内插输出值。有关插值方法的详细信息,请参阅内插方法。
如果您选择 “Cubic spline
”,则模块仅支持标量信号。其他插值方法支持非标量信号。
如果选择 “Akima spline
”,外插方法只能是 “Akima spline
”。
当设置为修正 Akima 插值方法时,此模块不支持:
行优先数组布局和针对行优先数组布局优化的算法
定标的双精度和定点数据类型
Simulink.LookupTable
对象
选中配置参数 Code Generation > Interface > Support non-finite numbers 复选框时的代码生成
模块参数:InterpMethod |
类型:字符向量 |
值:'Linear point-slope' | 'Flat' | 'Nearest' | 'Linear Lagrange' |
'Cubic spline' | 'Akima spline' |
默认值:'Linear point-slope' |
Extrapolation method
- 处理超出断点数据集范围的输入值的方法Linear
” (默认) | “Clip
” | “Cubic spline
” | “Akima spline
”选择 “Clip
”、“Linear
” 或 “Cubic spline
”。有关详细信息,请参阅外插方法。
如果外插方法是 “Linear
”,则基于所选择的线性插值方法计算外插值。例如,如果插值方法是线性拉格朗日,则外插方法继承线性拉格朗日方程以计算外插值。
要为 Extrapolation method 选择 “Cubic spline
”,还必须为 Interpolation method 选择 “Cubic spline
”。
要为 Extrapolation method 选择 “Akima spline
”,您还必须为 Interpolation method 选择 “Akima spline
”。
模块参数:ExtrapMethod |
类型:字符向量 |
值:'Linear' | 'Clip' | 'Cubic spline' | 'Akima
spline' |
默认值:'Linear' |
Index search method
- 计算表索引的方法Evenly spaced points
” (默认) | “Linear search
” | “Binary search
”选择 Evenly spaced points
、Linear search
或 Binary search
。每一种搜索方法在不同的情况下均有各自的速度优势:
对于均匀分布的断点集(例如,10、20、30 等),您可以选择 Evenly spaced points
来计算表索引,以获得最佳速度。
此算法仅使用断点集的前两个断点来确定其余点的偏移量和间距。
注意
当使用 Simulink.LookupTable
对象指定表数据且引用的 Simulink.LookupTable
对象的 Breakpoints Specification 参数设置为 “Even spacing
” 时,请将 Index search method 设置为 “Evenly spaced points
”。
对于非均匀分布的断点集,请遵循以下原则:
如果输入信号在时间步之间的变化不大,选择 Linear search
与 Begin index search using previous index result 可以获得最佳性能。
如果输入信号在每个时间步中跳过的表间隔超过一个或两个,选择 Binary search
可以获得最佳性能。
对于严重依赖查找表的模型,选择非最佳索引搜索方法可能会导致性能下降。
注意
在以下情况下,生成的代码只存储第一个断点、间距和断点数量:
断点数据不可调。
索引搜索方法为 Evenly spaced points
。
模块参数:IndexSearchMethod |
类型:字符向量 |
值:'Binary search' | 'Evenly spaced points' | 'Linear search' |
默认值:'Binary search' |
Begin index search using previous index result
- 开始使用来自上一时间步的索引off
(默认) | on
如果您希望模块使用在上一个时间步中找到的索引开始搜索,请选中此复选框。对于相对于间隔大小而言变化缓慢的输入,启用此选项可以提高性能。否则,线性查找和二分查找方法可能需要更长的时间,尤其是对于大型断点集来说。
要启用此参数,请将 Index search method 设置为 “Linear search
” 或 “Binary search
”。
模块参数:BeginIndexSearchUsing PreviousIndexResult |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
Diagnostic for out-of-range input
- 当输入超出范围时的模块操作None
” (默认) | “Warning
” | “Error
”指定当输入超出范围时,是否生成警告或错误消息。选项包括:
“None
” - 不产生任何响应。
“Warning
” - 显示警告并继续进行仿真。
“Error
” - 终止仿真并显示错误。
模块参数:DiagnosticForOutOfRangeInput |
类型:字符向量 |
值:'None' | 'Warning' | 'Error' |
默认值:'None' |
Use last table value for inputs at or above last breakpoint
- 用于计算最后一个断点上或高于该断点的输入的输出的方法off
(默认) | on
使用此复选框,指定模块用来定位断点集的最后一个元素及其对应表值的索引约定。当输入等于或大于断点数据的最后一个元素时,此复选框才有意义。由于舍入原因,选中和清除此复选框可能会导致仿真与代码生成之间最后一个断点的结果不同。
复选框 | 模块使用的索引 | 区间比 |
---|---|---|
选中 | Table and Breakpoints 选项卡上的断点数据的最后一个元素 | 0 |
清除 | Table and Breakpoints 选项卡上的断点数据的倒数第二个元素 | 1 |
假设输入 u 在断点集 bp 的范围内,区间比 f(在 0 f 1 范围内)按如下所示进行计算。
假定断点集为 [1 4 5]
,输入 u 为 5.5
。如果您选中此复选框,索引则是最后一个元素 (5
) 的索引,区间比为 0。如果您清除此复选框,索引则是倒数第二个元素 (4
) 的索引,区间比为 1。
要启用此参数,请进行如下设置:
将 Interpolation method 设置为 “Linear
”。
将 Extrapolation method 设置为 “Clip
”。
模块参数:UseLastTableValue |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
Use one input port for all input data
- 只使用一个输入端口off
(默认) | on
选中此复选框,从而对 N 维表只使用一个输入端口,此端口需要宽度为 n
个元素的信号。此选项可以有效减少包含许多查找表的模块图中的杂乱线条。
注意
如果您选中此复选框,模块上将出现一个带有 u
标签的输入端口。
模块参数:UseOneInputPortForAllInputData |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
Remove protection against out-of-range input in generated code
- 删除检查超出范围的输入值的代码off
(默认) | on
指定是否包含代码以检查超出范围的输入值。
复选框 | 结果 | 何时使用 |
---|---|---|
| 生成的代码中未包含用来检查超出范围的断点输入的条件语句。 当输入超出范围时,生成的代码可能会发生未定义的行为。 |
提高代码效率 |
|
生成的代码包含用来检查超出范围的输入的条件语句。 |
适用于安全性至关重要的应用领域 |
如果您的输入没有超出范围,则可以选中 Remove protection against out-of-range index in generated code 复选框以提高代码效率。默认情况下,此复选框处于清除状态。对于安全性至关重要的应用,不要选中此复选框。要选中 Remove protection against out-of-range index in generated code 复选框,请先检查模型输入是否在范围内。例如:
清除 Remove protection against out-of-range index in generated code 复选框。
将 Diagnostic for out-of-range input 参数设置为 Error
。
在 Normal 模式下进行模型仿真。
如果发生超出范围错误,请将它们更正到范围之内,然后再次运行仿真。
当仿真不再生成超出范围的输入错误时,选中 Remove protection against out-of-range index in generated code 复选框。
注意
如果选中了 Remove protection against out-of-range index in generated code 复选框而输入超出范围,生成的代码将发生未定义的行为。
根据您的具体应用,您可以运行以下模型顾问检查,以验证此复选框的使用情形:
By Product > Embedded Coder > Identify lookup table blocks that generate expensive out-of-range checking code
By Product > Simulink Check > Modeling Standards > DO-178C/DO-331 Checks > Check usage of lookup table blocks
有关模型顾问的详细信息,请参阅运行模型顾问检查。
此外,要确定选中此复选框是否安全,如果您拥有 Simulink Design Verifier™ 许可证,请考虑使用 Detect Block Input Range Violations (Simulink Design Verifier) 检查。
模块参数:RemoveProtectionInput |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
Support tunable table size in code generation
- 在生成的代码中启用可调表大小off
(默认) | on
选中此复选框,以使生成的代码中具有可调表大小。利用此选项,您可以更改生成的代码中的查找表与断点数据的大小和值,无需重新生成或重新编译代码。您只能减小查找表和断点数据的大小。
如果您将 Interpolation method 设置为 “Cubic spline
”,此复选框将不可用。
模块参数:SupportTunableTableSize |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
Sample time
- 将采样时间指定为 -1
以外的值-1
(默认) | 标量 | 向量将采样时间指定为 -1 以外的值。有关详细信息,请参阅指定采样时间。
此参数不可见,除非将其显式设置为 -1
以外的值。要了解详细信息,请参阅不建议设置采样时间的模块。
模块参数:SampleTime |
类型:字符向量 |
值:标量或向量 |
默认值:'-1' |
Maximum indices for each dimension
- 每个表维度的最大索引值[]
(默认) | scalar or vector of positive integer values
示例: [4 6]
用于表示 5×7 的表
使用从零开始的索引方法指定每个表维度的最大索引值。您可以使用以下数据类型,指定正整数标量或向量值:
内置浮点类型:double
和 single
内置整数类型:int8
、int16
、int32
、uint8
、uint16
和 uint32
有效设定的示例包括:
[4 6]
用于表示 5×7 的表
[int8(2) int16(5) int32(9)]
用于表示 3×6×10 的表
Simulink.Parameter
,在生成代码后此参数的值比表数据的维度少一。有关详细信息,请参阅在生成的代码中具有可调表大小。
要启用此参数,请选择 Support tunable table size in code generation。通过在生成的代码中调整此参数,提供新的表数据和断点以及调整后的参数值。
模块参数:MaximumIndicesForEachDimension |
类型:字符向量 |
值:正整数值的标量或向量 |
默认值:'[]' |
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
”
内置数据类型的名称,例如 single
数据类型对象的名称,例如 Simulink.NumericType
对象
计算结果为数据类型的表达式,例如 fixdt(1,16,0)
点击 Show data type assistant 按钮 以显示 Data Type Assistant,帮助您设置数据类型属性。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型。
提示
对于以下情况,指定与输出数据类型不同的表数据类型:
存储表数据(使用的类型小于输出信号)的内存要求较低
在具有不同输出数据类型的两个 n-D Lookup Table 模块之间共享预缩放的表数据
在为具有不同输出数据类型的模块生成的代码中共享自定义存储表数据
要启用此参数,请将 Table and Breakpoints 选项卡中的 Table data 设置为 “Dialog
”。
模块参数: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' |
Table data Minimum
- 表数据的最小值[]
| scalar
指定表数据的最小值。默认值为 []
(未指定)。
模块参数:TableMin |
类型:字符向量 |
值:标量 |
默认值:'[]' |
Table data Maximum
- 表数据的最大值[]
| scalar
指定表数据的最大值。默认值为 []
(未指定)。
模块参数:TableMax |
类型:字符向量 |
值:标量 |
默认值:'[]' |
Breakpoints
- 断点数据类型Inherit:Same as corresponding input
” (默认) | “double
” | “single
” | “half
” | “int8
” | “uint8
” | “int16
” | “uint16
” | “int32
” | “uint32
” | “int64
” | “uint64
” | “fixdt(1,16)
” | “fixdt(1,16,0)
” | “fixdt(1,16,2^0,0)
” | “Enum: <类名称>
” | “<data type expression>
”指定一组断点数据的数据类型。可以将其设置为:
继承数据类型的规则,例如 “Inherit:Same as corresponding input
”
内置数据类型的名称,例如 single
数据类型类的名称,例如枚举数据类型类
数据类型对象的名称,例如 Simulink.NumericType
对象
计算结果为数据类型的表达式,例如 fixdt(1,16,0)
提示
断点支持无序枚举数据。因此,线性查找也是无序的,这就提供了灵活性,但可能影响性能。搜索从断点中的第一个元素开始。
如果选中 Begin index search using previous index result 复选框,则必须使用有序单调递增数据。这种排序可提高性能。
对于枚举数据,Extrapolation method 必须是 Clip
。
该模块不支持枚举数据的超出范围的输入。指定枚举数据时,请将整个枚举集包含在断点数据集中。例如,使用 enumeration
函数。
以下是对此模块使用枚举数据的限制:
该模块不支持枚举数据的超出范围的输入。指定枚举数据时,请将整个枚举集包含在断点数据集中。例如,使用 enumeration
函数。
点击 Show data type assistant 按钮 以显示 Data Type Assistant,帮助您设置数据类型属性。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型。
提示
对于以下情况,指定的断点数据类型可以不同于对应的输入数据类型:
存储断点数据(使用的类型小于输出信号)的内存要求较低
在具有不同输入数据类型的两个 n-D Lookup Table 模块之间共享预缩放的断点数据
在为具有不同输入数据类型的模块生成的代码中共享自定义存储断点数据
要启用此参数,请将 Table and Breakpoints 选项卡中对应的 Breakpoints 参数设置为 “Dialog
”。
模块参数: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' |
Breakpoints Minimum
- 最小值断点数据可以有[]
| scalar
指定一组断点数据可以具有的最小值。默认值为 []
(未指定)。
模块参数:BreakpointsForDimension1Min | BreakpointsForDimension2Min | ... | BreakpointsForDimension30Min |
类型:字符向量 |
值:标量 |
默认值:'[]' |
Breakpoints Maximum
- 最大值断点数据可以有[]
| scalar
指定一组断点数据可以具有的最大值。默认值为 []
(未指定)。
模块参数:BreakpointsForDimension1Max | BreakpointsForDimension2Max | ... | BreakpointsForDimension30Max |
类型:字符向量 |
值:标量 |
默认值:'[]' |
Fraction
- 小数数据类型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)
点击 Show data type assistant 按钮 以显示 Data Type Assistant,帮助您设置数据类型属性。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型。
模块参数:FractionDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule' | 'double' | 'single' |
'fixdt(1,16,0)'|'<data type expression>' |
默认值:'Inherit: Inherit via internal rule' |
Intermediate results
- 中间结果数据类型 Inherit:Same as output
” (默认) | “Inherit:Inherit via internal rule
” | “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)
点击 Show data type assistant 按钮 以显示 Data Type Assistant,帮助您设置数据类型属性。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型。
提示
使用此参数为内部计算指定高于(或低于)表数据或输出数据的精度。
模块参数: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' |
Output
- 输出数据类型Inherit:Same as input
” (默认) | “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:Inherit via back propagation
”
内置数据类型的名称,例如 single
数据类型对象的名称,例如 Simulink.NumericType
对象
计算结果为数据类型的表达式,例如 fixdt(1,16,0)
点击 Show data type assistant 按钮 以显示 Data Type Assistant,帮助您设置数据类型属性。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型。
模块参数: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' |
Output Minimum
- 模块可以输出的最小值 []
| scalar
指定模块输出的最小值。默认值为 []
(未指定)。Simulink 软件使用此值执行:
参数范围检查(请参阅指定模块参数的最小值和最大值)。
仿真范围检查(请参阅指定信号范围)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或 External 模式)的结果。
模块参数:OutMin |
类型:字符向量 |
值:标量 |
默认值:'[]' |
Output Maximum
- 模块可以输出的最大值[]
| scalar
指定模块可以输出的最大值。默认值为 []
(未指定)。Simulink 软件使用此值执行:
参数范围检查(请参阅指定模块参数的最小值和最大值)。
仿真范围检查(请参阅指定信号范围)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或 External 模式)的结果。
模块参数:OutMax |
类型:字符向量 |
值:标量 |
默认值:'[]' |
Internal rule priority
- 进行中间计算的内部规则Speed
” (默认) | “Precision
”指定进行中间计算的内部规则。选择 “Speed
” 可以提高计算速度。但这样可能会损失精度,通常最多 2 位。
模块参数:InternalRulePriority |
类型:字符向量 |
值:'Speed' | 'Precision' |
默认值:'Speed' |
Require all inputs to have the same data type
- 要求所有输入具有相同的数据类型on
(默认) | off
选中此项会要求所有输入具有相同的数据类型。
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'on' |
Lock data type settings against changes by the fixed-point tools
- 防止定点工具覆盖数据类型off
(默认) | on
选择此参数可防止定点工具覆盖您对此模块指定的数据类型。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)。
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
Integer rounding mode
- 定点运算的舍入模式Simplest
” (默认) | “Ceiling
” | “Convergent
” | “Floor
” | “Nearest
” | “Round
” | “Zero
”指定在仿真过程中或在执行从模型中生成的代码时发生的定点查找表计算的舍入模式。有关详细信息,请参阅Rounding (Fixed-Point Designer)。
此选项不影响模块参数值的舍入。Simulink 将此类值舍入到最接近的可表示整数值。要控制模块参数的舍入方法,请使用 MATLAB® 舍入函数在模块对话框上的编辑字段中输入表达式。
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Simplest' |
Saturate on integer overflow
- 溢出操作的方法off
(默认) | on
操作 | 执行此操作的原因 | 溢出时会发生的情况 | 示例 |
---|---|---|---|
选中此复选框 ( | 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 | 将溢出饱和处理为数据类型能够表示的最小值或最大值。 | 一个有符号的 8 位整数的溢出可以饱和处理为 -128 或 127。 |
不选中此复选框 ( | 您需要优化所生成代码的效率。 您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。 | 溢出会绕回到由数据类型表示的适当值。 | 数字 130 不适合一个有符号 8 位整数,因此绕回 -126。 |
提示
如果您将模型保存为 R2009a 或更早版本,此复选框设置将不起作用,且不会显示饱和代码。此行为保留了向后兼容性。
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
假设您有一个查找表,您希望它在生成的代码中可以调整大小。当使用 Simulink.LookupTable
和 Simulink.Breakpoint
对象来配置用于在生成的代码中进行标定的查找表数据时,请使用对象的 SupportTunableSize
属性启用可调表大小。如果不使用这些类,请使用 n-D Lookup Table 模块中的 Support tunable table size in code generation 参数启用可调表大小。
假设:
您在模型的预加载函数中定义了一个 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 模块。
参数 | Value |
---|---|
Number of table dimensions | 2 |
Table data | p.Table |
Breakpoints 1 | p.BP1 |
Breakpoints 2 | p.BP2 |
Support tunable table size in code generation | on |
Maximum indices for each dimension | 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 模块具有以下设置:
Number of dimensions 设置为 “1
”。
Table data 值为 [5 10 20 40 80 -5
0]
。
Breakpoints 1 值为 enumeration('Gears')
。
Interpolation method 为 Flat。
对于无序搜索,请将 Index search method 设置为 “Linear search
” 并清除 Begin index search using previous index result 复选框。
仿真产生对应于 GEAR2
、REVERSE
和 SPORTS
的向量 [10 -5 80]
。
HDL Coder™ 提供影响 HDL 实现和合成逻辑的额外配置选项。
此模块具有单一默认 HDL 架构。
通用 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式管道处理不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入管道级数。分布式管道处理和受限输出管道处理可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出管道级数。分布式管道处理和受限输出管道处理可以移动这些寄存器。默认值为 |
注意
模块的 HDL 代码生成支持 single
和 double
数据类型。模块的数据输入、断点和输出不支持 half
类型。
本机浮点 | |
---|---|
HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非规范数是量级非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 “ |
LatencyStrategy | 指定对于浮点运算符是否将设计中的模块映射到 |
MantissaMultiplyStrategy | 指定在代码生成期间如何实现尾数乘法运算。通过使用不同设置,您可以控制目标 FPGA 设备上 DSP 的使用。默认值为 “ |
PrecomputeCoefficients | 要启用此属性,请将 Interpolation method 设置为 “ 启用此属性时,斜率和偏置系数是根据表数据和断点静态预先计算的。此设置可减少运行时为计算系数而执行的除法运算的次数。此外,它还会减少执行的浮点加法和乘法运算的总次数。 启用此属性可减少延迟并节省所需的查找表资源的区域数量。但是,此属性会对浮点运算进行重新排序,这可能导致细微的数值差异。您可以在生成的验证模型中观察到这些数值差异。 |
此模块支持复信号的代码生成。
模块设置 | HDL Coder 支持 |
---|---|
Number of table dimensions | 指定最大维数为 2。 |
Breakpoints specification | 选择 “Explicit values ” 或 “Even spacing ”。 |
Index search method | 选择 “Evenly spaced points ”。 |
Extrapolation method | 选择 “Clip ” 或 “Linear ”。代码生成器不支持超出偶边界的外插。 |
Interpolation method | 选择 “Flat ” 或 “Linear point-slope ”。 |
Diagnostic for out-of-range input | 选择 “Error ”。如果您指定其他选项,HDL Coder 会生成警告。 |
Use last table value for inputs at or above last breakpoint | 选中此复选框。 |
Require all inputs to have the same data type | 选中此复选框。 |
Fraction | 从 Type 菜单中选择 “Inherit:Inherit via internal rule ”。 |
Integer rounding mode | 选择 “Zero ”、“Floor ” 或 “Simplest ”。 |
Use one input port for all input data | 清除此复选框。 |
如果您使用 Intel® MAX 10 设备,要将查找表映射到 RAM,请当在 Quartus 工具中创建工程时添加以下 Tcl 命令:
set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE
WITH ERAM"
如果 HDL Coder 遇到需要除法运算来匹配模型仿真行为的情况,将显示警告。这些情况会导致该模块产生除法运算符。当您使用此模块进行 HDL 代码生成时,请避免下列情况:
如果模块配置为使用插值,则要求除法运算符。要避免出现此要求,请将 Interpolation method 设置为 “Flat
”。
表间距不均匀。HDL 代码生成要求模块使用均匀间隔点算法。从输入数据类型到从 0 开始的表索引的模块映射通常需要除法。当断点间距正好是 2 的幂时,该除法实现为移位而不是除法。要调整断点间距,请调整表中断点的数量,或断点范围的左右边界之间的差。
构建表时,最好使断点之间的间距为 2 的幂。如果断点间距不符合此条件,HDL Coder 会发出警告。当断点间距是 2 的幂时,可以用右移位运算替换 prelookup 步骤中的除法运算。
模块上的所有端口都需要标量值。
Simulink PLC Coder™ 对查询表模块的支持有限。编码器不支持:
大于 2 的维度数
三次样条插值方法
使用先前的索引模式开始索引搜索
三次样条外插方法
Direct Lookup Table (n-D) | Interpolation Using Prelookup | Lookup Table Dynamic | Prelookup | Simulink.Breakpoint
| Simulink.LookupTable
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.