Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Direct Lookup Table (n-D)

为 N 维表进行索引,以检索元素、向量或二维矩阵

  • 库:
  • Simulink / Lookup Tables

    HDL Coder / Lookup Tables

  • Direct Lookup Table (n-D) block

说明

Direct Lookup Table (n-D) 模块为 N 维表进行索引,以检索元素、向量或二维矩阵。第一个选择索引对应于顶部(或左侧)输入端口。您可以选择提供表数据作为模块的输入,或者在模块对话框中定义表数据。输入端口的数量和输出的大小取决于表维度的数量和您选择的输出切片。

如果从二维表中选择向量,则输出向量可以是列或行,具体取决于模型配置参数设置 Math and Data Types > Use algorithms optimized for row-major array layout。模块输入是从 0 开始的索引(有关详细信息,请参阅 Inputs select this object from table 参数)。

Direct Lookup Table 模块支持符号维度。

模块输入和输出

Direct Lookup Table (n-D) 模块使用输入作为 n 维表的索引(从零开始)。输入的数量因输出的形状(元素、向量或二维矩阵)不同而不同。

您可以为 Table data 参数定义一组输出值。对于默认列优先算法行为,第一个输入为比输出维度大一的表维度指定从 0 开始的索引。下一个输入为下一个表维度指定从零开始的索引,以此类推。

输出形状输出维度对应于第一个输入的表维度
元素01
向量12
矩阵23

假设您要选择由四维表中的值构成的一个向量。

模块输入端口与表维度之间的对应关系如下表所示。

此输入端口...是此表维度的索引...
12
23
34

模块图标的外观变化

根据您设置的参数,模块图标的外观会发生变化。对于大于 4 的表维度,图标与四维版本匹配,但在顶部显示确切的维度数。

当您使用 Table data 参数时,您将看到以下默认列优先行为的图标。选择配置参数 Math and Data Types > Use algorithms optimized for row-major array layout 时,某些图标会有所不同。

输入信号从表中选择的对象表维度数
1234

元素

向量

二维矩阵

不适用

当您使用表输入端口时,您将看到以下图标。

输入信号从表中选择的对象表维度数
1234

元素

向量

二维矩阵

不适用

端口

输入

全部展开

对于默认列优先算法,第一个输入端口指定比输出维度(0、1 或 2)大 1 的表维度中从零开始的索引。下一个输入为下一个表维度指定从零开始的索引,以此类推。所有索引输入必须是实数值。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated

对于默认列优先算法,第 N 个输入端口指定比输出维度(0、1 或 2)大 N 的表维度中从零开始的索引。输入的数量随输出的形状而有所不同。所有索引输入必须是实数值。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated

表数据,指定为向量,矩阵或 N 维数组。表大小必须与 Number of dimensions 参数的维度相匹配。模块的输出数据类型与表数据类型相同。

依存关系

要启用此端口,请选中 Make table an input 复选框。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated

输出

全部展开

输出切片,作为标量、向量或二维矩阵提供。模块输出的大小由 Inputs select this object from table 参数的设置决定。输出数据类型与表数据类型相同。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated

参数

全部展开

Main

Table

Table data 参数必须具有的维度数。此值决定表的自变量数和模块的输入数。

要指定...执行此操作...

1、2、3 或 4

从下拉列表中选择值。

更高的表维度数

直接在字段中输入正整数。

此模块支持的最大表维度数为 30。

编程用法

模块参数:NumberOfTableDimensions
类型:字符向量
值: '1' | '2' | '3' | '4' | ... |'30'|
默认值:'2'

选中此复选框可将表数据作为模块输入提供给 Direct Lookup Table (n-D) 模块。当您选中此复选框时,会出现新输入端口 T。使用此端口输入表数据。

编程用法

模块参数:TableIsInput
类型:字符向量
值: 'off' | 'on'
默认值:'off'

指定输出值表。表大小必须与 Number of table dimensions 参数的维度相匹配。

提示

在编辑模块图的过程中,您可以将 Table data 字段留空。但是,要进行仿真,Table data 的维度数必须与 Number of table dimensions 匹配。有关如何构造多维 MATLAB® 数组的详细信息,请参阅多维数组

点击 Edit 以打开查找表编辑器。有关详细信息,请参阅编辑查找表

依存关系

要启用 Table data 字段,请清除 Make table an input 复选框。

编程用法

模块参数:Table
类型:字符向量
值:scalar, vector, matrix, or N-D array
默认值:'[4 5 6;16 19 20;10 18 23]'
Algorithm

指定输出数据是单个元素、向量还是二维矩阵。用于索引的输入端口数取决于您的选择。

选择用于索引的输入端口数
Element表维度数
Vector表维度数 -1
2-D Matrix表维度数 -2

这种编号方法与 MATLAB 索引方法相匹配。例如,如果您有一个四维数据表,请按照以下指导准则操作。

要访问...指定...例如...
元素四个索引 array(1,2,3,4)
向量三个索引 array(:,2,3,4)(默认列优先算法)
二维矩阵两个索引 array(:,:,3,4)(默认列优先算法)

