雷竞技注册
技术文章

有限脉冲响应滤波器的实现结构

2017年10月04通过史蒂夫asrar

本文将回顾一些实现有限脉冲响应(FIR)滤波器的基本结构。

本文将回顾一些实现有限脉冲响应(FIR)滤波器的基本结构。

在设计过滤器时,我们从一组规范开始,这些规范通常由特定的应用程序决定。例如,我们可能需要抑制出现在传感器输出的50赫兹噪声,从而使我们的测量不准确。根据噪声分量的频率和强度,我们可以确定滤波器的规格,如通带和阻带边缘,过渡带宽,最终带外抑制等。现在,我们可以找到满足这些要求的系统函数$$H(z)$$。

对于FIR设计,我们有几个选择,例如窗口的方法频率采样方法等。然后,我们需要做出选择实现结构获取系统功能。换句话说,有几个结构显示相同的系统功能$$H(z)$$。选择合适结构的一个考虑因素是对系数量子化的敏感性。由于数字滤波器使用有限位数来表示信号和系数,因此我们需要在系数量化后仍能保持目标滤波器规格的结构。此外,我们有时观察到特定的结构可以显著降低系统的计算复杂度。

直接形式结构

由差分方程直接得到直接形式的结构。假设FIR滤波器的差分方程为

$ $ y (n) = \ sum_ {k = 0} ^ {m - 1} b_ (n - k) $ $ {k} x

方程1

根据上面的等式,我们需要当前输入样本和$$M-1$$之前的输入样本来产生一个输出点。对于$$M=5$$,我们可以简单地从公式1得到下图。

图1所示。四阶FIR滤波器的直接形式结构。

使用图1的直接形式实现,我们需要一个$$(M-1)$$阶FIR滤波器的$$M$$乘法器。然而,通常情况下,我们几乎可以将乘数减半。这可以通过注意到我们主要对线性相位FIR滤波器感兴趣来实现。事实上,FIR滤波器相对于无限脉冲响应(IIR)设计的主要优点是它的线性相位响应,否则,对于给定的一组规格,IIR设计可以提供一个低阶滤波器并减少计算复杂度。另一方面,对于线性相位FIR滤波器,我们观察如下系数的对称性差分方程的

$ $ b_ {k} = \点b_ {M-1-k} $ $

对于$$M=5$$,公式1给出

$ $ y (n) = b_ x (n) + b_ {0} {1} x (n - 1) + b_ x (n - 2) + b_ {2} {3} x (n) + b_ (4) $ $ {4} x

假设$$b_{k}=b_{M-1-k}$$,我们得到

$ $ y (n) = b_{0} \离开x (x (n) +(4) \右)+ b_{1} \离开(x (n - 1) + x (n) \右)+ b_ x (n - 2) $ $ {2}

由上式得到的结构如图2所示。图1需要5个乘法器,利用线性相位FIR滤波器的对称性,我们可以只用3个乘法器实现滤波器。这个例子表明,对于奇数$$M$$,对称性将$$(M-1)$$阶FIR滤波器的乘数从$$M$$减少到$$\tfrac{M+1}{2}$$。有关线性相位响应重要性的简要讨论见这篇文章

图2。线性相位FIR滤波器的对称性可以用来减少乘法器的数量。

Cascade-Form结构

直接形式由差分方程推导而来,级联结构由系统函数$$H(z)$$得到。其思想是将目标系统函数分解为一个级联二阶FIR系统。换句话说,我们需要找到二阶系统满足

$ $ H (z) = \ sum_ {k = 0} ^ {m - 1} b_ z ^ {k} {- k} = \ prod_ {k = 1} ^ {P} \离开(b_} {0 k + b_ z ^ k {1} {1} + b_ z ^ {2 k}{2} \右)$ $

方程2

其中$$P$$是$$\tfrac{M}{2}$$的整数部分。例如$$M=5$$, $$H(z)$$将是一个四次多项式,可以分解为两个二阶段。每个二阶滤波器都可以使用直接表单结构来实现。我们希望为每一个二阶区段设置一对复共轭根,使系数变为实数。读者可能想知道为什么我们需要根据二阶部分重写给定的$$H(z)$$。在以后的文章中,我们将看到级联结构的主要优点是它对系数量子化的敏感性较小。

为了阐明将系统函数转换为级联形式,让我们回顾一个例子。

示例1

假设我们需要使用级联结构实现下表给出的九抽头FIR滤波器。

该滤波器的系统功能是

$ $ H (z) = -0.0977 + 0.1497 z ^ {2} + 0.2813 z ^ {3} + 0.3333 z ^ {4} + 0.2813 z ^ {5} + 0.1497 z ^ {6} -0.0977 z ^ {8} $ $

可以证明

$ $ H (z) = GH_ {1} (z) H_ {2} (z) H_ {3} (z) H_ {4} (z) $ $

