我正在尝试使用 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/