Main Content

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

Prelookup

计算 Interpolation Using Prelookup 模块的索引和区间比

  • Prelookup block

库:
Simulink / Lookup Tables
HDL Coder / Lookup Tables

描述

Prelookup 模块计算索引和区间比,这些数据说明输入值 u 与断点数据集的相对关系。Prelookup 模块最适合与 Interpolation Using Prelookup 模块结合使用。将生成的索引和区间比值馈送给 Interpolation Using Prelookup 模块,以便对 n 维表进行插值。这两个模块采用分布式算法。二者结合使用时,执行的运算与 n-D Lookup Table 模块中的积分算法相同。但是,相比 n-D Lookup Table 模块,Prelookup 和 Interpolation Using Prelookup 模块提供了更大的灵活性以及更高效的仿真和代码生成。有关详细信息,请参阅 执行效率

支持的模块运算

要使用 Prelookup 模块,您必须指定一组断点值。您可以选择是直接在对话框中指定断点值,还是通过将参数设置为对话框输入端口来向 bp 输入端口馈送值。通常情况下,此断点数据集对应于 Interpolation Using Prelookup 模块中一个维度的表数据。Prelookup 模块通过计算以下项为每个输入值 u 生成一对输出:

  • 小于或等于 u 且构成包含 u 的区间的断点集元素的索引

  • 区间比(0 ≤ f < 1),表示 u 在其所在断点区间前后索引值间的归一化位置

例如,如果断点数据集是 [0 5 10 20 50 100] 且输入值 u 是 55,则索引为 4 且区间比值为 0.1。索引和区间比的标签在 Prelookup 模块图标上显示为 kf。索引值从零开始。

对于超出范围的输入,区间比可以为负或大于 1。请参阅外插方法模块参数以了解详细信息。

端口

输入

全部展开

Prelookup 模块接受 Simulink® 支持的任何数值数据类型的实数值信号,但布尔类型除外。Prelookup 模块支持信号和断点数据的定点数据类型。

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

Prelookup 模块接受以 Simulink 支持的任何数值数据类型的断点数据表示的实数值信号,但布尔类型除外。

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

输出

全部展开

从 0 开始的索引 k 是实数值整数,它指定包含输入 u 的区间。

依存关系

要启用此端口,请将输出选择设置为索引和区间比仅索引

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

比值 f 表示区间 k 内输入 u 的归一化位置。

依存关系

要启用此端口,请将输出选择设置为索引和区间比

数据类型: single | double | fixed point

将索引 k 和区间比 f 作为总线对象输出可以帮助简化模型。

依存关系

要启用此端口,请将输出选择设置为索引和区间比作为总线

数据类型: bus

参数

全部展开

常设

断点数据

如果将此参数设置为:

  • 显式值,则参数在对话框中可见。

  • 等间距,则第一个点间距点数参数在对话框中可见。

  • 断点对象,则名称参数在对话框中可见。

编程用法

模块参数BreakpointsSpecification
类型:字符向量
值:'Explicit values' | 'Even spacing' | 'Breakpoint object'
默认值:'Explicit values'

如果将设置为:

  • 对话框,则在下指定断点数据。

  • 输入端口,请验证上游信号为 bp 输入端口提供了断点数据。每个断点数据集必须是包含两个或更多元素的严格单调递增的向量。对于此选项,您的模块从 bp 输入端口继承断点属性。

依存关系

要启用此参数,请将设定设置为显式值

编程用法

模块参数BreakpointsDataSource
类型:字符向量
值:'Dialog' | 'Input port'
默认值:'Dialog'

显式指定断点数据。每个断点数据集必须是包含两个或更多元素的严格单调递增的向量。对于此选项,请在数据类型窗格上指定其他断点属性。

要打开查找表编辑器,请点击编辑(请参阅Edit Lookup Tables)。

注意

当您将设定设置为显式值设置为输入端口时,请验证上游信号为 bp 输入端口提供了断点数据。每个断点数据集必须是包含两个或更多元素的严格单调递增的向量。对于此选项,您的模块从 bp 输入端口继承断点属性(包括数据类型)。

依存关系

要启用此参数,请将设定设置为显式值并将设置为对话框

编程用法

模块参数BreakpointsData
类型:字符向量
值:包含两个或更多元素的严格单调递增值的向量
默认值:'[10:10:110]'

依存关系

要启用此参数,请将设定设置为等间距

