我正在设计一个实时音频分析仪,以嵌入到FPGA芯片上。完成的系统将读取在一个实时音频流和输出频率和振幅对的X最常见的频率。
到目前为止,我已经成功地实现了FFT,但是它的当前输出只是每个窗口的实部和虚部,我想知道的是,如何将它转换成频率和振幅对?
我已经对FFT做了一些阅读,我看到了如何将它们转化为一个大小和相位关系,但是我需要一个没有复杂数学知识的人能够读懂的格式!
谢谢
谢谢你这么快的回答!
我现在得到的FFT输出是一个连续的实对和虚对流。我不确定是将它们分解成与输入数据包大小相同的数据包(64个值),并将它们作为数组对待,还是单独处理它们。
样本率,我没问题。当我自己配置FFT时,我知道它运行在50 the的全球时钟上。至于数组索引(如果输出是数组,当然.),我不知道。
如果我们说输出是一系列由64个复数值组成的一维数组:
1)如何找到数组索引i
( 2)每个阵列是返回一个频率部分,还是返回若干个频率部分?
非常感谢你的帮助!如果没有它我就会迷失方向。
发布于 2012-02-27 02:13:24
FFT结果将给出一个复杂值数组。每个阵列单元的两倍大小(复分量平方和的平方根)是一个振幅。或者做一个日志大小,如果你想要一个dB标度。数组索引会给出这个振幅的频率桶的中心。您需要知道采样率和长度,以获得每个数组元素或bin的频率。
f[i] = i * sampleRate / fftLength对于数组的前半部分(另一半只是复制信息,以复杂共轭的形式输入实际音频)。
由于加窗或所谓的频谱泄漏,每个FFT结果bin的频率可能与音频信号中的任何实际频谱频率不同。查找频率估计方法的细节。
发布于 2012-02-26 16:39:41
坏消息是,不需要理解复杂的数字。好消息是,仅仅因为它们被称为复数并不意味着它们很复杂。因此,首先,查看维基百科页面,我会说,关于音频应用程序,请读到大约3.2节,可能跳过平方根的部分:http://en.wikipedia.org/wiki/Complex_number
这告诉你,如果你有一个复数,a+ bi,你可以想象它生活在x,y平面上(a,b)。要得到震级和相位,只需找到两个量:
phase.
震级非常简单: sqrt(a^2 + b^2)。
相位同样简单: atan2(b,a)。
https://stackoverflow.com/questions/9453714
复制相似问题