我正在尝试使用iOS Accelerate vDSP FFT算法实现通道声码器。我无法弄清楚如何处理直流分量和奈奎斯特频率。
调制器和载波信号都是长度为n的浮点数组。在每一个上,我执行正向FFT并返回长度为n / 2的频率图(称为bin [])。
根据vDSP规范,bin [1]包含0Hz以上的第一个频率,第二个bin [2]等... bin [0]包含实部的DC分量和奈奎斯特频率(这将是通常在虚部的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))。
对于除第一个频段之外的所有频段都有效,因为第一个频段包含具有DC分量和奈奎斯特频率的奇怪bin [0]。
在计算波段的总幅度时,如何处理第一个波箱?我只是假设第一个bin的大小只是DC组件本身吗?我是否会丢弃奈奎斯特频率?
感谢能够提供一些指导的任何人!我很感激。
答案 0 :(得分:0)
我建议您忽略0 Hz和Nyquist,因为它们在音频信号的情况下不包含任何有用的信息。