编程用法

模块参数BreakpointsFirstPoint
类型:字符向量
值:real-valued scalar
默认值:'10'

依存关系

要启用此参数,请将设定设置为等间距

编程用法

模块参数BreakpointsSpacing
类型:字符向量
值:real-valued, positive scalar
默认值:'10'

依存关系

要启用此参数,请将设定设置为等间距

编程用法

模块参数BreakpointsNumPoints
类型:字符向量
值:real-valued, positive scalar
默认值:'11'

指定 Simulink.Breakpoint 对象的名称。一个断点对象引用 Simulink 断点对象。如果 Simulink.Breakpoint 对象不存在,请点击操作按钮 并选择创建。新断点对象的对应参数会自动用模块信息填充。

依存关系

要启用此参数,请将设定设置为断点对象

编程用法

模块参数BreakpointObject
类型:字符向量
值:Simulink.Breakpoint 对象
默认值:''
算法

如果您希望模块输出索引和区间比,可以指定模块是输出单个信号还是输出同时包含索引和区间比信号的总线信号。

  • 仅索引仅输出索引,不输出区间比。此选项的典型应用包括:

    • 馈送给 Direct Lookup Table (n-D) 模块,在区间上无插值

    • 馈送给为 Interpolation Using Prelookup 模块选择的子表的端口

    • 执行非线性量化

  • 索引和区间比输出单个信号形式的索引和区间比。

  • 索引和区间比作为总线输出包含索引和区间比信号的总线信号。对这两种信号使用总线:

    • 通过将这两种信号关联在一起来简化模型

    • 为 AUTOSAR 4.0 库创建测试点 DpResult 结构体

    • 对于 AUTOSAR 4.0 库,避免当 PrelookupInterpolation Using Prelookup 模块处于不同模型中时在代码生成过程中创建额外副本

    注意

    选择索引和区间比作为总线将在数据类型窗格中显示输出参数,并将输出参数设置为 Inherit: auto。更改此默认值可指定用户定义的总线对象。有关定义总线对象的详细信息,请参阅输出参数描述。

编程用法

模块参数OutputSelection
类型:字符向量
值:'Index and fraction' | 'Index and fraction as bus' | 'Index only'
默认值:'Index and fraction'

每种搜索方法在不同情况下均有各自的速度优势:

  • 对于等间距断点集(例如,10、20、30 等),您可以选择等间距点来计算表索引,以获得最佳速度。此算法仅使用断点集的前两个断点来确定其余点的偏移量和间距。

  • 对于非等间距断点集,请遵循以下原则:

    • 如果 u 的输入值在各时间步之间变化不大,选择线性搜索使用上一个索引结果开始索引搜索将获得最佳性能。

    • 如果 u 的输入值在每个时间步跳过一个或两个以上的表间隔,则选择二分搜索将获得最佳性能。

对于严重依赖查找表的模型,选择次优索引搜索方法可能会导致性能下降。

注意

在以下情况下,生成的代码只存储第一个断点、间距和断点数量:

  • 断点数据不可调。

  • 索引搜索方法是等间距点

编程用法

模块参数IndexSearchMethod
类型:字符向量
'Evenly spaced points' | 'Linear search' | 'Binary search'
默认值:'Binary search'

对于相对于间隔大小而言变化缓慢的 u 输入值,启用此选项可以提高性能。否则,线性搜索和二分搜索方法可能需要更长的时间,尤其是对于大型断点集来说。

编程用法

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

