【问题标题】:FFT processing of audio sample音频样本的FFT处理
【发布时间】:2016-05-05 23:39:11
【问题描述】:

我是具有数学背景的音频处理新手,所以我对使用 fft 处理提取的样本的问题很少(很多,但对于初学者来说很少)。

我正在使用来自http://www.drdobbs.com/cpp/a-simple-and-efficient-fft-implementatio/199702312?pgno=1 的具有固定数组长度的fft 实现。

我有一些样本(比如说 1024 个样本)。

采用输入复数值(实部和虚部)的 Fft 算法,虚部设置为 0,因为我没有任何并去除它的虚部的 fft 输出。

我有下一个问题:

1) 我对样本是实数的假设是否正确?

2) 是否有有效的 FFT 实现,它只适用于真实的 数字?我的意思是计算中根本没有虚部。

3) 如果我继续使用所描述的过程,是否正确假设如果 fft 的输入中没有虚数数据(全为零),对于所有值,fft 输出的虚数部分也将为零?

PS 如果问题已经存在,我很抱歉,但我没有找到任何令人满意的答案。

【问题讨论】:

  • 即使对于纯实输入,输出(通常)也会有一个虚部。输出的绝对值(幅度)表示相应频率的功率,而参数(复数值和实轴之间的角度)表示该频率的相位。对于音频应用,通常会忽略相位而仅保留幅度,但虚部仍会对此做出贡献且不能忽略。
  • 谢谢,你能告诉我如果忽略虚部会有什么影响吗?我正在尝试对音频进行分析以创建相似度度量。我真的不明白如何实施统计测量,我是先计算实数然后再计算虚数,以及如何将这两个测量合并为一个?
  • 如果您忽略虚部,那么您的输出将完全搞砸。你应该做的是取每个输出的绝对值——即 sqrt(real*real + imag*imag)
  • 是的,immibis 说的可能就是你想要的。另外,实部和虚部与想要在音频波形中测量的特征不对应。

标签: c++ signal-processing fft


【解决方案1】:

1) 我对样本是实数的假设是否正确?

是的。

2) 是否有仅适用于实数的有效 FFT 实现?我的意思是计算中根本没有虚部。

如果有,它仍然需要在计算中使用虚数。 (当然,它可以用实数对进行复杂的数学运算,只需将第二个数字标记为非“虚构”的东西,但这有什么优势?)

3) 如果我继续使用所描述的过程,是否正确假设如果 fft 的输入中没有虚数数据(全为零),对于所有值,fft 输出的虚数部分也将为零?

这是不正确的。

FFT输出中每个数字的绝对值与信号中每个频率的幅度成正比。

信号中每个频率的相位也被编码在输出中,作为复数的argument。也就是说,如果某个频率与正弦波异相 90 度,则该箱的自变量将为 90 度——也就是说,实部将为 0,而虚部将具有幅度!对于不是 90 度的倍数的相位,实部和虚部都将非零。

如果不关心相位信息,可以取每个输出数的绝对值——即sqrt(real*real + imag*imag)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2016-01-14
    • 2013-12-02
    • 2017-10-15
    • 2018-12-12
    相关资源
    最近更新 更多