Main Content

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

Prelookup

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

  • 库:
  • Simulink / Lookup Tables

    HDL Coder / Lookup Tables

  • Prelookup block

说明

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

支持的模块运算

要使用 Prelookup 模块,您必须指定一组断点值。您可以选择是直接在对话框中指定断点值,还是通过将 Source 参数设置为 “Dialog” 或 “Input port” 来向 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。请参阅 Extrapolation method 模块参数以了解详细信息。

端口

输入

全部展开

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 的区间。

依存关系

要启用此端口,请将 Output selection 设置为 “Index and fraction” 或 “Index only”。

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

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

依存关系

要启用此端口,请将 Output selection 设置为 “Index and fraction”。

数据类型: single | double | fixed point

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

依存关系

要启用此端口,请将 Output selection 设置为 “Index and fraction as bus”。

数据类型: bus

参数

全部展开

Main

Breakpoints data

如果将此参数设置为:

  • Explicit values”,则 SourceValue 参数在对话框中可见。

  • Even spacing”,则 First pointSpacingNumber of points 参数在对话框中可见。

  • Breakpoint object”,则 Name 参数在对话框中可见。

编程用法

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

如果将 Source 设置为:

  • Dialog”,则在 Value 下指定断点数据。

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

依存关系

要启用此参数,请将 Specification 设置为 “Explicit values”。

编程用法

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

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

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

注意

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

依存关系

要启用此参数,请将 Specification 设置为 “Explicit values” 并将 Source 设置为 “Dialog”。

编程用法

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

依存关系

要启用此参数,请将 Specification 设置为 “Even spacing”。

编程用法

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

依存关系

要启用此参数,请将 Specification 设置为 “Even spacing”。

编程用法

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

依存关系

要启用此参数,请将 Specification 设置为 “Even spacing”。

编程用法

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

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

依存关系

要启用此参数,请将 Specification 设置为 “Breakpoint object”。

编程用法

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

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

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

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

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

    • 执行非线性量化

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

  • Index and fraction as bus” 输出包含索引和区间比信号的总线信号。对这两种信号使用总线:

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

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

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

    注意

    选择 “Index and fraction as bus” 将在 Data Types 窗格中显示 Output 参数,并将 Output 参数设置为 “Inherit: auto”。更改此默认值可指定用户定义的总线对象。有关定义总线对象的详细信息,请参阅 Output 参数说明。

编程用法

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

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

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

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

    • 如果 u 的输入值在各时间步之间变化不大,选择 “Linear search” 和 Begin index search using previous index result 将获得最佳性能。

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

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

注意

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

  • 断点数据不可调。

  • 索引搜索方法是 “Evenly spaced points”。

编程用法

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

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

编程用法

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

选项包括:

  • Clip

    模块输入模块输出

    小于第一个断点

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

    • 区间比为 0

    大于最后一个断点

    • 倒数第二个断点的索引

    • 区间比为 1

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

  • Linear

    模块输入 模块输出

    小于第一个断点

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

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

    大于最后一个断点

    • 倒数第二个断点的索引

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

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

注意

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

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

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

编程用法

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

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

复选框模块输出

选中 (on)

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

  • 区间比为 0

清除 (off)

  • 倒数第二个断点的索引

  • 区间比为 1

提示

当您对 Prelookup 模块选择 Use last breakpoint for input at or above upper limit 时,还必须对它所连接的 Interpolation Using Prelookup 模块选择 Valid index input may reach last index。此操作允许模块在访问其断点和表数据集的最后一个元素时使用相同的索引约定。

依存关系

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

  • Output only the index 处于清除状态

  • Extrapolation method 为 “Clip

然而,当选择 Output only the indexExtrapolation method 为 “Clip” 时,模块的行为就好像此复选框处于选中状态一样,即使此复选框不可见。

编程用法

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

选项包括:

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

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

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

编程用法

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

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 复选框而输入超出范围,生成的代码将发生未定义的行为。

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

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

  • 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

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

编程用法

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

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

依存关系

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

编程用法

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

Data Types

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

  • 继承数据类型的规则,例如 “Inherit:Same as input

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

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

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

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

提示

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

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

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

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

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

  • 枚举数据:

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

    • 如果选中 Begin index search using previous index result 复选框,则必须使用有序单调递增数据。这种排序可提高性能。

    • 对于枚举数据,Extrapolation method 必须是 Clip

    • 因为区间比为 10,请选择 Output selection > Index only

      如果将仅索引输出选择(即 Index only)设置与 Interpolation Using Prelookup 模块结合使用,请考虑使用 Number of sub-table selection dimensions 参数。

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

  • 该模块不支持枚举数据的超出范围的输入。指定枚举数据时,请将整个枚举集包含在断点数据集中。例如,使用 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
    

依存关系

要启用此参数,请将断点数据 Source 设置为 “Dialog”。

注意

Source 设置为 “Input port” 时,模块会继承 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'

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

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

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

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

编程用法

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

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

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

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

  • 使用 [Slope Bias] 或二进制小数点定标表示形式指定一种定点数据类型。

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

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

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

依存关系

仅当将 Main 选项卡上的 Output selection 设置为 “Index and fraction” 时,才显示此参数。

编程用法

模块参数: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>” 替换为包含索引和区间比信号的总线对象的名称。

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

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

  • 如果将 Output selection 设置为 “Index and fraction”,则总线元素的数据类型和复杂程度必须也满足应用于索引和区间比信号的约束。

要创建具有索引和区间比总线元素的总线对象,请使用类似于以下代码的 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 模块,请选中该模块中的 Require index and fraction as bus 复选框。

注意

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

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

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

myBus.Elements(1).DataType
int32

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

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

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

依存关系

仅当将 Main 选项卡上的 Output selection 设置为 “Index and fraction as bus” 时,才显示此参数。

编程用法

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

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

依存关系

要启用此参数,请在 Main 选项卡上将断点数据 Source 设置为 “Dialog”。

编程用法

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

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

依存关系

要启用此参数,请在 Main 选项卡上将断点数据 Source 设置为 “Dialog”。

编程用法

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

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

编程用法

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

指定定点运算的舍入模式。有关详细信息,请参阅Rounding (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 中推出