选项包括:

  • 裁剪

    模块输入模块输出

    小于第一个断点

    • 第一个断点的索引(例如 0

    • 区间比为 0

    大于最后一个断点

    • 倒数第二个断点的索引

    • 区间比为 1

    假定范围是 [1 2 3] 并且您选择了此选项。如果 u0.5,则索引为 0,且区间比为 0。如果 u3.5,则索引为 1,且区间比为 1

  • 线性

    模块输入 模块输出

    小于第一个断点

    • 第一个断点的索引(例如 0

    • 表示从 u 到第一个断点的线性距离的区间比

    大于最后一个断点

    • 倒数第二个断点的索引

    • 表示从倒数第二个断点到 u 的线性距离的区间比

    假定范围是 [1 2 3] 并且您选择了此选项。如果 u0.5,则索引为 0,且区间比为 -0.5。如果 u3.5,则索引为 1,且区间比为 1.5

注意

仅当满足以下所有条件时,Prelookup 模块才支持线性外插:

  • 输入 u、断点数据和小数输出使用浮点数据类型。

  • 索引使用内置的整数数据类型。

要使用 PrelookupInterpolation Using Prelookup 模块来复制 n-D Lookup Table 模块行为,用于 PrelookupInterpolation Using Prelookup 模块的外插方法必须与仅使用 n-D Lookup Table 模块时相同。例如,要获得与外插方法设置为线性n-D Lookup Table 模块相同的行为,请将 PrelookupInterpolation Using Prelookup 模块的外插方法设置为线性

编程用法

模块参数ExtrapMethod
类型:字符向量
值:'Clip' | 'Linear'
默认值:'Clip'

指定如何对大于或等于最后一个断点的 u 的输入值进行索引。索引值从零开始。当输入等于最后一个断点时,模块输出有所不同,如下所示。

复选框模块输出

选中 (on)

  • 断点数据集中最后一个元素的索引

  • 区间比为 0

清除 (off)

  • 倒数第二个断点的索引

  • 区间比为 1

提示

当您对 Prelookup 模块选择将最后一个断点用于等于或高于上限的输入时,还必须对它所连接的 Interpolation Using Prelookup 模块选择有效的索引输入可到达最后一个索引。此操作允许模块在访问其断点和表数据集的最后一个元素时使用相同的索引约定。

依存关系

仅在以下情况下,此复选框才可见:

  • 仅输出索引处于清除状态

  • 外插方法裁剪

然而,当选择仅输出索引外插方法裁剪时,模块的行为就好像此复选框处于选中状态一样,即使此复选框不可见。

编程用法

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

选项包括:

  • - 不产生任何响应。

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

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

编程用法

模块参数DiagnosticForOutOfRangeInput
类型:字符向量
值:'None' | 'Warning' | 'Error'
默认值:'None'
代码生成
复选框结果何时使用

On

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

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

提高代码效率

Off

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

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

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

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

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

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

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

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

    注意

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

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

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

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

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

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

编程用法

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

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

依存关系

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

编程用法

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

数据类型

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

  • 继承数据类型的规则,例如继承: 与输入相同

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

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

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

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

提示

  • 对于以下情况,指定不同于输入 u 的数据类型的断点数据类型:

    • 使用比输入信号 u 的类型更小的数据类型存储断点数据时,对内存的要求较低

    • 在其输入 u 具有不同数据类型的两个 Prelookup 模块之间共享预定标的断点数据

    • 在为输入 u 具有不同数据类型的模块生成的代码中共享自定义存储断点数据

  • 如果断点数据类型或其对应的输入数据类型具有定点数据类型,请为二者指定相同的斜率和偏置。

  • 枚举数据:

    • 断点支持无序枚举数据。因此,线性搜索也是无序的,这就提供了灵活性,但可能影响性能。搜索从断点中的第一个元素开始。

    • 如果选中使用上一个索引结果开始索引搜索复选框,则必须使用有序单调递增数据。这种排序可提高性能。

    • 对于枚举数据,外插方法必须是 Clip

    • 因为区间比为 10,请选择输出选择 > 仅索引

      如果将仅索引输出选择(即“仅索引”)设置与 Interpolation Using Prelookup 模块结合使用,请考虑使用子表选择维数参数。

以下是对此模块使用枚举数据的限制:

  • 该模块不支持枚举数据的超出范围的输入。指定枚举数据时,请将整个枚举集包含在断点数据集中。例如,使用 enumeration 函数。

  • 当断点数据源设置为 Inport port 时,枚举数据类型必须将 0 设置为默认值。例如,对于此枚举类,GEAR1 的默认值必须是 0

    classdef(Enumeration) Gears < Simulink.IntEnumType 
        enumeration 
            GEAR1(1), 
            GEAR2(2), 
            GEAR3(4), 
            GEAR4(8), 
            SPORTS(16), 
            REVERSE(32), 
            NEUTRAL(0) 
        end 
    end
    

依存关系

要启用此参数,请将断点数据设置为对话框

注意

设置为输入端口时,模块会继承 bp 输入端口的所有断点属性(数据类型、最小值和最大值)。

编程用法

模块参数BreakpointDataTypeStr
类型:字符向量
值:'Inherit: Same as input' | 'Inherit: Inherit from 'Breakpoint data'' | 'double' | 'single' | '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 input'

指定可以对断点数据集中的所有元素进行索引的数据类型。您可以:

  • 从列表中选择一种内置整数数据类型。

  • 使用定点表示指定一种整数数据类型。

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

编程用法

模块参数IndexDataTypeStr
类型:字符向量
值:
'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | '<data type expression>'
默认值:'uint32'

指定区间比的数据类型。您可以:

  • 从列表中选择一种内置数据类型。

  • 通过内部规则指定数据类型继承。

  • 使用 [斜率 偏置] 或二进制小数点定标表示指定一种定点数据类型。

    • 如果您使用 [斜率 偏置] 表示,则定标必须为平凡 - 即斜率为 1 且偏置为 0

    • 如果您使用二进制小数点表示,则固定的二次幂指数必须小于或等于零。

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

依存关系

仅当将常设选项卡上的输出选择设置为索引和区间比时,才显示此参数。

编程用法

模块参数FractionDataTypeStr
类型:字符向量
值:'Inherit: Inherit via internal rule' | 'double' | 'single' | 'fixdt(1,16,0)' | '<data type expression>'
默认值:'Inherit: Inherit via internal rule'

要输出虚拟总线,请使用 Inherit: auto 设置。生成的虚拟总线包含两个元素:索引信号和区间比信号。

要输出和指定非虚拟总线,请使用 Bus: <object name> 模板。将 <object name> 替换为包含索引和区间比信号的总线对象的名称。

  • 总线对象必须包含两个元素。第一个元素对应于索引信号,第二个元素对应于区间比信号。

  • 索引和区间比总线元素信号不能是总线信号。

  • 如果将输出选择设置为索引和区间比,则总线元素的数据类型和复杂程度必须也满足应用于索引和区间比信号的约束。

要创建具有索引和区间比总线元素的总线对象,请使用类似于以下代码的 MATLAB® 代码,并自定义总线对象名称以及总线元素的名称和数据类型。

% Bus object: kfBus 
elems(1) = Simulink.BusElement;
elems(1).Name = 'Index';
elems(1).DataType = 'int8';
 
elems(2) = Simulink.BusElement;
elems(2).Name = 'Fraction';
elems(2).DataType = 'double';
 
kfBus = Simulink.Bus;
kfBus.Elements = elems;
clear elems;

或者,您可以使用类型编辑器创建或修改要与 Prelookup 模块结合使用的总线对象。

如果将总线输出信号从此模块馈送到 Interpolation Using Prelookup 模块,请选中该模块中的需要以总线输出的索引和区间比复选框。

注意

使用定点工具数据类型选项会将总线对象覆盖为新总线对象,这些新总线对象将定点数据类型替换为浮点数据类型。

Prelookup 模块结合使用的被覆盖总线对象会导致错误,因为该模块不接受总线中的第一个元素为浮点数据类型。

如果您遇到此问题,请使用 Fix 按钮重新定义原始总线对象并防止其被覆盖。例如,假设您将总线对象的第一个元素定义为 int32

myBus.Elements(1).DataType
int32

点击 Fix 按钮会重新定义第一个总线元素:

myBus.Elements(1).DataType = 'fixdt(''int32'',''DataTypeOverride'',''Off'')'

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

依存关系

仅当将常设选项卡上的输出选择设置为索引和区间比作为总线时,才显示此参数。

编程用法

模块参数OutputBusDataTypeStr
类型:字符向量
值:'Inherit: auto' | 'Bus: <object name>' | '<data type expression>'
默认值:'Inherit: auto'

指定断点数据可以具有的最小值。默认值为 [](未指定)。

依存关系

要启用此参数,请在常设选项卡上将断点数据设置为对话框

编程用法

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

指定断点数据可以具有的最大值。默认值为 [](未指定)。

依存关系

要启用此参数,请在常设选项卡上将断点数据设置为对话框

编程用法

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

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

编程用法

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

指定定点运算的舍入模式。有关详细信息,请参阅舍入 (Fixed-Point Designer)

模块参数始终舍入到最邻近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB 舍入函数输入表达式。

编程用法

模块参数RndMeth
类型:字符向量
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
默认值:'Floor'

模块特性

数据类型

double | enumerated | fixed point | integer | single

直接馈通

多维信号

可变大小信号

过零检测

详细信息

全部展开

扩展功能

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

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

版本历史记录

在 R2006b 中推出