频率为随机变量的正弦波 - FFT 脉冲是什么样的?
Sinusoids with frequencies that are random variales - What does the FFT impulse look like?
我目前正在开发一个 C++ 程序,我在其中计算 wav 文件的时变 FFT。我有一个关于绘制 FFT 结果的问题。
举例来说,我有一个 70 Hz 的信号,它是由具有特定谐波的某些乐器产生的。尽管我说这个信号是 70 赫兹,但它是一个真实的信号,我假设 70 赫兹信号会具有一定的随机性。假设我以 20kHz 的采样率对其采样 1 秒。我意识到采样周期可能不需要是 1 秒,但请耐心等待。
因为我现在有 20000 个样本,当我计算 FFT 时。我将有 20000 或 (19999) 个频率仓。我们还假设我的采样率与一些窗口技术相结合,最大限度地减少了频谱泄漏。
那么我的问题是:FFT 是否仍会在 70Hz 处产生相对理想的脉冲?还是原始信号的随机性会导致'appear to be'频谱泄漏?换句话说,频率为随机变量的正弦波的FFT是什么样子的?
你的频谱会显得更宽,这发生在现实世界中。例如,查看 Voight 曲线,它是洛伦兹赞(理想指数衰减的结果)与一定宽度的高斯卷积,宽度由随机波动决定,例如窄带激光探测气体中分子的多普勒效应。
无论哪种方式,您都不会获得 'ideal' 频率峰值。 FFT 分辨率的限制是一个频率仓,(频率分辨率由时间向量长度的倒数给出),但即使这样(正如@xvan 指出的那样)通常也会被 window 函数扩大.如果您的 window 不存在,即它实际上是时间向量长度的平方 window,那么您将得到与 sinc 函数卷积并因此变宽的谱峰。
最好的可视化方法是制作一个长向量并绘制具有足够分辨率的频谱图(通常针对音频信号显示),以便您可以看到个体差异。然后,整体信号的 FFT 是移动峰值在频谱图的垂直轴上的投影。给定时间向量的 FFT 没有任何时间分辨率,而是将 FFT 期间发生的所有频率相加。因此,频谱图(通常人们只使用 STFT,短时傅立叶变换)在任何给定时间都具有 'full' 分辨率,即您期望的窄线形。全时间矢量的 FFT 显示所有线形的代数和,因此看起来变宽了。
总结起来有两个独立的影响:
a) 从 window 函数扩展(正如评论者 1 和评论者 2 所指出的)
b) 从您试图模拟的和现实生活中发生的频率波动的影响中扩展(例如,您坐在秋千上接收无线电信号)。
最后,请注意@xvan 评论的意义:phi= phi(t)
。如果相位角与时间相关,则它的导数不为零。 dphi/dt
是频移,所以你的瞬时频率变成了f0 + dphi/dt
。
一些更常见的调制方案会添加在调制中承载信息的边带。根据相对于 FFT 长度的调制量和类型,边带可以与 FFT 峰值分开显示,或者只是 "fatten" 单个峰值。
我目前正在开发一个 C++ 程序,我在其中计算 wav 文件的时变 FFT。我有一个关于绘制 FFT 结果的问题。
举例来说,我有一个 70 Hz 的信号,它是由具有特定谐波的某些乐器产生的。尽管我说这个信号是 70 赫兹,但它是一个真实的信号,我假设 70 赫兹信号会具有一定的随机性。假设我以 20kHz 的采样率对其采样 1 秒。我意识到采样周期可能不需要是 1 秒,但请耐心等待。
因为我现在有 20000 个样本,当我计算 FFT 时。我将有 20000 或 (19999) 个频率仓。我们还假设我的采样率与一些窗口技术相结合,最大限度地减少了频谱泄漏。
那么我的问题是:FFT 是否仍会在 70Hz 处产生相对理想的脉冲?还是原始信号的随机性会导致'appear to be'频谱泄漏?换句话说,频率为随机变量的正弦波的FFT是什么样子的?
你的频谱会显得更宽,这发生在现实世界中。例如,查看 Voight 曲线,它是洛伦兹赞(理想指数衰减的结果)与一定宽度的高斯卷积,宽度由随机波动决定,例如窄带激光探测气体中分子的多普勒效应。
无论哪种方式,您都不会获得 'ideal' 频率峰值。 FFT 分辨率的限制是一个频率仓,(频率分辨率由时间向量长度的倒数给出),但即使这样(正如@xvan 指出的那样)通常也会被 window 函数扩大.如果您的 window 不存在,即它实际上是时间向量长度的平方 window,那么您将得到与 sinc 函数卷积并因此变宽的谱峰。
最好的可视化方法是制作一个长向量并绘制具有足够分辨率的频谱图(通常针对音频信号显示),以便您可以看到个体差异。然后,整体信号的 FFT 是移动峰值在频谱图的垂直轴上的投影。给定时间向量的 FFT 没有任何时间分辨率,而是将 FFT 期间发生的所有频率相加。因此,频谱图(通常人们只使用 STFT,短时傅立叶变换)在任何给定时间都具有 'full' 分辨率,即您期望的窄线形。全时间矢量的 FFT 显示所有线形的代数和,因此看起来变宽了。
总结起来有两个独立的影响: a) 从 window 函数扩展(正如评论者 1 和评论者 2 所指出的) b) 从您试图模拟的和现实生活中发生的频率波动的影响中扩展(例如,您坐在秋千上接收无线电信号)。
最后,请注意@xvan 评论的意义:phi= phi(t)
。如果相位角与时间相关,则它的导数不为零。 dphi/dt
是频移,所以你的瞬时频率变成了f0 + dphi/dt
。
一些更常见的调制方案会添加在调制中承载信息的边带。根据相对于 FFT 长度的调制量和类型,边带可以与 FFT 峰值分开显示,或者只是 "fatten" 单个峰值。