比较两个频率响应的标准

信息处理 频率响应
2022-02-09 23:34:51

我正在使用 matlab 中的 freqz 函数设计一个 FIR 低通滤波器。我使用一种技术生成了分子系数(我们称之为原始响应)。此外,我正在尝试使用其他一些技术来得出这些系数(我们称之为近似响应)。我想比较我的近似响应与原始响应的接近程度。我在 matlab 上绘制的这两个响应(一个接一个)。

在此处输入图像描述

视觉上很难看出区别。让我在下面粘贴放大的图片。在这里我们可以看到两者之间存在差异。 在此处输入图像描述

有没有办法量化近似频率响应与实际响应相差多少?

2个回答

通常,您会根据特定规格设计低通滤波器:通带纹波、阻带衰减、过渡带宽、相位失真、延迟、瞬态保存、因果关系、计算复杂度等。

当您比较两个过滤器设计时,您可以根据所有这些标准单独评估它们并比较结果。通常,一种设计对于某些标准会更好,而对于其他标准则更糟。在这种情况下,您需要对指标进行一些“加权”平均,其中权重代表特定应用程序的优先级。

完全有可能你的“近似值”比原来的“更好”。

如果您想弄清楚近似值与原始值的接近程度,事情会变得更复杂一些。您可以绘制以 dB 为单位的相对误差(只需将近似值除以参考值)。然而,这可能会产生误导:通带中的 1 dB 误差通常比阻带中的 1 dB 误差更成问题。同样,您需要在特定应用程序和要求的上下文中定义“更好”的指标。

比较滤波器近似精度的常用标准有两个:最小二乘法和峰值误差。

对于任何一个,我们通过减去它们的复数结果来确定两者之间的误差E(ω)=H1(ω)H2(ω)在感兴趣的频率范围内H1(ω)H2(ω)表示每个滤波器的复杂响应(不是以 dB 为单位!)。

由此,可以与其他实现进行比较的最小二乘或峰值误差的误差标准确定如下:

最小二乘:

|E(ω)|2dω

峰值误差:

max|E(ω)|

为了在 OP 的情况下实际确定最小二乘,我建议使用以下方法对进行离散近似,其中样本在频率响应中以为步长,提供 rms 误差结果:Nk=1...N1Δω

ϵrms=1Nk|E(kΔω)|2

如果只关注幅度响应,则可以将误差函数修改为:

E(ω)=|H1(ω)||H2(ω)|

如果优先考虑通带或阻带,则可以添加加权因子。最终,两种常见的线性相位 FIR 优化滤波器设计算法,最小二乘法和 Parks-McClellan,将设计 FIR 滤波器以针对通带和阻带中的响应,提供分别最小化最小二乘和峰值误差的解决方案。可以使用 MATLAB、Octave 和 Python scipy.signal 轻松计算最小二乘滤波器系数,并且可以使用MATLAB 以及Octave 和 Python scipy.signalfirls计算 Parks-McClellan firpmremez