使用 FIR 滤波器进行插值

信息处理 过滤器 插值
2021-12-22 05:53:17

如何使用 FIR 滤波器进行插值?我比较熟悉最近距离插值、线性插值等插值。

假设一个信号被给出为以下系列:

    time=    1 2 3 4 5 6 7 8
    signal=[ 1 1 2 2 3 2 7 6]

然后,如果我问时间 2 的信号值是多少,我们可以看到signal[2] = 1那么 2.1 时刻的信号值呢?使用线性插值方法,我可以判断signal[2.1] = 0.9*1+0.1*2 = 1.1

在这种情况下,我怎么知道对应的 FIR 滤波器呢?如何使用过滤器获取信号值?

4个回答

让我们从稍微不同的角度来看这个:

  1. 如果信号被正确采样,即按照香农/奈奎斯特准则,那么样本包含有关原始信号的所有信息。如果没有,所有的赌注都结束了,所以我们暂时跳过这个。
  2. 然后,插值等效于在非整数时间对信号进行采样。在您的情况下,您想通过使用信息 x[1], x[2], x[3] ...了解什么是 x(t=2.1) ...
  3. 对于“什么是 x(t=2.1),只有一个“正确”答案。在您的示例中,它恰好是 1.05061339.... 可以使用 Whittaker Shannon 插值(参见 Wikipedia)作为
    x(t)=n=x[n]sinc(tnTT)
  4. 这可以解释为具有脉冲响应的卷积。但是,它不是“有限的”。
  5. 不幸的是,Whitaker Shannon 插值不是很实用:脉冲响应是无限的,零点的数量是无限的,而且随着时间的推移衰减很慢,所以它不是一个很好的窗口来获得时间有限的脉冲响应。
  6. Whittaker Shannon 插值等效于与理想低通滤波器的脉冲响应进行卷积。所有实用的插值方法也将涉及低通滤波器。甚至线性插值也可以解释为低通滤波器,它只是一个非常糟糕的滤波器。
  7. 通过根据应用要求调整滤波器参数,使插值滤波器变得“实用”:您需要多少精度、信号的频谱内容是什么、您可以容忍什么延迟等。
  8. 要调整的滤波器参数是滤波器阶数、截止频率、滚降、滤波器设计方法(等波纹、最小二乘等)、线性或最小相位、旁瓣高度、阻带衰减、通带波纹等。

如您所知,线性插值不是最理想的。您在时域中理解它,但让我们在频域中研究它。采样的信号频谱将是周期性的ω=2π(f = 1)。

http://i.stack.imgur.com/17H8i.gif

理想情况下,我们可以使用一个理想的低通滤波器,其截止频率为fS/2不要忘记,虽然图中没有,但定义了负频率。

http://i.imgur.com/3iHH7.png

您可能还记得理想的频率响应意味着一种sinc类型的时域脉冲响应。这意味着我们需要无限的滤波器系数:每个样本都需要了解每个过去和未来的样本。那么为什么不尝试一些更简单的东西呢?

例如,这将是线性插值。您使用的线性时域响应类似于三角信号,也可以看作是频域中的 sinc

H(jω)=1/T·(sin(ωT/2)/(ω/2))2

(请查看 Oppenheim's Signals and systems,第 7.2 节以获得良好的图表和非常深刻和令人敬畏的解释,您不会在网上找到它。离散时间信号处理也包括这个问题。)真的不准确,这个过滤器会看起来像: http://i.imgur.com/18Kvn.png

因此,我们的滤波器比理想的差(显然),但现在我们有一个有限的时域响应(又名 FIR 滤波器)。这就是您所做的时域操作与频域相关的方式。

有关如何应用过滤器的更多信息,我建议查看上述书籍。如果您在时域 (h[n]) 中定义滤波器,则可以使用卷积来应用它,而如果在频域 (H(jw)) 中定义,您可以将输出频谱计算为输入和频率的乘积. 回复。

FIR 滤波器的输出是在滤波器长度上计算的平均值,并以基于滤波器权重或系数的位置为中心。一个简单的“箱车”移动平均,所有权重都相同,将平均所有输入,因此加权平均将位于过滤器长度的中心。如果滤波器有奇数个抽头,则输出将是中心抽头周围样本的平均值。如果滤波器具有偶数个抽头,则平均值将落在两个中心样本之间,并且滤波器将“内插”两个中心样本之间的覆盖样本的平均值。

通常,频率选择滤波器的“权重”轮廓形状类似于sin(x)x或类似的东西,输出样本将在时间上与主瓣的峰值对齐sin(x)x. 如果sin(x)x与偶数抽头对称,主瓣的峰值将在输入样本之间,同样,滤波器将在主瓣峰值处的两个输入样本之间插入一个值。

在许多过滤器中,sinx/x 函数的采样专门用于通过放置sin(x)x在所需的插值点。多相重采样滤波器和 Farrow 滤波器通过动态选择 FIR 滤波器系数来实现这一点,以便sin(x)x峰值落在输入样本之间的特定期望位置。

如果您的 FIR 滤波器采用封闭式方程或可计算算法,例如使用 von Hann 窗的加窗 Sinc,那么对于您希望插值的每个点,您可以计算系数向量 (您的 FIR 滤波器需要从数据矢量点偏移的抽头),并使用这些系数和您的数据数组的点积来计算 FIR 滤波的插值结果点。

如果重复您希望插值的点的偏移量,例如在以有理分数步长间隔执行一系列插值时,您可以预先计算或缓存系数,有时称为多相 FIR 滤波器。

除了计算每个系数之外,您还可以通过对插值系数进行插值来获得足够质量的结果,例如在插值较粗的多相 FIR 滤波器表时,或者您可以使用 Farrow 滤波器算法之类的方法对系数进行多项式逼近。这可能允许比为每个点的每个抽头多次调用超越库函数的可能需要更低的计算成本(或者如果您所需的过滤器不能以简单易计算的封闭形式表示,则更糟)。