低通 Lanczos 滤波器

信息处理 Python 低通滤波器
2022-02-05 13:08:29

我是 Lanczos 滤波器的新手,并试图弄清楚如何使用它们来生成具有良好时域特性的零相位低通滤波器。 这个例子展示了如何在 Python 中实现这样的过滤器,但没有给出选择窗口长度的任何理由,尽管它决定了过滤器顺序,我认为这是一个相对重要的参数。另外,我不确定它的相位响应。
有没有人对在这种情况下使用 Lanczos 过滤器、它们的优缺点以及如何客观地选择窗口大小有见解?

2个回答

这是一个相当晚的回应,但我刚刚提出了这个问题。因此,如果它对任何人未来的问题有任何帮助,我将发布一个答案:

尽管您的问题非常全面;根据我使用 Lanczos 滤镜的经验,它是一种相当通用的滤镜,尤其是在图像处理方面。我主要用它来缩放图像,其中过滤器是其他 FIR 过程的一部分。为了使用它,我将设计 Sinc 函数(由 Lanczos 重采样函数定义)依赖于以下参数:放大因子 (N) 和滤波器阶数 (a)。当我定义窗口长度时,它是两个参数的简单函数,即:

k = (a * 2) + 1

然后窗口空间导致:

x = np.linspace(-a, a + (N-1), k*N)

其中 k*N 是长度。然后将 Lanczos Sinc 函数与区间值相乘。这是为了举一个实际的例子。换句话说,你需要知道你想用过滤器做什么。它高度依赖于您要过滤的内容,除了过滤器顺序之外,您还需要定义一个(或多个)参数来定义实际窗口长度以充分利用过滤器。

要快速了解 Lanczos:

这只是实际实现 Sinc 函数的众多方法之一,在图像锐化和重采样离散数据点之间的插值方面非常好。但它确实有一些限制。如果内插信号的值范围比离散样本值跨越的范围更宽,则可能会导致振铃伪影,最终导致削波伪影。然而,与 Sinc 函数的许多其他实现相比,这种效果非常低。

Lanczos 是由另一个 sinc 函数加窗的 sinc 函数,常用于图像缩放。

把它放到一个一般的上下文中,我认为它是从 sinc 原型创建实用过滤器的“窗口方法”。那么问题是“为什么 sinc 的第一瓣在用于图像缩放时特别适用于 sinc 的窗口化,与例如 rect 窗口、Hann 窗口或其他东西相比。