• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 國內 >
     首頁(yè) > 新聞 > 國內 >

    WebRTC回聲抵消模塊簡(jiǎn)要分析

    2016-06-01 14:09:20   作者:   來(lái)源:WebRTC中文社區   評論:0  點(diǎn)擊cti:


      WebRTC回聲抵消模塊簡(jiǎn)要分析
      WebRTC的回聲抵消(aec、aecm)算法主要包括以下幾個(gè)重要模塊:回聲時(shí)延估計;NLMS(歸一化最小均方自適應算法);NLP(非線(xiàn)性濾波);CNG(舒適噪聲產(chǎn)生)。一般經(jīng)典aec算法還應包括雙端檢測(DT)。
      考慮到WebRTC使用的NLMS、NLP和CNG都屬于經(jīng)典算法范疇,故只做簡(jiǎn)略介紹,本文重點(diǎn)介紹webrtc的回聲時(shí)延估計算法,這也是webrtc回聲抵消算法區別一般算法(如視頻會(huì )議中的算法)比較有特色的地方。
      1) 回聲時(shí)延估計
      回聲延時(shí)長(cháng)短對回聲抵消器的性能有比較大的影響(此處不考慮pc上的線(xiàn)程同步的問(wèn)題),過(guò)長(cháng)的濾波器抽頭也無(wú)法實(shí)際應用,因此時(shí)延估計算法就顯得比較重要了。常用且容易想到的估計算法是基于相關(guān)的時(shí)延估計算法(學(xué)過(guò)通信原理的應該不會(huì )陌生),另外相關(guān)算法在語(yǔ)音編碼中也得到廣泛的應用,如amr系列,G。729系列,G。718等編碼器。在語(yǔ)音信號自相關(guān)求基音周期時(shí),由于編碼器一般按幀處理,幀長(cháng)度一般是10或20ms,在該時(shí)延范圍內搜索基音周期運算量較小,然而對于回聲抵消的應用場(chǎng)合,延時(shí)搜索范圍比較大,帶來(lái)很高的運算復雜度。在手持終端設備上,我們需要考慮移動(dòng)環(huán)境的變化對算法性能的影響,比如時(shí)延是否隨機變化,反射路徑線(xiàn)性還是非線(xiàn)性,以及運算量(電池)是否符合要求,則更為復雜。
      回到WebRTC的回聲時(shí)延估計,它采用的是gips首席科學(xué)家Bastiaan的算法。下面介紹一下該算法的主要思想:
      設1表示有說(shuō)話(huà)音,0表示無(wú)說(shuō)話(huà)音(靜音或者很弱的聲音)。
      參考端(遠端)信號x(t)和接收端(近端)信號y(t)可能的組合方式有以下幾種:(0,0),(0,1),(1,0),(1,1)。
      (0,0)表示遠端和近端都是比較弱的聲音;
      (1,1)表示遠端和近端都是比較強的聲音;
      WebRTC的代碼默認其它兩種情況是不可能發(fā)生的。
      設在時(shí)間間隔p上,即p=1,2,…,P,頻帶q,q=1,2,…,Q上,輸入信號x加窗(如漢寧窗)后的功率譜用Xw(p,q)來(lái)表示,對每個(gè)頻帶中的功率譜設定一個(gè)門(mén)限Xw(p,q)_threshold,
      如果Xw(p,q)>=Xw(p,q)_threshold,則Xw(p,q)=1;
      如果Xw(p,q)<Xw(p,q)_threshold,則Xw(p,q)=0;
      同理,對于信號y(t),加窗信號功率譜Yw(p,q)和門(mén)限Yw(p,q)_threshold,
      如果Yw(p,q)>=Yw(p,q)_threshold,則Yw(p,q)=1;
      如果Yw(p,q)<Yw(p,q)_threshold,則Yw(p,q)=0;
      考慮到實(shí)際處理的方便,在WebRTC的C代碼中,將經(jīng)過(guò)fft變換后的頻域功率譜分為32個(gè)子帶,這樣每個(gè)特定子帶Xw(p,q)的值可以用1個(gè)比特來(lái)表示,總共需要32個(gè)比特,只用一個(gè)32位數據類(lèi)型就可以表示了。
      WebRTC對參考信號定義了75個(gè)32位binary_far_history的數組存放歷史遠端參考信號,定義了16個(gè)32位binary_near_history的數組存放歷史近端參考信號,最近的值都放在下標為0的數組中,使用binary_near_history[15]的32位bit與binary_far_history數組中75個(gè)32位bit分別按位異或,得到75個(gè)32位比特數據,32位bit的物理意義是近似地使用功率譜來(lái)統計兩幀信號的相關(guān)性。統計32位結果中的1的個(gè)數存于bit_counts中,接下來(lái)用對bit_counts進(jìn)行平滑防止延時(shí)突變,得到mean_bit_count,可以看出mean_bit_count越小,則表明近端數據與該幀的遠端數據越吻合,兩者的時(shí)延越接近所需要的延時(shí)數值,用value_best_candidate表示。剩下的工作是對邊界數值進(jìn)行保護,如果value_best_candidate接近最差延時(shí)(預設),則表明數值不可靠,這時(shí)不更新延時(shí)數據;如果數據可靠,則進(jìn)一步使用一階markvo模型,比照上一次時(shí)延數據確定本次最終的更新時(shí)延last_delay。
      Bastiaan的專(zhuān)利本身要比現有的c代碼實(shí)現更為復雜,比如在異或的時(shí)候(0,0),(0,1),(1,0),(1,1)四種組合可以附加代價(jià)函數,而c代碼相當于默認給(0,0),(1,1)附加權值為1,給(0,1),(1,0)附加權值為0;另外c代碼算法是按幀順序依次對遠端和近端數組異或,實(shí)際應用時(shí)也可以每隔1幀或2幀做異或,這樣可以擴大搜索范圍。
      總的來(lái)說(shuō)WebRTC異或的時(shí)延估計算法復雜度比求相關(guān)大大簡(jiǎn)化,尤其適用于移動(dòng)終端等對運算量比較敏感的場(chǎng)合進(jìn)行回聲消除。針對實(shí)際應用場(chǎng)合,算法還有提升的空間。
      2) NLMS(歸一化最小均方自適應算法)
      LMS/NLMS/AP/RLS等都是經(jīng)典的自適應濾波算法,此處只對webrtc中使用的NLMS算法做簡(jiǎn)略介紹。設遠端信號為x(n),近段信號為d(n),W(n),則誤差信號e(n)=d(n)-w'(n)x(n)(此處‘表示轉秩),NLMS對濾波器的系數更新使用變步長(cháng)方法,即步長(cháng)u=u0/(gamma+x'(n)*x(n));其中u0為更新步長(cháng)因子,gamma是穩定因子,則濾波器系數更新方程為W(n+1)=W(n)+u*e(n)*x(n);NLMS比傳統LMS算法復雜度略高,但收斂速度明顯加快。LMS/NLMS性能差于A(yíng)P和RLS算法。
      另外值得一提的是webrtc使用了分段塊頻域自適應濾波(PBFDAF)算法,這也是自適應濾波器的常用算法。自適應濾波的更多資料可以參考simonhaykin的《自適應濾波器原理》。
      3) NLP(非線(xiàn)性濾波)
      WebRTC采用了維納濾波器。此處只給出傳遞函數的表達式,設估計的語(yǔ)音信號的功率譜為Ps(w),噪聲信號的功率譜為Pn(w),則濾波器的傳遞函數為H(w)=Ps(w)/(Ps(w)+Pn(w))。
      4) CNG(舒適噪聲產(chǎn)生)
      WebRTC采用的舒適噪聲生成器比較簡(jiǎn)單,首先生成在[0,1]上均勻分布的隨機噪聲矩陣,再用噪聲的功率譜開(kāi)方后去調制噪聲的幅度。
      總的說(shuō)來(lái),WebRTC的aec算法簡(jiǎn)單、實(shí)用、易于商業(yè)化,另一方面猜測c代碼還有所保留。
      由于工作需要,最近一直在研究WebRTC里的AEC算法。根據源碼里面的fullaec。m文件,總體來(lái)說(shuō),我認為該AEC算法是屬于分段快頻域自適應濾波算法,Partioned block frequeney domain adaPtive filter(PBFDAF)。具體可以參考Paez Borrallo J M and Otero M G
      使用該AEC算法要注意兩點(diǎn):
      1)延時(shí)要小,因為算法默認濾波器長(cháng)度是分為12塊,每塊64點(diǎn),按照8000采樣率,也就是12*8ms=96ms的數據,而且超過(guò)這個(gè)長(cháng)度是處理不了的。
      2)延時(shí)抖動(dòng)要小,因為算法是默認10塊也計算一次參考數據的位置(即濾波器能量最大的那一塊),所以如果抖動(dòng)很大的話(huà)找參考數據時(shí)不準確的,這樣回聲就消除不掉了。

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 宁化县| 许昌市| 彭水| 前郭尔| 随州市| 文化| 闵行区| 江门市| 夹江县| 贵德县| 丹东市| 南澳县| 耒阳市| 名山县| 岑溪市| 宜春市| 舟山市| 苏尼特左旗| 双桥区| 安福县| 洱源县| 衡山县| 叶城县| 桃源县| 绥芬河市| 沙雅县| 鄂尔多斯市| 房山区| 扶沟县| 望都县| 苏州市| 常宁市| 衡阳县| 息烽县| 荣昌县| 聂拉木县| 石家庄市| 鸡西市| 明水县| 苏尼特左旗| 浮山县| http://444 http://444 http://444 http://444 http://444 http://444