音频样本的FFT处理

FFT processing of audio sample

本文关键字:处理 FFT 样本 音频      更新时间:2023-10-16

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

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

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

Fft算法采用输入复数值(实数和虚数),虚数被设置为0,因为我没有任何,并且从它的虚数部分剥离Fft输出。

我还有下一个问题:

1) 我认为样本是实数的假设正确吗?

2) 是否有只对实数有效的FFT实现数字?我的意思是,在计算中根本没有想象的部分。

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

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

1) 我认为样本是实数的假设正确吗?

是的。

2) 是否有只对实数有效的FFT实现?我的意思是,在计算中根本没有想象的部分。

如果有的话,它仍然需要在计算中使用虚数。(当然,它可以用成对的实数进行复杂的数学运算,只需将第二个数字标记为非"虚"的数字,但这有什么好处?)

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

这是不对的。

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

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

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