【发布时间】:2011-07-26 04:01:55
【问题描述】:
我正在尝试使用 iOS Accelerate vDSP FFT 算法实现通道声码器。我无法弄清楚如何处理直流分量和奈奎斯特频率。
调制器和载波信号都是长度为 n 的浮点数组。在每一个上,我执行一个前向 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]。很容易找到总幅度,只需将每个 bin 的幅度相加(例如 mag[2] = sqrt( bin[2].real*bin[2]*real + bin[2].imag*bin[2] *imag ))。
这对除第一个以外的所有频段都有效,因为第一个频段包含带有直流分量和奈奎斯特频率的奇怪 bin[0]。
在计算波段的总幅度时,如何处理第一个 bin?我是否只是假设第一个 bin 的幅度只是 DC 分量本身?我要放弃奈奎斯特频率吗?
感谢任何可以提供一些指导的人!我很感激。
【问题讨论】:
-
您是否应该添加 FFT 而不是将它们相乘?
标签: iphone c ios fft frequency