在哪里

$ $ G = -0.0977 $ $

$ $ H_ {1} (z) = \离开(1 - 2.5321 - z ^ {1} + z ^{2} \右)$ $

$ $ H_ {2} (z) = \离开(1 - 0.3474 - z ^ {1} + z ^{2} \右)$ $

$ $ H_ {3} (z) = \离开(1 + 1.8794 z ^ {1} + z ^{2} \右)$ $

$ $ H_ {4} (z) = \离开(1 + z ^ {1} + z ^{2} \右)$ $

因此,我们得到了图3所示的结构。

图3。级联结构为例1中的系统功能。

这些二阶系统都可以用直接形式结构来实现。例如,$$H_{1}(z)$$的实现如图4所示。

图4。直接形式实现$$H_{1}(z)$$。

您可以验证$ $ H_ {1} (z) $ $对两个真正的0 H (z) $ $ $ $,例如$ $ z_1 = 2.0425 $ $ $ $ z_2 = 0.4896 $ $;然而,其他三个二阶部分(sos)包含了$$H(z)$$的复共轭根。例如,$$H_2(z)$$的根为$$z_3=0.1737 + 0.9848j$$, $$z_4=0.1737 - 0.9848j$$。

由于找到一个实际FIR滤波器的级联形式涉及繁琐的数学,我们可以使用MATLAB函数tf2sos,表示传递函数到二阶段,得到给定传递函数的级联形式。实际上,上面例子中$$H(z)$$的级联形式是使用tf2sos使用以下代码行函数:

N=[-0.0977 0 0.1497 0.2813 0.3333 0.2813 0.1497 0 -0.0977];这条线定义了分子H(z)

D = 1;这定义了H(z)的分母

[sos, G]=tf2sos(N, D) %将Nand don定义的传递函数转换为二阶段级联

结果将是:

sos =

和$ $ G = -0.0977 $ $。

上面每一行sos给出了一个二阶段的传递函数。每一行的前三个数字表示相应的二阶部分的分子,后三个数字表示其分母。例如,sos的第一行给出了示例1的二阶部分$$H_{1}(z)$$,以此类推。的tf2sos命令还提供一个增益因子$$G$$,它可以包含在图3所示的级联形式结构中。

示例2

假设我们需要使用级联结构实现下表给出的十抽头FIR滤波器。

类似于前面的例子,我们有:

N=[-0.0024 0.0073 0.0606 0.1691 0.2654 0.2654 0.1691 0.0606 0.0073 -0.0024];
D = 1;
(sos, G) = tf2sos (N, D)

结果将是:

sos =

和$ $ G = -0.0024 $ $。

因此,目标系统函数可以用二阶部分重写为

$ $ H (z) = GH_ {1} (z) H_ {2} (z) H_ {3} (z) H_ {4} (z) H_ {5} (z) $ $

在哪里

$ $ G = -0.0024 $ $

$ $ H_ {1} (z) = 1 - 7.7465 - z ^ {1} $ $

$ $ H_ {2} (z) = 1 + 0.8709 z ^ -0.1291 z ^ {1} {2} $ $

$ $ H_ {3} (z) = 1 + 1.7922 z ^ {1} + 1.6972 z ^ {2} $ $

$ $ H_ {4} (z) = 1 + 0.9858 z ^ {1} + z ^ {2} $ $

$ $ H_ {5} (z) = 1 + 1.0560 z ^ {1} + 0.5892 z ^ {2} $ $

在这个例子中,系统函数多项式是9次的,因此,滤波器有9个零。因此,我们观察到$$H_{1}(z)$$只包含了一个0,即方程2中的系数$$b_{2k}$$在这个二阶段为零。

我们可以利用直接形式结构实现本例的二阶部分,得到滤波器的级联结构;然而,还有另一种方法可以降低计算复杂度。要找到这种计算效率高的结构,请记住,如图1和图2所示,线性相位FIR滤波器可以用更少的乘法器实现。另一方面,请注意,当目标系统函数是一个线性相位时,只有$$H_{4}(z)$$是一个线性相位FIR结构(因为系数对称)。

因此,问题仍然存在:我们能否将给定的线性相位FIR系统函数的零以一种方式分组,从而得到的分解包含线性相位结构?对于线性相位FIR滤波器,$$b_{k}$$系数的对称性导致传递函数零点的非对称性。特别是,如果$$z_{1}$$和$$z_{1}^{*}$$是传递函数的零,那么$$\tfrac{1}{z_{1}}$$和$$\tfrac{1}{z_{1}^{*}}$$也是传递函数的一对零。我们可以利用这个性质将系统函数分解成线性相元素的方式来分组这些零。让我们使用MATLAB命令,求系统函数的零点:

