我有 2 个信号,一个包含在扬声器上播放的音频数据。第二个包含同时记录扬声器的麦克风数据。
到目前为止我做了什么:通过相关在时域中对齐信号。对两个信号的重叠部分应用 fft 并将一个除以另一个以实现反卷积。
我做错了什么,因为生成的音频数据是无用的。
这是我的代码:
//put both signals in split complex vectors
vDSP_ctoz((DSPComplex *)file, 2, &fftFileData, 1, nOver2);
vDSP_ctoz((DSPComplex *)mic, 2, &fftMicData, 1, nOver2);
//fft of both file and mic data
vDSP_fft_zrip(fftSetup, &fftFileData, 1, log2n, FFT_FORWARD);
vDSP_fft_zrip(fftSetup, &fftMicData, 1, log2n, FFT_FORWARD);
//divide file data by mic data for deconvolution???
vDSP_zvdiv(&fftFileData, 1, &fftMicData, 1, &fftMicData, 1, nOver2);
//inverse fft of mic-fft-data
vDSP_fft_zrip(fftSetup, &fftMicData, 1, log2n, FFT_INVERSE);
//scale back signal
vDSP_vsmul(fftMicData.realp, 1, &scale, fftMicData.realp, 1, nOver2);
vDSP_vsmul(fftMicData.imagp, 1, &scale, fftMicData.imagp, 1, nOver2);
//copy back to float array
vDSP_ztoc(&fftMicData, 1, (COMPLEX *) result, 2, nOver2);
编辑澄清一下:感谢@Sammio2,我现在知道,反卷积很好地描述了我的问题:
f*g=h
h 是我录制的信号,包括
f,我希望恢复的信号和
g,我的播放信号还记录了我知道的,但很可能被扬声器->麦克风往返修改了
现在我需要任何方法来恢复除 g 之外记录的所有声音 f。
重要:最后我不需要一个清晰的 f 信号,只需要关于它的响度或存在水平的信息。基本上是除了记录的往返信号 g 之外的噪声水平。
我应该如何继续收集我想要的噪音水平信息?
我希望这有助于理解我的问题。到目前为止谢谢!