我目前正在使用C ++编写一个程序,我正在计算wav文件的时变FFT。我有一个关于绘制FFT结果的问题。
比如说我有一个70 Hz的信号是由某些具有某些谐波的仪器产生的。即使我说这个信号是70赫兹,它也是一个真实的信号,我认为它会有一些70Hz信号变化的随机性。假设我以20kHz的采样率对其进行1秒的采样。我意识到样本期可能不需要1秒钟,但请耐心等待。
因为我现在有20000个样本,所以当我计算FFT时。我将有20000或(19999)频率箱。让我们假设我的采样率结合一些窗口技术可以最大限度地减少频谱泄漏。
我的问题是:FFT是否仍能在70Hz产生相对理想的脉冲?或者似乎是'频谱泄漏是由原始信号的随机性引起的?换句话说,FFT的频率是随机变量的正弦波是什么样的?
答案 0 :(得分:3)
一些更常见的调制方案将添加承载调制信息的边带。根据相对于FFT长度的调制量和类型,边带可以看起来与FFT峰值分开,或者只是“胖”"单峰。
答案 1 :(得分:1)
您的频谱会变得更宽,这种情况会发生在现实世界中。例如,对于Voight轮廓,其是Lorentizan(理想指数衰减的结果)与一定宽度的高斯卷积,宽度由随机波动确定,例如,多普勒效应对由窄带激光探测的气体中的分子产生影响。
你不会得到一个理想的'频率峰值无论如何。 FFT分辨率的限制是一个频率仓,(频率分辨率由时间矢量长度的倒数给出),但即使如此(如@xvan指出的那样)通常由窗口函数加宽。如果您的窗口不存在,即它实际上是时间向量长度的方形窗口,那么您将获得与sinc函数卷积的谱峰,从而扩展。
可视化的最佳方法是制作一个长矢量并绘制一个具有足够分辨率的频谱图(通常显示为音频信号),以便您可以看到个别变化。然后,整个信号的FFT是将移动峰值投影到频谱图的垂直轴上。给定时间矢量的FFT没有任何时间分辨率,但总结了FFT期间发生的所有频率。因此频谱图(通常人们只是简单地使用STFT,短时傅里叶变换)在任何给定的时间都具有“完整”的频谱。分辨率,即您期望的窄线条。全时矢量的FFT显示所有线形的代数和,因此显得更宽。
总结一下,有两个不同的效果: a)从窗口功能扩展(如评论者1和2指出的那样) b)从您试图模拟的频率波动的影响扩大,并在现实生活中发生(例如,您在接收无线电信号时坐在秋千上)。
最后,请注意@ xvan评论的重要性:phi= phi(t)
。如果相位角是时间相关的,那么它具有非零的导数。 dphi/dt
是频移,因此您的瞬时频率变为f0 + dphi/dt
。