2012-08-01 32 views
2

短版我的问题:FFT算法 - 如何将样本转换为复杂结构?

如何从音频采样的阵列去(如的Int16)通过共同的FFT库,如AForge使用复杂的结构?

我的问题的长版:

我是新来的音频处理,我期待来分析音乐音频(定位节拍,节奏等)。经过几天的阅读,快速傅立叶变换(FFT)算法似乎是朝着正确方向迈出的一步。

得到持续而不必从头开始实现的算法,我已经下载了几个开源库,Exocortex和AForge.net的。

我解码音频到内存缓冲区。在我的16位48kHz音频立体声音轨的每个周期,我得到48000字节或24000个采样。这些目前被复制到一个短阵列(Int16)中。我现在需要将我的数组转换为复杂结构(在AForge的情况下)。这反过来用“真实”和“虚构”双重值初始化。但究竟是什么,以及我如何从我的阵列中走向这两个双重值?另外,在传递之前是否需要分离左/右声道?

不幸的是,我在读的数学公式,只要它不表现为代码可怕。在我到目前为止访问过的几乎所有网站上,快速出现了快速符号和复杂的数学公式以帮助解释算法。结果,我马上迷失在翻译中。相信我,我努力找到了“傻瓜式FFT算法”。 ;)

致主持人的注意事项:即使问题类似,这不是Convert Audio samples from bytes to complex numbers?的重复。

回答

3

你需要或者拆分通道和单独处理,或将其平均到一个单声道 - 这是最好的取决于你最终要完成什么。

至于转换数据类型 - 每个实数也是一个复数,它具有0的“虚”部分,所以转换本质上是用样本创建一个复数的数组(最好归一化 - 在这种情况下由32768分,所以你在虚部的实部和具有零值的范围在[-1,+ 1])。

+0

谢谢您的回答。将尝试。出于好奇,为什么我必须将虚数设置为0.它是什么,它为什么在那里? – BlueVoodoo 2012-08-01 16:20:07

+0

这将必须进入所有那些你说你不希望有钻研公式 - 复杂的数学运算是一个相当显著而复杂的话题,其有没有足够的空间,甚至开始在这里解释。如果你真的想知道,找一本教科书或一些复杂的数学;在目前情况下,虽然,我认为“这是它的工作方式”是最好的答案 - 如果你使用其他什么比0,你会得到错误的答案。 – twalberg 2012-08-01 16:34:43

+0

够公平的。它现在似乎工作,所以我会接受这个答案。 – BlueVoodoo 2012-08-01 16:35:11