1

我需要比较两个音频信号,信号 1 和信号 2。Signal1 是白噪声。信号 2 与信号 1 是相同的信号,具有用于切割或衰减某些频率的特定均衡。如何获得频域中两个音频信号的比率?(例如:在 100Hz 的频率下,信号 2 与信号 1 相比衰减了 50%)。我需要此信息来处理第三个信号,方法是应用应用于信号 2 中的变换信号 1 的相同均衡。

我使用这个库来处理我的数据并从时域传递到频域。此代码对于信号 1 和信号 2 相同。

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 结果(来自信号 1 和信号 2)来达到我的目标?

4

1 回答 1

1

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

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

要将此校正应用于信号 3,您可以使用重叠相加重叠保存方法 - 本质上,您采用信号 3 的 FFT,将每个复数值乘以上面获得的实数值,然后使用逆 FFT 回到时间领域。唯一轻微的复杂性是需要重叠连续的样本窗口并正确处理这种重叠(请参阅上面的重叠添加/重叠保存方法的链接。)

于 2013-05-15T08:15:46.540 回答