多项式插值/有限差分数值微分的频率响应

信息处理 过滤器设计 有限脉冲响应 频率响应 插值 有限差分
2022-02-06 17:34:10

可以使用多项式插值(或有限差分)来进行数值微分。然而,似乎对获得这种数值微分方法的频率响应缺乏兴趣。有没有我可以参考的参考,或者任何人都可以提供什么频率响应?我想获得任何滤波器阶数(任意数量的滤波器抽头)的频率响应。

高阶是指高阶差异,如https://en.wikipedia.org/wiki/Finite_difference#Higher-order_differences或在多项式插值的情况下,多项式次数。

2个回答

多项式不可积,因此它们的傅里叶解释很复杂。然而,在当地,也有一些作品。在最小二乘法下,多项式插值的线性适用于频率分析。

Savitsky-Golay 滤波器类执行最小二乘多项式插值,并产生不同的导数。由于它们在信号处理中似乎鲜为人知,RW Schafer 将它们献给了它们什么是 Savitzky-Golay 滤波器?公开版)在 2011 年 IEEE Signal Processing Magazine 的 Lecture Notes 部分。在那里,他特别介绍了它们的属性,包括频率响应。Savitzky-Golay 的平滑和PO Persson 和 G. Strang 在 2003 年的勒让德滤波器也进行了分析。可以将导数精度和噪声整形或频率响应拟合结合起来。

最近,有 IIR 滤波器和分数微分的推导,例如具有重复极点和规定延迟的最大平坦 IIR 平滑器,甚至是非线性版本。

在图像处理方面,也有很多工作,如果需要,我可以挖掘我的参考数据库。

对于有限差分,正如 Andy 所建议的,您可以使用 MATLAB/Octave's freqz,但需要一些技巧来获得正确的相位频率响应。我正在使用维基百科对高阶有限差分的定义。在八度:

graphics_toolkit("gnuplot");
n = 2; #finite differences derivative order
s = 0; #-1 for forward, 0 for central, 1 for backward
b = [1];
a = [1];
for k=1:n,
  b = conv(b, [1, 0, -1]);
  a = conv(a, horzcat(zeros(1, 1-s), [1]));
end;
w = [(0:512)/512*pi-pi/2];
h = freqz(b, a, w);
freqz_plot(w*2/pi, h, true);

随意更改ns. b将包含滤波器系数,被零稀释以freqz在抽头可能为半整数倍时计算频率响应,并且a1在脉冲响应中的时间为零时标记抽头。对于上述:

b =    
   1   0  -2   0   1

a =
   0   0   1

这些是分子和分母多项式的系数z1的传递函数,分别。对于前向和中心有限差分,滤波器是非因果的。与因果向后有限差分滤波器的区别在于脉冲响应已向后移动m通过将传递函数乘以采样zm与正面m.这引入了负面的权力z1(z1)m在分子中。这可以freqz通过将分子和分母都乘以zm确保两者都是多项式z1. 实际上,上面的脚本就是这样做的。

在此处输入图像描述
图 1.freqz_plot中心二阶导数有限差分的输出。

所有的幅度频率响应都相同:向前、向后、中央。