2

我的问题的简短版本:

如何从音频样本数组(如 Int16)到常见 FFT 库(如 AForge)使用的复杂结构?

我的问题的长版本:

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

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

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

不幸的是,只要不是以代码形式呈现,我在阅读数学公式方面就很糟糕。到目前为止,在我访问过的几乎所有网站上,很快就会出现希腊符号和复杂的数学公式来帮助解释算法。结果,我马上就迷失在翻译中。相信我,我努力寻找“傻瓜的 FFT 算法”。;)

版主注意:这不是将音频样本从字节转换为复数的副本吗?即使问题相似。

4

1 回答 1

3

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

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

于 2012-08-01T16:04:35.207 回答