我正在使用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或其他),并且尽可能接近这个数字。
如果我对幅度进行简单的乘法运算(如音量),声音会像受到奇怪的滤波器的影响一样发生变化...
以下是我用于将实部/虚部转换为幅度/相位的函数:
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。
杰夫