为什么在1Hz正弦波的FFT输出中,1Hz的幅度是否像正弦波一样?

时间:2013-02-26 01:36:20

标签: signal-processing fft frequency spectrum

我一直在开发一个.NET小软件,它实时接收来自传感器的信号,并对该信号的FFT进行实时显示。

我已经将alglib库用于FFT函数。现在我的目的是及时观察某个特定频率的强度。

为了检查软件,我给它的输入提供了一个正弦波,频率为1 Hz。下图显示了从软件拍摄的屏幕截图。上图显示了显示1 Hz峰值的频谱。然而,当在时间上观察到这个峰值时,如下图所示,强度表现得像正弦波。

enter image description here

我的采样频率是30kHz。我不明白的是我如何得到这个正弦信号,为什么频率的大小表现得像这样?

1 个答案:

答案 0 :(得分:3)

这是Windowing效果的一个例子。它源于这样的事实:除了处理完全周期性信号之外,FFT不是精确操作。当您将信号窗口化时,您将其转换为可能完美重复的较小块。 FFT算法计算音频块的频谱,无限重复。由于它不是完美的正弦波,因此您无法获得结果的精确值。此外,我们可以看到,如果您的窗口没有完全与您的信号频率的倍数对齐,那么它将相对于您的信号相移,窗口捕获信号的稍微不同的块,并且FFT计算不同无限重复信号的频谱。如果你考虑一下,这个相位差也自然会是周期性的,因为窗口会在下一个信号周期内赶上

然而,这只能解释强度的较小变化。假设你在底部图形的轴上使用了正确的标签(你应该仔细检查),还有其他错误。你的窗户可能太小了(虽然我没想到,因为那样你会看到更多的光谱出血)。我刚想到的另一种可能性是你可能正在绘制FFT的 real 部分,而不是幅度。随着相位的变化,真实和复杂的部分可能会有所不同,但您希望幅度保持大致相同。