gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:26:27 28 4
gpt4 key购买 nike

我的问题的简短版本:

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

我的问题的长版:

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

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

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

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

版主注意事项:这不是 Convert Audio samples from bytes to complex numbers? 的副本尽管问题很相似。

最佳答案

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

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com