我们已经在 PSoC Creator 的滤波器工具中引入了优秀的无限脉冲响应(IIR)滤波器,而且花了很长时间向人们解释为什么IIR 滤波器是一个很好的选择。这种滤波器完成同等滤波工作所需的处理循环次数明显更少。其实,FIR 和 IIR 各有优缺点,FIR 滤波器的脉冲响应有限,这正是我们在最近的项目中选择FIR的原因所在。
现在重申滤波器类型缩写可能有点老套,FIR 就是Finite Impulse Response (有限脉冲响应)的缩写。不过,有些情况下我们确实需要脉冲响应的这种“有限”性。
如果滤波器的脉冲响应时长受到严格限制,那么其“存储器”容量就有限。输入信号发生变化的时间比“现在”要早,即“现在”减去脉冲响应持续时间,因此不会对最近的输出采样产生影响。如果输入稳定为一个常量,那么输出经过脉冲响应同等的持续时间后也会变成常量。换句话说,稳定时间是有限的,而且是确切已知的。
与此形成对比的是,IIR 滤波器的输出至少在理论上受到过去很早阶段输入信号的影响。而且输出会在输入稳定后无限长的时间内持续变化。对于标准的量化数字信号来说,很难确切说明输出到底什么时候才会停止变化。事实上,有时输出永远不会完全稳定下来,而是在所谓的“极限环”(limit cycle)模式中变动。这是我们今后要探讨的优缺点权衡问题,现在继续讨论本文的主题。
近期,有同事希望利用滤波器有效抑制 50Hz 和 60Hz AC 线(加上二次谐波)对微小感应器信号的影响。此外,我们还需要严格限制滤波器的稳定时间。显然,这一要求使得 IIR/FIR 之间的选择结果必然落在 FIR 阵营。就我目前使用的 PSoC3 和 PSoC5 器件的数字滤波器模块硬件而言,这两种滤波器都适用。
为了充分满足同时进入硬件的滤波器通道数量要求,滤波器必须非常“小”,而且不能采用会造成资源浪费的低效设计方法。我需要根据响应时间要求来设定每个滤波器的系数数量!我将在第二部分介绍具体的实施方法,不过为了便于理解,我们首先要考虑一下 FIR 滤波器的含义及其表示方法。
FIR 滤波器如何定义?
FIR 滤波器完全由一组有序的值来定义,这些值按时间顺序与输入信号相乘(或加权)。当然,信号的延迟采样很简单,只需将值储存在存储器的某个位置然后再读取即可。它不必是数字存储器。FIR 滤波器的一种早期形式被称为横向滤波器,根本不会对信号进行数字化,而是直接将电压存储在小的电容器上,然后再进行读取。今天大量用于图像感应器的电荷耦合器件(此前一度用来创建采样模拟电压存储器)串联起来形成延迟线——就此而言,早期的 FIR 滤波器其实就是模拟器件。不过这里有些跑题了,我们要回到主题上来。
将这些加权延迟输入信号加在一起,就能得到所需的输出信号。如果此过程中的输入信号是一个脉冲信号,仅在一个采样时间内是非零值,那么滤波器输出(即脉冲响应)的形式与系数序列相同。图 1 给出了滤波器系数的一组实例(用 PSoC Creator 工具设计的 15-tap FIR)以及增益和脉冲响应情况。
图1:15-tap FIR 滤波器实例——系数、频率和脉冲响应。
当然,许多方法都可以用来计算系数,得到所需的滤波特性。现在,滤波器设计工作跟烹饪差不多。其他人已经把原料备好,您只需将饭菜放进微波炉里就算完成任务了。此外,您也可自己做一些努力,用基本的原料和工具做成一些新花样。如果您对美食的加工流程有更多认识,那么就会对美食产生更深刻的理解。对于电子设计,特别是滤波器设计来说道理也是如此。
读者会意识到我其实在反复重复一个命题,即有时候需要卷起袖子来自己动手。这样您就能创造出一些市场上没有的独特产品,或者及时发现信号问题所在。
好消息是,即使您不是滤波器专家或数学达人也能做得很好。我们继续用烹饪来打比方,作为一个大厨,您可以用美拉德反应(Maillard reaction)来烹制可口佳肴,但不必了解它的化学原理。同样,您也能运用一些代数知识设计出色的滤波器,尽管您可能并不完全了解其真正的含义。这就是我们下面要做的!
将 FIR 滤波器想象成多项式
设想一下,将代表 FIR 滤波器系数的值序列看成变量 z 的多项式。多项式是变量乘方的总和,每个变量乘方项都乘以某个系数。这就是之前的 FIR 滤波器定义。
在研究采样信号和信号处理系统的过程中,我们大量使用变量 z 和它的倒数 z^-1。该变量没有明确的物理含义,但与时间密切相关。z^-1 则与将信号延迟单次采样周期的这种行为有关(数学上称作运算符)。
在因果系统中,输出只能被已经发生的事件影响,也就是延迟的输入信号。结果就是在滤波器方程式中经常出现 z 的负次幂。我们通过与 z 的高次幂相乘可以使多项式看起来更加熟悉。您不必了解 z 变换的原理和方法,只需利用 z 和 z^-1 多项式完成实际工作即可。
图 1 所示滤波器的多项式表现形式如下。为了简化方程式,我降低了系数有效数字的位数。以下包括负次幂[1]和正次幂[2]两种形式。
这看起来并不复杂,只是用另一种方式来表达已知的滤波器而已。这种表示方法使我们能够用一些强大的基础代数工具进行分析,最终通过有用的属性对多项式进行综合。关键在于我们能够对此类多项式进行因式分解,使其包含多个线性或二次方程独立子项,并求得最终结果。这会不会唤起您当年代数课上的回忆呢?
为了将多项式进行因式分解,我们需要找到它的根。有一些变量的值可以使多项式的值为零。大多数数学工具都提供用于计算多项式根的函数。根可以是实数(线性项)也可以是一对复数,相乘后成为二次项。整体多项式等于所有二次项和线性项的积。
下面我们来找出示例滤波器的根和因数。我使用 Excel 根取得器(Excel root finder) 完成这项工作。
表1:等式中多项式的所有根[2]
共有 14 个根,因为是 14 级多项式(第 15 级是常数项,也就是 z 的零次方),其中 4 个是实数,其余为共轭复数。还记得求解二次方程的经典公式吗?当平方根中的表达式为负时,就会形成根的虚数部分。正负号说明有两个表达式,代表虚数不分彼此相反。
把所有项(z 的根)相乘,写成因数形式。将复杂对结合为平方项,得出理想的实数系数,例如将共轭复数 x+jy 和 x-jy 相乘:
对表 1 中所有根或根对都采取这种算法(选择实部相同的两个根),我们得到等式 4:
为了确保正确,我再次对等式[4]做乘法(利用 Excel),图 2 说明我们返回了相同的滤波器。
顺便说一句,可直接对脉冲响应使用 Excel 的 FFT 函数来获得响应结果。如果手头没有仿真器,还可以使用另一种方法来计算频率响应。滤波器在脉冲响应中只有 15 个有用的时间点,我用额外的零值将它扩展到 1024 点,得到一个具有理想频率间隔的平滑 FFT 图。
不过您可能会感到不解,做了这么多我们到底学到了什么?其实,有用的东西在于,因数的积代表滤波器行为。滤波器包括一系列连接块,每个块都被因数赋予一个多项式,从而形成小的滤波器。通过对 FIR 滤波器的大多项式因式分解,我们能获得一系列小滤波器(每个具有 2 个或 3 个tap加权),串联起来就能获得与原滤波器相同的滤波器行为。
现在,IIR 滤波器通常被设计为二级串联形式(即二次方程)。人们很少关心 FIR 滤波器的等效因式分解情况。这是因为 FIR 滤波器的实施已经很简单了,因此细究也没什么优势。不过,在对 FIR 设计软件得出的系数集进行分析时,这仍是很棒的工具。
我的主要目的并非是用这些工具拆分别人的 FIR 滤波器,而是用来发现因数本身的行为。我们随后就能分别操纵每个因数,进而实现我们所需的功能。如果我们从头创建某些因数,每个因数都能完成有用的功能,再将其组合在一起成为多项式,那么多项式系数也就是能够同时完成所有功能的 FIR 滤波器的系数。
图2:将等式[4]相乘所得多项式的响应情况
不妨考虑一下,我们的 FIR 滤波器在阻带有三个空值(图 1 和图 2)。我们将多项式[4]进行因式分解后,有三个因数是常数项(即 z^0 的系数)。这并不是巧合。下次,我们要谈谈怎么驱动这一进程,让因数满足特定的阻带行为。这将说明好的滤波器设计不止一个根!
我们已经在 PSoC Creator 的滤波器工具中引入了优秀的无限脉冲响应(IIR)滤波器,而且花了很长时间向人们解释为什么IIR 滤波器是一个很好的选择。这种滤波器完成同等滤波工作所需的处理循环次数明显更少。其实,FIR 和 IIR 各有优缺点,FIR 滤波器的脉冲响应有限,这正是我们在最近的项目中选择FIR的原因所在。
现在重申滤波器类型缩写可能有点老套,FIR 就是Finite Impulse Response (有限脉冲响应)的缩写。不过,有些情况下我们确实需要脉冲响应的这种“有限”性。
如果滤波器的脉冲响应时长受到严格限制,那么其“存储器”容量就有限。输入信号发生变化的时间比“现在”要早,即“现在”减去脉冲响应持续时间,因此不会对最近的输出采样产生影响。如果输入稳定为一个常量,那么输出经过脉冲响应同等的持续时间后也会变成常量。换句话说,稳定时间是有限的,而且是确切已知的。
与此形成对比的是,IIR 滤波器的输出至少在理论上受到过去很早阶段输入信号的影响。而且输出会在输入稳定后无限长的时间内持续变化。对于标准的量化数字信号来说,很难确切说明输出到底什么时候才会停止变化。事实上,有时输出永远不会完全稳定下来,而是在所谓的“极限环”(limit cycle)模式中变动。这是我们今后要探讨的优缺点权衡问题,现在继续讨论本文的主题。
近期,有同事希望利用滤波器有效抑制 50Hz 和 60Hz AC 线(加上二次谐波)对微小感应器信号的影响。此外,我们还需要严格限制滤波器的稳定时间。显然,这一要求使得 IIR/FIR 之间的选择结果必然落在 FIR 阵营。就我目前使用的 PSoC3 和 PSoC5 器件的数字滤波器模块硬件而言,这两种滤波器都适用。
为了充分满足同时进入硬件的滤波器通道数量要求,滤波器必须非常“小”,而且不能采用会造成资源浪费的低效设计方法。我需要根据响应时间要求来设定每个滤波器的系数数量!我将在第二部分介绍具体的实施方法,不过为了便于理解,我们首先要考虑一下 FIR 滤波器的含义及其表示方法。
FIR 滤波器如何定义?
FIR 滤波器完全由一组有序的值来定义,这些值按时间顺序与输入信号相乘(或加权)。当然,信号的延迟采样很简单,只需将值储存在存储器的某个位置然后再读取即可。它不必是数字存储器。FIR 滤波器的一种早期形式被称为横向滤波器,根本不会对信号进行数字化,而是直接将电压存储在小的电容器上,然后再进行读取。今天大量用于图像感应器的电荷耦合器件(此前一度用来创建采样模拟电压存储器)串联起来形成延迟线——就此而言,早期的 FIR 滤波器其实就是模拟器件。不过这里有些跑题了,我们要回到主题上来。
将这些加权延迟输入信号加在一起,就能得到所需的输出信号。如果此过程中的输入信号是一个脉冲信号,仅在一个采样时间内是非零值,那么滤波器输出(即脉冲响应)的形式与系数序列相同。图 1 给出了滤波器系数的一组实例(用 PSoC Creator 工具设计的 15-tap FIR)以及增益和脉冲响应情况。
图1:15-tap FIR 滤波器实例——系数、频率和脉冲响应。
当然,许多方法都可以用来计算系数,得到所需的滤波特性。现在,滤波器设计工作跟烹饪差不多。其他人已经把原料备好,您只需将饭菜放进微波炉里就算完成任务了。此外,您也可自己做一些努力,用基本的原料和工具做成一些新花样。如果您对美食的加工流程有更多认识,那么就会对美食产生更深刻的理解。对于电子设计,特别是滤波器设计来说道理也是如此。
读者会意识到我其实在反复重复一个命题,即有时候需要卷起袖子来自己动手。这样您就能创造出一些市场上没有的独特产品,或者及时发现信号问题所在。
好消息是,即使您不是滤波器专家或数学达人也能做得很好。我们继续用烹饪来打比方,作为一个大厨,您可以用美拉德反应(Maillard reaction)来烹制可口佳肴,但不必了解它的化学原理。同样,您也能运用一些代数知识设计出色的滤波器,尽管您可能并不完全了解其真正的含义。这就是我们下面要做的!
将 FIR 滤波器想象成多项式
设想一下,将代表 FIR 滤波器系数的值序列看成变量 z 的多项式。多项式是变量乘方的总和,每个变量乘方项都乘以某个系数。这就是之前的 FIR 滤波器定义。
在研究采样信号和信号处理系统的过程中,我们大量使用变量 z 和它的倒数 z^-1。该变量没有明确的物理含义,但与时间密切相关。z^-1 则与将信号延迟单次采样周期的这种行为有关(数学上称作运算符)。
在因果系统中,输出只能被已经发生的事件影响,也就是延迟的输入信号。结果就是在滤波器方程式中经常出现 z 的负次幂。我们通过与 z 的高次幂相乘可以使多项式看起来更加熟悉。您不必了解 z 变换的原理和方法,只需利用 z 和 z^-1 多项式完成实际工作即可。
图 1 所示滤波器的多项式表现形式如下。为了简化方程式,我降低了系数有效数字的位数。以下包括负次幂[1]和正次幂[2]两种形式。
这看起来并不复杂,只是用另一种方式来表达已知的滤波器而已。这种表示方法使我们能够用一些强大的基础代数工具进行分析,最终通过有用的属性对多项式进行综合。关键在于我们能够对此类多项式进行因式分解,使其包含多个线性或二次方程独立子项,并求得最终结果。这会不会唤起您当年代数课上的回忆呢?
为了将多项式进行因式分解,我们需要找到它的根。有一些变量的值可以使多项式的值为零。大多数数学工具都提供用于计算多项式根的函数。根可以是实数(线性项)也可以是一对复数,相乘后成为二次项。整体多项式等于所有二次项和线性项的积。
下面我们来找出示例滤波器的根和因数。我使用 Excel 根取得器(Excel root finder) 完成这项工作。
表1:等式中多项式的所有根[2]
共有 14 个根,因为是 14 级多项式(第 15 级是常数项,也就是 z 的零次方),其中 4 个是实数,其余为共轭复数。还记得求解二次方程的经典公式吗?当平方根中的表达式为负时,就会形成根的虚数部分。正负号说明有两个表达式,代表虚数不分彼此相反。
把所有项(z 的根)相乘,写成因数形式。将复杂对结合为平方项,得出理想的实数系数,例如将共轭复数 x+jy 和 x-jy 相乘:
对表 1 中所有根或根对都采取这种算法(选择实部相同的两个根),我们得到等式 4:
为了确保正确,我再次对等式[4]做乘法(利用 Excel),图 2 说明我们返回了相同的滤波器。
顺便说一句,可直接对脉冲响应使用 Excel 的 FFT 函数来获得响应结果。如果手头没有仿真器,还可以使用另一种方法来计算频率响应。滤波器在脉冲响应中只有 15 个有用的时间点,我用额外的零值将它扩展到 1024 点,得到一个具有理想频率间隔的平滑 FFT 图。
不过您可能会感到不解,做了这么多我们到底学到了什么?其实,有用的东西在于,因数的积代表滤波器行为。滤波器包括一系列连接块,每个块都被因数赋予一个多项式,从而形成小的滤波器。通过对 FIR 滤波器的大多项式因式分解,我们能获得一系列小滤波器(每个具有 2 个或 3 个tap加权),串联起来就能获得与原滤波器相同的滤波器行为。
现在,IIR 滤波器通常被设计为二级串联形式(即二次方程)。人们很少关心 FIR 滤波器的等效因式分解情况。这是因为 FIR 滤波器的实施已经很简单了,因此细究也没什么优势。不过,在对 FIR 设计软件得出的系数集进行分析时,这仍是很棒的工具。
我的主要目的并非是用这些工具拆分别人的 FIR 滤波器,而是用来发现因数本身的行为。我们随后就能分别操纵每个因数,进而实现我们所需的功能。如果我们从头创建某些因数,每个因数都能完成有用的功能,再将其组合在一起成为多项式,那么多项式系数也就是能够同时完成所有功能的 FIR 滤波器的系数。
图2:将等式[4]相乘所得多项式的响应情况
不妨考虑一下,我们的 FIR 滤波器在阻带有三个空值(图 1 和图 2)。我们将多项式[4]进行因式分解后,有三个因数是常数项(即 z^0 的系数)。这并不是巧合。下次,我们要谈谈怎么驱动这一进程,让因数满足特定的阻带行为。这将说明好的滤波器设计不止一个根!
1
举报