あるオーディオストリームを別のオーディオストリームから「差し引く」


8

私は長い間ソフトウェアエンジニアですが、信号/オーディオ処理の経験はほとんどありません。私は、オーディオコンポーネントの1つにあるユースケースを介して信号処理について学びたいと思っています。注:これは私にとって単なる学習課題です...最終結果が役立つことは優先事項ではありません。

(スピーカーを介して)オーディオを生成するコンポーネント(A)があります。別のコンポーネント(B)があり、そのオーディオを(単純なマイクを介して)記録します。

私がやりたいのは、Aを使用してBのオーディオを録音することです。次に、可能であれば、2つのストリームを比較します。目標は、ストリームAに存在していたオーディオを削除することです-録音中に存在していた周囲の条件を残します-完全に削除することは不可能だと理解しています。

フェーズとマグニチュードの問題があることを理解しています。また、AからBを「引く」という単純な問題ではないことも理解しています。つまり、私の仮定では、AからAを引くことができます。

問題への取り組み方を知りたい。繰り返しますが、これは私にとって学習経験です(締め切りはありません)。最初から始めようと思っています。

アドバイス/提案は大歓迎です。

回答:


5

このセットアップは、システム識別問題といくつかの類似点を共有しています。ここで、は伝達関数を推定するLTIシステムの入力であり、は出力です。そして「周囲の音」は付加的なノイズです。LTIの仮定は、コンバーター/アンプ/トランスデューサーが適切な品質であるという条件で妥当です。AB

したがって、手順は次のようになります。

  • システム同定手法を使用して、と間の平均二乗誤差を最小化するFIRフィルターを見つけます。ここでは最適ではないかもしれない簡単な方法は、と相互相関をの自己相関で除算です。説明はこちら。制限は、長時間の録音ではうまく機能しないことです(短いセグメントで推定を計算して平均化する方がよい場合があります)。また、音楽は、システムに送信して応答を推定するのに最適な「プローブ」信号ではありません。h^h^ABABA
  • これで、使用することができマイクロフォンによって「聞いた」と元の信号Aの推定値としてのからそれを減算周囲の音を取得します。h^AB

私はミュージッククリップを使用してこれを撮影しました(A)、リバーブとわずかなアンプモデルを適用して部屋のスピーカーをシミュレートし、猫のオーディオサンプルを混合して(B)を取得し、次に( A、B)ペア、次にフィルター処理されたAをBから減算します。これはいくつかの結果を示していますが、より良いFIR推定手法がここで役立つ場合があります。(計算を高速化するために、推定IRを最初の5000サンプルに切り捨てたことに注意してください)。

これを適応的に行うためのアルゴリズム(LMSなど)があることに注意してください。これは、と場合、問題により適している可能性があります。ABがオフラインではなくリアルタイムで処理される。このようなアルゴリズムは、電気通信で使用されるエコーキャンセレーションシステムの基礎を形成します。


@pinchenettes、ありがとうございました!あなたのc_cat_estimated.wavは、まさに私が達成しようとしている結果のタイプです。使用方法(使用するソフトウェアなど)を教えてくれる方法はありますか?お気軽に直接ご連絡ください:catxtwo@gmail.com
CaymanEss

私はAudacityとAppleの標準のオーディオユニットを使用して、元のオーディオを処理し、「部屋」の効果を得ました。猫のサンプルも大胆に混ぜられました。残りのコードはpython + numpy:gist.github.com/pichenettes/5434412にあります。これは、「機能する可能性のある最も単純なこと」です。アルゴリズムのコアは、わずか6行のコードです。
ピシェネット2013

ここでも、ありがとう非常に多くの@pinchenettesを。これは私を始めます。最終的にはこれをリアルタイムで実行したいと思います。LMSを使用することも可能だと思いますか?
CaymanEss 2013

インパルス応答が変化しないことがわかっている場合は、最初の数秒間は遅いアルゴリズムを使用してそれを計算し、それを使い続けることができます。それ以外の場合(スピーカーが移動し、環境が変化します...)適応アルゴリズムが必要になります。あなたはモデルルームにしたい場合は、おそらく長いインパルス応答との畳み込みに対処する必要がありますことをご注意- >技術のためにこれをチェックしdsp.stackexchange.com/questions/8771/...。ただし、非常に長いFIR応答用に最適化された適応フィルタリング方法については知りません。
ピシェネット2013

信号は、同じ長さ、チャネル数、およびサンプルレートである必要があります。
ピシェネット2013

1

正確なアンビエントサウンドを出力できない問題は次のとおりです。

(a)音量差(b)時間遅延による位相差。

したがって、全体としてBによって記録された信号は次のようになります(部屋がLTIシステムとして動作する場合) yB[n]=k=0pαkxA[nk]+xamb[n])=(xh)[n]+xamb[n]、 どこ h[n]=αn部屋のインパルス応答。ここにxamb[n]Bの位置での周囲信号です。さて、z[n]=xA[n]yB[n] あなたが持っていることがわかります z[n]xamb[n]、ただし室内インパルス応答またはその推定値が不明な場合。洞察を得るために、減算を行って、結果の信号のスペクトログラムを確認し、周囲の信号およびAのみの信号のスペクトログラムと比較することで、先に進むことができます。

もう1つの方法は、マイクをAの近くに配置して、部屋のインパルス応答の影響を最小限に抑えることです。このような手法は、周囲のノイズを除去するノイズキャンセルヘッドホンで使用されます。 http://en.wikipedia.org/wiki/Noise-cancelling_headphonese


@Neeksありがとうございます。yB [n]方程式(アルゴリズム)に名前はありますか?繰り返しますが、私はdspがまったく新しいので、特定のアルゴリズム/概念について読むことができれば有益です。
CaymanEss 2013

1
これは、音声残響除去と呼ばれます。LTIシステムによる残響操作であると仮定すると、これはデコンボリューション問題に似ています。h(t)LTIシステムです。
Neeks 2013年

1

それは「音響エコーキャンセル」の標準的なケースのように聞こえます。多くの特許、研究論文、学術論文がこのトピックに存在します(1967年から、MM Sondhiの論文「適応音響エコーキャンセラー」で信じています)。

簡単な概要はこちらhttp://supportdocs.polycom.com/PolycomService/support/global/documents/support/technical/products/voice/vortex_choose_acoustic_echo_canceller.pdfです。

これはトピックhttp://www.amazon.com/Advances-Network-Acoustic-Cancellation-Processing/dp/3540417214に関するまともな本です


@ヒルマーありがとうございます。あなたの推薦で私はエコーキャンセルの概要とノイズキャンセルに関するいくつかの論文を読みました。キャンセルは私が望むものの反対であると私が思うのは間違っていますか?繰り返しますが、私の目標は、元の信号のクリーンアップされたバージョンではなく、周囲のノイズを取得することです。
CaymanEss 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.