1 切比雪夫和巴特沃斯的响应
切比雪夫响应是一种数学策略,通过允许频率响应中的纹波来实现更快的滚降。使用这种方法的模拟和数字滤波器称为切比雪夫滤波器。这些滤波器因使用切比雪夫多项式而得名,切比雪夫多项式由俄罗斯数学家帕夫努蒂·切比雪夫(1821-1894)开发。这个名字是从俄语翻译过来的,出现在文献中有不同的拼写,例如:Chebychev、Tschebyscheff、Tchebysheff 和 Tchebichef。
图20-1显示了通带纹波为:0%、0.5%和20%的低通切比雪夫滤波器的频率响应。随着纹波的增加(坏),滚降变得更尖锐(好)。切比雪夫响应是这两个参数之间的最佳权衡。当纹波设置为 0% 时,滤波器称为最大平坦滤波器或巴特沃斯滤波器(以 1930 年描述这种响应的英国工程师 S. Butterworth 的名字命名)。0.5%的纹波通常是数字滤波器的不错选择。这与信号通过的模拟电子设备的典型精度和准确度相匹配。
本文讨论的切比雪夫滤波器称为 1 类滤波器 (type 1 filters),这意味着纹波只允许在通带内。相比之下,2 型切比雪夫滤波器仅在阻带内有纹波。类型 2 过滤器很少使用。有一个重要的设计称为椭圆滤波器(elliptic filter),它在通带和阻带中都有纹波。椭圆滤波器为给定数量的极点提供最快的滚降,但设计难度大得多。
2 设计过滤器
必须选择四个参数来设计切比雪夫滤波器:
- 高通或低通响应
- 截止频率
- 通带中的纹波百分比
- 极点数
**什么是极点(pole)?**这里有两个答案:
- 答案1:拉普拉斯变换和 z 变换是将脉冲响应分解为正弦曲线和衰减指数的数学方法。这是通过将系统的特征表示为一个复多项式除以另一个复多项式来完成的。分子的根称为零,而分母的根称为极点。由于极点和零点可以是复数,因此通常说它们在复平面中有一个“位置”。复杂的系统比简单的系统有更多的极点和零点。递归滤波器的设计方法是首先选择极点和零点的位置,然后找到合适的递归系数(或模拟分量)。例如,巴特沃斯滤波器的极点位于复平面的圆上,而在切比雪夫滤波器中,它们位于椭圆上。
- 答案2:极点是装满魔法力量的容器。滤波器中的极数越多,滤波器的工作效果就越好。
过滤器设计是一门专业。在实际操作中,更多的工程师、科学家和程序员会从答案 2 的角度思考,而不是答案 1。
图20-2显示了几个纹波为0.5%的切比雪夫滤波器的频率响应。对于此处使用的方法,极数必须是偶数。每个滤波器的截止频率是在幅度超过0.707(-3dB)的地方测量的。截止频率接近 0 或 0.5 的滤波器比频率范围中心的滤波器具有更尖锐的滚降。例如, f C = 0.05 f_C=0.05 fC=0.05 的双极点滤波器与 f C = 0.25 f_C=0.25 fC=0.25 的四极点滤波器具有大致相同的滚降。这是幸运的;由于舍入噪声,可以在 0 和 0.5 附近使用较少的极点。
有两种方法可以在不使用 z 变换的情况下找到递归系数。首先,简单方式:使用table。表20-1和表20-2给出了通带纹波为0.5%的低通和高通滤波器的递归系数。
使用表格设计数字滤波器存在两个问题:
- 首先,表的参数选择有限。例如,表 20-1 仅提供 12 种不同的截止频率,每个滤波器最多 6 个极点,并且没有通带纹波选择。如果不能从连续的值范围内选择参数,则无法优化滤波器设计。
- 其次,必须手动将系数从表格中传输到程序中。这非常耗时,并且会阻止尝试其他值。
不要使用表格值,而是考虑在程序中包含一个计算系数的子例程。这样的程序如表 20-4 所示。好消息是该程序在结构上相对简单。输入四个滤波器参数后,程序会吐出数组 A[] 和 B[] 中的“a”和“b”系数。坏消息是程序调用了表 20-5 中的子例程。乍一看,这个子程序真的很丑。不要绝望;它并不像看起来那么糟糕!第 1120 行中有一个简单的分支。子程序中的其他所有内容都是简单的数字运算。6 个变量进入例程,5 个变量离开例程,其中使用了 15 个临时变量(加上索引)。表 20-5 提供了两组用于调试此子例程的测试数据。
3 阶跃响应过冲
巴特沃斯和切比雪夫滤波器的阶跃响应过冲为 5% 至 30%,随着极点数量的增加而变大。图20-3a显示了两个示例切比雪夫滤波器的阶跃响应。图(b)显示了数字滤波器所特有的、在模拟电子器件中没有对应物的东西:阶跃响应中的过冲量在一定程度上取决于滤波器的截止频率。阶跃响应中过多的过冲和振铃是由于切比雪夫滤波器以牺牲时域为代价针对频域进行了优化。
4 稳定性
通过卷积执行的数字滤波器的主要限制是执行时间。只要愿意等待结果,几乎可以实现任何滤波器响应。递归过滤器恰恰相反。他们像闪电一样奔跑;但是,它们的性能有限。例如,考虑一个截止频率为 0.01 的 6 极点、0.5% 纹波、低通滤波器。该滤波器的递归系数可从表20-1中获取:
仔细观察这些系数。“b”系数的绝对值约为 10。使用单个精度,这些数字中每个数字的舍入噪声约为该值的千万分之一,即 1 0 − 6 10^{-6} 10−6。现在看一下“a”系数,其值约为 1 0 − 9 10^{-9} 10−9 。这里显然有些不对劲。输入信号的贡献(通过“a”系数)将比先前计算的输出信号的噪声(通过“b”系数)小 1000 倍。这个过滤器不起作用!简言之,舍入噪声限制了滤波器中可以使用的极点数。实际数字将略微取决于纹波以及它是高通滤波器还是低通滤波器。单精度的近似值为:
当接近此限制时,过滤器的性能将开始下降;阶跃响应会显示出更多的过冲,阻带衰减会很差,频率响应会有过大的纹波。如果滤波器推得太远,或者系数有误差,输出可能会振荡,直到发生溢出。
有两种方法可以延长可以使用的最大极数:
- 首先,使用双精度。这还需要在系数计算中使用双精度(包括 pi 的值)。
- 第二种方法是分阶段实现过滤器。
例如,一个六极滤波器开始时是三级的级联,每级两个极。表 20-4 中的程序将这三个阶段组合成一组递归系数,以便于编程。但是,如果按原来的三个独立阶段进行,过滤器会更稳定。这需要知道每个阶段的“a”和“b”系数。这些可以从表 20-4 中的程序中获得。表 20-5 中的子例程为级联中的每个阶段调用一次。例如,对于六极滤波器,它被调用了三次。在子程序完成后,五个变量将返回到主程序:A0、A1、A2、B1 和 B2。这些是正在处理的两极阶段的递归系数,可用于分阶段实现滤波器。