マイクとスピーカーを備えたものとAndroidフォンの間でUDPを介して音声をストリーミングするモジュラーシステムを作成しました。マイクとスピーカーが互いにそれほど離れていない場合、電話で録音されたものはすべてスピーカーで再生され、同時に録音されて電話に送り返されるため、避けられないエコーが発生します。
これまでのところ問題は、再生時にマイクが録音していることです。たとえば、重要な再生中に録音を停止するコードが送信された場合、問題は解決されます。これは、プッシュツートーク ボタン (通話タイプの状況にはあまり適していません)、または最大振幅を感知して何か重要なことを言っているのか、それともただのノイズなのかを判断するアルゴリズムによって実現されます。後者の方が使いやすいですが、ノイズの多い環境では問題が発生しやすくなります。
長い講義で申し訳ありませんが、この問題を解決するためのより効率的で確実な方法があるかどうかを知りたいです。
PSハードウェア側にエコーをデジタルで削除するのに十分な処理能力がなく、方法もわかりません。ある種のアナログフィルターでもそれを行うことができると確信していますが、それを行う方法もわかりません。
編集: mattmのおかげで、AEC のようなものが必要であることがわかりましたが、最も効率的でも実用的でもないかもしれません。
WIFI-UART モジュール (HLK-RM04) を使用していますが、大きな問題があります。モジュールが 8 ビット オーディオ サンプルを IP データグラムに変換しているときに、非常に大きな遅延が発生します。何らかの理由で、Android から送信されたデータグラムを解凍するときにこの遅延は存在しません => Android からサンプルを受信するには ~50ms かかりますが、マイクからサンプルを受信するには ~650ms かかります。私は 7200 のサンプリング レートを使用しているため、AEC アルゴリズムは、「リアルタイム」を維持するために少なくとも 4680 サンプル/秒のデータ セットで動作する必要があります。