Discrete FIR Filter
构建 FIR 滤波器模型
库:
Simulink /
Discrete
HDL Coder /
Discrete
HDL Coder /
HDL Floating Point Operations
描述
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 模块默认将内部滤波器状态初始化为零,这等效于假定过去的输入和输出为零。您可以选择使用初始状态参数为滤波器延迟指定非零初始条件。
要确定您必须指定的初始状态数量以及如何指定这些状态,请参阅有关有效初始状态的表。初始状态参数可采用下表所述的形式之一。
有效初始状态
初始条件 | 描述 |
---|---|
标量 | 模块将滤波器中的所有延迟元素初始化为标量值。 |
向量或矩阵 | 每个向量或矩阵元素均为相应通道中的相应延迟元素指定唯一的初始条件:
|
示例
端口
输入
In — 输入信号
标量 | 向量 | 矩阵
要滤波的输入信号,指定为标量、向量或矩阵。
Discrete FIR Filter 模块接受 Simulink 支持的任何数值数据类型的实信号和复信号。
依存关系
将系数来源设置为对话框参数时,输入信号的端口不带标签。将系数来源设置为输入端口时,输入信号的端口的标签为 In。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
复数支持: 是
Num — 滤波器系数
标量 | 向量
将滤波器系数指定为标量、向量或矩阵。当指定滤波器抽头的行向量时,模块会对输入应用单个滤波器。
依存关系
要启用此端口,请将系数来源设置为输入端口。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
External reset — 外部重置信号
标量
外部重置信号,指定为标量。当指定的触发事件发生时,模块将状态重置为其初始条件。
提示
此端口的图标根据外部重置参数的值更改。
依存关系
要启用此端口,请将外部重置设置为上升沿、下降沿、任一沿、电平或电平保持。
数据类型: 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
输出
Port_1 — 滤波后的输出信号
标量 | 向量 | 矩阵
滤波后的输出信号,以标量、向量或矩阵形式返回。Discrete FIR Filter 模块输出 Simulink 支持的任何数值数据类型的实信号和复信号。
当模块的输入为定点时,模块输出的数据类型取决于您在输出参数中指定的值。当输入为浮点时,输出数据类型与输入数据类型匹配,因为浮点继承优先于定点设置。
当您将采样时间设置为 -1
时,输出信号的采样时间与输入信号 In 的采样时间相同。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
参数
常设
系数来源 — 系数的信源
对话框参数 (默认) | 输入端口
选择以指定是使用可调参数对话框参数还是通过输入端口指定滤波器系数,这对于时变系数非常有用。
编程用法
模块参数:CoefSource
|
类型:字符向量 |
值:'Dialog parameters' | 'Input port'
|
默认值:'Dialog parameters'
|
滤波器结构 — 滤波器结构
直接型 (默认) | 直接型对称 | 直接型反对称 | 直接型转置 | 格型 MA
选择您要模块实现的滤波器结构。有关详细信息,请参阅算法。
依存关系
如果模型包含 Discrete FIR Filter 模块且该模块实现直接型以外的滤波器结构,则您必须有可用的 DSP System Toolbox 许可证才能运行该模型。
编程用法
模块参数:FilterStructure |
类型:字符向量 |
值:'Direct form' | 'Direct form symmetric' | 'Direct form antisymmetric' | 'Direct form transposed' | 'Lattice MA' |
默认值:'Direct form'
|
系数 — 滤波器系数
[0.5 0.5]
(默认) | 向量 | 矩阵
指定传递函数的系数向量。滤波器系数必须指定为行向量。当指定滤波器抽头的行向量时,模块会对输入应用单个滤波器。要为同一输入应用多个滤波器,请指定一介系数矩阵,其中每一行代表一组不同的滤波器抽头。
依存关系
要启用此参数,请将系数来源设置为对话框参数。
要实现多个滤波器,滤波器结构必须为直接型,且输入必须为标量。
编程用法
模块参数: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)'
|
初始状态 — 滤波器状态的初始条件
0
(默认) | 标量 | 向量 | 矩阵
显示使能端口 — 创建使能端口
off
(默认) | on
此选项使用使能端口来控制此模块的执行。当此端口的输入非零时,模块被视为启用;当输入为 0
时,模块被视为禁用。输入的值在执行模块的同一时间步进行检查。
编程用法
模块参数:ShowEnablePort
|
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
外部重置 — 外部状态重置
无 (默认) | 上升沿 | 下降沿 | 任一沿 | 电平 | 电平保持
指定用于将状态重置为初始条件的触发事件。
重置模式 | 行为 |
---|---|
无 | 不重置。 |
上升沿 | 在上升边重置。 |
下降沿 | 在下降边重置。 |
任一沿 | 在上升或下降边重置。 |
电平 | 在下列任一情况下重置:
|
电平保持 | 当重置信号在当前时间步为非零值时重置 |
编程用法
模块参数:ExternalReset |
类型:字符向量 |
值:'None' | 'Rising' | 'Falling' | 'Either' | 'Level' | 'Level hold' |
默认值:'None' |
采样时间(-1 表示继承) — 采样之间的时间间隔
-1
(默认) | 标量 | 向量
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1
。有关详细信息,请参阅指定采样时间。
依存关系
仅当您将此参数设置为 -1
以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
模块参数:SampleTime |
类型:字符串标量或字符向量 |
默认值:"-1" |
数据类型
抽头总和 — 抽头总和数据类型
Inherit: Same as input
(默认) | Inherit: Inherit via internal rule
| int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16,0) | <数据类型表达式>
指定直接型对称或直接型反对称滤波器的抽头总和数据类型,这是滤波器在乘以系数之前计算输入总和时使用的数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 从内部规则继承
内置整数,例如
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 wordlength as input
(默认) | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16,0) | <数据类型表达式>
指定系数数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 与输入的字长相同
内置整数,例如
int8
数据类型对象,例如
Simulink.NumericType
对象计算结果为数据类型的表达式,例如
fixdt(1,16,0)
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
编程用法
模块参数: CoefDataTypeStr |
类型:字符向量 |
值:'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 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16,0) | <数据类型表达式>
指定乘积输出的数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 从内部规则继承
内置数据类型,例如
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 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16,0) | <数据类型表达式>
指定累加器数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 从内部规则继承
内置数据类型,例如
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 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16,0) | <数据类型表达式>
指定状态数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 与累加器相同
内置整数,例如
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 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16) | fixdt(1,16,0) | <数据类型表达式>
指定输出数据类型。可以将其设置为:
继承数据类型的规则,例如继承: 与累加器相同
内置数据类型,例如
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 使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最小值不会饱和或剪切实际输出信号。请改用 Saturation 模块。
编程用法
模块参数:OutMin |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出最大值 — 范围检查的最大输出值
[]
(默认) | 标量
Simulink 检查的输出范围的上限值。
Simulink 使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最大值不会饱和或剪切实际输出信号。请改用 Saturation 模块。
编程用法
模块参数:OutMax |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
锁定数据类型设置以防止被定点工具更改 — 防止定点工具覆盖数据类型
off
(默认) | on
选择此选项可锁定数据类型设置,防止使用定点工具和定点顾问进行更改。有关详细信息,请参阅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' |
对整数溢出进行饱和处理 — 溢出操作的方法
off
(默认) | on
指定对溢出是进行饱和处理还是绕回处理。
操作 | 原理说明 | 对溢出的影响 | 示例 |
---|---|---|---|
选中此复选框 ( | 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 | 将溢出饱和处理为数据类型能够表示的最小值或最大值。 |
|
不选中此复选框 ( | 您需要优化所生成代码的效率。 您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。 | 溢出会绕回到由数据类型表示的适当值。 |
|
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
详细信息
定点信号的滤波器结构图
下图显示了 Discrete FIR Filter 模块内用于定点信号的滤波器结构和数据类型。
直接型
不能在此结构体的模块封装上指定状态数据类型,因为输入状态与输入具有相同的数据类型。
直接型对称
不能在此结构体的模块封装上指定状态数据类型,因为输入状态与输入具有相同的数据类型。
直接型反对称
不能在此结构体的模块封装上指定状态数据类型,因为输入状态与输入具有相同的数据类型。
直接型转置
格型 MA
算法
以下是 Discrete FIR Filter 模块中使用的结构图。
直接型
直接型对称
假定滤波器系数对称。该模块仅使用系数的前半部分进行滤波。
直接型反对称
假定滤波器系数反对称。该模块仅使用系数的前半部分进行滤波。
直接型转置
当输入或系数为复数时,状态为复数。
格型 MA
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
此模块支持自定义状态属性以更高效地自定义和生成代码。要访问或设置这些属性,请打开模型数据编辑器。在建模选项卡上,点击模型数据编辑器。有关示例,请参阅Custom State Attributes in Discrete FIR Filter block。
使用 Intel AVX2 代码替换库生成 SIMD 代码
注意
需要 Embedded Coder® 许可证
Discrete FIR Filter 模块支持在以下情况下使用 Intel AVX2 代码替换库生成 SIMD 代码:
滤波器结构设置为直接型或直接型转置。
输入处理设置为列作为通道(基于帧)。
输入信号是具有实数滤波器系数的实数值。
当滤波器结构设置为直接型时,输入信号是复数值且具有实数或复数滤波器系数。
输入信号的数据类型为
single
或double
。
利用目标硬件指令集扩展生成 SIMD 代码 (自 R2022b 起)
注意
需要 Simulink Coder™ 或 Embedded Coder 许可证
在以下情况下,您可以使用模型配置参数利用目标硬件指令集扩展为所有 Intel® 平台上的 Discrete FIR Filter 模块生成 SIMD 代码:
您将滤波器结构设置为直接型
您将输入处理设置为列作为通道(基于帧)
输入信号是具有实数滤波器系数的实数值
输入信号是实数值或复数值。
输入信号的数据类型为
single
或double
此外,适当地配置您的模型。
在 Simulink 模型窗口的建模选项卡中,点击模型设置,并在代码生成下配置这些参数。
在优化窗格中:
在利用目标硬件指令集扩展参数中提供特定指令集。
选择优化归约参数。
在优化级别下,将级别设置为最大值,将优先级设置为最大化执行速度。
在接口窗格中的软件环境下,清除非有限数。
要使用此工作流从此模块生成 SIMD 代码,请参阅Use Intel AVX2 Code Replacement Library to Generate SIMD Code from Simulink Blocks (DSP System Toolbox)。
对于受支持模块上的计算密集型运算,SIMD 固有函数可以显著提高在 Intel 平台上生成代码的性能。有关详细信息,请参阅Optimize Code for Reduction Operations by Using SIMD (Simulink Coder)。要从此模块生成 SIMD 代码,请参阅Generate SIMD Code from Simulink Blocks for Intel Platforms (Simulink Coder)。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
对于适合硬件的验证和重置控制信号,要在 Simulink 中对硬件延迟行为精确建模,请改用 Discrete FIR Filter (DSP HDL Toolbox) 模块。
为了减小面积或提高速度,Discrete FIR Filter 模块支持模块级优化或子系统级优化。有关可用模块级优化参数的详细信息,请参阅模块优化。启用模块优化时,模块无法参与子系统优化。当您的设计是一个单通道滤波器时,请使用模块优化。使用子系统优化可跨多个通道或多个滤波器共享资源。对于要参与子系统级优化的模块,请将架构设置为完全并行。请参阅Subsystem Optimizations for Filters (HDL Coder)。
HDL Coder 支持对 Discrete FIR Filter 模块使用向量输入,其中向量的每个元素表示一个独立的通道。
将向量信号连接到 Discrete FIR Filter 模块输入端口。
将输入处理指定为元素作为通道(基于采样)。
要通过在通道之间共享滤波器核来减小面积,请将 ChannelSharing 属性设置为通道数量。
HDL Coder 支持对 Discrete FIR Filter 模块使用可编程滤波器。
在过滤器模块封装上,将系数来源设置为输入端口。
将向量信号连接到
Num
系数端口。
以下情况不支持可编程滤波器:
分布式算术 (DA)
CoeffMultipliers 设置为 csd 或 factored-csd
HDL Coder 支持对 Discrete FIR Filter 模块使用向量输入,其中向量的每个元素表示一个时间点上的采样。一个输入向量最多可包含 512 个采样。基于帧的实现支持定点输入和输出数据类型,并使用全精度内部数据类型。您可以使用具有实系数的实输入信号、具有实系数的复输入信号或具有复系数的实输入信号。您也可以使用具有可编程系数的基于帧的输入。
将向量信号连接到 Discrete FIR Filter 模块输入端口。
将输入处理指定为列作为通道(基于帧),并将滤波器结构设置为直接型或直接型转置。对于具有可编程系数的基于帧的输入,请将滤波器结构设置为直接型。
右键点击该模块并打开 HDL 代码 > HDL 模块属性。将架构设置为基于帧。该模块实现直接型并行 HDL 架构。不支持其他架构,包括完全串行或部分串行架构。请参阅Frame-Based Architecture (HDL Coder)。
以下情况不支持基于帧的输入滤波器:
可选的模块级重置和使能控制信号
可重置和使能子系统
具有复系数的复输入信号。您可以结合使用复输入信号和实系数,也可以结合使用复系数和实输入信号。
多通道输入
共享和流优化
分布式算术 (DA)
您可以为具有或不具有可选使能端口以及具有或不具有可选重置端口的滤波器生成 HDL 代码。
当您使用非基于帧的输入数据时,可以使用复数输入和复系数与完全并行滤波器结构的任意组合。
串行滤波器架构不支持复系数。
当您使用基于帧的输入数据时,您可以使用复输入信号和实系数,或复系数和实输入信号。
您无法将分布式算术 (DA) 或设置为 csd 或 factored-csd 的 CoeffMultipliers 与复系数结合使用。
面积和速度优化 | |
---|---|
串行架构 | 要使用模块级优化来减少硬件资源,请将架构设置为串行选项之一。请参阅HDL Filter Architectures (HDL Coder)。 当您为 Discrete FIR Filter 模块指定 SerialPartition 和 ReuseAccum 时,请将滤波器结构设置为直接型、直接型对称或直接型反对称。串行架构不支持直接型转置结构。 |
分布式算术 | 要将乘法器替换为 LUT 和移位寄存器以尽量减少乘法器使用,请使用分布式算术 (DA) 滤波器实现。请参阅Distributed Arithmetic for HDL Filters (HDL Coder)。 当您选择分布式算术 (DA) 架构并使用 DALUTPartition 和 DARadix 分布式算术属性时,请将滤波器结构设置为直接型、直接型对称或直接型反对称。分布式算术不支持直接型转置结构。 |
多通道面积缩减 | 要在通道之间共享滤波器逻辑,请将 ChannelSharing 属性设置为通道数量。使用 ChannelSharing 从其他优化中排除该滤波器。 通过使用 StreamingFactor 属性,您可以在子系统中所有符合条件的逻辑之间实现相同的逻辑共享。此选项还使滤波器能够参与其他子系统优化。请参阅Subsystem Optimizations for Filters (HDL Coder) 的流部分。 |
流水线处理 | 要提高时钟速度,请使用 AddPipelineRegisters 以采用流水线加法器树,而不是默认的线性加法器。您还可以指定乘法器前后的流水线阶段数。请参阅HDL Filter Architectures (HDL Coder)。 |
HDL 滤波器属性 | |
---|---|
AddPipelineRegisters | 在滤波器的计算级之间插入流水线寄存器。另请参阅 AddPipelineRegisters (HDL Coder)。 |
ChannelSharing | 对于多通道滤波器,将生成一个要在通道间共享的单个滤波器实现。另请参阅 ChannelSharing (HDL Coder)。 |
CoeffMultipliers | 指定使用正则有符号数 (CSD) 优化,以将系数乘法器替换为移位相加逻辑,从而减小滤波器面积。当您选择完全并行的滤波器实现时,您可以将 CoeffMultipliers 设置为 |
DALUTPartition | 将分布式算术部分乘积 LUT 分区指定为一个向量,该向量由每个分区的大小组成。所有向量元素的总和必须等于滤波器长度。分区的最大大小是 12 个抽头。将 DALUTPartition 设置为等于过滤器长度的标量值,以生成不带 LUT 分区的 DA 代码。另请参阅 DALUTPartition (HDL Coder)。 |
DARadix | 指定要并行计算的分布式算术位和的个数。8 的 DA 基数 ( |
MultiplierInputPipeline | 指定要在滤波器乘法器输入端添加的流水线阶段数。另请参阅 MultiplierInputPipeline (HDL Coder)。 |
MultiplierOutputPipeline | 指定要在滤波器乘法器输出端添加的流水线阶段数。另请参阅 MultiplierOutputPipeline (HDL Coder)。 |
ReuseAccum | 在串行滤波器实现中启用或禁用累加器重用。将 ReuseAccum 设置为 |
SerialPartition | 将部分串行或级联串行滤波器实现的分区指定为由每个分区的长度组成的向量。对于完全串行实现,请将此参数设置为滤波器长度。另请参阅 SerialPartition (HDL Coder)。 |
HDL 模块属性 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线处理不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
下列情况不支持 HDL 代码生成:
无符号输入数据。
非零初始状态。您必须将初始状态设置为
0
。滤波器结构:格型 MA。
仅在使用完全并行架构时才支持 CoeffMultipliers 选项。当您选择串行架构时,“HDL 模块属性”对话框中将不显示 CoeffMultipliers。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 R2008a 中推出R2023b: 为复信号生成 SIMD 代码
在 R2023b 中,如果您有 Embedded Coder,则当输入信号为复数值时,您可以通过使用模型配置参数利用目标硬件指令集扩展为 Discrete FIR Filter 模块生成 SIMD 代码。
R2023b: 采样时间参数的条件显示
默认情况下,Discrete FIR Filter 模块不再在“模块参数”对话框中显示采样时间参数。仅在命令行或现有模型中将采样时间设置为默认值 (-1
) 以外的值时,该参数才可见。有关详细信息,请参阅不建议设置采样时间的模块。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)