Main Content

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

Discrete Filter

构建无限脉冲响应 (IIR) 滤波器模型

  • 库:
  • Simulink / Discrete

  • Discrete Filter block

描述

Discrete Filter 模块使用指定的数字 IIR 滤波器单独对输入信号的每个通道进行滤波。您可以将滤波器结构指定为 Direct form IDirect form I transposedDirect form IIDirect form II transposed。该模块实现了具有固定系数的静态滤波器。您可以调整这些静态滤波器的系数。

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

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

使用分子系数参数可以指定离散滤波器分子多项式的系数。使用分母系数参数可以指定函数的分母多项式的系数。分母系数参数必须为系数向量。

z-1 的升幂顺序指定分子和分母多项式的系数。Discrete Filter 模块允许使用 z-1(延迟算子)形式的多项式来表示离散系统。信号处理工程师通常使用这种方法。反之,Discrete Transfer Fcn 模块允许使用 z 形式的多项式来表示离散系统。控制工程师通常使用这种方法。当分子和分母多项式的长度相同时,两种方法相同。

指定初始状态

对话框参数输入端口模式下,该模块默认将内部滤波器状态初始化为零,这等效于假定过去的输入和输出为零。您可以选择使用初始状态参数为滤波器延迟指定非零初始状态。

要确定您必须指定的初始状态值数量以及如何指定这些状态值,请参阅下面的有关有效初始状态和延迟元素数(滤波器状态)的表。初始状态参数可采用下表所述的四种形式之一。

有效初始状态

初始状态示例描述

标量

5

每个通道的每个延迟元素均设置为 5

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

向量
(用于将相同的延迟元素应用于每个通道)

用于具有两个延迟元素的滤波器:[d1 d2]

所有通道的延迟元素均为 d1 和 d2。

每个向量元素均为相应的延迟元素指定一个唯一的初始条件。模块将相同的初始条件向量应用于输入信号的每个通道。向量长度必须等于滤波器中的延迟元素数(在表延迟元素数(滤波器状态)中指定)。

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

对于三通道输入信号和具有两个延迟元素的滤波器:

[d1 d2 D1 D2 d1 d2] 或

[d1D1d1d2D2d2]

  • 通道 1 的延迟元素为 d1 和 d2

  • 通道 2 的延迟元素为 D1 和 D2

  • 通道 3 的延迟元素为 d1 和 d2

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

空矩阵

[ ]
每个通道的每个延迟元素均设置为 0

空矩阵 [] 等效于将初始条件参数设置为标量值 0

每输入通道的延迟元素数取决于滤波器结构,如下表所示。

延迟元素数(滤波器状态)

滤波器结构每通道的延迟元素数

直接 I 型
直接 I 型转置

  • number of zeros - 1

  • number of poles - 1

直接 II 型
直接 II 型转置

max(number of zeros, number of poles)-1

下表根据您将输入处理参数设置为基于帧还是基于采样,分两种情况说明采用不同输入大小和不同通道数时的有效初始状态。

基于帧的处理

输入 通道数有效初始状态(对话框)有效初始状态(输入端口)
  • 列向量 (K×1)

  • 无向向量 (K)

1
  • 标量

  • 列向量 (M×1)

  • 行向量 (1×M)

  • 标量

  • 列向量 (M×1)

  • 行向量 (1×N)

  • 矩阵 (K×N)

N
  • 标量

  • 列向量 (M×1)

  • 行向量 (1×M)

  • 矩阵 (M×N)

  • 标量

  • 矩阵 (M×N)

基于采样的处理

输入通道数有效初始状态(对话框)有效初始状态(输入端口)
  • 标量

1
  • 标量

  • 列向量 (M×1)

  • 行向量 (1×M)

  • 标量

  • 列向量 (M×1)

  • 行向量 (1×M)

  • 行向量 (1×N)

  • 列向量 (N×1)

  • 无向向量 (N)

N
  • 标量

  • 列向量 (M×1)

  • 行向量 (1×M)

  • 矩阵 (M×N)

  • 标量

  • 矩阵 (K×N)

