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

标签 c# fft audio-processing

我的问题的简短版本:

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

我的问题的长版本:

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

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

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

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

版主请注意:这不是 Convert Audio samples from bytes to complex numbers? 的重复项即使问题相似。

最佳答案

您需要拆分 channel 并单独处理它们,或者将它们平均到一个单声道 - 这最好取决于您最终想要实现的目标。

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

关于c# - FFT 算法 - 如何将样本转换为复杂结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762941/

相关文章:

r - R中的快速傅立叶变换

c++ - FFTW 性能变化

.net - 是否有一个库可以完成.Net的找平器功能?

audio - 哪种编程语言更适合构建音频处理应用程序

javascript - 比较属性不起作用

c# - 检查窗体上的按钮单击事件 - C#

c# - 如何在 C# 中读写二进制文件?

c# - 在 30 天内显示图片 ASP.NET

swift - Swift 中的 DFT 结果与 MATLAB 中的不同

MATLAB : display 3 or more spectrograms side by side