FFT算法 - 如何将样本转换为复杂结构?

时间:2012-08-01 15:48:10

标签: c# fft audio-processing

我的问题的简短版本:

如何从一系列音频样本(如Int16)转到常用FFT库(如AForge)使用的复杂结构?

我的问题的长版本:

我是音频处理的新手,我正在寻找分析音乐中的音频(定位节拍,速度等)。经过几天阅读后,快速傅里叶变换(FFT)算法似乎是朝着正确方向迈出的一步。

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

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

不幸的是,只要它不作为代码呈现,我就很难阅读数学公式。在我到目前为止访问的几乎所有网站上,很快出现了greeek符号和复杂的数学公式来帮助解释算法。结果,我立刻迷失在翻译中。相信我,我努力寻找“傻瓜算法”。 ;)

主持人请注意:即使问题类似,这也不是Convert Audio samples from bytes to complex numbers?的副本。

1 个答案:

答案 0 :(得分:3)

您需要拆分频道并单独处理它们,或者将它们平均为单个单声道频道 - 这最好取决于您最终要完成的工作。

至于转换数据类型 - 每个实数也是一个具有0的“虚数”部分的复数,因此转换本质上是用样本创建一个复数的数组(最好是标准化的 - 在这种情况下除以通过32768,你在实部中的值为[-1,+ 1]),在虚部中为零。