比较两个频率响应的标准
通常,您会根据特定规格设计低通滤波器:通带纹波、阻带衰减、过渡带宽、相位失真、延迟、瞬态保存、因果关系、计算复杂度等。
当您比较两个过滤器设计时,您可以根据所有这些标准单独评估它们并比较结果。通常,一种设计对于某些标准会更好,而对于其他标准则更糟。在这种情况下,您需要对指标进行一些“加权”平均,其中权重代表特定应用程序的优先级。
完全有可能你的“近似值”比原来的“更好”。
如果您想弄清楚近似值与原始值的接近程度,事情会变得更复杂一些。您可以绘制以 dB 为单位的相对误差(只需将近似值除以参考值)。然而,这可能会产生误导:通带中的 1 dB 误差通常比阻带中的 1 dB 误差更成问题。同样,您需要在特定应用程序和要求的上下文中定义“更好”的指标。
比较滤波器近似精度的常用标准有两个:最小二乘法和峰值误差。
对于任何一个,我们通过减去它们的复数结果来确定两者之间的误差在感兴趣的频率范围内和表示每个滤波器的复杂响应(不是以 dB 为单位!)。
由此,可以与其他实现进行比较的最小二乘或峰值误差的误差标准确定如下:
最小二乘:
峰值误差:
为了在 OP 的情况下实际确定最小二乘,我建议使用以下方法对进行离散近似,其中样本在频率响应中以为步长,提供 rms 误差结果:
如果只关注幅度响应,则可以将误差函数修改为:
如果优先考虑通带或阻带,则可以添加加权因子。最终,两种常见的线性相位 FIR 优化滤波器设计算法,最小二乘法和 Parks-McClellan,将设计 FIR 滤波器以针对通带和阻带中的响应,提供分别最小化最小二乘和峰值误差的解决方案。可以使用 MATLAB、Octave 和 Python scipy.signal 轻松计算最小二乘滤波器系数,并且可以使用MATLAB 以及Octave 和 Python scipy.signalfirls计算 Parks-McClellan 。firpmremez

