完了!自分自身に少し感動しました。
当社の製品にはエコーキャンセル機能が必要であり、考えられる技術的解決策が 3 つ特定されました。
1) MCU を使用してオーディオ信号のオーディオ出力とオーディオ入力を検出し、オプションの 2 つのチャネル切り替えの間のオーディオ出力とオーディオ入力の強度に応じて、サウンド信号の両側の強度を計算するアルゴリズムを作成します。半二重通話効果ですが、現在市場には全二重通話効果があり、半二重では製品の競争力が低下します
(2) CPU ベンダーのエコー キャンセル アルゴリズムを使用します。実際のテストのエコー除去は、すべての調整可能なパラメーターの調整とベンダーとの多くのラウンド ディスカッションによって十分にきれいではなく、期待される効果とは程遠いものです。ベンダーからのフィードバックは、マイクをスピーカーから可能な限り隔離するためにハウジングを改善することですが、ID 設計、音質、音量の要件によりハウジングを変更する余地はありません。
(3) webrtc や speex などのオープンソースのエコーキャンセルアルゴリズムをインターネットからダウンロードし、クロスコンパイル後に製品に移植します。
4) オーディオ アルゴリズムを専門とする会社からアルゴリズムを購入しますが、製品ごとに追加コストが必要となり、製品の競争力が大幅に低下します。
選択肢を比較検討した結果、オープンソース アルゴリズムを使用するソリューションについて徹底的に調査することにしました。
そこで、github、gitee、その他のサイトから C と matlab の両方で一連のエコー キャンセル コードをダウンロードしました。
2 つの音声をオクターブで合成し、近端のマイク キャプチャ音声と遠端の基準音声を含むダブルトーク シーンのセクションを生成します。
次に、オンラインでダウンロードしたエコーキャンセル用のコードを実行し、出力音声を分析して、その中から最適に機能するアルゴリズムを選択します。
結果から、webrtc オーディオ処理の AEC アルゴリズムは良好ではなく、エコー キャンセルはきれいではなく、ダブルトーク シーンでは明らかな言葉の飲み込みがあります。 webrtc オーディオ処理の AEC3 アルゴリズムはクリーンですが、ダブルトークの相手の音を非常に抑制し、音が断続的で不自然です。
Speex にはわずかなエコーがあります。AEC アルゴリズムの Matlab 言語実装を見つけるのが最善です。エコー除去は非常にきれいです。二重スピーキングはわずかな言葉の飲み込み現象のみです。
次に、Visual Studio を使用して webrtc audioprocessing aec のオープン ソース コードをコンパイルおよびデバッグします。上記の matlab の aec アルゴリズムを参照してコードを変更し、オンライン デバッグを使用してブレークポイントを設定し、シングル ステップの実行やその他の分析を行います。ステートメントごとに値が変更され、最終的に取得されるデータと matlab 言語の aec アルゴリズムの結果は同一です。 取得される最終データは、matlab の aec アルゴリズムの結果とまったく同じです。
今日、製品にコンパイルし、マイクとスピーカーのゲインを適切な値に調整し、実際に呼び出してエコー キャンセルの効果をテストしました。結果は驚くほど良好です。
これにより、小さな目標を上回る売上を達成できる製品を設計することが期待されます。
以上がmatlab/octave アルゴリズムを C に移植することによる AEC への最適なソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。