iphone - 使用 FFT 的 channel 声码器 - 如何处理直流分量和奈奎斯特频率?

标签 iphone c ios fft frequency

我正在尝试使用 iOS Accelerate vDSP FFT 算法实现 channel 声码器。我无法弄清楚如何处理直流分量和奈奎斯特频率。

调制器和载波信号都是长度为 n 的 float 组。在每个上,我执行前向 FFT 并返回一个长度为 n/2 的频率图(称之为 bin[])。

根据 vDSP 规范,bin[1] 包含高于 0Hz 的第一个频率,bin[2] 第二个,等等...... bin[0] 包含实部的直流分量和奈奎斯特频率(这将通常在虚部的 bin[n/2]) 中。 vDSP 本质上是将频率图打包到尽可能小的空间中(bin[0] 和 bin[n/2] 的虚部在打包前应始终为零)。

我将载波和调制器的频率图分成 k 个波段。我的目标是将 carrier.band[x] 中的每个频率乘以 modulator.band[x] 中频率的总幅度。本质上,增加调制器中也存在的载波中那些频率的强度。

因此,如果 n=8 且 k=2,调制器的第二个波段将包含 bin[2] 和 bin[3]。简单到足以找到总幅度,只需将每个箱子的幅度相加(例如 mag[2] = sqrt( bin[2].real*bin[2]*real + bin[2].imag*bin[2] *图像))。

这对除第一个以外的所有频段都适用,因为第一个频段包含带有直流分量和奈奎斯特频率的怪异 bin[0]。

在计算波段的总幅值时如何处理第一个 bin?我是否只是假设第一个 bin 的大小本身就是 DC 分量?我是否丢弃奈奎斯特频率?

感谢任何可以提供指导的人!我很感激。

最佳答案

我建议您忽略 0 Hz 和 Nyquist,因为它们在音频信号的情况下不包含任何有用的信息。

关于iphone - 使用 FFT 的 channel 声码器 - 如何处理直流分量和奈奎斯特频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825108/

相关文章:

iphone - 如何隐藏 UINavigationController 的后退按钮?

iphone - 应用内购买响应永远不会到来

ios - Swift:验证用户名输入

iOS 订阅latest_receipt_info

ios - 在 iOS 版 Cordova 中设置自动填充

ios - iOS 推送通知中的 header (粗体)和正文

c - 使用Linux C select系统调用来监视文件

c++ - 如何在 3D 物体(如球体)上绘制文字

c - 如何最好地迭代 C 数组?使用指针还是索引?

ios - PWA : Aggressive caching in iOS 12 Safari