在这里,我将展示窗口设计的好处以及从Parks–McClellan获得相同好处的技巧。
对于半带,四分之一带等滤波器,窗口化保留了缩放后的Sinc函数的时域零点,这是典型的理想低通滤波器。零最终出现在系数中,从而降低了滤波器的计算成本。对于半带滤波器,开窗设计给出了一个滤波器,除中间系数(也被视为偶数)外,每个系数均为0。
图1.典型的半带低通滤波器,增益为2,是水平扩展2倍的Sinc函数,适合于2倍的上采样。
但是,可以通过设计Parks–McClellan / Remez滤波器来获得相同的好处,该滤波器设计为偶数抽头的滤波器,并且仅定义了统一的增益通带。所获得的系数用作较长滤波器的奇数系数。较长的滤波器的中间系数设置为1,其他偶数系数设置为0。该滤波器的通带增益为2,通带和阻带的对称波纹。在Python中:
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()
图2.使用Python间接设计的半带滤波器的系数scipy.signal.remez
。
图3.使用间接设计的半带滤波器的幅频响应图scipy.signal.remez
。
firpm()
与进行比较firls()
。