查找表数据的特征
断点向量和表数据的大小
以下约束应用于与查找表模块关联的断点向量和表数据的大小:
您的系统内存限制会制约查找表的总体大小。
查找表必须使用一致的维度,这样表数据的总体大小才能反映每个断点向量的大小。
为了说明第二个约束,假设存在以下构成图中关系的输入和输出值向量。
Vector of input values: [-3 -2 -1 0 1 2 3] Vector of output values: [-3 -1 0 -1 0 1 3]
在此示例中,输入和输出数据具有相同的大小 (1×7),所以一维查找表的数据具有一致的维度。
下面的输入和输出值定义了图中所示的二维查找表。
Row index input values: [1 2 3] Column index input values: [1 2 3 4] Table data: [11 12 13 14; 21 22 23 24; 31 32 33 34]
在此示例中,代表行和列索引的向量大小分别为 1×3 和 1×4。因此,输出表的大小必须为 3×4 才能得到一致的维度。
断点的单调性
表查找操作的第一阶段是将输入与断点关联。搜索算法要求输入断点集必须严格单调递增,即每个后续元素都大于其前面的元素。例如,以下向量
A = [0 0.5 1 1.9 2.1 3]
是一个有效的断点向量,因为每个元素都大于其前面的元素。
注意
虽然断点向量在 double
格式下严格单调,但转换为定点数据类型之后未必如此。
表示等间距断点的表达式
您可以通过以下方法之一表示数据集中的等间距断点。
表达式 | 示例 | 使用此表达式的情形 |
---|---|---|
[first_value:spacing:last_value] | [10:10:200] | 查找表不使用 double 或 single 。 |
first_value + spacing * [0:(last_value-first_value)/spacing] | 1 + (0.02 * [0:450]) | 查找表使用 double 或 single 。 |
由于浮点数据类型不能精确地表示某些数字,所以第二个表达式更适合 double
和 single
。例如,使用 1 + (0.02 * [0:450])
而不是 [1:0.02:10]
。要了解哪些查找表模块支持等间距断点,请参阅查找表模块功能汇总。
除了其他优势外,等间距断点还可以使生成的代码无需执行分割查找并减少内存使用量。有关详细信息,请参阅:
Simulink® 文档中的
fixpt_evenspace_cleanup
Effects of Spacing on Speed, Error, and Memory Usage (Fixed-Point Designer)
Identify questionable fixed-point operations (Embedded Coder)
提示
不要使用 MATLAB® linspace
函数来定义等间距断点。Simulink 使用更严格的容差来检查断点集中的断点是否具有相等间距。如果您使用 linspace
定义查找表的断点,Simulink 将认为断点是非等间距断点。