K×N
  • 标量

  • 列向量 (M×1)

  • 行向量 (1×M)

  • 矩阵 (M×(K×N))

  • 标量

初始状态为标量时,模块将所有滤波器状态初始化为相同的标量值。输入 0 可将所有状态初始化为零。当初始状态为向量或矩阵时,每个向量或矩阵元素都指定一个唯一的初始状态。此唯一状态对应于相应通道中的一个延迟元素:

  • 向量长度必须等于滤波器中的延迟元素数,M = max(number of zeros, number of poles)

  • 矩阵的行数必须与滤波器中的延迟元素数相同,M = max(number of zeros, number of poles)。矩阵的每一列还须对应输入信号的一个通道。

Specify a Vector of Initial Conditions for a Discrete Filter Block示例说明了初始滤波器输出与初始输入和状态之间的关系。假定有一个初始输入 u1,则第一个输出 y1 与初始状态 [x1, x2] 和初始输入的关系为:

y1=b1[(u1a2x1a3x2)a1]+b2x1+b3x2

端口

输入

全部展开

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

依存关系

此端口的名称取决于您为分子系数、分母系数和初始状态指定的源。将分子分母初始状态设置为“对话框”时,只有一个输入端口,且该端口没有标签。将分子分母初始状态设置为“输入端口”时,此端口的标签为 u

数据类型: single | double | int8 | int16 | int32 | fixed point

离散滤波器的分子系数,指定为 z 的降幂。使用行向量可指定单个分子多项式的系数。

依存关系

要启用此端口,请将分子设置为“输入端口”。

数据类型: single | double | int8 | int16 | int32 | fixed point

将离散滤波器的分母系数指定为 z 的降幂。使用行向量可指定单个分母多项式的系数。

依存关系

要启用此端口,请将分母设置为“输入端口”。

数据类型: single | double | int8 | int16 | int32 | fixed point

初始状态,指定为标量、向量或矩阵。有关指定状态的详细信息,请参阅指定初始状态

依存关系

要启用此端口,请将滤波器结构设置为“直接 II 型”或“直接 II 型转置”,并将初始状态设置为“输入端口”。

数据类型: single | double | int8 | int16 | int32 | fixed point

输出

全部展开

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

数据类型: single | double | int8 | int16 | int32 | fixed point

参数

全部展开

常设

指定离散 IIR 滤波器结构。

依存关系

要使用“直接 II 型”以外的任何滤波器结构,您必须具有可用的 DSP System Toolbox 许可证。

编程用法

模块参数FilterStructure
类型:字符向量
值:'Direct form II' | 'Direct form I transposed' | 'Direct form I' | 'Direct form II transposed'
默认值:'Direct form II'

将分子系数的信源指定为“对话框”或“输入端口”。

编程用法

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

将离散滤波器的分子系数指定为 z 的降幂。使用行向量可指定单个分子多项式的系数。

依存关系

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

编程用法

模块参数Numerator
类型:字符向量
值:标量 | 向量 | 矩阵
默认值:'[1]'

将分母系数的信源指定为“对话框”或“输入端口”。

编程用法

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

将离散滤波器的分母系数指定为 z 的降幂。使用行向量可指定单个分母多项式的系数。

依存关系

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

编程用法

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

将初始状态的信源指定为“对话框”或“输入端口”。

编程用法

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

将初始滤波器状态指定为标量、向量或矩阵。要了解如何指定初始状态,请参阅指定初始状态

依存关系

要启用此参数,请将滤波器结构设置为“直接 II 型”或“直接 II 型转置”,并将初始状态源设置为“对话框”。

编程用法

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

将初始分子滤波器状态指定为标量、向量或矩阵。要了解如何指定初始状态,请参阅指定初始状态

依存关系

要启用此端口,请将滤波器结构设置为“直接 I 型”或“直接 I 型转置”。

编程用法

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

将初始分母滤波器状态指定为标量、向量或矩阵。要了解如何指定初始状态,请参阅指定初始状态

依存关系

要启用此端口,请将滤波器结构设置为“直接 I 型”或“直接 I 型转置”。

