2

私は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.

必要な騒音レベルの情報を収集するにはどうすればよいですか?

これが私の問題を理解するのに役立つことを願っています。これまでありがとう!

4

3 に答える 3

3

vDSP_zvsub の length 引数は、要素数の対数ではなく、処理される複雑な要素の数です。log2n ではなく nOver2 を渡す必要があります。

これは、プログラミングの側面に対処するだけです。その他の回答は、信号処理の問題に対処しています。特に、FFT は線形です。信号 X と Y および定数 a と b が与えられると、FFT(a•X+b•Y) = a•FFT(X)+b•FFT(Y) になります。逆 FFT も線形です。したがって、2 つの信号の FFT の差の逆 FFT は、通常の浮動小数点の丸め誤差を除いて、2 つの信号を直接減算するのとは異なる結果を与えるべきではありません。

于 2012-11-27T17:11:38.067 に答える
2

vDSP_zvsub各ビンで複雑な減算を行っているだけですが、これはおそらくあなたが望むものではありません。

何を達成しようとしているのかは明確ではありませんが、あるスペクトルのマグニチュードを他のスペクトルから減算したいようです。その場合、次の手順を実行する必要があります。

  • 各複素周波数領域スペクトルを複素数から極性 (大きさ + 位相) に変換します。
  • 各ビンでマグニチュードを減算します
  • 結果の極座標データを複素数に変換します
于 2012-11-27T06:37:19.717 に答える
0

スピーカーに送信されたオーディオとマイクから受信されたオーディオの間のシステム インパルス応答が必要になります (DAC/ADC バッファリング遅延、アンチエイリアシング フィルター群遅延、スピーカーとマイクの応答、空気中の音速など)。時間ドメインまたは周波数ドメインのいずれかで(ほとんど)キャンセル信号を生成するために。これには、遅延だけでなく振幅の一致も含まれます。また、スピーカーまたはマイクの 1 つのセットは、他のセットと比べて「位相がずれている」可能性があることに注意してください。

于 2012-11-27T17:07:22.943 に答える