如何获得频域中两个音频信号的比率?

时间:2013-05-15 07:46:07

标签: java signal-processing fft

我需要比较两个音频信号,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)来实现我的目标?

1 个答案:

答案 0 :(得分:1)

您需要计算频域中每个信号的幅度,以获得每个信号的功率谱估计值,然后进行分割,即

  • 获取信号1和信号2
  • 对两个信号(例如von​​ Hann)应用合适的窗函数
  • 将FFT应用于窗口信号
  • 计算FFT输出的幅度,mag = sqrt(re*re+im*im) - 这给出了实值功率谱
  • 通过信号2的功率谱划分信号1的功率谱以获得实际值与频率的比率

要将此校正应用于信号3,您可以使用overlap-addoverlap-save方法 - 基本上您使用signal3的FFT,将每个复数值乘以上面获得的实数值,然后使用逆FFT返回时域。唯一的小问题是需要重叠连续的样本窗口并正确处理这种重叠(参见上面重叠 - 添加/重叠 - 保存方法的链接。)