我正在使用 Ooura 的 FFT 来分析一些白噪声(持续时间 75368 smp 和 44100 个噪声样本)。我得到的结果很奇怪:即使除以样本数量,我的结果也小于 1.0,这是怎么回事?
我正在使用 RDFT 和逆 RDFT
实际上我有这样的量级结果,例如:
m1 3.47157
m1 8.50726
m1 29.0233
m1 9.64618
m1 43.2969
m1 60.7396
m1 48.3495
m1 35.8336
m1 32.7611
m1 24.1925
m1 26.8244
m1 17.9448
m1 29.7936
m1 23.1585
m1 15.1243
m1 8.89132
m1 14.6676
m1 18.1515
m1 27.5357
m1 5.6661
m1 19.0589
FFT 大小为 4096,峰值为:79.119
我希望结果接近一个数字(比如 1.0 或其他)
如果我对幅度应用一个简单的乘法(如音量),声音就会像一个奇怪的滤波器一样改变......
这是我用来从 re/im 转换为幅度/相位的函数:
double SuperFFT::_GetPhase(double real, double imaginary)
{
return atan2(imaginary, real);
}
double SuperFFT::_GetMagnitude(double real, double imaginary)
{
return sqrt((real * real) + (imaginary * imaginary));
}
相位看起来不错(保持在 -PI 和 PI 之间)
如果我通过一个简单的 240hz 正弦波(持续 75368 个样本)我有这些幅度
m1 0.262643
m1 0.369384
m1 0.543982
m1 0.851133
m1 1.44518
m1 2.76168
m1 6.37861
m1 21.2081
m1 239.998
m1 775.211
m1 585.819
m1 63.0807
m1 12.06
m1 4.37815
m1 2.07803
m1 1.14897
m1 0.701917
m1 0.460003
m1 0.317885
m1 0.228747
如果我除以持续时间并乘以 100,这接近 1 是否正常?
为什么当我乘以幅度时声音会中断?我的 FFT 是坏了还是我错过了什么?
谢谢你的帮助
编辑:我当然使用 OLA
杰夫