N=[-0.0024 0.0073 0.0606 0.1691 0.2654 0.2654 0.1691 0.0606 0.0073 -0.0024];

根(N)

因此,我们得到:

$ $ z_1 = -1.0000 $ $

$ $ z_2 = 7.7465 $ $, $ $ z_3 = 0.1291 $ $

$ $ z_4 = -0.4929 + 0.8701 j $ $ $ $ z_5 = -0.4929 - 0.8701 j $ $

$ $ z_6 = -0.5280 + 0.5571 j $ $ $ $ z_7 j $ $ -0.5571 = -0.5280

$ $ z_8 = -0.8961 + 0.9456 j $ $ $ $ z_9 j $ $ -0.9456 = -0.8961

读者可以确认$ $ z_2 = \ tfrac {1} {z_3} $ $, $ $ z_4 = \ tfrac {1} {z_ {5 }^{*}}$$, $$ z_6 = \ tfrac {1} {z_ {8} ^ {*}} $ $ $ $ z_7 = \ tfrac {1} {z_{9} ^{*}} $ $。然后将$$z_2$$和$$z_3$$配对,得到以下线性相位二阶段

$ $ H_ {LP1} (z) = (1 - 0.1291 - z ^ {1}) (1 - 7.7465 - z ^ {1}) = (1 - 7.8756 - z ^ {1} + z ^ {2}) $ $

$$z_4$$和$$z_5$$配对:

$ $ H_ {LP2} (z) = (1 - (-0.4929 + 0.8701 j) z ^ {1}) (1 - (-0.4929 - 0.8701 j) z ^ {1}) = (1 + 0.9858 z ^ {1} + z ^ {2}) $ $

分组z_6美元,美元z_7美元,美元z_8美元,美元和z_9美元美元,我们得到:

$ $ H_ {LP3} (z) = 1 + 2.8482 z ^ {1} + 4.1790 z ^ {2} + 2.8482 z ^ {3} + z ^ {4} $ $

为了合并零$$z_1$$,我们需要包含一个一阶部分,即$$H_{LP4}(z)=1+z^{-1}$$。这些线性相位元件的级联将给出原始系统函数:

$ $ H (z) = GH_ {LP1} (z) H_ {LP2} (z) H_ {LP3} (z) H_ {LP4} (z) $ $

其中$$G=-0.0024$$和之前一样。

一般来说,线性相位FIR滤波器的零点可以有四种不同的排列方式,如图5所示。这些安排包括:1 -一对共轭复数单位圆上0不连同他们的倒数,例如$ $ z_1 $ $, $ $ z_ {1 }^{*}$$, $$\ tfrac {1}, {z_1} $ $和$ $ \ tfrac {1} {z_{1} ^{*}} $ $在图中,2 -一对共轭复数0等单位圆z_3 $ $美元美元z_{3} ^{*} $ $在图中,3-单位圆上的一个实零,以及它的倒数,如$$z_{2}$$和$$\tfrac{1}{z_{2}}$$,最后,4-单位圆上的一个实零,如图5中的$$z_4$$上面例子中的系统函数在这四组中都是0。

图5。线性相位FIR滤波器零点的对称性。图片由离散时间信号处理

将例2的系统函数分解成线性相元素,我们总共需要5个乘子。下表显示了每个部分的乘数。

然而,实现第一个目标需要9个乘数,如下所示:

总之,我们可以使用tf2sos命令将FIR滤波器的系统函数重写为二阶段的乘积;然而,这些二阶段并不一定是线性相的。为了使线性相位元件级联,我们需要适当地将传递函数的零点分组。利用线性相位段的级联,可以减少相乘的次数。注意,在本例中,有些节的顺序可能为4,如上面示例中的$$H_{LP3}(z)$$。

总结

  • 有几个结构来实现一个给定的系统函数$$H(z)$$。选择合适的结构的一个考虑因素是对系数量化的敏感性。此外,我们有时观察到特定的结构可以显著降低系统的计算复杂度。

  • 线性相位FIR滤波器的对称性可以用来减少所需的乘法数。

  • 级联结构的主要优点是对系数量子化的敏感性较小。

  • 我们可以使用tf2sos命令将FIR滤波器的系统函数重写为二阶段的乘积;然而,这些二阶段并不一定是线性相的。为了使线性相位元件级联,我们需要适当地将传递函数的零点分组。

2的评论
  • aceelhy 2021年1月5日

    在关系z4 = 1/z5*中是否有一个错误?我猜是z4 = z5*。

    喜欢的。 回复
    • 年代
      史蒂夫asrar 2021年1月8日
      好赶上!是的,z4 = 1/z5*的关系是不正确的!然而,这两个零应该成对出现一个线性相位滤波器段(本文中给出的HLP2(z))。实际上,这两个零是“单位圆上”的一对复共轭零,就像图5中的z3和z3*。
      喜欢的。 回复