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

信息处理 过滤器 fft 频谱 过滤器设计 窗函数
2021-12-26 03:04:26

我认为DSP将通过使用信号部分的FFT来完成,修改由FFT产生的样本(因为它们代表我们的信号+噪声的频谱)并删除任何不需要的信号,而不是进行逆FFT来获得时间滤波信号的域表示(现在已去除噪声)。然而,这并没有完成,而是我们使用窗口函数在时域中完成所有工作。为什么?

如果我们将时域中的窗口函数相乘,而不是将窗口函数的频率响应与频域中的信号频谱进行卷积,那么结果如何呢?我的意思是,如果我们只是通过将我们的信号与滤波器的频率响应相乘来完成频域中的所有工作,那就像滤波一样,对吧?但是这里我们在时域中做所有的事情,而不是使用 window.properties。

->让我们看看我的困惑来自哪里。对于模拟滤波器,例如低通滤波器,我们有类似脉冲的频率响应。当我们对信号进行滤波时,我们有效地将信号的频谱与滤波器的脉冲频率响应相乘。这会将我们信号中高于截止频率的所有频率降低到 0。这就是低通滤波器本质上的工作原理。为什么不对数字滤波器也做同样的事情呢?

4个回答

使用加窗是因为 DFT 计算在输入信号的无限周期扩展上进行。由于许多实际信号根本不是周期性的,或者是在与其实际周期不同的间隔内采样的,这可能会在重复间隔之间的人造“边缘”处产生错误的频率分量,称为泄漏通过首先将时域信号乘以两端都为零的窗口函数,您可以在无限周期扩展中的重复间隔之间创建平滑过渡,从而在我们随后采用 DFT 时减轻这些人为频率分量的创建。

本文对这种现象进行了更深入的研究,并深入了解了不同窗口函数的影响

我认为您混淆了两种不同的操作。

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

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

这个问题有几个很好的答案。但是,我觉得有一个重点还没有完全说清楚。问题的一部分是为什么我们不只是将信号的 FFT 与所需的滤波器响应相乘。例如,如果我们想对信号进行低通滤波,我们可以简单地将所有高于所需截止频率的频率分量归零。这实际上是众所周知的用于设计 FIR 滤波器的频率采样方法的简单应用。问题是我们只能将 FFT 计算的离散频率分量归零。我们无法控制这些离散频率之间发生的情况。事实证明,这种简单版本的滤波只会产生较差的阻带衰减(无论 FFT 长度如何)。如果您可以访问 matlab 或 octave,它'

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])

加窗可减少频谱泄漏。

假设您从开始。周期显然是sin(y)=cos(ω0t)2π/ω0

但是如果没有人告诉你周期是你盲目地选择范围假的,因为通过复制粘贴周期性截断波形而产生的跳跃并没有真正存在于原始信号中——它是一个不幸的截断伪影,不能平滑地捕获周期之间的过渡。处只有一个光谱分量2π/ω[0,1.8π/ω0]ω=ω0

时域加窗的目的是减少所有这些虚构的频谱分量。