窗函数和傅里叶变换

信息处理 fft 离散信号 傅里叶变换
2022-02-12 18:25:42

我想澄清使用窗口和傅立叶变换的“正确”方式。

我的问题与这个有点相关,但我还有一些额外的疑问。

我在时域中有一些真实的非周期性信号y(t). 由于这是一个真实信号,因此数据自然是离散的。

我想计算这个信号的傅里叶变换,Y(f), 在观察时间内,T. 我明白那个

Y~(f)=T/2+T/2y(t)exp(2πift)dt

=Y(f)Tsinc(πfT)

在哪里Y(f)是无限信号的未加窗 FT

为了避免影响sinc功能,建议在观察期内加窗使信号逐渐变细T.

我的问题是:如果我想计算Y~(f)计算(例如使用python/numpy),

  1. 时间信号是否需要在边缘为零?为什么这样?
  2. 如果是这样,是否还会发生频谱泄漏?
  3. 我们不是在扭曲真实的时间信号吗y(t)?
  4. 如果我们增加观察时间T例如2T, 如何Y~(f)改变?
2个回答

当转换任何有限长度的观察时,总是会发生所谓的光谱泄漏。那是因为它是窗口化的产物,任何非无限长度的观察(-t/2 ... +t/2)都需要某种窗口,固有的矩形或其他窗口。窗口函数允许您选择您的工件:从窗口“失真”到 Sinc 效果,和/或许多其他选择。

专注于您的问题(文本的最后部分),您实际上不必强加任何“边界条件”(请原谅对该术语的滥用)。但您必须记住,任何类型的逐渐变细(或任何类型的信号修改)都会影响分析结果。粗略地说,为了执行傅立叶变换,您假设信号是周期性的(这意味着它跨越的范围从+)。

现在,如果您的信号边界具有不同的值,那么将在概念上执行的环绕(实际上并没有发生)将创建一个表现出不连续性的信号。下图中的人工信号对此进行了描述。

在此处输入图像描述

不同的颜色代表复制的相同信号(这是数学假设的)。很明显,每一次颜色变化都有相当突出的不连续性。现在,这个信号的频谱(只有一种颜色)就是你在下一张图片中看到的

在此处输入图像描述

信号中的实际频率为7.65Hz9.87Hz. 频段带宽为3.3¯Hz(信号长度为 30 个样本,采样频率为100Hz)。如您所见,频率分量不是很明显(您可以区分它们,但有很多泄漏)。此外,还引入了一个初始阶段135o12o对于每个分量,第二个分量的幅度为0.83(以标准化的方式)。

在这种情况下,我们可以把它想象成在数据上使用一个矩形窗口。您可能已经知道,在时域中乘以数据就像对它们的频率表示进行卷积。这与在信号的每个频率分量处放置窗口的加权(权重是信号的每个频率分量的幅度)频率响应并在每个频率仓处添加它们是相同的。您可以在下一张图片中看到 Rectangular 和 Blackman(只是随机选择)窗口的频率响应

在此处输入图像描述

如果我们将窗口应用于时域信号并看到在窗口应用之后发生的概念包装,它看起来像这样

在此处输入图像描述

如您所见,边缘变为零,并且环绕处没有不连续性。这消除了可以在没有应用窗口的信号频谱中看到的高频。带有和不带有(矩形)窗口的信号频谱如下所示。

在此处输入图像描述

如上所述,可以看出高频内容已被消除。除此之外,频率辨别能力有所改善,但幅度不再准确(或至少不如矩形窗口准确)。

所以,一般来说,加窗可以改善这种情况(在大多数情况下)。窗口会降低性能的唯一情况是信号分量恰好适合一个窗口长度(因此,“环绕”处不会出现不连续性)。有关窗口化的更多信息,可以查看此DSPRelated Spectrum Analysis Windows页面、Wikipedia - Window Function页面以及 Proakis 和 Manolakis 的数字信号处理一书。

关于观察时间的增加,您有效地实现的是获得有关信号的更多信息。频率和时间歧视之间总会有一个权衡(你观察的时间越多,你的频率就越准确,但你无法说出每个频率何时出现,不复存在以及持续了多长时间它持续了)。通过考虑数字信号的“时间量化”,您可以实现更高的频率精度,每个 bin 的带宽更窄。您必须记住,至少在数学上,您将体验到尖桩栅栏效应(实际上,取决于应用程序,数量可能并不重要),但您可以通过使用窗口函数来最小化泄漏。

除此之外,您必须记住,窗口函数总是会“扭曲”信号,但在频域中,这提供了一些优势(如上面提到的那些),可能会或可能不会提供改进,但这强烈取决于应用程序!