为什么我们在时域中使用窗口而不是FFT修改频谱和进行逆FFT


16

我以为DSP可以通过对信号的一部分进行FFT来完成,修改FFT产生的样本(因为它们代表了我们信号的频谱+噪声),并去除了任何不想要的信号,然后进行逆FFT来获取时间滤波信号的域表示(噪声已被移除)。但是,此操作尚未完成,而是使用窗口函数在时域中完成所有工作。为什么?

如果我们在时域中乘以窗函数,而不是在频域中将窗函数的频率响应与信号频谱进行卷积,那该如何计算呢?我的意思是,如果我们只是通过将信号乘以滤波器的频率响应来完成频域中的所有工作,那就像滤波对吗?但是在这里,我们使用时域来完成时域中的所有工作。

->让我们看看我的困惑来自何处。对于模拟滤波器,例如低通滤波器,我们具有类似频率响应的脉冲。当我们对信号进行滤波时,我们实际上是将信号的频谱乘以类似于滤波器的频率响应的脉冲。这将使信号中的所有频率都超过一个截止值而降至0。这就是低通滤波器的工作原理。为什么不对数字滤波器也一样?


Answers:


7

窗口化可减少频谱泄漏。

假设你开始了一个。的周期是明显2 π / ω 0ÿ=cosω0Ť2π/ω0

但是,如果没有人告诉你,周期为和你盲目选择范围[ 0 1.8 π / ω 0 ],并借此截断波形的FFT,你会在里面全是假的,因为其他频率的观察频率成分通过复制粘贴被截断的波形以产生周期性而产生的跳变实际上并没有出现在原始信号中-这是一种不幸的截断现象,无法平稳地捕获周期之间的过渡。理想的情况是仅存在一个在光谱分量ω = ω 02π/ω[01.8π/ω0]ω=ω0

在时域开窗的目的是减少所有这些虚拟频谱成分。


12

使用窗口化是因为DFT计算对输入信号的无限周期性扩展进行操作。由于许多实际信号不是完全不是周期性的,或者是在不同于其实际周期的间隔内采样的,因此这可能会在重复间隔之间的人为``边缘''处产生虚假的频率分量,称为泄漏。通过首先将时域信号乘以两端均变为零的加窗函数,可以在无限周期扩展中的重复间隔之间创建平滑过渡,从而在我们进行DFT时可以减轻这些人工频率分量的产生。

给出了更深入的研究这种现象,以及一些洞察到不同的窗口功能的影响。


11

我认为您正在混淆两个不同的操作。

@sam解释了时域中的窗口化,因此我不再重复。但是没有执行加窗操作来执行过滤。在许多情况下,通过将信号的FFT与滤波器频率响应相乘来进行滤波是完全合理的,而且确实可以做到。过滤的替代方法是时域卷积(与开窗不同)。这具有其自身的优势,例如在测量信号时“实时”操作信号,而无需等待整个信号被存储然后进行转换。

因此,对于您的问题“为什么不对数字滤波器也做同样的事情?”,答案就是“我们在合适的时候就做”。


我也有一个印象,即卷积和窗口混淆在问题中。好你指出了!
2015年

11

这个问题有好几个答案。但是,我感到有一个重要的观点尚未完全阐明。问题的一部分是为什么我们不只是将信号的FFT与所需的滤波器响应相乘。例如,如果要对信号进行低通滤波,我们可以将所有高于期望截止频率的频率分量简单地归零。实际上,这是众所周知的频率采样方法在设计FIR滤波器时的简单应用。问题在于我们只能将FFT计算的离散频率分量归零。我们无法控制这些离散频率之间发生的情况。事实证明,这种简单的滤波方式只会导致较差的阻带衰减(与FFT长度无关)。如果您可以使用Matlab或八度音阶,

x=2*rand(1024,1)-1;
X=fft(x);
Y=X.*[ones(200,1);zeros(625,1);ones(199,1)]; % lowpass filter
y=real(ifft(Y)); % real() just to remove numerical errors
Y=fft(y,4096);
plot(20*log10(abs(Y(1:2048)))),axis([0,2048,-30,50])

6

如果您不使用非矩形窗口,则在进行任何频域滤波之前,FFT结果将已经与默认矩形窗口(周期Sinc)的变换进行卷积。例如,您将应用两个过滤器,您可能不需要其中之一。

通过在FFT和频域滤波之前在时域中进行开窗,您可以替换由矩形开窗完成的所有滤波(所谓的“泄漏”),因此不会产生其他不必要的滤波器卷积。

另一种方法是在连续的窗口上使用重叠添加或重叠保存方法,其中一个矩形窗口的效果会被相邻窗口的相似效果抵消。


5

时域中的窗口,因为

  • 我们可以保证窗口的边缘为零
  • 窗口函数在空间域中具有很好的解析表达式
  • 许多窗函数具有怪异的频谱,很难估计
  • 只需要有限数量的样本(可以在信号流进入时进行窗口化)

例如来自维基百科

在此处输入图片说明

窗口函数的硬截止变为零意味着在频谱域中它们的旁瓣非常缓慢地变为零。如果摆脱了这种约束,我们可以拥有在空间和光谱域都紧凑的函数,例如高斯滤波器。这意味着您可以通过频谱域进行滤波,但这需要了解整个信号。

如果您确实已经拥有了整个信号,另一种选择是使用小波


2

我有同样的问题。

卷积是时域信号乘以窗口的积分/累积和。这不应与“窗口式”时域信号混淆。

到此结束文章对我帮助很大。

基本上,它说实信号是有限的,突然切断实信号会在频域中导致许多不需要的频率/伪像。

为了避免/最小化这些伪像,您可以使用平滑(例如钟形)窗口函数,以使您的样本以零开始和结束,而不是以某个非零的标量值突然结束。

平滑切断

上面的窗口化样本在频域中的伪影将少于下面的原始样本。

突然切断


1

FFT有两大类,它们是1)一种实现FIR滤波器的有效方法,以及2)频谱分析。

对于FIR过滤,除非窗口与过滤器相对应,否则不必担心窗口也不会使用它们,但这不是常见的事情。泄漏不是问题。

频谱分析是使用窗口的地方。在这里,您可以查看安装在大型工业机器上的传感器,并尝试弄清其深处是否有轴承故障。轴承在出现故障时会发出尖叫声,但它们发出的噪音通常比机器发出的其他声音低得多。这就是泄漏和平均的地方。给定强音,泄漏将淹没我们正在寻找几个信号箱的微弱信号。在存在强信号的情况下,它可以提高频谱分析对弱信号的灵敏度。当背景噪声倾斜时,会有类似的效果。我们寻求的信息是在频域中。在雷达,声纳和地球物理学中,这是相同的问题。看到微弱的信号是目标。


1

需要在时域开窗,以防止单个频率不完全位于频点上,从而无法在整个频谱上扩展。也许此页面有帮助:http : //www.sm5bsz.com/slfft/slfft.htm Linrad(我有20岁的项目)使用加窗FFT,然后在频域中应用滤波器(将我们不希望的值设为零。)应用窗口-不要突然从weigtht 1变为权重为0的频点。然后应用反向FFT-但现在点数要少得多。无需包含我们知道为零的所有频点!!作为结果,我们得到的时间函数的尺寸要小得多-这意味着采样率要低得多。该过程只需一步即可进行过滤和抽取。如果要同时滤除多个通道,这将非常有效。linrad主页在这里:http ://www.sm5bsz.com/linuxdsp/linrad.htm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.