Main Content

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

Discrete FIR Filter

构建 FIR 滤波器模型

  • 库:
  • Simulink / Discrete

    HDL Coder / Discrete

    HDL Coder / HDL Floating Point Operations

  • Discrete FIR Filter block

描述

Discrete FIR Filter 模块使用指定的数字 FIR 滤波器单独对输入信号的每个通道进行滤波。该模块可以实现系数固定的静态滤波器以及系数随时间变化的时变滤波器。您可以在仿真期间调整静态滤波器的系数。

此模块随时间的推移单独对输入信号的每个通道进行滤波。输入处理参数用于指定该模块将输入的每个元素作为独立通道处理(基于采样的处理)还是将输入的每个列作为独立通道处理(基于帧的处理)。要执行基于帧的处理,您必须拥有 DSP System Toolbox™ 许可证。

输出维度等于输入维度,但为系数参数指定滤波器抽头矩阵时除外。当您执行此操作时,输出维度取决于您指定的不同滤波器抽头集的数量。

此模块支持自定义状态属性以更高效地自定义和生成代码。有关示例,请参阅Custom State Attributes in Discrete FIR Filter block。在某些条件下,模块还支持 SIMD 代码生成。有关详细信息,请参阅代码生成

此模块的输出在数值上与 DSP System Toolbox Digital Filter Design (DSP System Toolbox) 模块的输出相匹配。

此模块支持 Simulink® 状态记录功能。有关详细信息,请参阅 State

滤波器结构支持

您可以更改通过 Discrete FIR Filter 模块实现的滤波器结构,方法是从滤波器结构参数中选择以下选项之一:

  • 直接型

  • 直接型对称

  • 直接型反对称

  • 直接型转置

  • 格型 MA

您必须拥有可用的 DSP System Toolbox 许可证才能运行具有上述任意滤波器结构(“直接型”除外)的模型。

指定初始状态

Discrete FIR Filter 模块默认将内部滤波器状态初始化为零,这等效于假定过去的输入和输出为零。您可以选择使用初始状态参数为滤波器延迟指定非零初始条件。

要确定您必须指定的初始状态数量以及如何指定这些状态,请参阅有关有效初始状态的表。初始状态参数可采用下表所述的形式之一。

有效初始状态

初始条件描述

标量

模块将滤波器中的所有延迟元素初始化为标量值。

向量或矩阵
(用于将不同的延迟元素应用于每个通道)

每个向量或矩阵元素均为相应通道中的相应延迟元素指定唯一的初始条件:

  • 向量长度等于输入通道数与滤波器中延迟元素数 #_of_filter_coeffs-1(对于“格型 MA”,则为 #_of_reflection_coeffs)的乘积。

  • 矩阵的行数必须与滤波器中的延迟元素数 #_of_filter_coeffs-1(对于“格型 MA”,则为 #_of_reflection_coeffs)相同,并且每一列还须对应输入信号的一个通道。

端口

输入

全部展开

要滤波的输入信号,指定为标量、向量或矩阵。

依存关系

系数来源设置为“对话框参数”时,输入信号的端口不带标签。将系数来源设置为“输入端口”时,输入信号的端口的标签为 In

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

将滤波器系数指定为标量、向量或矩阵。当指定滤波器抽头的行向量时,模块会对输入应用单个滤波器。要为同一输入应用多个滤波器,请指定一介系数矩阵,其中每一行代表一组不同的滤波器抽头。

依存关系

要启用此端口,请将系数来源设置为“输入端口”。

要实现多个滤波器,滤波器结构必须为“直接型”,且输入必须为标量。

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

外部重置信号,指定为标量。当指定的触发事件发生时,模块将状态重置为其初始条件。

提示

此端口的图标根据外部重置参数的值更改。

依存关系

要启用此端口,请将外部重置设置为“上升沿”、“下降沿”、“任一沿”、“电平”或“电平保持”。

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

启用信号,指定为标量。此端口可以控制模块的执行。当此端口的输入非零时,模块被启用;当输入为 0 时,模块被禁用。输入的值在执行模块的同一时间步进行检查。

依存关系

要启用此端口,请选中显示使能端口复选框。

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

输出

全部展开

滤波后的输出信号。

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

参数

全部展开

常设

选择以指定是使用可调参数对话框参数还是通过输入端口指定滤波器系数,这对于时变系数非常有用。

编程用法

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

选择您要模块实现的滤波器结构。

依存关系

如果模型包含 Discrete FIR Filter 模块且该模块实现“直接型”以外的滤波器结构,则您必须有可用的 DSP System Toolbox 许可证才能运行该模型。

编程用法

模块参数FilterStructure
类型:字符向量
值:'Direct form' | 'Direct form symmetric' | 'Direct form antisymmetric' | 'Direct form transposed' | 'Lattice MA'
默认值:'Direct form'

指定传递函数的系数向量。滤波器系数必须指定为行向量。当指定滤波器抽头的行向量时,模块会对输入应用单个滤波器。要为同一输入应用多个滤波器,请指定一介系数矩阵,其中每一行代表一组不同的滤波器抽头。

依存关系

要启用此参数,请将系数来源设置为“对话框参数”。

