完畢!對自己有點印象。
我們的產品需要迴聲消除功能,確定了三種可能的技術方案,
1)利用MCU偵測audio out和audio in的音訊訊號,編寫演算法計算兩側聲音訊號的強度,根據audio out和audio in的強弱在兩個通道之間進行可選的切換,實現半雙工通話效果,但現在市面上都是全雙工通話效果,半雙工會讓產品競爭力降低
(2)使用CPU廠商的迴聲消除演算法,實際測試經過各種可調參數的調優以及與廠商多次討論,迴聲消除效果不夠乾淨,與預期效果相去甚遠。供應商的回饋是改進外殼,使MIC與揚聲器盡可能隔離,但由於ID設計、音質和音量要求,沒有改變外殼的空間。
(3)從網上下載webrtc、speex等開源迴聲消除演算法,交叉編譯後移植到產品中。
4)從專門從事音訊演算法的公司購買演算法,但每個產品都需要額外的成本,這會大大降低產品的競爭力。
權衡利弊後,我決定深入研究使用開源演算法的解決方案;
所以,我從github、gitee等網站下載了一系列迴聲消除程式碼,都是C語言和matlab語言的。
以八度音階合成兩個聲音,以產生包含近端麥克風捕捉聲音以及遠端參考聲音的雙講場景的一部分。
然後運行線上下載的用於迴聲消除的程式碼,分析輸出音訊並選擇其中最有效的演算法。
從結果來看,webrtc音頻處理的AEC演算法不好,迴聲消除不乾淨,雙講場景有明顯的吞話現象。 webrtc音訊處理的AEC3演算法乾淨,但對雙講另一端的聲音抑制非常大,聲音斷斷續續,不自然;
speex有輕微的迴聲,最好找一個matlab語言實現的aec演算法,迴聲消除得很乾淨,雙講只有輕微的吞字現象。
然後,我使用Visual Studio編譯偵錯WebRTC AudioProcessing AEC開源程式碼,參考Matlab上面的AEC演算法修改程式碼,使用線上偵錯設定斷點、單步運行等分析語句的值逐步變化,最後得到的資料與matlab語言的aec演算法的結果完全相同最終得到的數據與matlab的aec演算法的結果完全相同;
今天編譯到產品中,將MIC和SPEAKER增益調整到合理值,然後實際通話測試迴聲消除的效果,結果出奇的好。
因此,有希望設計出能達到小目標以上銷售量的產品。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3