编程用法

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

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

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

在下列任一情况下重置:

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

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

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

编程用法

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

指定模块是执行基于采样还是基于帧的处理。

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

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

依存关系

基于帧的处理需要具有 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)'

当分母的首项系数 a0 等于 1 时选择。此参数可以优化您的代码。

当选中此复选框时,该模块在仿真或生成的代码中不会执行对 a0 的除法运算。如果 a0 不等于 1,则会出错。

当清除此复选框时,该模块在仿真期间完全可调。它在仿真和代码生成中均会执行对 a0 的除法运算。

编程用法

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

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

编程用法

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

数据类型

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

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

  • 内置整数,例如 int8

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

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

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

编程用法

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

指定分子系数数据类型。您可以将此参数设置为:

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

  • 内置有符号整数,例如 int8

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

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

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

编程用法

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

指定分子系数可以具有的最小值。默认值为 [](未指定)。Simulink® 软件使用此值执行:

编程用法

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

指定分子系数可以具有的最大值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定分子系数的乘积输出数据类型。您可以将此参数设置为:

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

  • 内置数据类型,例如 int8

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

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

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

编程用法

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

指定分子系数的累加器数据类型。您可以将此参数设置为:

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

  • 内置数据类型,例如 int8

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

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

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

编程用法

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

指定分母系数数据类型。您可以将此参数设置为:

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

  • 内置整数,例如 int8

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

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

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

编程用法

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

指定分母系数可以具有的最小值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定分母系数可以具有的最大值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定分母系数的乘积输出数据类型。您可以将此参数设置为:

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

  • 内置数据类型,例如 int8

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

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

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

编程用法

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

指定分母系数的累加器数据类型。您可以将此参数设置为:

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

  • 内置数据类型,例如 int8

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

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

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

编程用法

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

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

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

  • 内置数据类型,例如 int8

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

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

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

编程用法

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

指定模块可以输出的最小值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定模块可以输出的最大值。默认值为 [](未指定)。Simulink 软件使用此值执行:

编程用法

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

指定被乘数数据类型。您可以将此参数设置为:

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

  • 内置数据类型,例如 int8

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

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

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

依存关系

要启用此参数,请将滤波器结构设置为“直接 I 型转置

编程用法

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

选择此选项可锁定数据类型设置,防止使用定点工具和定点顾问进行更改。有关详细信息,请参阅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'

状态属性

为每个状态分配唯一名称。如果此字段为空 (' '),则不会分配任何名称。

  • 要为单个状态分配名称,请输入名称并用引号引起来,例如 'position'

  • 要为多个状态分配名称,请输入以逗号分隔的列表并用花括号括起来,例如 {'a', 'b', 'c'}。每个名称都必须是唯一的。

  • 要在 MATLAB® 工作区中分配带变量的状态名称,请输入不带引号的变量。变量可以是字符向量、元胞数组或结构体。

限制

  • 状态名称只会应用于所选模块。

  • 状态数量必须能够被状态名称的数量均分。

  • 指定的名称数量可以少于状态数量,但不能多于状态数量。

    例如,可以在具有四个状态的系统中指定两个名称。第一个名称应用于前两个状态,第二个名称应用于后两个状态。

依存关系

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

编程用法

模块参数StateName
类型:字符向量
值:' ' | 用户定义
默认值:' '

选中此复选框会要求将状态名称解析为 Simulink 信号对象。

依存关系

要启用此参数,请将滤波器结构设置为“直接 II 型”,并为状态名称指定值。仅当将模型配置参数信号解析设置为除“”以外的值时,才会显示此参数。

编程用法

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

模块特性

数据类型

double | fixed pointa | integera | single

直接馈通

多维信号

可变大小信号

过零检测

a 此模块仅支持有符号定点数据类型。

扩展功能

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

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

版本历史记录

在 R2006a 之前推出

另请参阅

| (DSP System Toolbox) | (DSP System Toolbox) | (DSP System Toolbox) | (DSP System Toolbox) | (DSP System Toolbox) | (DSP System Toolbox) | (Signal Processing Toolbox)