要实现多个滤波器,滤波器结构必须为“直接型”,且输入必须为标量。

编程用法

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

指定模块是执行基于采样还是基于帧的处理。您可以选择以下选项之一:

  • 元素作为通道(基于采样)” - 将输入的每个元素作为独立通道处理(基于采样的处理)。

  • 列作为通道(基于帧)” - 将输入的每列作为独立通道处理(基于帧的处理)。

    注意

    基于帧的处理需要具有 DSP System Toolbox 许可证。

    有关详细信息,请参阅Sample- and Frame-Based Concepts (DSP System Toolbox)

编程用法

模块参数InputProcessing
类型:字符向量
值:'Columns as channels (frame based)' | 'Elements as channels (sample based)'
默认值:'Elements as channels (sample based)'

指定滤波器状态的初始条件。要了解如何指定初始状态,请参阅指定初始状态

编程用法

模块参数InitialStates
类型:字符向量
值:标量 | 向量 | 矩阵
默认值:'0'

此选项使用使能端口来控制此模块的执行。当此端口的输入非零时,模块被视为启用;当输入为 0 时,模块被视为禁用。输入的值在执行模块的同一时间步进行检查。

编程用法

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

指定用于将状态重置为初始条件的触发事件。

重置模式行为
不重置。
上升沿在上升边重置。
下降沿在下降边重置。
任一沿在上升或下降边重置。
电平

在下列任一情况下重置:

  • 当重置信号在当前时间步为非零值时

  • 当重置信号值从上一时间步的非零更改为当前时间步的零时

电平保持当重置信号在当前时间步为非零值时重置

编程用法

模块参数ExternalReset
类型:字符向量
'None' | 'Rising' | 'Falling' | 'Either' | 'Level' | 'Level hold'
默认值'None'

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

编程用法

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

数据类型

指定直接型对称或直接型反对称滤波器的抽头总和数据类型,这是滤波器在乘以系数之前计算输入总和时使用的数据类型。可以将其设置为:

  • 继承数据类型的规则,例如 “Inherit: Inherit via internal rule

  • 内置整数,例如 int8

  • 数据类型对象,例如 Simulink.NumericType 对象

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

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

依存关系

仅当滤波器结构设置为“直接型对称”或“直接型反对称”时,此参数才可见。

编程用法

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

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

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

  • 内置整数,例如 int8

  • 数据类型对象,例如 Simulink.NumericType 对象

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

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

编程用法

模块参数 CoeffDataTypeStr
类型:字符向量
值:'Inherit: Same word length as input'| 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | '<data type expression>'
默认值:'Inherit: Same wordlength as input'

指定滤波器系数应具有的最小值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定滤波器系数应具有的最大值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定乘积输出的数据类型。可以将其设置为:

  • 继承数据类型的规则,例如 “Inherit: Inherit via internal rule

  • 内置数据类型,例如 int8

  • 数据类型对象,例如 Simulink.NumericType 对象

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

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

编程用法

模块参数 ProductDataTypeStr
类型:字符向量
值:'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16,0)' | '<data type expression>'
默认值:'Inherit: Inherit via internal rule'

指定累加器数据类型。可以将其设置为:

  • 继承数据类型的规则,例如 “Inherit: Inherit via internal rule

  • 内置数据类型,例如 int8

  • 数据类型对象,例如 Simulink.NumericType 对象

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

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

编程用法

模块参数 AccumDataTypeStr
类型:字符向量
值:'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'Inherit: Same as product output' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16,0)' | '<data type expression>'
默认值:'Inherit: Inherit via internal rule'

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

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

  • 内置整数,例如 int8

  • 数据类型对象,例如 Simulink.NumericType 对象

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

依存关系

要启用此参数,请将滤波器结构设置为“格型 MA”。

编程用法

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

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

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

  • 内置数据类型,例如 int8

  • 数据类型对象,例如 Simulink.NumericType 对象

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

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

编程用法

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

Simulink 检查的输出范围的下限值。

Simulink 使用最小值执行下列操作:

注意

输出最小值不会饱和或剪切实际输出信号。请改用 Saturation 模块。

编程用法

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

Simulink 检查的输出范围的上限值。

Simulink 使用最大值执行下列操作:

注意

输出最大值不会饱和或剪切实际输出信号。请改用 Saturation 模块。

编程用法

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

选择此选项可锁定数据类型设置,防止使用定点工具和定点顾问进行更改。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)

编程用法

模块参数:LockScale
值:'off' | 'on'
默认值:'off'

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

编程用法

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

指定对溢出是进行饱和处理还是绕回处理。

操作原理说明对溢出的影响示例

选中此复选框 (on)。

您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。

将溢出饱和处理为数据类型能够表示的最小值或最大值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。如果选中此复选框,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。

不选中此复选框 (off)。

您需要优化所生成代码的效率。

您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除

溢出会绕回到由数据类型表示的适当值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。清除该复选框时,软件会将导致溢出的值解释为 int8,这可能产生意外结果。例如,以 int8 表示的模块结果 130(二进制 1000 0010)为 -126。

如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。

编程用法

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

模型示例

模块特性

数据类型

double | fixed point | integer | single

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

版本历史记录

在 R2008a 中推出