私は2つの信号を持っています。1つはスピーカーで再生されるオーディオデータを含んでいます。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.
必要な騒音レベルの情報を収集するにはどうすればよいですか?
これが私の問題を理解するのに役立つことを願っています。これまでありがとう!