我需要比较两个音频信号,signal1和signal2。 Signal1是白噪声。 Signal2与signal1的信号相同,具有用于切割或衰减某些频率的特定均衡。 如何获得频域中两个音频信号的比率? (例如:在100Hz的频率下,与信号1相比,信号2衰减50%)。 我需要这个信息来处理第三个信号,方法是对signal2中的transform1应用相同的均衡。
我使用this library来处理我的数据并从时域传递到频域。 signal1和signal2的代码相同。
DoubleFFT_1D fft1 = new DoubleFFT_1D (FFT_SIZE);
double[] input1 = new double[FFT_SIZE];
double[] fftBuff1 = new double[FFT_SIZE * 2];
this.wavFileDoubleInputStreamMic.read(input1, 0, FFT_SIZE);
for (int i = 0; i < FFT_SIZE; i++){
fftBuff1[2*i] = input1[i];
fftBuff1[2*i+1] = 0;
}
fft1.complexForward(fftBuff1);
如何使用FFT结果(来自signal1和signal2)来实现我的目标?
答案 0 :(得分:1)
您需要计算频域中每个信号的幅度,以获得每个信号的功率谱估计值,然后进行分割,即
mag = sqrt(re*re+im*im)
- 这给出了实值功率谱要将此校正应用于信号3,您可以使用overlap-add或overlap-save方法 - 基本上您使用signal3的FFT,将每个复数值乘以上面获得的实数值,然后使用逆FFT返回时域。唯一的小问题是需要重叠连续的样本窗口并正确处理这种重叠(参见上面重叠 - 添加/重叠 - 保存方法的链接。)