【问题标题】:How to Make Sense of Fourier Transform Results in Audio Frequency Analysis如何理解音频分析中的傅立叶变换结果
【发布时间】:2014-05-12 03:57:26
【问题描述】:

我正在用 Python 进行音频分析。我的最终目标是获取频率列表及其各自的音量,例如 { frequency : volume (0.0 - 1.0) }

我的音频数据是一个帧列表,其值在-1.0+1.0 之间。我在这个列表中使用了 numpy 的傅立叶变换——numpy.fftpack.fft()。但结果数据对我来说毫无意义。

我知道傅里叶变换从时域变换到频域,但在数学上并不完全是这样。这就是为什么我不太了解结果。

  • numpy.fftpack.fft() 返回的列表中的值是什么意思?我如何使用它/解释它?
  • 如上所述对列表执行的傅立叶变换的最大值/最小值是多少?
  • 如何以{ frequency : volume (0.0 - 1.0) } 的形式实现字典的最终目标?

谢谢。抱歉,如果我对傅立叶变换的理解不足让您大吃一惊。

【问题讨论】:

    标签: python numpy fft frequency-analysis audio-analysis


    【解决方案1】:

    考虑正弦波单个周期的 FFT:

    >>> t = np.linspace(0, 2*np.pi, 100)
    >>> x = np.sin(t)
    >>> f = np.fft.rfft(x)
    >>> np.round(np.abs(f), 0)
    array([  0.,  50.,   1.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.])
    

    FFT 返回一个复数数组,给出频率的幅度和相位。假设您只对幅度感兴趣,我使用np.abs 来获取每个频率的幅度,并使用np.round(__, 0) 将其四舍五入为最接近的整数。您可以在索引1 处看到尖峰,表明发现了一个周期等于样本数的正弦波。

    现在让波更复杂一点

    >>> x = np.sin(t) + np.sin(3*t) + np.sin(5*t)
    >>> f = np.fft.rfft(x)
    >>> np.round(np.abs(f), 0)
    array([  0.,  50.,   1.,  50.,   0.,  48.,   4.,   2.,   2.,   1.,   1.,
             1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
             0.,   0.,   0.,   0.,   0.,   0.,   0.])
    

    我们现在看到与我们的输入相对应的指标 1、3 和 5 处的尖峰。周期为 nn/3n/5 的正弦波(其中 n 为输入样本数)。

    编辑

    这里是傅里叶变换的一个很好的概念解释:http://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/

    【讨论】:

    • 结果的阶段部分让我感到困惑。感谢您的解释和链接。
    • 还有一个问题,变换后的最大值是否总是输入幅度的一半?
    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多