我正在尝试在Android设备上开发GCC_PHAT算法。
对于FFT,我使用了this library。
我们的想法是关联两个音频文件(16位PCM单声道)以找到它们之间的延迟。使用Matlab,它可以很好地工作。
我的第一个问题是FFT输出,它给出的数字高于32768
。例如:
fft re -20830.895138576154
fft re -30639.569794501647
fft re -49850.48597621472
fft re -49335.28275604235
fft re -96060.94916529073
fft re -91409.17426504416
fft re -226903.051428709
有没有办法将这些数字标准化为[-1,1]的间隔?
答案 0 :(得分:0)
library's forward transform definition确实匹配Matlab,所以你应该在正向变换后得到匹配的值(不是因为G_PHAT被标准化为[-1,1]所以它是关键的)。
然而,inverse transform不能说同样的话。确实来自
代码注释inverseTransform
:
此变换不执行缩放,因此反转不是真正的反转。
从图书馆网页:
此FFT不执行任何缩放。因此,对于长度 n 的向量,在对其进行变换和逆变换之后,结果将是原始向量乘以 n (加上近似误差)。 / p>
因此,要获得与Matlab的FFT / IFFT实现相匹配的值,您需要将IFFT的结果除以 n 。