提示

设置 Math and Data Types > Use algorithms optimized for row-major array layout 配置参数后,Direct Lookup Table 模块行为会从列优先更改为行优先。对于此模块,列优先算法和行优先算法在输出计算中可能有着语义上的不同,从而导致数值不同。例如,假设 Inputs select this object from table 参数设置为 “Vector”。所选向量的元素在表存储内存中是连续的。下表列出了不同表维度对应的列优先和行优先算法:

表维度列优先算法行优先算法
二维表选择列向量选择行向量
三维和更高维度的表从表的第一个维度中选择输出向量从表的最后一个维度中选择输出向量

例如,使用行优先和列优先直接查找算法,从三维表获取向量输出。最后一个维度是三维表的第三维。由于语义变化,列优先和行优先直接查找可能输出不同的向量大小和数值。

下图显示配置有三维表和向量输出的 Direct Lookup Table (n-D) 模块。默认情况下,模块图标显示列优先算法。

要让此模块使用行优先算法,请更改模型的 Math and Data Types > Use algorithm optimized for row-major layout 配置参数并重新编译。模块图标会发生变化,以反映针对行优先行为优化的算法的更改。

有关行优先支持的详细信息,请参阅Row-Major Array Layout: Simplify integration with external C/C++ code for Lookup Table and other blocks (Simulink Coder)

编程用法

模块参数InputsSelectThisObjectFromTable
类型:字符向量
'Element' | 'Vector' | '2-D Matrix'
默认值:'Element'

指定当索引相对于表维度而超出范围时,是否显示警告或错误。选项包括:

  • None” - 不产生任何响应。

  • Warning” - 显示警告并继续进行仿真。

  • Error” - 终止仿真并显示错误。

如果您选择了 “None” 或 “Warning”,模块将剪切超出范围的索引以满足表维度的要求。例如,如果指定的索引是 5.3,而表维度的最大索引是 4,模块会将索引剪切为 4。

编程用法

模块参数:DiagnosticForOutOfRangeInput
类型:字符向量
值:'None' | 'Warning' | 'Error'
默认值:'Warning'

将采样时间指定为 -1 以外的值。有关详细信息,请参阅指定采样时间

依存关系

此参数不可见,除非将其显式设置为 -1 以外的值。要了解详细信息,请参阅不建议设置采样时间的模块

编程用法

模块参数:SampleTime
类型:字符向量
值:标量或向量
默认值:'-1'

代码生成

指定是否包含代码以检查超出范围的输入值。

复选框结果何时使用

on

生成的代码中未包含用来检查超出范围的断点输入的条件语句。

当输入超出范围时,生成的代码可能会发生未定义的行为。

提高代码效率

off

生成的代码包含用来检查超出范围的输入的条件语句。

适用于安全性至关重要的应用领域

如果您的输入没有超出范围,则可以选中 Remove protection against out-of-range index in generated code 复选框以提高代码效率。默认情况下,此复选框处于清除状态。对于安全性至关重要的应用,不要选中此复选框。要选中 Remove protection against out-of-range index in generated code 复选框,请先检查模型输入是否在范围内。例如:

  1. 清除 Remove protection against out-of-range index in generated code 复选框。

  2. Diagnostic for out-of-range input 参数设置为 Error

  3. 在 Normal 模式下进行模型仿真。

  4. 如果发生超出范围错误,请将它们更正到范围之内,然后再次运行仿真。

  5. 当仿真不再生成超出范围的输入错误时,选中 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'

表属性

注意

如果您选择了 Make table an inputTable Attributes 窗格中的参数将不可用。这种情况下,模块将从带有 T 标签的输入端口继承所有表属性。

指定表数据的最小值。默认值为 [](未指定)。

编程用法

模块参数:TableMin
类型:字符向量
值:标量
默认值:'[]'

指定表数据的最大值。默认值为 [](未指定)。

编程用法

模块参数:TableMax
类型:字符向量
值:标量
默认值:'[]'

指定表数据类型。可以将其设置为:

  • 继承数据类型的规则,例如 “Inherit:Inherit from 'Table data'

  • 内置数据类型的名称,例如 single

  • 数据类型类的名称,例如枚举数据类型类

  • 计算结果为数据类型的表达式,例如 fixdt(1,16,0)

点击 Show data type assistant 按钮 以显示 Data Type Assistant,帮助您设置数据类型属性。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型

编程用法

模块参数:TableDataTypeStr
类型:字符向量
值:'Inherit: Inherit from 'Table data'' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'boolean' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)'|'Enum: <class name>'|'<data type expression>'
默认值:'Inherit: Inherit from 'Table data''

选择此参数可防止定点工具覆盖您对此模块指定的数据类型。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)

编程用法

模块参数:LockScale
类型:字符向量
值:'off' | 'on'
默认值:'off'

模块特性

数据类型

Boolean | double | enumerated | fixed point[a] | half | integer | single

直接馈通

多维信号

可变大小信号

过零检测

[a] 仅当数据为表数据时,此模块才支持定点数据类型。

扩展功能

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

在 R2006a 之前推出