Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

Direct Lookup Table (n-D)

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

  • Direct Lookup Table (n-D) block

库:
Simulink / Lookup Tables
HDL Coder / Lookup Tables

描述

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

如果从二维表中选择向量,则输出向量可以是列或行,具体取决于模型配置参数设置数学和数据类型 > 使用针对行优先数组布局优化的算法。模块输入是从 0 开始的索引(有关详细信息,请参阅输入从表中选择的对象参数)。

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

模块输入和输出

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

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

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

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

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

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

模块图标的外观变化

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

当您使用表数据参数时,您将看到以下默认列优先行为的图标。选择配置参数数学和数据类型 > 使用针对行优先数组布局优化的算法时,某些图标会有所不同。

输入信号从表中选择的对象表维数
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 维数组。表大小必须与维数参数的维度相匹配。模块的输出数据类型与表数据类型相同。

依存关系

要启用此端口,请选中将表作为输入复选框。

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

输出

全部展开

输出切片,作为标量、向量或二维矩阵提供。模块输出的大小由输入从表中选择的对象参数的设置决定。输出数据类型与表数据类型相同。

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

参数

全部展开

常设

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

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

1、2、3 或 4

从下拉列表中选择值。

更高的表维数

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

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

编程用法

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

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

编程用法

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

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

提示

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

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

依存关系

要启用表数据字段,请清除将表作为输入复选框。

编程用法

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

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

选择用于索引的输入端口个数
元素 表维数
向量 表维数 -1
二维矩阵 表维数 -2

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

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

提示

设置数学和数据类型 > 使用针对行优先数组布局优化的算法配置参数后,Direct Lookup Table 模块行为会从列优先更改为行优先。对于此模块,列优先算法和行优先算法在输出计算中可能有着语义上的不同,从而导致数值不同。例如,假设输入从表中选择的对象参数设置为向量。所选向量的元素在表存储内存中是连续的。下表列出了不同表维度对应的列优先和行优先算法:

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

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

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

要让此模块使用行优先算法,请更改模型的数学和数据类型 > 使用针对行优先布局优化的算法配置参数并重新编译。模块图标会发生变化,以反映针对行优先行为优化的算法的更改。

有关行优先支持的详细信息,请参阅Code Generation of Matrices and Arrays (Simulink Coder)

编程用法

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

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

  • - 不产生任何响应。

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

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

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

编程用法

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

指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。有关详细信息,请参阅指定采样时间

依存关系

仅当您将此参数设置为 -1 以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块

编程用法

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

代码生成

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

复选框结果何时使用

on

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

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

提高代码效率

off

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

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

如果您的输入没有超出范围,则可以选中删除生成代码中防止超范围索引的代码复选框以提高代码效率。默认情况下,此复选框处于清除状态。对于安全性至关重要的应用,不要选中此复选框。要选中删除生成代码中防止超范围索引的代码复选框,请先检查模型输入是否在范围内。例如:

  1. 清除删除生成代码中防止超范围索引的代码复选框。

  2. 输入超出范围的诊断参数设置为 Error

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

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

  5. 当仿真不再生成超出范围的输入错误时,选中删除生成代码中防止超范围索引的代码复选框。

    注意

    如果选中了删除生成代码中防止超范围索引的代码复选框而输入超出范围,生成的代码将发生未定义的行为。

根据您的具体应用,您可以运行以下模型顾问检查,以验证此复选框的使用情形:

  • 按产品 > Embedded Coder > 标识哪些查找表模块会生成检查超范围值的高成本代码

  • 按产品 > Simulink Check > 建模标准 > DO-178C/DO-331 检查 > 检查 Lookup Table 模块的使用情形

有关模型顾问的详细信息,请参阅运行模型顾问检查

此外,要确定选中此复选框是否安全,如果您拥有 Simulink® Design Verifier™ 许可证,请考虑使用 Detect Block Input Range Violations (Simulink Design Verifier) 检查。

编程用法

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

表属性

注意

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

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

编程用法

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

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

编程用法

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

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

  • 继承数据类型的规则,例如继承: 从 '表数据' 继承

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

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

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

数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 the Show data type assistant button。有关详细信息,请参阅使用数据类型助手指定数据类型

编程用法

模块参数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 pointa | half | integer | single

直接馈通

多维信号

可变大小信号

过零检测

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

扩展功能

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

版本历史记录

在 R2006a 之前推出