專(zhuān)利名稱(chēng):在通信系統(tǒng)中控制回聲抑制的方法和設(shè)備的制作方法
背景技術(shù):
本發(fā)明涉及通信系統(tǒng),尤其涉及雙向通信鏈路中的回聲抑制。
在諸如陸線(xiàn)和無(wú)線(xiàn)電話(huà)系統(tǒng)的多種通信系統(tǒng)中,通常經(jīng)雙向通信鏈路在兩個(gè)系統(tǒng)用戶(hù)之間傳送話(huà)音信號(hào)。在這種系統(tǒng)中,通常由通信鏈路一端上的近端話(huà)筒檢測(cè)近端用戶(hù)的語(yǔ)音,然后經(jīng)鏈路向遠(yuǎn)端揚(yáng)聲器傳送以再生和呈現(xiàn)給遠(yuǎn)端用戶(hù)。相反地,由遠(yuǎn)端話(huà)筒檢測(cè)遠(yuǎn)端用戶(hù)語(yǔ)音,然后經(jīng)通信鏈路向近端揚(yáng)聲器傳送以再生和呈現(xiàn)給近端用戶(hù)。在通信鏈路的任一端上,由鄰近話(huà)筒檢測(cè)的揚(yáng)聲器輸出可能在無(wú)意中經(jīng)通信鏈路向回傳送,從用戶(hù)的角度來(lái)看導(dǎo)致可能無(wú)法接受的破壞性反饋或回聲。
因此,為了避免這種不希望的回聲信號(hào)的傳輸,應(yīng)當(dāng)盡可能地隔離揚(yáng)聲器輸出和話(huà)筒聲音輸入。使用常規(guī)的電話(huà)聽(tīng)筒,其中聽(tīng)筒話(huà)筒靠近用戶(hù)嘴部,而聽(tīng)筒揚(yáng)聲器基本上覆蓋用戶(hù)耳部,輕易地實(shí)現(xiàn)所需的隔離。然而,隨著便攜式電話(huà)的實(shí)際尺寸變小,并且隨著免提式揚(yáng)聲器電話(huà)變得更加普及,制造商已經(jīng)轉(zhuǎn)向揚(yáng)聲器到話(huà)筒的聲音路徑不被用戶(hù)頭部或身體阻礙的設(shè)計(jì)。因此,在現(xiàn)代系統(tǒng)中對(duì)更高級(jí)的回聲抑制技術(shù)的需要變得極為重要。
這種需要在免提汽車(chē)電話(huà)的情況下尤其明顯,封閉的車(chē)輛環(huán)境可能導(dǎo)致?lián)P聲器信號(hào)的多個(gè)反射被耦合回高增益免提話(huà)筒。用戶(hù)在車(chē)輛中的移動(dòng)和回聲信號(hào)在相對(duì)方向和強(qiáng)度上的變化,例如當(dāng)窗戶(hù)打開(kāi)和關(guān)閉或者用戶(hù)在駕駛時(shí)移動(dòng)其頭部時(shí),使汽車(chē)環(huán)境中回聲抑制的工作更加復(fù)雜。另外,最近開(kāi)發(fā)的數(shù)字電話(huà)通過(guò)語(yǔ)音編碼器處理語(yǔ)音信號(hào),該話(huà)音編碼器引入明顯的信號(hào)延遲和產(chǎn)生非線(xiàn)性信號(hào)失真。從用戶(hù)的角度來(lái)看這種延遲將使信號(hào)回聲問(wèn)題更嚴(yán)重,并且附加的非線(xiàn)性失真使網(wǎng)絡(luò)設(shè)備的回聲抑制更困難。
針對(duì)上述問(wèn)題,電話(huà)制造商已經(jīng)開(kāi)發(fā)了多種回聲抑制裝置。一種示范性回聲抑制系統(tǒng)100在
圖1A中圖示。如圖所示,示范性系統(tǒng)100包括話(huà)筒110、揚(yáng)聲器120和回聲抑制器130。話(huà)筒110的音頻輸出115被耦合到回聲抑制器130的音頻輸入,回聲抑制器130的音頻輸出135用作電話(huà)(未圖示)的近端音頻輸入。另外,電話(huà)的遠(yuǎn)端音頻輸出125被耦合到話(huà)筒120的音頻輸入和回聲抑制器130的參考輸入。
在工作中,回聲抑制器130處理話(huà)筒信號(hào)115以向遠(yuǎn)端電話(huà)用戶(hù)提供音頻輸出信號(hào)135。更具體地,回聲抑制器130根據(jù)遠(yuǎn)端音頻信號(hào)125衰減話(huà)筒信號(hào)115,以便揚(yáng)聲器120到話(huà)筒110的音頻回聲不被發(fā)送回遠(yuǎn)端電話(huà)用戶(hù)。
回聲抑制器130一般是非線(xiàn)性削波型抑制器或線(xiàn)性定標(biāo)型抑制器。削波型抑制器一般通過(guò)消除落入特定數(shù)值范圍(即特定的削波窗口)內(nèi)的一部分信號(hào)來(lái)衰減話(huà)筒輸出信號(hào)115。另一方面,定標(biāo)型抑制器通過(guò)使信號(hào)乘以一個(gè)合適的比例因子來(lái)衰減話(huà)筒輸出信號(hào)115,最近開(kāi)發(fā)的混合型抑制器結(jié)合削波和定標(biāo)的特征,例如通過(guò)按比例縮放落入特定衰減窗口內(nèi)的一部分話(huà)筒信號(hào)。在許多情況下,一般根據(jù)遠(yuǎn)端音頻信號(hào)125的幅度直接或間接地調(diào)整衰減標(biāo)準(zhǔn)(即削波窗口和/或比例因子),以便話(huà)筒輸出115僅被衰減到遠(yuǎn)端用戶(hù)講話(huà)的范圍。
一種常規(guī)的削波型抑制器,在技術(shù)上稱(chēng)為中心削波器,例如在1995年12月12日公開(kāi)并授權(quán)給Rasmusson等人,標(biāo)題為“使用回聲估計(jì)修改誤差信號(hào)的回聲消除系統(tǒng)和方法”的美國(guó)專(zhuān)利US5,475,731中被描述。另一種削波型抑制器,在技術(shù)上稱(chēng)為AC-中心削波器,在1996年12月31日申請(qǐng)的標(biāo)題為“通信系統(tǒng)中噪聲和回聲抑制的AC-中心削波器”的待審美國(guó)專(zhuān)利申請(qǐng)US 08/775,797中被描述。一種示范性的定標(biāo)型抑制器在1994年2月1日授權(quán)給Center,標(biāo)題為“回聲消除器處理技術(shù)和處理”的美國(guó)專(zhuān)利US 5,283,784中被描述。一種改進(jìn)的混合抑制器,在此稱(chēng)作AC-中心衰減器,在同時(shí)提交的標(biāo)題為“改進(jìn)通信系統(tǒng)中回聲抑制的方法和設(shè)備”的待審美國(guó)專(zhuān)利申請(qǐng)US 09/005,149中被描述。每一上述專(zhuān)利和每一上述專(zhuān)利申請(qǐng)?jiān)诖巳囊米鳛閰⒖肌?br>
圖1A的回聲抑制器130也可以與線(xiàn)性回聲消除器和/或舒適噪聲生成器組合以提供更高級(jí)的回聲抑制系統(tǒng)。圖1B圖示一種示范性系統(tǒng)101,包括圖1A的話(huà)筒110、揚(yáng)聲器120和回聲抑制器130,和聲音回聲消除器140和舒適噪聲合成裝置150。如圖所示,話(huà)筒輸出115被連接到聲音回聲消除器140的聲音輸入,聲音回聲消除器140的音頻輸出145被連接到回聲抑制器130的音頻輸入。抑制器音頻輸出135和舒適噪聲信號(hào)被分別連接到合成設(shè)備150的第一和第二輸入,合成設(shè)備150的音頻輸出155用作電話(huà)(未圖示)的近端音頻輸入。來(lái)自電話(huà)的遠(yuǎn)端音頻輸出125被連接到揚(yáng)聲器120的音頻輸入和聲音回聲消除器140和回聲消除器130的參考輸入。
在工作中,聲音回聲消除器140動(dòng)態(tài)地模擬揚(yáng)聲器120到話(huà)筒110的聲音路徑,并試圖從話(huà)筒輸出信號(hào)115消除話(huà)筒110接收到揚(yáng)聲器聲音。通常用于模擬聲音回聲路徑的算法包括公知的最小均方(LMS)算法和諸如標(biāo)準(zhǔn)最小均方(NLMS)的變型。在授權(quán)給Rasmusson等人的上述美國(guó)專(zhuān)利US 5,475,731中描述了一種示范性的基于最小均方的消除器。另外,在1997年5月7日提交的標(biāo)題為“在通信系統(tǒng)中使用的改進(jìn)回聲消除器”的待審美國(guó)專(zhuān)利申請(qǐng)US 08/852,729中描述了一種改進(jìn)的基于標(biāo)準(zhǔn)最小均方的消除器,在此全文引用作為參考。
在圖1B的系統(tǒng)101中,回聲抑制器130輔助回聲消除器140并在需要時(shí)提供附加的回聲衰減。例如,可以根據(jù)聲音回聲消除器140獲得的回聲消除瞬間電平的測(cè)量值動(dòng)態(tài)地調(diào)整回聲抑制器130以將殘余回聲衰減到預(yù)定目標(biāo)電平。例如在上述美國(guó)專(zhuān)利申請(qǐng)US09/005,149(標(biāo)題為“在通信系統(tǒng)中改進(jìn)回聲抑制的方法和設(shè)備”并與此同時(shí)提交)中描述了動(dòng)態(tài)測(cè)量回聲消除器提供的回聲消除的改進(jìn)方法。
如在圖1A的系統(tǒng)100中,回聲抑制器130可以是削波抑制器、定標(biāo)抑制器或混合抑制器。另外,當(dāng)在回聲消除器140之后時(shí),回聲消除器130可以是簡(jiǎn)單的單擲開(kāi)關(guān),在合適的時(shí)間上(即在話(huà)音激勵(lì)檢測(cè)器指示話(huà)筒信號(hào)115不包含話(huà)音的周期內(nèi))選擇切斷或靜噪音頻輸出信號(hào)135。在任何情況下,回聲抑制器130衰減整個(gè)音頻信號(hào),除了抑制回聲之外,使任何背景噪聲和/或可能出現(xiàn)的近端話(huà)音失真。事實(shí)上,當(dāng)回聲抑制器130工作時(shí),可以將背景噪聲抑制到遠(yuǎn)端用戶(hù)可能誤以為呼叫已經(jīng)被斷開(kāi)的程度。
因此,為了提高遠(yuǎn)端用戶(hù)的通信質(zhì)量,當(dāng)回聲抑制器130工作時(shí),當(dāng)前的系統(tǒng)經(jīng)常向電話(huà)音頻信號(hào)135提供舒適噪聲。在圖1B的系統(tǒng)中,舒適噪聲經(jīng)合成裝置150被添加給抑制器輸出信號(hào)135。另外,合成裝置50可以用一個(gè)開(kāi)關(guān)替代以便將抑制器輸出信號(hào)135或舒適噪聲選擇發(fā)送給遠(yuǎn)端用戶(hù)。生成和使用舒適噪聲的改進(jìn)方法例如在標(biāo)題為“在通信系統(tǒng)中提供舒適噪聲的方法和設(shè)備”和與此同時(shí)提交的美國(guó)專(zhuān)利申請(qǐng)US 09/005,145中被描述,在此全文引用作為參考。
當(dāng)上述系統(tǒng)提供高級(jí)回聲抑制時(shí),控制這種系統(tǒng)的已知方法在若干方面是不充分的。例如,已知的回聲抑制器130的控制方法經(jīng)常致使遠(yuǎn)端用戶(hù)察覺(jué)到無(wú)法接受的失真的近端話(huà)音。換句話(huà)說(shuō),已知的控制方法有時(shí)在不應(yīng)激活回聲抑制器130時(shí)(例如在近端單方講話(huà)時(shí))使其工作,和/或使回聲抑制器不必要地或不合乎需要地(例如在雙方交談時(shí))衰減近端信號(hào)。另外,某些控制殘余回聲抑制器的已知方法(例如根據(jù)近端語(yǔ)音的存在與否閉合和打開(kāi)前端回聲消除器之后的單擲開(kāi)關(guān))有時(shí)可能提供不充分的回聲抑制。因此,需要控制回聲抑制的改進(jìn)方法和設(shè)備。
發(fā)明概述通過(guò)提供回聲抑制器的控制方法和設(shè)備以在使回聲抑制器在任意給定時(shí)間引入比所需更多的衰減因而更多失真的可能性最小的同時(shí),提供所需級(jí)別的回聲衰減,本發(fā)明滿(mǎn)足上述及其它需要。本發(fā)明的方法和設(shè)備有利地允許在優(yōu)化各種條件下被察覺(jué)的信號(hào)質(zhì)量時(shí)提供出色回聲抑制的通信系統(tǒng)的結(jié)構(gòu)。
在第一種示范性實(shí)施例中,根據(jù)本發(fā)明的回聲抑制設(shè)備包括配置以衰減第一通信信號(hào)(例如近端音頻信號(hào))的回聲抑制器。更具體地,回聲抑制器衰減第一通信信號(hào)以抑制第一通信信號(hào)的回聲分量,其中回聲分量因第二通信信號(hào)(例如遠(yuǎn)端音頻信號(hào))的反射產(chǎn)生。示范性回聲抑制設(shè)備還包括配置以提供第二通信信號(hào)是否包括話(huà)音分量的指示的話(huà)音激勵(lì)檢測(cè)器,當(dāng)話(huà)音激勵(lì)檢測(cè)器指示第二通信信號(hào)并不包括引起回聲的話(huà)音分量時(shí)停止回聲抑制器的使用。因此,僅在需要時(shí)激活回聲抑制器(并在第一通信信號(hào)上引入失真)。
在第二種示范性實(shí)施例中,根據(jù)本發(fā)明的回聲抑制設(shè)備包括配置以使一部分第一通信信號(hào)乘以衰減因子從而抑制其回聲分量的回聲抑制器,該回聲分量因第二通信信號(hào)的反射產(chǎn)生。示范性回聲抑制設(shè)備還包括配置以檢測(cè)通信信號(hào)的主要條件并據(jù)此調(diào)整抑制器衰減因子的增益控制處理器。例如,增益控制處理器可以根據(jù)第一通信信號(hào)是否包括近端話(huà)音分量將抑制器衰減因子設(shè)置成兩個(gè)值之一。因此,示范性的回聲抑制設(shè)備可以在引入最小信號(hào)失真時(shí)提供合理級(jí)別的回聲衰減。
在第三種示范性實(shí)施例中,根據(jù)本發(fā)明的回聲抑制設(shè)備包括配置以衰減第一通信信號(hào)從而抑制其回聲分量的回聲抑制器,該回聲分量因第二通信信號(hào)的反射產(chǎn)生?;芈曇种圃O(shè)備還包括配置以檢測(cè)第一通信信號(hào)中的信噪比和根據(jù)所檢測(cè)的信噪比調(diào)整由回聲抑制器提供的衰減級(jí)別的增益控制處理器。例如,增益控制處理器在該比值等于或低于預(yù)定閾值時(shí)停止回聲抑制器的工作。另外,增益控制處理器也可以調(diào)整回聲抑制器的衰減因子以確保回聲抑制設(shè)備輸出中的回聲噪聲比等于或低于預(yù)定閾值。因此,示范性的回聲抑制設(shè)備可以在引入最小信號(hào)失真時(shí)提供合理級(jí)別的整個(gè)回聲衰減。
下文將參考附圖中圖示的說(shuō)明性例子詳細(xì)說(shuō)明本發(fā)明的上述和其它特征。本領(lǐng)域的技術(shù)人員將意識(shí)到所述實(shí)施例是為了說(shuō)明和理解目而提供的,并在此將考慮多種等價(jià)的實(shí)施例。
附圖的簡(jiǎn)要說(shuō)明圖1A圖示在其中可實(shí)施本發(fā)明教導(dǎo)的一種示范性回聲抑制系統(tǒng)。
圖1B圖示在其中可實(shí)施本發(fā)明教導(dǎo)的另一種示范性回聲抑制系統(tǒng)。
圖2圖示根據(jù)本發(fā)明的一種示范性回聲抑制系統(tǒng),該示范系統(tǒng)包括配置以向聲音回聲抑制器提供控制輸入的話(huà)音激勵(lì)檢測(cè)器。
圖3圖示根據(jù)本發(fā)明的另一種回聲抑制系統(tǒng),該系統(tǒng)包括配置以調(diào)整聲音回聲抑制器衰減因子的增益控制處理器。
圖4圖示根據(jù)本發(fā)明一種控制回聲抑制器示范性方法中的步驟。
本發(fā)明的詳細(xì)說(shuō)明圖2圖示根據(jù)本發(fā)明第一方面構(gòu)成的示范性回聲抑制系統(tǒng)200。如圖所示,示范性系統(tǒng)100包括圖1A和1B的話(huà)筒110、揚(yáng)聲器120和回聲抑制器130和話(huà)筒話(huà)音激勵(lì)檢測(cè)器210。話(huà)筒110的音頻輸出被連接到回聲抑制器130的音頻輸入,回聲抑制器130的音頻輸出135用作電話(huà)(未圖示)的近端音頻輸入。來(lái)自電話(huà)的遠(yuǎn)端音頻輸出125被連接到話(huà)筒120的音頻輸入以及回聲抑制器130和話(huà)音激勵(lì)檢測(cè)器210的參考輸入。話(huà)音激勵(lì)檢測(cè)器210的二進(jìn)制輸出215被連接到回聲抑制器130的控制輸入。
通常,圖2的系統(tǒng)200的操作類(lèi)似于圖1A的系統(tǒng)100的操作。換句話(huà)說(shuō),回聲抑制器130根據(jù)遠(yuǎn)端音頻信號(hào)125衰減話(huà)筒信號(hào)115,以便從揚(yáng)聲器120到話(huà)筒110的音頻回聲不被反向傳送回遠(yuǎn)端電話(huà)用戶(hù)。然而,在圖2的系統(tǒng)中,還根據(jù)話(huà)音激勵(lì)檢測(cè)器215的二進(jìn)制輸出215進(jìn)行回聲抑制器130的操作。更具體地,僅當(dāng)話(huà)音激勵(lì)檢測(cè)器210指示遠(yuǎn)端信號(hào)215包括話(huà)音分量時(shí)(例如當(dāng)檢測(cè)器輸出215等于二進(jìn)制1時(shí))回聲抑制器130工作。
通過(guò)調(diào)節(jié)回聲抑制器130在話(huà)音激勵(lì)檢測(cè)器輸出215上的激活,圖2的系統(tǒng)200更加不可能在話(huà)筒信號(hào)115上引入不希望的失真,當(dāng)不需要這樣做時(shí)。換句話(huà)說(shuō),因?yàn)樵谶h(yuǎn)端用戶(hù)不講話(huà)的時(shí)間內(nèi)不可能有遠(yuǎn)端回聲,在該時(shí)間內(nèi)不需要啟動(dòng)回聲抑制器130。因此,通過(guò)在話(huà)音激勵(lì)檢測(cè)器210指示沒(méi)有遠(yuǎn)端話(huà)音時(shí)停止使用回聲抑制器130,在不需要遠(yuǎn)端回聲抑制的時(shí)間內(nèi),圖2的系統(tǒng)200降低回聲抑制器130衰減和因而使近端話(huà)音和噪聲失真的可能性。
然而,注意,因?yàn)閾P(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210有時(shí)可能出錯(cuò),無(wú)法確?;芈曇种破?30在遠(yuǎn)端用戶(hù)不講話(huà)時(shí)始終不工作。盡管如此,與不調(diào)整抑制器工作的現(xiàn)有技術(shù)系統(tǒng)相比,圖2的系統(tǒng)200提供更好的近端信號(hào)質(zhì)量。而且,與根據(jù)話(huà)筒話(huà)音激勵(lì)檢測(cè)器調(diào)整抑制器工作的現(xiàn)有技術(shù)系統(tǒng)相比,圖2的系統(tǒng)提供防止回聲抑制器130不必要衰減的更好的保護(hù)。因?yàn)閾P(yáng)聲器信號(hào)一般具有比話(huà)筒信號(hào)更安靜的背景(例如在汽車(chē)免提應(yīng)用中),揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器10通常比話(huà)筒話(huà)音激勵(lì)檢測(cè)器更加可靠。換句話(huà)說(shuō),在安靜的背景揚(yáng)聲器信號(hào)中檢測(cè)沒(méi)有話(huà)音比在有噪聲的背景話(huà)筒信號(hào)中檢測(cè)低電平話(huà)音更加容易。
還注意上述討論假定近端和遠(yuǎn)端用戶(hù)之間的網(wǎng)絡(luò)設(shè)備足以防止可能在頻率上出現(xiàn)的往返回程增益大于1(即從遠(yuǎn)端用戶(hù)經(jīng)網(wǎng)絡(luò)并返回遠(yuǎn)端用戶(hù)的信號(hào)增益)的嘯聲。換句話(huà)說(shuō),如果根據(jù)不存在遠(yuǎn)端話(huà)音完全停止使用回聲抑制器130,應(yīng)當(dāng)使用其它設(shè)備(例如網(wǎng)絡(luò)回聲消除器)防止嘯聲。也可以在沒(méi)有遠(yuǎn)端話(huà)音的時(shí)間內(nèi)不完全停止使用回聲抑制器130,回聲抑制器130可以保持工作,并可以被調(diào)整(在削波、定標(biāo)和混合抑制器的情況下)以提供剛好足以防止嘯聲的正常水平的衰減(例如-6至10 dB)。
本領(lǐng)域的普通技術(shù)人員將理解話(huà)筒話(huà)音激勵(lì)檢測(cè)器210的實(shí)現(xiàn)方法是公知的。例如,歐洲電信標(biāo)準(zhǔn)協(xié)會(huì)(ETSI)文件GSM-06.82描述了一種適合于本發(fā)明目的的實(shí)現(xiàn)。這種話(huà)音激勵(lì)檢測(cè)器當(dāng)前在多種通信系統(tǒng)中用于噪聲抑制和/或間斷傳輸(DTX)目的。典型地,這種噪聲激勵(lì)檢測(cè)器偏向于話(huà)音,換句話(huà)說(shuō),它們將在話(huà)音未出現(xiàn)時(shí)指示話(huà)音出現(xiàn),但它們很少在話(huà)音出現(xiàn)時(shí)指示未出現(xiàn)話(huà)音。因?yàn)楸景l(fā)明的揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210具有類(lèi)似的要求(即情愿在提醒方面犯錯(cuò)誤并設(shè)法衰減并不存在的回聲,而不情愿實(shí)際存在的回聲被發(fā)送回遠(yuǎn)端用戶(hù)),在圖2的示范性系統(tǒng)200中可以使用相同類(lèi)型的話(huà)音激勵(lì)檢測(cè)器。
如上面參考圖1A和1B所描述的,圖2的回聲抑制器130可以是削波抑制器、定標(biāo)抑制器、混合抑制器,或者當(dāng)包括遠(yuǎn)端回聲抑制器140時(shí)可以是斷路開(kāi)關(guān)。因此,根據(jù)使用何種類(lèi)型的抑制器,可以實(shí)施在沒(méi)有遠(yuǎn)端話(huà)音的時(shí)間內(nèi)停止回聲抑制器130工作的多種方法中的任一種方法。例如,通過(guò)使用旁路開(kāi)關(guān)以完全繞過(guò)抑制器可以有效地停止任一種抑制器的工作。也可以簡(jiǎn)單地通過(guò)強(qiáng)制開(kāi)關(guān)閉合停止使用斷路抑制器。通過(guò)將削波窗口的大小設(shè)置為零可以停止削波抑制器的工作或使其進(jìn)入直接通過(guò)模式。另一方面,通過(guò)將衰減因子設(shè)置為1可以使定標(biāo)抑制器進(jìn)入直接通過(guò)狀態(tài)。而且,通過(guò)將衰減窗口設(shè)置為零和/或?qū)⑺p因子設(shè)置為1可以使混合抑制器進(jìn)入直接通過(guò)狀態(tài)。
注意如果包括圖1B的前端回聲消除器140,圖2的實(shí)施例將特別有效地工作。這因?yàn)樵谠?huà)音激勵(lì)檢測(cè)器210錯(cuò)誤地指示在揚(yáng)聲器信號(hào)125中未出現(xiàn)話(huà)音時(shí),在沒(méi)有回聲抑制器130的協(xié)助下,回聲消除器140通??梢蕴峁┏浞只芈曇种频氖聦?shí)。換句話(huà)說(shuō),僅當(dāng)揚(yáng)聲器信號(hào)125噪聲較大時(shí)(因而遠(yuǎn)端話(huà)音稍微掩蓋在可能的噪聲中),話(huà)音檢測(cè)器210可能犯這種錯(cuò)誤,并且在第一個(gè)例子中遠(yuǎn)端用戶(hù)對(duì)受噪聲掩蓋的回聲較不敏感。然而無(wú)論是否包括回聲消除器140,圖2的系統(tǒng)200都提供出色的近端信號(hào)質(zhì)量。
圖3圖示根據(jù)本發(fā)明另一方面構(gòu)成的另一種回聲抑制系統(tǒng)300。如圖所示,示范性系統(tǒng)300包括圖1A和1B的話(huà)筒110、揚(yáng)聲器120、回聲抑制器130、回聲消除器140和合成裝置150,和增益控制處理器310和音量增益部件320。話(huà)筒輸出115被連接到聲音回聲消除器140的音頻輸入和增益控制處理器310的第一參考輸入。聲音回聲消除器140的聲音輸出130被連接到回聲抑制器130的音頻輸入和增益控制處理器310的第二參考輸入。抑制器音頻輸出135和舒適噪聲信號(hào)被分別連接到合成裝置150的第一和第二輸入,合成裝置150的音頻輸出155用作電話(huà)(未圖示)的近端音頻輸入。
電話(huà)的遠(yuǎn)端音頻輸出125被連接到音量增益部件320的音頻輸入,音量增益部件320的音頻輸出被連接到話(huà)筒120的音頻輸入和回聲抑制130和聲音回聲消除器140的參考輸入。音量增益部件320的音頻輸出325還被連接到增益控制處理器310的第三參考輸入,增益控制處理器310的控制輸出315被連接到回聲抑制器130的控制輸入。音量控制信號(hào)324被連接到增益控制處理器310的第四參考輸入和音量增益部件320的控制輸入。
通常,圖3的系統(tǒng)300的操作與圖1B的系統(tǒng)101的操作相同。換句話(huà)說(shuō),聲音回聲消除器140動(dòng)態(tài)地模擬從揚(yáng)聲器120到話(huà)筒110的聲音路徑,并消除由話(huà)筒110接收的任何揚(yáng)聲器聲音。然后,回聲抑制器130在需要時(shí)提供附加的回聲衰減,并通過(guò)合成裝置150選擇添加舒適噪聲以補(bǔ)償由回聲抑制器130衰減的近端噪聲。然而,在圖3的系統(tǒng)300中,增益控制處理器310根據(jù)本發(fā)明的特征控制回聲抑制器130提供的衰減級(jí)別。
在圖3的系統(tǒng)300中包括音量增益部件320以更好地解釋增益控制處理器310的操作。通常,音量增益部件320根據(jù)音量控制信號(hào)324衰減電話(huà)音頻信號(hào)125,并將衰減后的音頻信號(hào)325發(fā)送給揚(yáng)聲器120。例如可以由近端用戶(hù)調(diào)整音量控制信號(hào)。
根據(jù)本發(fā)明的一個(gè)方面,假定回聲抑制器130是使至少一部分音頻信號(hào)145乘以衰減因子α的定標(biāo)抑制器或混合抑制器。在這種情況下,增益控制處理器310使用音量控制信號(hào)324、話(huà)筒信號(hào)115、揚(yáng)聲器信號(hào)125和/或消除器輸出信號(hào)145通過(guò)控制處理器輸出信號(hào)315提供衰減因子α。
具體地,增益控制處理器310使用參考信號(hào)115、145、324、325動(dòng)態(tài)地測(cè)量環(huán)路或往返回程回聲增益,該回聲增益又用于計(jì)算抑制器衰減因子α。環(huán)路增益表示當(dāng)電話(huà)音頻信號(hào)125中的遠(yuǎn)端話(huà)音通過(guò)音量控制部件320,經(jīng)揚(yáng)聲器120到話(huà)筒110的聲音路徑并通過(guò)回聲抑制器140時(shí)被衰減的程度。因此,環(huán)路增益可以用于計(jì)算回聲抑制器130應(yīng)當(dāng)提供的附加衰減的量,以便近端音頻信號(hào)135中的回聲被衰減到特定目標(biāo)級(jí)別。
注意音量增益部件320提供的衰減級(jí)別是從音量控制信號(hào)324得知的。然而,根據(jù)話(huà)筒信號(hào)115、揚(yáng)聲器信號(hào)325和消除器輸出信號(hào)145計(jì)算聲音路徑提供的衰減級(jí)別(稱(chēng)作信道增益)和回聲消除器140提供的衰減級(jí)別(稱(chēng)作消除器增益)。例如在上面引入的美國(guó)專(zhuān)利申請(qǐng)US 09/005,149(標(biāo)題為“在通信系統(tǒng)中改進(jìn)回聲抑制的方法和設(shè)備”和與此同時(shí)提交的)中描述了用于計(jì)算信道和消除器增益的改進(jìn)方法。因?yàn)樾诺篮拖髟鲆嬗?jì)算的相關(guān)具體細(xì)節(jié)對(duì)于理解本發(fā)明并不重要,因此為了簡(jiǎn)潔在此省略該計(jì)算的具體說(shuō)明。
如上所述,給出從音量控制部件320的輸入到回聲消除器140的輸出(或者如果不包括回聲消除器140到揚(yáng)聲器1115的輸出)的環(huán)路增益,增益控制處理器310可以計(jì)算抑制器衰減因子α,以便將近端音頻信號(hào)155中的回聲抑制到特定目標(biāo)級(jí)別。然而,通過(guò)與目標(biāo)級(jí)別固定的現(xiàn)有技術(shù)系統(tǒng)比較,圖3的系統(tǒng)300的增益控制處理器310根據(jù)主要條件調(diào)整目標(biāo)級(jí)別,以便回聲抑制器130在近端音頻信號(hào)155上引入最小失真。
換句話(huà)說(shuō),雖然現(xiàn)有技術(shù)系統(tǒng)一般將目標(biāo)級(jí)別設(shè)置成相對(duì)嚴(yán)格固定的值(例如考慮單一的最壞情況,例如在沒(méi)有近端背景噪聲的情況下遠(yuǎn)端單方講話(huà)),因而當(dāng)不需要嚴(yán)格的目標(biāo)級(jí)別時(shí)(例如當(dāng)不存在單一的最壞情況時(shí)),使近端信號(hào)155的失真超過(guò)所需要的,圖3的增益控制處理器310選擇多個(gè)可能目標(biāo)級(jí)別中最合適的一個(gè),可能目標(biāo)級(jí)別中的每一個(gè)最適合于一種特定的主要條件。例如,目標(biāo)級(jí)別應(yīng)當(dāng)是等量嚴(yán)格的(例如-45dB或更低)。然而在雙方講話(huà)的時(shí)間內(nèi),遠(yuǎn)端用戶(hù)對(duì)回聲較不敏感,目標(biāo)級(jí)別可以被稍微放松(例如-25dB或更低)。有利地,增益控制處理器310能夠檢測(cè)這些和其它主要條件并據(jù)此設(shè)置目標(biāo)級(jí)別(因而抑制器衰減因子α)。因此,圖3的系統(tǒng)300在任意給定的時(shí)間上在近端信號(hào)155上不引入比所需要的更多的失真。
為了檢測(cè)近端單方講話(huà)、遠(yuǎn)端單方講話(huà)、雙方講話(huà)和高近端噪聲等條件,增益控制處理器310使用話(huà)筒信號(hào)115、揚(yáng)聲器信號(hào)325和/或消除器輸出信號(hào)145。例如,為了檢測(cè)遠(yuǎn)端話(huà)音,增益控制處理器310可包括參考圖2所述的揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210。另外,增益控制處理器310可以包括話(huà)筒話(huà)音激勵(lì)檢測(cè)器以根據(jù)話(huà)筒信號(hào)115和/或消除器輸出信號(hào)145檢測(cè)近端話(huà)音。
本領(lǐng)域的技術(shù)人員將理解僅根據(jù)話(huà)筒信號(hào)115實(shí)現(xiàn)粗略話(huà)筒話(huà)音激勵(lì)檢測(cè)器的方法是公知的。另外,下面將利用偽代碼描述根據(jù)回聲消除器的輸入和輸出信號(hào)(例如根據(jù)話(huà)筒信號(hào)115和消除器輸出145)檢測(cè)近端話(huà)音的改進(jìn)方法。因?yàn)闄z測(cè)近端話(huà)音的相關(guān)具體細(xì)節(jié)對(duì)于理解本發(fā)明并不重要,因此在此省略該細(xì)節(jié)。
特別應(yīng)當(dāng)說(shuō)明當(dāng)回聲抑制器130工作并將音頻信號(hào)145至少衰減到某一程度時(shí)(即當(dāng)未如上所述使回聲抑制器130旁路或進(jìn)入直接通過(guò)模式時(shí)),上述目標(biāo)級(jí)別選擇處理是可以應(yīng)用的。因此,本發(fā)明區(qū)別于根據(jù)近端話(huà)音的檢測(cè)(例如在雙方講話(huà)的時(shí)間內(nèi))完全停止回聲抑制器130的工作來(lái)避免近端信號(hào)失真的系統(tǒng)。因?yàn)檫@種系統(tǒng)在停止回聲抑制器130工作時(shí)僅依靠回聲抑制器140提供充分的回聲抑制,這種系統(tǒng)經(jīng)常不能滿(mǎn)足當(dāng)前電信標(biāo)準(zhǔn)的推薦目標(biāo)(例如IS-55A推薦遠(yuǎn)端單方講話(huà)時(shí)回聲衰減-45dB和雙方講話(huà)時(shí)回聲衰減-25dB)。
通過(guò)比較,本發(fā)明允許回聲抑制器130在雙方講話(huà)的時(shí)間內(nèi)保持工作,因而可以在所有時(shí)間上輕易地滿(mǎn)足所推薦的目標(biāo)。實(shí)驗(yàn)研究已經(jīng)表明在遠(yuǎn)端單方講話(huà)和雙方講話(huà)的時(shí)間內(nèi)分別使用-56dB和-25dB的回聲抑制目標(biāo),在最大回聲抑制和最小近端信號(hào)失真的矛盾需要之間提供很好的平衡。本領(lǐng)域的技術(shù)人員將理解,盡管僅為兩種主要條件(即遠(yuǎn)端單方講話(huà)和雙方講話(huà))明確提供目標(biāo)級(jí)別,可以考慮其它多種主要條件(例如高和低電平的近端和遠(yuǎn)端噪聲),并可以考慮提供其它可能的目標(biāo)級(jí)別。
根據(jù)本發(fā)明的另一方面,圖3的增益控制處理器310根據(jù)抑制器輸入信號(hào)145中的回聲噪聲比的測(cè)量調(diào)整回聲抑制器130。具體地,增益控制處理器310在抑制器輸入145上動(dòng)態(tài)地測(cè)量回聲噪聲比,并通過(guò)處理器控制信號(hào)315向回聲抑制器130提供合適的控制信號(hào)。
在一種示范性實(shí)施例中,當(dāng)所測(cè)量的回聲噪聲比低于預(yù)定閾值時(shí)。增益控制處理器310停止回聲抑制器130的工作。換句話(huà)說(shuō),當(dāng)回聲實(shí)際上隱藏在背景噪聲中或被其掩蓋時(shí),遠(yuǎn)端用戶(hù)察覺(jué)不到回聲,并且回聲抑制器130在試圖進(jìn)一步抑制回聲時(shí)不需要引入近端信號(hào)失真。因此,可停止使用或調(diào)整回聲抑制器130以提供恰好足以防止嘯聲的正常級(jí)別的衰減。
實(shí)驗(yàn)研究已經(jīng)表明從遠(yuǎn)端用戶(hù)的角度來(lái)看-10dB或更低的回聲噪聲比提供足夠的噪聲掩蓋。然而,可以將停用回聲消除器130的噪聲掩蓋閾值實(shí)際設(shè)置得低于-10dB以避免由于回聲噪聲比的計(jì)算錯(cuò)誤而錯(cuò)誤地通過(guò)可察覺(jué)的回聲。實(shí)驗(yàn)研究已經(jīng)表明-18dB的噪聲掩蓋閾值對(duì)于此目的是有效的。
如上所述,可以以各種方式停止回聲抑制器130工作。例如,可以使用旁路開(kāi)關(guān)有效地停用任意類(lèi)型的回聲抑制器130,通過(guò)強(qiáng)制斷路開(kāi)關(guān)閉合可以停用斷路開(kāi)關(guān)抑制器。另外,通過(guò)將削波窗口大小設(shè)置為零可以停用削波抑制器,通過(guò)將抑制器衰減因子設(shè)置為1可以停用定標(biāo)抑制器。通過(guò)將衰減窗口設(shè)置為零和/或?qū)⑺p因子設(shè)置為1可以停用混合抑制器。
在回聲抑制器130是定標(biāo)抑制器或混合抑制器時(shí)(即回聲抑制器使至少一部分抑制器輸入信號(hào)乘以衰減因子α?xí)r),回聲與噪聲比測(cè)量可以與上述環(huán)路增益概念組合以提供其它優(yōu)點(diǎn)。例如,在本發(fā)明的一種實(shí)施例中,增益控制處理器310如上所述計(jì)算從音量增益部件320的輸入到回聲抑制器130的輸入的環(huán)路增益,然后計(jì)算在背景噪聲中掩蓋回聲所需要的抑制器衰減因子α(即衰減因子α將使音頻輸出信號(hào)155具有例如-18dB的回聲與噪聲比)。注意,因?yàn)榛芈曇种破?30衰減整個(gè)音頻信號(hào)145(包括回聲、話(huà)音和噪聲),本實(shí)施例預(yù)先假定舒適噪聲被添加到抑制器輸出信號(hào)135以補(bǔ)償由回聲抑制器130去除的背景噪聲。
根據(jù)示范性實(shí)施例,通過(guò)測(cè)量音頻輸入中的總能量并通過(guò)估計(jì)音頻輸入中的噪聲能量級(jí)別計(jì)算回聲抑制器130音頻輸入中的回聲與噪聲比。具體地,從總能量測(cè)量中減去噪聲能量估計(jì),并使結(jié)果差值(表示回聲能量級(jí)別)除以噪聲能量估計(jì)以提供估計(jì)的回聲與噪聲比。本領(lǐng)域的技術(shù)人員將理解信號(hào)中能量和估計(jì)信號(hào)中噪聲電平的測(cè)量方法是公知的。另外,利用下面的偽代碼說(shuō)明計(jì)算噪聲電平估計(jì)的改進(jìn)方法。因?yàn)樵肼曤娖焦烙?jì)的相關(guān)具體細(xì)節(jié)對(duì)于理解本發(fā)明并不重要,因而在此省略這些細(xì)節(jié)。
有利地,本發(fā)明的所有上述特征可以組合在單個(gè)回聲抑制系統(tǒng)中以提供高級(jí)的回聲抑制器控制和最佳的近端信號(hào)質(zhì)量。為證明這一點(diǎn),圖4圖示一種示范性算法400,在該算法中使用本發(fā)明的多個(gè)方面調(diào)整用于回聲抑制器130的衰減因子α。因?yàn)槭痉缎运惴?00使用環(huán)路增益的概念,算法400主要可應(yīng)用于定標(biāo)抑制器和混合抑制器。然而,本領(lǐng)域的技術(shù)人員將理解示范性算法400的某些方面可應(yīng)用于上述所有類(lèi)型的抑制器。
如圖所示,算法400開(kāi)始于步驟S10,并在步驟S20進(jìn)行揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210是否指示出現(xiàn)遠(yuǎn)端話(huà)音的判決。如果沒(méi)有,則回聲消除器130進(jìn)入直接通過(guò)模式并且該程序在步驟S60結(jié)束。然而,如果揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210指示遠(yuǎn)端話(huà)音,則在步驟S30進(jìn)行關(guān)于是否已經(jīng)檢測(cè)到近端話(huà)音的判斷。
如果尚未檢測(cè)到近端話(huà)音,則在步驟S35計(jì)算實(shí)現(xiàn)預(yù)定遠(yuǎn)端單方講話(huà)目標(biāo)所需的衰減因子。然而,如果已經(jīng)檢測(cè)到近端話(huà)音,則在步驟S40計(jì)算實(shí)現(xiàn)預(yù)定雙方講話(huà)目標(biāo)所需的衰減因子。在任一種情況下,在步驟S45計(jì)算實(shí)現(xiàn)預(yù)定噪聲掩蓋目標(biāo)所需的衰減因子。因而,在步驟S60,將衰減因子α設(shè)置成根據(jù)噪聲掩蓋(在步驟S45)和話(huà)音檢測(cè)(在步驟S40或S35)計(jì)算的衰減因子中較不嚴(yán)格的衰減因子。然后該程序在步驟S60結(jié)束。
用下面的偽代碼提供圖4的算法400的示范性實(shí)施例。在偽代碼中,假定定標(biāo)或混合回聲抑制器使用衰減或增益因子echoSuppressorGain操作。
If farEndVoiceFlag==0,EchoSuppressorGain=1Else,If nearEndVoiceFlag==1,LoopEchoGainGoal=-56dBElse,LoopEchoGainGoal=-56dBEndEchoSuppressorGainMax(loopEchoGainGoal/loopEchoGain,…EchoToNoiseGoal/echoToNoise)End注意在圖4的算法中,根據(jù)是否檢測(cè)到近端話(huà)音(在步驟S30)計(jì)算噪聲掩蓋目標(biāo)(在步驟S45)。然而,實(shí)際上,實(shí)驗(yàn)研究表明當(dāng)包括前端回聲消除器140時(shí),根據(jù)典型的雙方講話(huà)目標(biāo)計(jì)算的衰減因子α(例如-25dB)始終大于(并因而導(dǎo)致較小的失真)根據(jù)典型的噪聲掩蓋目標(biāo)計(jì)算的衰減因子α(例如-18dB)。結(jié)果,當(dāng)已經(jīng)檢測(cè)到雙方講話(huà)時(shí)不必為噪聲掩蓋目標(biāo)計(jì)算衰減因子α,實(shí)際上可以節(jié)省DSP周期。
還注意到圖4的算法400在抑制器輸入上的回聲噪聲比已經(jīng)等于或低于噪聲掩蓋目標(biāo)時(shí),并不試圖使回聲抑制器130不工作。原因在于實(shí)驗(yàn)研究已經(jīng)表明,對(duì)于定標(biāo)和混合抑制器,最好使回聲抑制器130繼續(xù)工作(使用根據(jù)噪聲掩蓋目標(biāo)的衰減因子α),以便不會(huì)由于不正確的回聲和噪聲估計(jì)錯(cuò)誤地通過(guò)可察覺(jué)的錯(cuò)誤(例如用于計(jì)算回聲與噪聲比本身的估計(jì))。
計(jì)算機(jī)仿真已經(jīng)表明根據(jù)本發(fā)明教導(dǎo)(即根據(jù)圖4的算法)構(gòu)成的回聲抑制系統(tǒng)可以顯著地降低近端話(huà)音失真和一般由非線(xiàn)性回聲抑制器引入的背景噪聲。例如,當(dāng)揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210指示沒(méi)有遠(yuǎn)端話(huà)音時(shí)停止回聲抑制器130的工作產(chǎn)生遠(yuǎn)端單方講話(huà)條件下的理想、無(wú)失真近端話(huà)音和噪聲。即使當(dāng)揚(yáng)聲器信號(hào)中有恒定噪聲時(shí)這也是正確的。
另外,根據(jù)近端話(huà)音的檢測(cè)為工作回聲抑制器調(diào)整回聲抑制目標(biāo)產(chǎn)生雙方講話(huà)條件下大為改進(jìn)的近端話(huà)音和噪聲(在組合音量控制、聲音回聲路徑和線(xiàn)性回聲消除器的增益時(shí),理想近端話(huà)音和噪聲是-25dB或更好,通常是這種情況)。當(dāng)揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210錯(cuò)誤地將噪聲檢測(cè)為話(huà)音時(shí),為工作回聲抑制器調(diào)整回聲抑制目標(biāo)還用于提高近端單方講話(huà)條件下的近端話(huà)音和噪聲。
而且,根據(jù)抑制器輸入上回聲和噪聲的測(cè)量控制回聲抑制器改善了噪雜汽車(chē)條件下的近端話(huà)音和噪聲。例如,在遠(yuǎn)端單方講話(huà)時(shí),降低近端背景噪聲的衰減。結(jié)果,需要較少的舒適噪聲以使遠(yuǎn)端用戶(hù)放心,遠(yuǎn)端用戶(hù)覺(jué)察到的背景噪聲特征被更好地保持。而且,在雙方講話(huà)或近端單方講話(huà)的周期內(nèi),即使在揚(yáng)聲器話(huà)音激勵(lì)檢測(cè)器210和近端話(huà)音檢測(cè)器故障時(shí)也可以改善近端話(huà)音和噪聲。因此,在帶有大量近端噪聲的近端單方講話(huà)的過(guò)程中(即汽車(chē)免提應(yīng)用中的道路和車(chē)輛噪聲),本發(fā)明提供三種機(jī)制以不管恒定揚(yáng)聲器噪聲而確保減少近端話(huà)音失真和噪聲。
通過(guò)例子,如在實(shí)際回聲抑制系統(tǒng)中所結(jié)合的,圖4算法400的另一種實(shí)施例在下面提供的偽代碼中被描述。編寫(xiě)該偽代碼以仿真如使用32位數(shù)字信號(hào)處理器所實(shí)現(xiàn)的示范性回聲抑制系統(tǒng)。本領(lǐng)域的技術(shù)人員將理解該代碼在本質(zhì)上是示范性的,并且可以使用各種硬件配置來(lái)實(shí)現(xiàn)其等價(jià)代碼。該示范性回聲抑制系統(tǒng)包括在上面引用的美國(guó)專(zhuān)利申請(qǐng)US 08/852,729中描述的改進(jìn)回聲消除器的修改版本和在上面引用的美國(guó)專(zhuān)利申請(qǐng)_______(標(biāo)題為“在通信系統(tǒng)中改進(jìn)回聲抑制的方法和設(shè)備”和與此同時(shí)提交的)中描述的AC-中心衰減器。
%用于MATLAB的AEC和ANLP模擬腳本程序
%在運(yùn)行該腳本程序之前,設(shè)置下列變量%inFile=輸入文件名稱(chēng),left=遠(yuǎn)端,right=AEC輸出。
%outFile=輸出文件名稱(chēng),left=ANLP輸出,right=AEC輸出。
%所有文件使用DAT-Link的原始格式。
%estnoise.m包括估計(jì)噪聲功能。
%詞表%EC=回聲消除器=線(xiàn)性回聲抑制器%AEC=音頻回聲消除器=揚(yáng)聲器-回聲消除器%NLP=非線(xiàn)性處理=殘余回聲抑制器=AC中心衰減器%ANLP=音頻非線(xiàn)性處理%VAD=話(huà)音激活檢測(cè)器%用分?jǐn)?shù)表示的最大正值。
0NE=32767/32768;%讀取包含遠(yuǎn)端和近端信號(hào)的文件。
FidIn=fopen(inFile,‘r’);If fidIn==-1Error ([‘Error opening file’inFile])End[Lrmatrix,wordCount]=fread(fidIn,[2,inf],’int16’);fclose(fidIn);%在更新綜合期間樣本數(shù)量。
FRAME-SIZE=160;%給出的幀尺寸越大對(duì)雙方談話(huà)和近端噪聲的堅(jiān)固性越大%其往往趨于零。
%較大則改善了檢測(cè)收斂的能力因?yàn)橄嚓P(guān)更新與幀尺寸成比例增長(zhǎng)而非相關(guān)(噪聲)隨幀%尺寸平方根增長(zhǎng)。
%較小則改善對(duì)變化的響應(yīng)時(shí)間(回聲路徑,單一≥雙方談話(huà))和加速收斂。
%較小也改善丟棄元音聲音的能力。
%160用于容易移植每幀160個(gè)樣本的TDMA電話(huà)。
%產(chǎn)生的20ms幀對(duì)于將語(yǔ)音分成靜態(tài)信號(hào)段是近似最佳的。
NFRAMES=floor((wordCount/2)/FRAME-SIZE);%處理的幀數(shù)量。
Clear wordCountNsamples=NFRAMES*FRAME-SIZE;用于調(diào)試的樣本形式向量%%從分開(kāi)的文件加載話(huà)筒(上行)和揚(yáng)聲器(下行)VAD輸出。如果沒(méi)有找到每個(gè)文件,%運(yùn)行近端和遠(yuǎn)端聲音文件上的C可執(zhí)行文件,并在具有相同前綴文件中存儲(chǔ)VAD輸出。%fidIn=fopen([inFile‘up vad’],‘r’);if fidIn==-1disp([‘File=’inFile‘up vad not found--creating… ’])fidout=fopen(‘vad in.raw’,‘ w’);fwrite(fidout,LRmatrix(2,),‘int16’); % 上行音頻fclose (fidout);!nrsim-s=f vad_in.raw junk vad out.bit!rm vad in.raw!rm junk.fltfidIn=fopen(‘vad out.bit’,‘r’);if fidIn==-1error(‘ Error opening file=vad out.bit’)endmicVad=fread(fidIn,NFRAMES,‘int8’);!rm vad_out.bitfclose(fidIn);fidout=fopen([inFile‘_up_vad’],‘w’);fwrite(fidout,micVad,‘int8’);fclose(fidout); elsemicVad=fread(fidIn,NFRAMES,‘int8’);fclose(fidIn);endfidIn=fopen([inFile‘down vad’] ,‘r’);if fidIn==-1disp([‘File=’inFile‘down vad not found--creating…’])
fidout=fopen(‘vad_in.raw’,‘w’);fwrite(fidout,LRmatrix(1,),‘int16’); %下行音頻fclose(fidout);!nrsim-s=f vad_in.raw junk vad_out.bit!rm vad_in.raw!rm junk.fltfidIn=fopen(‘vad_out.bit’,‘r’);if fidIn==-1error(‘Error opening file=vad_out.bit’)endspeakerVad=fread(fidIn,NFRAMES,‘int8’);!rm vad_out.bitfclose(fidIn);fidout=fopen([inFile‘_down_vad’],‘w’);fwrite(fidout,speakerVad,‘int8’);fclose(fidout);elsespeakerVad=fread(fidIn,NFRAMES,‘int8’);fclose(fidIn);end%將輸入乘比例使用-1到1的范圍。
Lrmatrix=Lrmatrix/32768;%在一個(gè)樣本幀上累計(jì)右移位數(shù)值的比特?cái)?shù)量。
FRAME-BITS=ceil(log2(FRAME-SIZE));%將能量量化成32位的比例因子(Z8.23格式w/FRAME-SIZE=160)ENERGY-SCALE=2^(31-FRAME-BITS);%在基準(zhǔn)延遲線(xiàn)中的抽頭數(shù)量。
%它必須足夠長(zhǎng)使高延遲抽頭幾乎與遠(yuǎn)端信號(hào)不相關(guān)而只具有近端能量。
AEC-REF-TAPS=512;%在FIR回聲估計(jì)濾波器中的抽頭數(shù)量。
AEC-COEF-TAPS=256;%用于計(jì)量近端能量的更新向量高延遲部分中的抽頭數(shù)量。
AEC-NEAR-TAPS=128;
%捕獲汽車(chē)噪聲樣本向量的長(zhǎng)度。
COMFORT-NOISE-SIZE=128;%計(jì)算在更新向量峰值/基線(xiàn)比的閾值用于確定最大更新增益。對(duì)于統(tǒng)一在[-1,1]范圍內(nèi)的噪聲,所希望的峰值更新幅度是g*FRAME-SIZE/3,同時(shí)所希望非相關(guān)抽頭更新向量的RMS是g*sqrt(FRAME-SIZE)/3,其中g(shù)四回聲路徑增益。因此,最大更新向量峰值/基線(xiàn)比是sqrt(FRAME-SIZE)。
%可是,話(huà)音沒(méi)有類(lèi)似噪聲的恒定包絡(luò)。因?yàn)镕RAME-SIZE遠(yuǎn)遠(yuǎn)小于更新向量長(zhǎng)度,語(yǔ)音的一個(gè)突發(fā)有時(shí)在更新向量區(qū)內(nèi),其中峰值不在計(jì)量基線(xiàn)的區(qū)域中計(jì)量。因此,實(shí)際峰值/基線(xiàn)比可以非常高(>300)。將閾值設(shè)置太低會(huì)引起由于即使對(duì)噪聲或雙方談話(huà)條件下高能量遠(yuǎn)端信號(hào)的高增益更新產(chǎn)生的不穩(wěn)定。
%將閾值設(shè)置太高會(huì)引起由于只對(duì)大的回聲路徑變化高能量遠(yuǎn)端信號(hào)的高增益更新產(chǎn)生的慢衰減。
%經(jīng)驗(yàn)化地確定該閾值作為一種折衷。
AEC-MAX-GAIN,THRESH=16;%對(duì)于噪聲的峰值/RMS與幀尺寸無(wú)關(guān)。用于抵制近端話(huà)音/噪聲和遠(yuǎn)端周期性信號(hào)(單音或元音)的閾值被以經(jīng)驗(yàn)導(dǎo)出。
AEC-BASELINE-THRESH=5.5;%為狀態(tài)尺度預(yù)先計(jì)算用作乘法器的常量。
AEC-STATUS-GAUGE-SCALER=floor( 32768/…… ( AEC-MAX-GAIN-THRESH-AEC-BASELINE-THRESH))/32768;%產(chǎn)生FIR系數(shù)的增益輪廓。該輪廓大致與汽車(chē)內(nèi)系數(shù)的希望范圍匹配。這樣,包含周期性成分(元音)的更新被強(qiáng)迫服從合適的指數(shù)衰落特性和使分歧最小。在較高延遲抽頭上的較低增益也減少了更新噪聲對(duì)系數(shù)的影響。高輪廓的總效果是允許較高更新增益而沒(méi)有不穩(wěn)定。
%由于所有系數(shù)具有16位動(dòng)態(tài)范圍,較高延遲抽頭也具有作為該輪廓結(jié)果的較好量化。該輪廓通過(guò)在右移位中間時(shí)刻計(jì)算FIR 64個(gè)抽頭實(shí)現(xiàn)。profile=ones(AEC_COEF TAPS,1);for k=2(AEC COEF TAPS/64),profile((k*64-63)(k*64))=ones(64,1)*2^(1-k);end%分配調(diào)試向量以加速執(zhí)行。aecUpdateFactor=zeros(1,NFRAMES);aecChanGainHist=zeros(1,NFRAMES);aecSpeedHist=zeros(1,NFRAMES);aecVoiceGainHist=zeros(1,NFRAMES);aecVoiceGainBaseHist=zeros(1,NFRAMES);aecNearRatioHist=zeros(1,NFRAMES);aecNearGainHist=zeros(1,NFRAMES);aecEchoGainHist=zeros(1,NFRAMES);aecInNoiseHist=zeros(1,NFRAMES);aecInEchoNoiseHist=zeros(1,NFRAMES);aecInVoiceHist=zeros(1,NFRAMES);aecInEchovoiceHist=zeros(1,NFRAMES);anlpInVoiceHist=zeros(1,NFRAMES);anlpInNoiseHist=zeros(1,NFRAMES);anlpDeltaHist=zeros(1,NSAMPLES);anlpGainHist=zeros(1,NFRAMES);%初始化變量aecRef=zeros(1,AEC REF TAPS); %使用量新值valuesaecCoef=zeros(AEC COEF TAPS,1); %注釋thisaecInNoise=FRAME SIZE;%注釋thisaecInEchoNoise=aecInNoise;%注釋thisanlpInNoise=aecInNoise; %注釋thisaecChanGain=ONE; %注釋thisaecVoiceGain=ONE; %注釋thisaecVoiceGainBase=aecVoiceGain; %注釋thisaecNearGain=aecVoiceGain; %注釋thisaecEchoGain=aecVoiceGain; %注釋thisanlpComfortNoiseInold=0; %注釋thisanlpComfortNoiseoutold=0; %注釋thisanlpComfortNoise=zeros(1,COMFORT NOISE_SIZE); %注釋thisanlpArCoef=0.75; %注釋thisaecNearRatio=0; %只初始化記錄aecInNoiseStateVars=[aecInNoise 0 0] ;aecInEchoNoiseStateVars=[aecInEchoNoise 0 0];anlpInNoiseStateVars =[anlpInNoise 0 0];anlpSeed=1;anlpArGain=1-anlpArCoef;anlpRefEnvelope=0;anlpoutLast=0;anlpNearSpeechCount=0;anlpNearSpeechFlag=0;%顯示([‘a(chǎn)ecCoef(1)=’dec2hex(aecCoef(1)*32768+(aecCoef(1)<0)*65536)])%顯示([‘a(chǎn)ecCoef(2)=’dec2hex(aecCoef(2)*32768+(aecCoef(2)<0)*65536)])%顯示([‘a(chǎn)ecInNoise=’dec2hex(aecInNoise*2^31)])%顯示([‘a(chǎn)nlpInNoise=’dec2hex(anlpInNoise*2^31)])%顯示([‘a(chǎn)ecChanGain=’dec2hex(aecChanGain*32768)])%顯示([‘a(chǎn)ecVoiceGain=’dec2hex(aecVoiceGain*32768)])%顯示([‘a(chǎn)ecVoiceGainBase=’dec2hex(aecVoiceGainBase*32768)])%顯示([‘a(chǎn)ecEchoGain=’dec2hex(aecEchoGain*32768)])%顯示([‘a(chǎn)nlpComfortNoiseInold=’dec2hex(=anlpComfortNoiseInold*32768)])%顯示([‘a(chǎn)nlpComfortNoiseoutold=’dec2hex(anlpComfortNoiseoutold*32768)])%顯示([‘a(chǎn)nlpArCoef=’dec2hex(anlpArCoef*2^31)])%顯示([‘a(chǎn)nlpArGain=’dec2hex(anlpArGain*32768)])fidout=fopen(outFile,‘w’);for frame=1NFRAMES,frame%顯示幀數(shù)量以指示程序。progress.%%AEC幀前部分%%由于在用于更新FIR系數(shù)的基準(zhǔn)向量抽頭與用于近端能量相關(guān)的抽頭之間有一個(gè)間隙,不需要對(duì)基準(zhǔn)向量的每個(gè)抽頭計(jì)算更新向量。因此,更新向量由特別用于兩個(gè)目的的子向量代表。
%清除在一幀上積累的更新子向量。
aecUpdate=zeros(AEC-COEF-TAPS,1);%用于FIR系數(shù)更新
aecUpdateNear=zeros(AEC-NEAR-TAPS,1); %用于近端計(jì)量%清除其它幀積累aecEchoEstEnergy=0;%重新設(shè)置塊浮點(diǎn)變量。
aecShiftPending=0;aecErrorShift=0;%使上行和下行PCM音頻樣本進(jìn)入緩存器。
downlinkAudio=LRmatrix(1,(frame-1)*FRAME-SIZE+1frame*FRAME_SIZE);uplinkAudio=LRmatrix(2,(frame-1)*FRAME-SIZE+1frame*FRAME_SIZE);%在一個(gè)幀上積累AEC近端輸入能量aecInEnergy=sum(uplinkAudio.^2);%量化能量為32位。
aecInEnergy=floor(aecInEnergy*ENERGY-SCALE)/ENERGY-SCALE;%AEC樣本部分for k=1FRAME-SIZE,%將遠(yuǎn)端(揚(yáng)聲器)樣本偏移到基準(zhǔn)延遲線(xiàn)和計(jì)算FIR輸出。在DSP中,兩個(gè)操作在一個(gè)指令中。
aecRef=[downlinkAudio(k)aecRef(1AEC-REF-TAPS-1)];%測(cè)試碼開(kāi)始%下列碼快速逼近注釋?zhuān)忍?精度碼。
aecEchoEst=aecRef(1AEC-COEF-TAPS)*(aecCoef.*profile);aecEchoEst=max(min(round(aecEchoEst*32768)/32768,ONE),-1);
%測(cè)試碼結(jié)束aecEchoEst=0;for m=(AEC-EOEF-TAPS/64)-12;aecEchoEst=aecEchoEst+aecRef(m*64-63m*64)*aecCoef(m*64-63m*64);aecEchoEst=max(min(aecEchoEst,ONE),-1)2;%量化S.15格式aecEchoEst=floor(aecEchoEst*2^31)/2^31;結(jié)束aecEchoEst=aecEchoEst+aecRef(164)*aecCoef(m*64);aecEchoEst=max(min(aecEchoEst,ONE),-1);%量化S.15格式%當(dāng)將具有恰好0.5的分?jǐn)?shù)的負(fù)數(shù)舍入時(shí)加入2^(-17)強(qiáng)制一補(bǔ)數(shù)浮點(diǎn)起與二補(bǔ)數(shù)的作用。
aecEchoEst=round(aecEchoEst*32768+2^(-17))/32768;aecEchoEst=max(min(aecEchoEst,ONE),-1);%在一個(gè)幀上積累回聲估計(jì)能量。
%為改善小信號(hào)性能和進(jìn)行相同方式的計(jì)量作為其它能量積累,在環(huán)路通路之間保留了整40位累加器。
aecEchoEstEnergy=aecEchoEstEnergy+aecEchoEst^2;%計(jì)算 AEC output=near-end (microphohe)input-回聲估計(jì)值。
uplinkAudio(k)=max(min(uplinkAudio(k)-aecEchoEst,ONE),-1);%累計(jì)系數(shù)更新=誤差相關(guān)(uplinkAudio(k))和基準(zhǔn)。使用塊浮點(diǎn)表達(dá)式,其中aecErrorShift是指數(shù)而aecUpdate/aecUpdateNear( )是尾數(shù)。
T=uplinkAudio(k)*2^aecErrorShift;%量化S.15格式T=floor(T*32768132768);if aecShiftPending,
ASM=-1aecErrorShift=aecErrorShift-1;aecShiftPending=0;elseASM=0;end%計(jì)算用于更新FIR系數(shù)的區(qū)間。
aecUpdate=aecUpdate+T*aecRef(1AEC-COEF-TAPS);%計(jì)算用于計(jì)量近端能量的區(qū)間。
aecUpdateNear=aecUpdateNear+T * aecRef(AEC-REF-TAPS-AEC-NEAR-TAPS+IAEC-REF-TAPS);%量化S.15格式%當(dāng)將具有恰好為0.5的分?jǐn)?shù)的負(fù)數(shù)舍入時(shí)加入2^(-17)強(qiáng)制一補(bǔ)數(shù)浮點(diǎn)起二補(bǔ)數(shù)作用。
aecUpdate=round(aecUpdate*32768+2^(-17))/32768;aecUpdateNear=round(aecUpdateNear*32768+2^(-17))/32768;aecUpdate=max(min(aecUpdate,ONE),-1);aecUpdateNear=max(min(aecUpdateNear,ONE),-1);aecUpdate=aecUpdate*2^ASM;aecUpdateNear=aecUpdateNear*2^ASM;%在可能的右位移之后量化S.15格式。
aecUpdate=floor(aecUpdate*32768)/32768;aecUpdateNear=floor(aecUpdateNear*32768)/32768;%找到更新向量的峰值平方(假設(shè)在前面128個(gè)抽頭中)。
%目的是獲得峰值的絕對(duì)值,但是在DSP中峰值平方占較少周期,甚至具有幀結(jié)尾的平方根。
aecUpdatePeak2=max(aecUpdate(1128).^2);%標(biāo)志指示更新是否需要在下個(gè)環(huán)路中除以2。
aecShiftPending=aecUpdatePeak2>0.25; %0.25=0.5^2
end%量化能量為32位。
aecEchoEstEnergy=floor(aecEchoEstEnergy*ENERGY-SCALE)/ENERGY-SCALE;%%AEC幀后的部分%aecOut=uplinkAudio; %將輸出保留在文件用于調(diào)試。
%在一個(gè)幀上積累AEC輸出能量。
aecOutEnergy=sum(uplinkAudio.^2);%量化能量為32位。
aecOutEnergy=floor(aecOutEnergy*ENERGY-SCALE)/ENERGY-SCALE;%對(duì)于更新向量每個(gè)元素實(shí)際基準(zhǔn)能量是不同的。aecUpdate(1)將使用來(lái)自aecRef(1)的能量,aecUpdate(2)將使用來(lái)自aecRef(2)的能量,等等。為減少?gòu)?fù)雜性,使用單一數(shù)字表示基準(zhǔn)能量。
%當(dāng)基準(zhǔn)能量被用于計(jì)量信道回聲增益以確定適應(yīng)速度或標(biāo)準(zhǔn)化更新(NLMS),使用太小值將不會(huì)引起不穩(wěn)定性。在此實(shí)現(xiàn)的折中方案使用端點(diǎn)的最大值,其中profile=1。
aecRefEnergy=max(sum(aecRef(1FRAME-SIZE).^2),……sum(aecRef(64FRAME-SIZE+63).^2));%量化Z8.7格式aecRefEnergy=floor(aecRefEnergy*128)/128;%計(jì)量更新基線(xiàn)作為高延遲單元的RMS,其中誤差與遠(yuǎn)端信號(hào)之間的相關(guān)性希望為0。
%在最低有效位中加1以保證量化后aecUpdateBase較大和aecPeakToBase較小。這避免了對(duì)較高回聲相關(guān)性的錯(cuò)誤印象。
%在底層操作產(chǎn)生與頂層相同的結(jié)果后在最低有效位中加入1,除了所有截短位等于零的少有情況。
aecUpdateBase=sum(aecUpdteNear.^2)/AEC-NEAR-TAPS;
%對(duì)Z.31格式量化平方的中間結(jié)果aceUpdateBase=floor(aecUpdateBase*2^31)/2^31;aceUpdateBase=sqrt(aecUpdateBase);%量化Z.15格式aecUpdateBase=floor(aecUpdateBase*32768+1)/32768;%查找更新向量的峰值幅度。
aecupdatePeak=sqrt(aecUpdatePeak2);%計(jì)算更新峰值/基線(xiàn)比。
aecPeakToBase=aecUpdatePeak/aecUpdateBase;%從4分?jǐn)?shù)為量化Z11.4格式足夠了。
aecPeakToBase=floor(aecPeakToBase*16)/16;%根據(jù)更新峰值基線(xiàn)比計(jì)算狀態(tài)尺度(范圍=
)。即使峰值/基線(xiàn)比隨幀尺寸和基線(xiàn)閾值的改變可能改變,用于下行數(shù)據(jù)流處理的該尺度保持相同。
%對(duì)于近端話(huà)音。噪聲或遠(yuǎn)端周期信號(hào)(元音),尺度<0.1%例如,對(duì)于具有頻率941Hz和1209Hz的DTMF單音的第一幀被發(fā)現(xiàn)產(chǎn)生%aecPeakToBase=3.5和,因此aecStatusGauge=0).%對(duì)于雙方談話(huà),尺度<0.3%對(duì)于遠(yuǎn)端信號(hào)語(yǔ)音%不論噪聲如何當(dāng)消除器不收斂時(shí),尺度=1%如果近端安靜,尺度=1直到接近完全收斂。
%由于消除器收斂,只有能量比近端噪聲高電平的殘余回聲使尺度=1。
%因此,近端噪聲很少引起更新,不減少更新增益。
aecStatusGauge=(aecPeakToBase-AEC-BASELINE-THRESH)*…AEC-STATUS-GAUGE-SCALER;aecStatusGauge=max(min(aecStatusGauge,ONE),0);%對(duì)Z.15格式量化aecStatusGauge=floor(aecStatusGauge*32768)/32768%估計(jì)在AEC輸入處的噪聲幀能量。=estnoise(aecInEnergy,(micVad(frame=0)&(aecStatusGauge=0),aecInNoiseStateVars);aecInNoise=aecInNoiseStateVars(1);aecInNoise%顯示狀態(tài)aecInNoiseHist(frame)=aecInNoise; %保留用于調(diào)試%估計(jì)在AEC輸入處的回聲增益(信道增益)。
%只在遠(yuǎn)端信號(hào)語(yǔ)音期間更新估計(jì)值(speakerVad(frame)==1)&(aecStatusGauge>0.3),當(dāng)該比值正確時(shí)不管基準(zhǔn)計(jì)量包括話(huà)音和噪聲同時(shí)AEC輸入計(jì)量包括僅話(huà)音(aecInVoice>aecInNoise*8),和當(dāng)基準(zhǔn)能量不受量化的明顯影響(aecRefEnergy>=10/128)。瞬時(shí)增益計(jì)量不非常準(zhǔn)確,因?yàn)闀r(shí)間為校準(zhǔn)和頻譜改變。
%因此,使用一個(gè)平均處理。回聲消除器濾波器系數(shù)的標(biāo)準(zhǔn)是信道增益的非常好的長(zhǎng)期估計(jì)值。可是,它不能足夠快地跟蹤正改變的回聲路徑。
%由于信道增益估計(jì)值也控制線(xiàn)性回聲消除器的自適應(yīng)速度,如果估計(jì)值盡可能與線(xiàn)性回聲消除器無(wú)關(guān)可以改善穩(wěn)定性。因此,使用下列方案%如果瞬時(shí)計(jì)量(aecDhanGainTrial)少于估計(jì)值(aecGhanGain),該估計(jì)值呈指數(shù)急劇起伏。
為加速自適應(yīng),估計(jì)值被直接設(shè)置為瞬時(shí)計(jì)量,如果誤差大于50%,和估計(jì)值呈指數(shù)急劇起伏如果誤差小于12.5%即(aecChanGain-aecGhanGainTrial)/4>aecChanGain/32aecChanGain-aecChanGainTrial>aecChanGain/8=aecChanGain*0.125%如果瞬時(shí)計(jì)量大于估計(jì)值,如果近端話(huà)音在計(jì)量中不占明顯優(yōu)勢(shì)(aecChanGainTrial<2)估計(jì)值呈指數(shù)上升。使用相對(duì)比較例如(aecChanGainTrial<2*aecChanGain)將無(wú)效,因?yàn)楫?dāng)實(shí)際信道增益快速跳動(dòng)時(shí)沒(méi)有更新出現(xiàn)。使用下降時(shí)間常數(shù)1/8的上升時(shí)間常數(shù)有助于在瞬時(shí)計(jì)量中容忍近端話(huà)音。很難區(qū)別近端語(yǔ)音和當(dāng)信道回聲增益變壞的情況。上升時(shí)間常數(shù)在此確定了跟蹤速率,它按照經(jīng)驗(yàn)被確定。aecInvoice=max(0,aecInEnergy-aecInNoise);aecInVoiceHist(frame)=aecInVoice;if(speakerVad(frame)==1)&(aecStatusGauge>0.3)&…(aecInVoice>aecInNoise*8)&(aecRefEnergy>=10/128),%量化acelNVoice為4Z8.20格式,以用作被除數(shù)獲得商所需要的比例。
aecChanGainTrial=floor(aecInVoice*2^20)/2^20 / aecRefEnergy;%量化和限制系數(shù)為Z2.13格式aecChanGainTrial=min(4*ONE,floor(aecChanGainTrial*2^13)/2^13);%計(jì)算系數(shù)的平方根aecChanGainTrial=sqrt(aecChanGainTrial);%量化根為Z1.14格式aecChanGainTrial=floor(aecChanGainTrial*2^14)/2^14;if(aecChanGainTrial<aecChanGain/2),aecChanGain=aecChanGainTrial;elseif(aecChanGain>aecChanGainTrial),aecChanGain=aecChanGain-…max((aecChanGain-aecChanGainTrial)/4,aecChanGain/32);elseif(aecChanGainTrial< 2*ONE),aecChanGain=min(ONE,aecChanGain+max(aecChanGain/256,2^(-11)));end%量化為Z.15格式aecChanGain=f1oor(aecChanGain*32768)/32768;%保留調(diào)整aecChanGainHist(frame)=aecChanGainTrial;elseaecChanGainHist(frame)=ONE;endaecChanGain %顯示狀態(tài)aecSpeedHist(frame)=aecChanGain;%保留調(diào)整%再次確定更新。
%只要增益小于或等于1使用NLMS產(chǎn)生自適應(yīng)速率常數(shù)(與遠(yuǎn)端信號(hào)幅度無(wú)關(guān))。
%使用max運(yùn)算產(chǎn)生更快收斂,然后在分母上加1,因?yàn)楫a(chǎn)生的增益較高。
%使用AEC基準(zhǔn)和近端輸入能量的最大值限制標(biāo)準(zhǔn)化增益,當(dāng)有近端噪聲和/或話(huà)音時(shí)。不使用AEC輸出能量而使用AEC近端輸入能量,因?yàn)樵谑諗亢蟛恍枰咴鲆妫鸵驗(yàn)榉€(wěn)定性不是通過(guò)使用基于AEC輸出的另一個(gè)參數(shù)控制AEC更新增益來(lái)改善。aecInEnergy將小于沒(méi)有近端話(huà)音或噪聲的aecRefEnergy,以便避免話(huà)筒過(guò)載(由于話(huà)筒增益是按照最大近端語(yǔ)音電平設(shè)置的)。如果保證遠(yuǎn)端信號(hào)語(yǔ)音具有低近端噪聲(aecInEnergy/16>=aecOutEnergy)能量乘數(shù)被設(shè)置為8。反之,被設(shè)置為16。因此,當(dāng)汽車(chē)安靜時(shí)自適應(yīng)更快。太小的能量乘數(shù)引起較小穩(wěn)定性,在自適應(yīng)中產(chǎn)生過(guò)大叫聲在回聲消除器輸出中產(chǎn)生尖峰信號(hào)。過(guò)大叫聲也阻礙了具有正改變回聲路徑的遠(yuǎn)端信號(hào)語(yǔ)音與近端語(yǔ)音之間的區(qū)別。太大乘數(shù)在混亂后立即增加了回聲增益。在分子中,使用尺度改變按條件的增益。還使用信道回聲增益作為乘數(shù)優(yōu)化信道自適應(yīng)速率。沒(méi)有該乘數(shù),自適應(yīng)或?qū)τ诟咝诺涝鲆媛谛枰驅(qū)τ诘托诺涝鲆娌环€(wěn)定。使用自適應(yīng)濾波器系數(shù)標(biāo)準(zhǔn)而非基于能量信道增益產(chǎn)生長(zhǎng)期更精確和連續(xù)的估計(jì)值,但是在回聲路徑改變的短期內(nèi)速率和穩(wěn)定性必須折中。
if(aecInEnergy/16>=aecOutEnergy),aecDenom=max(1,8*max(aecRefEnergy,aecInEnergy));%為調(diào)試,設(shè)置因子等于負(fù)尺度值aecUpdatePactor(frame)=-aecStatusGauge;elseaecDenom=max(1,16*max(aecRefEnergy,aecInEnergy));end%為調(diào)試,設(shè)置因子等于尺度值aceUpdateFactor(frame)=aecStatusGauge;end%量化Z12.3格式。
aecDenom=floor(8*aecDenom)/8aecNumer=aecChanGain*aecStatusGauge;%量化22Z.18格式。
aecNumer=floor(aecNumer*2^18)/2^18aecUpdateGain=min(aecNumer/aecDenom,ONE);%量化Z.15格式aecUpdateGain=floor(aecUpdateGain*32768)/32768;%使用自適應(yīng)增益將更新向量加入到系數(shù)向量中。
%在作為FIR系數(shù)使用之前aecCoef被乘以輪廓aecCoef=aecCoef+(aecUpdate*2^(-aecErrorShift)*aecUpdateGain);%量化S.15格式
%加2^(-17)以強(qiáng)制一補(bǔ)數(shù)浮點(diǎn)起二補(bǔ)數(shù)浮點(diǎn)的作用,當(dāng)舍入具有恰好0.5的分?jǐn)?shù)的負(fù)數(shù)時(shí)。
AecCoef=round(aecCoef*32768+2^(-17))/32768;AecCoef=max(min(aecCoef,ONE,-1);%噪聲抑制器將在此處理uplinkAudio。
%通過(guò)只在一個(gè)子程序中使用aecUpdate和aecUpdateNear,它們可以在臨時(shí)存儲(chǔ)器中,可%重疊使用。
%ANLP幀前部分%在ANLP輸入處積累能量,該處通過(guò)噪聲抑制器被連接到AEC輸出。
anlpInEnergy=sum(uplinkAudio.2^);%量化能量為32位。
anlpInEnergy=floor(anlpInEnery*ENERGY-SCALE)/ENERGY-SCALE;%在ANLP輸入處估計(jì)噪聲幀能量。
%由于回聲估計(jì)值來(lái)自揚(yáng)聲器信號(hào)而使用speakerVad。=estnoise(anlpInEnergy,…(micVad(fram)==0)&(aecStatusGauge==0),anlpInNoiseStateVars);anlpInNoise=anlpInNoiseStateVars(1);anlpInNoiseHist(frame)=anlpInNoisi;%保留調(diào)整%當(dāng)確認(rèn)沒(méi)有話(huà)音時(shí)計(jì)算舒適噪聲。
if confirmedNoVoiceFlag,anlpComfortNoise=uplinkAudio(1COMFORT-NOISE-SIZE);%在一階ARMA噪聲模型形式中使用NLMS算法估計(jì)anlpArCoef% (1-anlpArCoef)*(1-0.8125*z^-1)/(1-anlpArCoef*z^-1)%該ARMA模型將用于濾波白噪聲以獲得聽(tīng)起來(lái)象汽車(chē)噪聲的噪聲。
%NLMS算法努力使下列表達(dá)式最?。? error=uplinkAudio*(1-anlpArCoef*z^-1)/(1+0.8125*z^-1)%誤差與uplinkAudio*z^-1之間的相關(guān)性是對(duì)系數(shù)估計(jì)值的更新。
%anlpInEnergy用于標(biāo)準(zhǔn)化更新增益以提供與電平無(wú)關(guān)的自適應(yīng)速率。計(jì)算環(huán)路外的非零分母以保留MIPS。
anlpDenom=4*max(1/128,floor(anlpInEnergy*128)/128);error=0for I=2FRAME-SIZEerror=-0.8125*error;%量化5S4.31格式(10*uplinkAudio的最大值)error=floor(error*2^31)/2^31;error=error+uplinkAudio(i-1i)*[-anlpArCoef;1];quotient=uplinkAudio(i-1i)*floor(error*2^12)/2^12/anlpDenom;quotien=max(min(quotient,ONE),-1);%量化S.15格式quotient=floor(quotient*32768)/32768;anplArCoef=anlpArCoef+quotient;anlpArCoef=max(min(anlpArCoef,ONE),-1);endanlpArGain=1-anlpArCoef;%標(biāo)繪舒適噪聲響應(yīng)頻率用于調(diào)整。
Plot((08191)/8192*4000,…20*log10(abs(freqz(anlpArGain*[10.8125],[1-anlpArCoef],8129))))axis(
)pause(1)end%在AEC輸入處估計(jì)回聲的噪聲幀能量。
%由于回聲估計(jì)值來(lái)自揚(yáng)聲器信號(hào)使用speakerVad。=estnoise(…aecEchoEstEnergy,(speakerVad(frame)==0)&(aecStatusGauge==0),…aecInEchoNoiseStateVars);aecInEchoNoise=aecInEchoNoiseStateVars(1);aecInEchoNoiseHist(frame)=aecInEchoNoise;%保留調(diào)整testlHist(frame)=aecInEchoNoiseStateVars(2);%保留調(diào)整test2Hist(frame)=aecInEchoNoiseStateVars(3);%保留調(diào)整aecInechoNoiseStateVars %顯示狀態(tài)狀態(tài)%估計(jì)話(huà)音能量估計(jì)值。不使它們低于零。
aecInEchoVoice=max(0,aecEchoEstEnergy-aecInEchoNoise);aecInEchoVoiceHist(frame)=aecInEchoVoice;aecNearVoice=max(0,aecInVoice-aecInEchovoice);anlpInvoice=max(0,anlpInEnergy-anlpInNoise);anlpInVoiceHist(frame)=anlpInVoice;%向上滲漏線(xiàn)性回聲消除器基線(xiàn)回聲增益估計(jì)值。
%將其用于與瞬時(shí)回聲增益比較以檢測(cè)近端語(yǔ)音和近端語(yǔ)音期間的ANLP增益。
%當(dāng)瞬時(shí)回聲增益變差時(shí)上滲漏快得足以跟蹤。該滲漏作為快速跟蹤避免在具有變化回聲路徑遠(yuǎn)端單方談話(huà)期間近端語(yǔ)音檢測(cè)失敗和在遠(yuǎn)端話(huà)音/噪聲期間近端話(huà)音/噪聲失真最小之間的折中。當(dāng)遠(yuǎn)端單方談話(huà)在回聲路徑已經(jīng)改變后開(kāi)始時(shí),aecNearGain可能下降,上升一些,然后下降。如果aecNearGain上升明顯高于aecVoiceGainBase,將檢測(cè)近端語(yǔ)音。如果這些發(fā)生,在aecNearGain上的滲漏可以增加防止此事發(fā)生。經(jīng)驗(yàn)性地找出5/4096的滲漏常數(shù)提供足夠的跟蹤速度??墒牵黾訚B漏減少了在雙方談話(huà)期間近端語(yǔ)音的檢測(cè)。
aecVoicegainBase=min(aecVoicegainBase+1/8192,ONE);%再次計(jì)算線(xiàn)性回聲消除器話(huà)音,排除該信道。
%涉及的信道增益將使近端語(yǔ)音檢測(cè)不可靠。
%計(jì)算線(xiàn)性回聲消除器輸入和輸出的話(huà)音能量比的根。
%原始計(jì)量不以話(huà)音是否來(lái)自近端,遠(yuǎn)端或兩者為條件。
%在ANLP輸入處提取線(xiàn)性回聲消除器輸出,因?yàn)樵撔盘?hào)已經(jīng)通過(guò)了噪聲抑制器,使計(jì)量更精確。靠對(duì)能量的計(jì)量包括回聲中揚(yáng)聲器的回聲失真,不進(jìn)行交叉相關(guān)。比較回聲消除器輸入和輸出的能量也避免當(dāng)比較回聲消除器輸出與基準(zhǔn)時(shí)出現(xiàn)的時(shí)間排隊(duì)問(wèn)題(由于信道延遲)。
%只有當(dāng)不被量化破壞(aecInVoice>8/2^7),當(dāng)出現(xiàn)話(huà)音(aecInVoice>aecInNoise*8),和當(dāng)殘留回聲可計(jì)量(anlpInVoice>anlpInNoise/2)時(shí),計(jì)量增益。
%遠(yuǎn)端信號(hào)中的周期性成分不減少計(jì)量的精確度。
if(aecInVoice>max(8/2^7,aecInNoise*8))&…(anlpInVoice>anlpInNoise/2),aecVoiceGain=min(ONE,sqrt(anlpInVoice/(follr(aecInVoice*2^7)/2^7)));%量化Z.15格式aecVoicegain=floor(aecVoicegain*32768)/32768;%對(duì)總話(huà)音計(jì)量近端話(huà)音比。
%這產(chǎn)生很少的由于改變具有遠(yuǎn)端單方談話(huà)的回聲路徑引起的近端話(huà)音失誤指示,因?yàn)樗蝗Q于回聲估計(jì)值的能量,而不依賴(lài)在輸出處回聲被消除得如何好??墒牵拖骯ecVoiceGain,當(dāng)消除器是總的未訓(xùn)練時(shí)近端話(huà)音失誤指示也是可能的。
%由于話(huà)音計(jì)量是能量單位常用比值包括一個(gè)平方根。可是,通過(guò)直接使用能量比值可以獲得近端話(huà)音與不良消除器訓(xùn)練之間更大的差別。這也節(jié)省MIPS。
aecNearRatio=min(ONE,aecfNearVoice/(floor(aecInvoice*2^7)/2^7));%量化Z.15格式aecNearRatio=floor(aecfNearratio*32768)/32768;%在遠(yuǎn)端語(yǔ)音期間計(jì)量線(xiàn)性回聲消除器基線(xiàn)回聲增益估計(jì)值。無(wú)論何時(shí)存在遠(yuǎn)端單方談話(huà)都計(jì)量(aecStatusGauge>0.1)以保證參數(shù)跟蹤真實(shí)回聲增益(不是噪聲)。反之,可能聽(tīng)到回聲。當(dāng)話(huà)音增益低于基線(xiàn)估計(jì)值更新基線(xiàn)回聲增益估計(jì)值,因?yàn)檫@指示遠(yuǎn)端單方談話(huà)的高可能性。通過(guò)使用當(dāng)它高于基線(xiàn)時(shí)通過(guò)使用滲漏和不使基線(xiàn)跟蹤話(huà)音,基線(xiàn)對(duì)噪聲和近端語(yǔ)音非常牢固。
if(aecStatusGauge>0.1),aecVoiceGainBase=min(aecVoicegainBase,aecvoiceGain);end%在近端語(yǔ)音期間計(jì)量線(xiàn)性回聲消除器話(huà)音增益,和在遠(yuǎn)端單方談話(huà)期間(采用話(huà)音增益的最小值)重新設(shè)置。這將用于對(duì)話(huà)音增益基線(xiàn)的比較以檢測(cè)雙方談話(huà)。近端語(yǔ)音可能出現(xiàn)的唯一可使用指示符是回聲消除器尺度(aecStatusgauge<0.3)和回聲消除器輸出包含足夠能量,該能量可能不只是殘余回聲(anlpInVoice>anlpInNoise*8)。記住遠(yuǎn)端語(yǔ)音中的周期性成分該尺度低。因此,需要額外裝置區(qū)別因回聲路徑改變或揚(yáng)聲器失真話(huà)音增益突然變壞的情況和有近端語(yǔ)音的情況。當(dāng)在遠(yuǎn)端單方談話(huà)期間話(huà)音增益突然變壞時(shí),該持續(xù)時(shí)間往往很短。因此,濾除在該參數(shù)中的增量通常拒絕了遠(yuǎn)端單方談話(huà)事件。濾波器的時(shí)間常數(shù)是遠(yuǎn)端單方談話(huà)拒絕與雙方談話(huà)確認(rèn)速度之間的折中,它被以經(jīng)驗(yàn)確定。
aecNeargainLast=aecNearGain;aecNearGain=min(aecNearGain;,aecVoiceGain);if(aecStatusGauge<0.3)&(anlpInVoice>anlpInNoise*8),aecNearGain=aecNearGain+(aecNearGain-aecNearGain)/8;%量化為Z.15格式aecNearGain=floor(aecNearGain*32768)/32768;end%使用近端語(yǔ)音三個(gè)檢測(cè)方法的任何一個(gè)。每個(gè)方法在某些條件下對(duì)近端語(yǔ)音更敏感。只有當(dāng)總話(huà)音比絕對(duì)電平或拒絕只出現(xiàn)噪聲的條件的噪聲底足夠大時(shí)才出現(xiàn)所有方法。
%方法1%(aecInechoVoice<aecInVoice/4)等效于(aecNearRatio>=0.75),但是前者對(duì)量化不敏感。在aecNearRatio上的尖峰信號(hào)對(duì)于遠(yuǎn)端單方談話(huà)低電平是常有的。因此,預(yù)置必須高以避免錯(cuò)誤檢測(cè)。對(duì)該檢測(cè)方法需要的唯一限制是狀態(tài)尺度=0和話(huà)音增益基線(xiàn)低于0.4625=15155/32768。后者閾值是在當(dāng)消除器基本為訓(xùn)練時(shí)避免錯(cuò)誤檢測(cè)與消除器開(kāi)始訓(xùn)練后盡快檢測(cè)雙方談話(huà)之間的經(jīng)驗(yàn)折中。
%方法2%(aecInVoice>32/2^7&anlpInVoice)拒絕低電平話(huà)音。這樣做,檢測(cè)對(duì)近端話(huà)音與總話(huà)音的低比率更敏感。再次,僅當(dāng)狀態(tài)尺度=0有助于拒絕遠(yuǎn)端單方談話(huà)時(shí)接受該條件。通過(guò)隨aecVoiceGainBase改變閾值優(yōu)化近端語(yǔ)音的敏感度。比例因子和偏移是當(dāng)消除器基本未訓(xùn)練時(shí)避免錯(cuò)誤檢測(cè)與消除器開(kāi)始訓(xùn)練后對(duì)近端語(yǔ)音盡可能敏感之間的經(jīng)驗(yàn)折中。
%方法3%當(dāng)回聲抑制突然和連續(xù)變壞時(shí)將aecNearGain與aecVoiceGainBase檢測(cè)近端語(yǔ)音比較。這是因?yàn)閍ecVoiceGainBase不反映突然的變化,而aecNearGain使用濾波器保證檢測(cè)中的連續(xù)性。因?yàn)闉V波器被用于計(jì)算aecNearGain,條件更放松,其允許對(duì)近端語(yǔ)音更大敏感度。這種條件包括使?fàn)顟B(tài)尺度<0.3而非=0,和沒(méi)有對(duì)話(huà)音增加的最小絕對(duì)值電平。當(dāng)回聲路徑已經(jīng)改變而遠(yuǎn)端單方談話(huà)開(kāi)始時(shí),aecNearGain可能下降但仍然在短時(shí)間保持高于aecVoiceGainBase。為避免這種情況下的音頻回聲,只有當(dāng)aecNearGain大于其最后值時(shí)檢測(cè)近端語(yǔ)音。if ((aecstatusGauge==0)&(aecInEchoVoice<aecInVoice/4)&…(aecVoiceGainBase<15155/32768))︱…((aecStatusGauge==0)&(aecInVoice>32/2^7)&…(anlpInVoice>anlpInNoise*8)&…(aecNearRatio-aecVoiceGainBase*l.5>=9830/32768))︱…((aecNearGain-aecVoiceGainBase>=6554/32768)& …(aecNearGain>aecNearGainLast)),%近端語(yǔ)音已經(jīng)檢測(cè)。
%如果該幀開(kāi)始了近端語(yǔ)音的新周期(暫停時(shí)間已經(jīng)過(guò)去而包含話(huà)音的最新幀只是回聲),則設(shè)置線(xiàn)性回聲消除器回聲增益等于基線(xiàn)回聲增益估計(jì)值。這只在近端語(yǔ)音周期開(kāi)頭處進(jìn)行,以便在近端語(yǔ)音期間殘余回聲抑制器具有連續(xù)衰減而非因?yàn)榛€(xiàn)向上滲漏而增加失真,同時(shí)不進(jìn)行更新。
if (anlpNearSpeechCount==0)&(anlpNearSpeechflag==0),
aecEchoGain=aecVoiceGainBase;end%設(shè)置表示具有話(huà)音的最新幀包含在近端語(yǔ)音中的標(biāo)志。在不檢測(cè)話(huà)音幀期間將保留設(shè)置。
anlpNearSpeechflag=1;%重新開(kāi)始近端語(yǔ)音暫停時(shí)間計(jì)數(shù)器。當(dāng)非零時(shí),在雙方談話(huà)期間或當(dāng)話(huà)音能量低得不能檢測(cè)時(shí),將越過(guò)anlpNearSpeechflag由近端語(yǔ)音殘余回聲抑制器使失真最小。
%如果僅當(dāng)遠(yuǎn)端單方談話(huà)被檢測(cè)時(shí)該計(jì)數(shù)器開(kāi)始,在雙方談話(huà)期間將有更少的近端語(yǔ)音中斷??墒?,近端人員說(shuō)話(huà)后遠(yuǎn)端人員每次開(kāi)始說(shuō)話(huà)將聽(tīng)到回聲,即使在長(zhǎng)中止后。
%當(dāng)有從近端語(yǔ)音到遠(yuǎn)端單方談話(huà)的快速轉(zhuǎn)變時(shí)(例如當(dāng)近端人員在遠(yuǎn)端人員語(yǔ)音中間談話(huà)時(shí)),暫停時(shí)間將產(chǎn)生遠(yuǎn)端人員聽(tīng)到回聲(在-25dB)的短時(shí)間段。這種人工產(chǎn)物是值得的,因?yàn)闀和r(shí)間獲得的雙方談話(huà)期間的中斷明顯減少。
anlpNearSpeechCount=25; %25*20ms=500ms暫停時(shí)間endend%如果回聲估計(jì)話(huà)音能量至少是近端話(huà)音能量的15/16,假設(shè)該幀只包含遠(yuǎn)端回聲語(yǔ)音,并清除近端語(yǔ)音標(biāo)志。如果近端語(yǔ)音暫停時(shí)間計(jì)數(shù)器已經(jīng)超時(shí),殘余回聲抑制器馬上到遠(yuǎn)端單方談話(huà)模式。反之,當(dāng)近端語(yǔ)音暫停時(shí)間計(jì)數(shù)器超時(shí)時(shí),殘余回聲抑制器馬上到遠(yuǎn)端單方談話(huà)模式。注意當(dāng)該計(jì)數(shù)器正工作時(shí)可以再次檢測(cè)近端語(yǔ)音,然后一旦計(jì)數(shù)器超時(shí)殘余回聲抑制器保持近端語(yǔ)音模式。
%該檢測(cè)方案比較32位數(shù)字,而不使用基于能量電平、狀態(tài)尺度或根據(jù)前面幀的計(jì)量的任何限制(除了噪聲估計(jì))。因此,該方案相當(dāng)敏感而牢固。如果該方案檢測(cè)遠(yuǎn)端語(yǔ)音失敗,當(dāng)近端人員說(shuō)話(huà)后遠(yuǎn)端人員開(kāi)始說(shuō)話(huà)時(shí),將聽(tīng)到回聲,即使長(zhǎng)中斷后。
if (aecInEchoVoice>(aecInVoice-aecInVoice/16)),anlpNearSpeechFlag=0;end
%如果近端語(yǔ)音暫停時(shí)間計(jì)數(shù)器已經(jīng)超時(shí),和包含話(huà)音的最新幀只是回聲,則設(shè)置線(xiàn)性回聲消除器的回聲增益再次等于最新計(jì)量出的線(xiàn)性回聲消除器話(huà)音增益。假設(shè)沒(méi)有出現(xiàn)近端語(yǔ)音,所以殘余回聲抑制器試圖抑制所有話(huà)音。這種實(shí)驗(yàn)在清除anlpNearSpeechFlag之后,以便aecEchoGain馬上反映該判決。if (anlpNearSpeechCount==0)&(anlpNearSpeechFlag==0),aecEchoGain=aecVoiceGain;endaecVoiceGainHist(frame)=aecVoiceGain;%保留調(diào)整aecVoiceGainBase %回聲狀態(tài)aecVoiceGainBaseHist(frame)=aecVoiceGainBase;%保留調(diào)整aecEchoGain %回聲狀態(tài)aecEchoGainHist(frame)=aecEchoGain; %保留調(diào)整aecNearRatioHist(frame)=aecNearRatio;%保留調(diào)整aecNearGainHist(frame)=aecNearGain; %保留調(diào)整anlpNearSpeechCount %回聲狀態(tài)anlpNearspeechFlag%回聲狀態(tài)%計(jì)算環(huán)路回聲增益直到ANLP。當(dāng)需要滿(mǎn)足對(duì)該系統(tǒng)的總環(huán)路回聲抑制目標(biāo)時(shí)ANLP將衰減。
% 貫穿音量控制。
%aecChangain是從揚(yáng)聲器到話(huà)筒-信道。
%aecEchoGain是從線(xiàn)性回聲消除器的輸入到輸出。
aecLoopEchoGain=aecChangain*aecEchoGain;%在此插入音量增益。
%量化為Z.15格式aecloopEchoGain=floor(aecLoopEchoGain*32768132768%設(shè)置ANLP窗口以捕獲所希望的殘余回聲,但是不再有了。這使近端話(huà)音和噪聲最小。由于AEC改善了其回聲增益ANLP窗口尺寸縮小。音量控制增益不再使用,因?yàn)锳NLP的檢測(cè)器包絡(luò)輸入在音量控制之后到達(dá)?;芈曉鲆婀烙?jì)RMS方面的計(jì)量,但ANLP需要抑制包括峰值的全部殘余回聲。因此,使用峰值/RMS因子乘數(shù)(=3)。anlpWindowGain的動(dòng)態(tài)范圍是二,因?yàn)楫?dāng)線(xiàn)性回聲消除器基本未訓(xùn)練時(shí)anlpWindowGain需要至少是二以捕獲在該窗口內(nèi)的回聲。
anlpWindowGain=min(2*ONE,3*aecChangain*aecEchoGain);%量化為Z1.14格式anlpWindowGain=floor(anlpWindowGain*16384)/16384;%如果VAD指示在揚(yáng)聲器上只有噪聲,則以通過(guò)模式輸入ANLP(增益=1)。該VAD允許高質(zhì)量的近端單方談話(huà),因?yàn)闆](méi)有近端語(yǔ)音失真或噪聲。當(dāng)只有噪聲時(shí)VAD經(jīng)常告知有話(huà)音,所以需要其它裝置使在此情況下的近端語(yǔ)音失真和噪聲最小。當(dāng)由低話(huà)音電平時(shí)VAD也經(jīng)常告知只有噪聲。此問(wèn)題與揚(yáng)聲器上的噪聲電平成某種比例??墒牵诃h(huán)路中具有線(xiàn)性回聲消除器提供了足夠的回聲抑制,使這些情況下的回聲不發(fā)聲。
if speakerVad(frame)==0,%近端單方談話(huà)條件anlpEchoGain=ONE;%由于speakerVad=1,揚(yáng)聲器最可能具有語(yǔ)音,但不一定。如果近端語(yǔ)音被檢測(cè),假設(shè)雙方談話(huà)。在此情況下,設(shè)置總環(huán)路回聲抑制目標(biāo)為-25dB(1843/32768),和設(shè)置ANLP增益為在環(huán)路其余部分中不提供的所需要的回聲抑制。ANLP增益越高(抑制越低)和當(dāng)用戶(hù)將音量從最大刻度下調(diào)時(shí)失真被減少。當(dāng)訓(xùn)練線(xiàn)性回聲消除器時(shí),ANLP增益在此模式中一般高于-10dB,所以噪聲掩蓋沒(méi)有改善聲音質(zhì)量。遠(yuǎn)端用戶(hù)在雙方談話(huà)期間將聽(tīng)到一些回聲,但是這種人造產(chǎn)物比中斷或近端話(huà)音的高失真更可取。
elseif(anlpNearSpeechCount>0)︱(anlpNearSpeechFlag==1),%雙方談話(huà)anlpEchoGain=1843/32768/aecLoopEchoGain;%由于seakerVad=1和近端語(yǔ)音沒(méi)有檢測(cè),假設(shè)有遠(yuǎn)端單方談話(huà)??偔h(huán)路回聲抑制目標(biāo)是-56dB(52/32768)以便當(dāng)兩端具有安靜背景時(shí)回聲幾乎不發(fā)聲。如同在雙方談話(huà)模式,ANLP增益被設(shè)置為所需要的環(huán)路其余部分不提供的回聲抑制,和當(dāng)用戶(hù)將音量從最大刻度下調(diào)時(shí)和當(dāng)線(xiàn)性回聲消除器訓(xùn)練時(shí)ANLP增益更高和減少失真??墒?,衰減到回聲不發(fā)聲而低于噪聲底所需要的增益可能更高,所以?xún)蓚€(gè)增益的較高者用于ANLP使失真最小。沒(méi)有舒適噪聲,用相同因子衰減回聲和噪聲兩者將不改變信噪比;所以噪聲掩蓋不起作用。舒適噪聲使ANLP輸入和輸出上的噪聲為相同電平。因此,ANLP可以回聲衰減到低于噪聲底的可發(fā)聲閾值,而沒(méi)有不必要的失真。因?yàn)檫@些變量是能量單位的,采用噪聲/話(huà)音比的平方根。將所需要的回聲/噪聲定量乘以實(shí)際噪聲/回聲比值使噪聲析出。剩下的是所需要的實(shí)際回聲比值,它是掩蓋回聲所需要的增益。
else %遠(yuǎn)端單方談話(huà)條件ECHO-TO-NOISE-GOAL=1/8; %-18dBif(anlpInVioce>anlpInNoise),anlpEchoGin=max(52/32768/aecLoopEchoGain,…ECHO-TO-NOISE-GOAL*sqrt(anlpInNoise/anlpInVioce));else%在嘈雜條件下,該增益不超過(guò)ECHO-TO-NOISE-GOAL,盡管理論上它可以用于低能量話(huà)音,因?yàn)楫?dāng)噪聲電平快速下降時(shí)噪聲估計(jì)太大(汽車(chē)減速)。這使當(dāng)ANLP回聲增益太高時(shí)將聽(tīng)到回聲。
anlpEchoGain=max(52/32768/aecLoopEchoGain,ECHO-TO-NOISE-GOAL);endendanlpEchoGain=min(ONE,anlpEchogain);%量化為Z.15格式anlpEchoGain=floor(anlpEchoGain*32768)32768anlpGainHist(frame)=anlpEchoGain;%保留調(diào)整%遞減近端語(yǔ)音暫停計(jì)數(shù)器,如果需要,以便獨(dú)立與揚(yáng)聲器VAD工作。
anlpNearSpeechCount=max(0,anlpNearSpeechCount-1);%%ANLP樣本部分%%如果ANLP回聲增益是1,ANLP不激活-跳過(guò)以保留MIPS。
if (anlpEchoGain==ONE),
%保持包絡(luò)檢測(cè)器運(yùn)行。
for k=1FRAME-SIZE,anlpRef=aecRef(FRAME-SIZE+1);anlpRefEnvelope=max(abs(anlpRef),255/256*anlpRefEnvelope);anlpRefEnvelope=floor(anlpRefEnvelope*2^31)/2^31;end%將用于AC中心衰減器的變量更新成為與處理整個(gè)幀產(chǎn)生的變量相同。
anlpOutLast=uplinkAudio(FRAME-SIZE);elsefor k=1FRAME-SIZE,%ANLP遠(yuǎn)端基準(zhǔn)=AEC基準(zhǔn)。使用aecEchoEst替代或額外使用不給出更好的結(jié)果,因?yàn)閍ecEchoEst與殘余回聲很不相關(guān)。由于優(yōu)先于在anlIn中最早的回聲,AEC基準(zhǔn)同樣有效。在峰值檢測(cè)器中的長(zhǎng)時(shí)間常數(shù)是ANLP的關(guān)鍵,而它使anlpRef與殘余回聲的接近延遲匹配不必要。進(jìn)入AEC基準(zhǔn)延遲線(xiàn)的偏移可以改變以補(bǔ)償由于上行采樣、下行采樣、緩存器,和/或最小信道延遲引起的回聲路徑中固定延遲。
anlpRef=aecRef(FRAME-SIZE-k+1);%包絡(luò)檢測(cè)(峰值檢測(cè))anlpRef信號(hào)。
%峰值檢測(cè)器中的指數(shù)延遲模擬了汽車(chē)中的反射延遲。設(shè)置時(shí)間常數(shù)以處理預(yù)計(jì)的最慢延遲反射條件。
%少于255/256的極點(diǎn)導(dǎo)致回聲通過(guò)。
%大于255/256的極點(diǎn)導(dǎo)致近端的過(guò)度失真。
anlpRefEnvelop=max(abs(anlpRef),255/256*anlpRefEnvelop)%anlpRefEnvelop對(duì)于存儲(chǔ)是32位。
%16位左右的anlpRefEnvelop將不衰減到低于512/2^15。當(dāng)?shù)陀?56/2^15時(shí)截短到16位的anlpRefEnvelop每個(gè)樣本衰減1位,而這太快了(導(dǎo)致回聲通過(guò))。
%量化為Z.31格式
anlpRefEnvelope=floor(anlpRefEnvelop*2^31)/2^31;%ANLP的增量值是由AEC控制的增益并限制為1。
anlpDelta=min(ONE,…anlpWindowGain*floor(anlpRefEnvelope*32768)/32768);%量化為Z.15格式anlpDelta=floor(anlpDelta*32768)/32768;anlpDeltaHist((frame-1)*FRAME SIZE+k)=anlpDelta%保留調(diào)整%%執(zhí)行AC中心衰減器%%ANLP輸入通過(guò)噪聲抑制器連接到AEC輸出。
anlpIn=uplinkAudio(k);%如果該輸入低于窗口if(anlpOutLast-anlpIn)>=anlpDelta,%使用所有窗口外信號(hào)并衰減窗口內(nèi)信號(hào)。
anlpOutLast=anlpIn+anlpDelta-…anlpEchoGain*anlpDelta;%此外如果輸入高于該窗口,else if (anlpIn-anlpOutLast)>=anlpDelta,%使用所有窗口外信號(hào)并衰減窗口內(nèi)信號(hào)。
anlpOutLast=anlpIn+anlpDelta-…anlpEchoGain*anlpDelta;%此外如果輸入在該窗口內(nèi),else%衰減該信號(hào)。
anlpOutLast=anlpEchoGain*(anlpIn-anlpOutLast) +anlpOutLast;end%量化S.15格式anlpOutLast=floor(anlpOutLast*32768)/32768;%保留到下次。
%%加入舒適噪聲以至ANLP輸出噪聲具有與輸入到ANLP的汽車(chē)噪聲輸入相同的電平和相似頻譜。
%%使用來(lái)自汽車(chē)的捕獲噪聲幀的隨機(jī)樣本。
%即使從汽車(chē)捕獲的音頻偶然包含話(huà)音,這產(chǎn)生與汽車(chē)噪聲相同功率的白噪聲。
anlpSeed=rem(48271*anlpSeed,2147483647);anlpComfortNoiseIn=anlpcomfortNoise(1+…rem(anlpSeed,COMFORT-NOISE-SIZE));%使用上面討論的ARMA模型濾除白噪聲。
%假設(shè)anlpArGain=1-anlpArCoef,下列是等效式,%anlpComfortNoiseOut=anlpArCoef*anlpComfortNoiseOutOld+…%anlpArGain*(anlpComfortNoiseIn+0.8125*anlpComfortNoiseInOld);ma=anlpComfortNoiseIn+0.8125*anlpComfortNoiseInOld;%移動(dòng)平均maDiff=anlpComfortNoiseInOld-ma;%量化為S1.15格式%舍入是必須的以避免在舒適噪聲上的偏移。
%當(dāng)舍入具有剛好0.5分?jǐn)?shù)的負(fù)數(shù)時(shí),加入2^(-17)強(qiáng)制一補(bǔ)數(shù)浮點(diǎn)起二補(bǔ)數(shù)相同的作用。
maDiff=round(maDiff*32768+2^(-17))/32768;anlpComfortNoiseOut=ma+anlpArCoef*maDiff;%量化為S1.15格式%舍入是必須的以避免在舒適噪聲上的偏移。
anlpComfortNoiseOut=round(anlpComfortNoiseOut*32768 +2^(-17))/32768;anlpComfortNoiseOut=max(-1,min(ONE,anlpComfortNoiseOut));%為下個(gè)環(huán)路延遲變量anlpComfortNoiseInOld=anlpComfortNoiseIn;
anlpComfortNoiseOutOld=anlpComfortNoiseOut;%限制舒適噪聲到窗口尺寸。
anlpComfortNoiseOut=min(anlpdelta,…max(-anlpdelta,anlpComfortNoiseOut));%將舒適噪聲乘以比例以便ANLP輸出噪聲等于ANLP輸入噪聲電平。
anlpComfortNoiseOut=anlpComfortNoiseOut*(ONE-anlpEchoGain);%量化為S.15格式anlpComfortNoiseOut=floor(anlpComfortNoiseOut*32768)/32768;%將舒適噪聲加入到ANLP輸出信號(hào)中。
uplinkAudio(k)=max(-1,min(ONE,anlpOutLast+anlpComfortNoiseOut));endend%將在整數(shù)幀中的幀上采集的輸出保留在文件中。fwrite(fidOut,[uplinkAudio;aecOut]*32768,‘int16’);%顯示([‘a(chǎn)ecInEnergy=’dec2hex(aecInEnergy*ENERGY SCALE)])%顯示([‘a(chǎn)ecErrorShift=’dec2hex(aecErrorShift+(aecErrorShift<0)*65536)])%顯示([‘a(chǎn)ecUpdate(1)=’dec2hex(aecUpdate(1)*32768+(aecUpdate(1)<0)*65536)])%顯示([‘a(chǎn)ecUpdate(2)=’dec2hex(aecUpdate(2)*32768+(aecUpdate(2)<0)*65536)])%顯示([‘a(chǎn)ecUpdateNear(1)=’…% dec2hex(aecUpdateNear(1)*32768+(aecUpdateNear(1)<0)*65536)])%顯示([‘a(chǎn)ecUpdateNear(2)=’…% dec2hex(aecUpdateNear(2)*32768+(aecUpdateNear(2)<0)*65536)])%顯示([‘a(chǎn)ecUpdatepeak2=’dec2hex(aecUpdatePeak2*2^31)])%顯示([‘a(chǎn)ecOutEnergy=’dec2hex(aecOutEnergy*ENERGY SCALE)])%顯示([‘ aecRefEnergy=’dec2hex(aecRefEnergy*128)])%顯示([‘a(chǎn)nlpInEnergy=’dec2hex(anlpInEnergy*ENERGY SCALE)])%顯示([‘a(chǎn)ecUpdateBase=’dec2hex(aecUpdateBase*32768)])%顯示([‘a(chǎn)ecUpdatePeak=’dec2hex(aecUpdatePeak*32768)])%顯示([‘a(chǎn)ecPeakToBase=’dec2hex(aecPeakToBase*16)])%顯示([‘a(chǎn)ecStatusGauge=’dec2hex(aecStatusGauge*32768)])%顯示([‘a(chǎn)ecInNoise=’dec2hex(aecInNoise*2^31)])%顯示([‘a(chǎn)nlpInNoise=’dec2hex(anlpInNoise*2^31)])%顯示([‘a(chǎn)nlpComfortNoise(1)=’…% dec2hex(anlpComfortNoise(1)*32768+(anlpComfortNoise(1)<0)*65536)])%顯示([‘a(chǎn)nlpComfortNoise(2)=’…% dec2hex(anlpComfortNoise(2)*32768+(anlpComfortNoise(2)<0)*65536)])%顯示([‘a(chǎn)nlpArCoef=’dec2hex(anlpArCoef*2^31)])%顯示([‘ anlpArGain=’dec2hex(anlpArGain*32768)])%顯示([‘a(chǎn)ecChanGainTrial=’dec2hex(aecChanGainTrial* )])%顯示([‘a(chǎn)ecChanGain=’dec2hex(aecChanGain*32768)])%顯示([‘ aecVoiceGainBase=’dec2hex(aecVoiceGainBase*32768)])%顯示([‘a(chǎn)ecVoiceGain=’dec2hex(aecVoiceGain*32768)])%顯示([‘a(chǎn)ecEchoGain=’dec2hex(aecEchoGain*32768)])%顯示([‘a(chǎn)ecDenom=’dec2hex(aecDenom*8)])%顯示([‘a(chǎn)ecNumer=’dec2hex(aecNumer*2^18)])%顯示(‘a(chǎn)ecUpdateGain=’dec2hex(aecUpdateGain*32768)])%顯示([‘a(chǎn)ecCoef(1)=’dec2hex(aecCoef(1)*32768+(aecCoef(1)<0)*65536)])%顯示([‘a(chǎn)ecCoef(2)=’dec2hex(aecCoef(2)*32768+(aecCoef(2)<0)*65536)])%顯示([‘a(chǎn)nlpWindowGain=’dec2hex(anlpWindowGain*16384)])%顯示([‘a(chǎn)nlpEchoGain=’dec2hex(anlpEchoGain*32768)])%顯示([‘a(chǎn)nlpEchoGain=’]);20*log10(anlpEchoGain)%顯示([‘a(chǎn)nlpComfortNoiseInold=’dec2hex(anlpComfortNoiseInold*32768)])%顯示([‘a(chǎn)nlpComfortNoiseOutold=’dec2hex(anlpComfortNoiseOutold*32768)])%顯示([‘uplinkAudio(1)=’…% dec2hex(uplinkAudio(1)*32768+(uplinkAudio(1)<0)*65536)])%顯示([‘uplinkAudio(2)=’…% dec2hex(uplinkAudio(2)*32768+(uplinkAudio(2)<0)*65536)])%暫停%標(biāo)繪([abs(aecUpdate)/aecUpdateBase;…% zeros(AEC REF TAPS-AEC REF TAPS-AEC NEAR TAPS,1);…% abs(aecUpdateNear)/aecUpdateBase])%軸線(xiàn)(
)% 標(biāo)簽 (‘Update element’),ylabel(‘Normalized update magnitude’),pause% 標(biāo)繪(20*log10(abs(aecCoef.*profile))),axis(
);%標(biāo)簽 (‘Coefficient number’),ylabel(‘Magnitude in dB’),pauseendfclose (fidOut);清除 AEC MAX GAIN THRESH AEC BASELINE THRESH AEC STATUS GAUGE SCALER ONE清除 confirmedNoVoiceFlag清除 LRmatrix downlinkAudio uplinkAudio aecRef aecUpdate aecUpdateNearaecout清除 frame m k i anlpSeed aecEchoEst aecShiftPending aecErrorShift ASM T清除 aecRefEnergy aecInEnergy aecOutEnergy anlpInEnergy aecEchoEstEnergy清除 anlpIn anlpRef anlpRefEnvelope anlpDelta anlpoutLast清除 aecUpdatePeak2 aecUpdatePeak aecUpdateBase aecPeakToBase清除 aecStatusGauge aecDenom aecNumer aecUpdateGain aecLoopEchoGain清除 aecInNoiseStateVars aecInEchoNoiseStateVars anlpInNoiseStateVars清除 aecInVoice anlpInVoice aecInEchoVoice aecNearVoice清除 aecNearRatio aecNearGainLast anIpEchoGain清除 aecChanGainTrial anlpComfortNoiseIn anlpComfortNoiseout清除 aecPeakGain anlpWindowGain anlpDenom anlpArGain error quotient ma清除 fidIn fidout anlpNearSpeechCount anlpNearSpeechFlagECHO TO NOISE GOAL
%根據(jù)一個(gè)信號(hào)的幀能量估計(jì)噪聲幀能量。
%基于標(biāo)準(zhǔn)的噪聲估計(jì)用32比特的變量提供更寬的動(dòng)態(tài)范圍,因此即使在非常低的噪聲電平時(shí)(例如test_65.raw的遠(yuǎn)端)該運(yùn)算也保持不變。然而,基于標(biāo)準(zhǔn)的算法要求平方根和32比特平方運(yùn)算(更高的MIPS)。該基于能量的算法已經(jīng)為低噪聲電平的量化進(jìn)行優(yōu)化,并且它進(jìn)行一個(gè)可以接受的工作-尤其考慮噪聲電平估計(jì)對(duì)于非常低的噪聲電平(話(huà)音始終遠(yuǎn)大于噪聲)并不苛刻。還說(shuō)明可以為基于標(biāo)準(zhǔn)和基于能量的算法使自適應(yīng)速度相同。在此所有的調(diào)整操作使用移位-僅為基于標(biāo)準(zhǔn)的算法移位一個(gè)以上的比特。
%目標(biāo)是在信號(hào)中沒(méi)有語(yǔ)音時(shí)快速更新估計(jì),否則慢速更新估計(jì)。需要恒定自適應(yīng)以在汽車(chē)噪聲快速變化時(shí)予以跟蹤。話(huà)音活動(dòng)性檢測(cè)器(VAD)輸出對(duì)于確定何時(shí)快速更新是一個(gè)好的開(kāi)始,但當(dāng)確實(shí)存在遠(yuǎn)高于噪聲的話(huà)音低電平時(shí)它有時(shí)指示沒(méi)有話(huà)音。NoVoiceFlag是由線(xiàn)性回聲消除器的狀態(tài)標(biāo)準(zhǔn)限定后的VAD輸出以提高可靠性。然而,狀態(tài)標(biāo)準(zhǔn)并不區(qū)分噪聲和近端話(huà)音、雙方講話(huà)或音調(diào)。因此,該算法必須容許快速更新周期內(nèi)的一些話(huà)音。狀態(tài)標(biāo)準(zhǔn)順利工作的時(shí)間是在遠(yuǎn)端單方講話(huà)時(shí),在此對(duì)于正確估計(jì)噪聲以避免可以聽(tīng)到的回聲是最重要的。在此使用以降低錯(cuò)誤偏差(主要出現(xiàn)在近端話(huà)音過(guò)程中)的技巧是根據(jù)比較結(jié)果而不是線(xiàn)性濾波能量信號(hào)以固定速率提高和降低估計(jì)。使用提高時(shí)間常量為1/4的降低時(shí)間常量使估計(jì)偏向于噪聲底,而不考慮某些噪聲。通過(guò)固定增量而非固定時(shí)間常量提高和降低將導(dǎo)致與噪聲電平成正比的時(shí)間常量。
%很難講出上升噪聲底和話(huà)音之間的差別。在此提高時(shí)間常量確定跟蹤速率。然而,提高必須很慢以在話(huà)音過(guò)程中最小化錯(cuò)誤增長(zhǎng)。執(zhí)行狀態(tài)機(jī)以在某些條件下允許噪聲估計(jì)更快的增加。如果狀態(tài)機(jī)觀察到在無(wú)話(huà)音的過(guò)程中在至少900毫秒的時(shí)間內(nèi)信號(hào)能量大于噪聲估計(jì)的八倍,假定噪聲底已經(jīng)增加,并設(shè)置噪聲電平使其等于測(cè)試周期的測(cè)試噪聲估計(jì)。當(dāng)輸入噪聲由來(lái)自遠(yuǎn)端的噪聲控制時(shí),由于AMPS帶內(nèi)控制信道或者由于不良的射頻條件的消隱將致使噪聲底臨時(shí)下降。狀態(tài)機(jī)在消隱之后試圖恢復(fù)噪聲估計(jì)。首先確認(rèn)能量下降在5和25個(gè)幀長(zhǎng)度之間。然后確認(rèn)能量返回到原始水平。如果能量保持在圍繞原始噪聲電平的窗口內(nèi),需要較短的確認(rèn)周期。如果能量跳變得遠(yuǎn)高于原始水平,則可能出現(xiàn)噪聲,并需要一個(gè)較長(zhǎng)的確認(rèn)周期以確保噪聲底未下降。
%NoiseStateVars矩陣的定義(1)=噪聲估計(jì)(2)=消隱之前的噪聲估計(jì)或測(cè)試噪聲估計(jì)(3)=狀態(tài)變量/計(jì)數(shù)器function[confirmedNoVoiceFlag,noiseStateVars]=…estnoise(inEnergy,noVoiceFlag,noiseStateVars)%以與父程序相同的方式定義所需常量。
%更新綜合周期內(nèi)的抽樣數(shù)。
FRAME SIZE=160;%向右移位在一個(gè)抽樣幀上的累加值的比特?cái)?shù)。
FRAME_BITS=ceil(log2(FRAME_SIZE));%將能量量化成32比特的比例因子(Z8.23格式w/FRAME SIZE=160)ENERGY SCALE=2^(31-FRAME BITS);%如果父程序已經(jīng)初始化噪聲估計(jì),if noiseStateVars(1)==FRAME SIZE,%采取行動(dòng)以加速呼叫開(kāi)始的自適應(yīng);%設(shè)置標(biāo)記以便舒適噪聲將用該電平初始化;confirmedNoVoiceFlag=1;%開(kāi)始于等于該能量的噪聲估計(jì)。
NoisestateVars(1)=inEnergy;Else%更新噪聲估計(jì)。
%通過(guò)缺省,清除標(biāo)志以便指示沒(méi)有舒適噪聲訓(xùn)練。
ConfirmedNoVoiceFlag=0;%在白噪聲上按Matlab執(zhí)行下述偏向測(cè)試% >>n=160*3000;noise=zeros (1,m);% >>seed=1;for i=1n,[noise(i)seed]=noisegen(seed);end% >>m=3000;for i=1 m,noiseEnergy(i)=sum(noise(160*(i-1)+1160*i).^2);end% >>ne=100;for i=1m,if ne>noiseEnergy(i),% >>ne=ne-ne/16;else,ne=ne+ne/64;end,neh(i)=ne;end% >>plot(neh) %neh是噪聲估計(jì)歷史記錄% >>axis(
) %注意neh在10幀之后調(diào)整。% >>1/(sum(neh(11m))/(m-10)/(sum(noiseEnerty)/m)-1)% ans=-14.2082%這表示噪聲估計(jì)具有大約-1/14的偏置因子。
%為了簡(jiǎn)化運(yùn)算,為了比較從噪聲估計(jì)中減去1/16的因子以恢復(fù)偏置。
%在匯編時(shí),為了比特的正確性在減法之前向右移位。
noiseBiased=noiseStateVars(1)-noiseStateVars(1)/16;%量化成32比特noiseBiased=cell(noiseBiased*ENERGY_SCALE)/ENERGY_SCALE;%如果VAD和狀態(tài)標(biāo)準(zhǔn)指示沒(méi)有話(huà)音,if noVoiceFlag,%快速調(diào)整噪聲估計(jì)。
%如果噪聲估計(jì)太高,if noiseBiased>inEnergy,%降低噪聲估計(jì)。
%為加速跟蹤下降的噪聲底,如果噪聲估計(jì)高至8倍,設(shè)法立即設(shè)置噪聲估計(jì)使其等于信號(hào)能量,然而,這使得在激活時(shí)偏置很負(fù),則產(chǎn)生錯(cuò)誤檢測(cè)問(wèn)題。該時(shí)間常量太短以致于使噪聲估計(jì)反而工作得很好。
%為了最小化偏差,在噪聲估計(jì)等于信號(hào)能量時(shí)不要降低。
%除了零點(diǎn)之外,量化致使最小的改變1/ENERGY_SCALE。
%在匯編中,為了比特的正確性在右移之前取反。
noiseStateVars(1)=noiseStateVars(1)-noiseStateVars(1)/16;%為舒適噪聲訓(xùn)練設(shè)置標(biāo)記。輸入能量低于噪聲估計(jì)的要求提高了在話(huà)音期間不改變舒適噪聲的可能性。
ConfirmedNoVoiceFlag=1;Else%提高噪聲估計(jì)。
%使用最小增量以避免停滯在零點(diǎn)附近。
%改為不使用相加min(noiseStateVars(1)/64,1/ENERGY_SCALE),因?yàn)樗鼘?dǎo)致較慢的自適應(yīng)以致瞬間增加的噪聲。
NoiseStateVars(1)=noiseStateVars(1)+noiseStateVars(1)/64+……1/ENERGY_SCALE;EndElse%緩慢提高噪聲估計(jì)。
%因?yàn)檎_跟蹤遞減噪聲電平的重要性,在話(huà)音期間不停止自適應(yīng)。噪聲的估計(jì)過(guò)高導(dǎo)致話(huà)音能量的估計(jì)過(guò)低。由于較低的遠(yuǎn)端話(huà)音能量,這對(duì)NLP輸入的影響比對(duì)線(xiàn)性回聲消除器的影響更明顯。因而,結(jié)果是不充分的回聲抑制。所以最好過(guò)低估計(jì)噪聲,而不要過(guò)高估計(jì)噪聲。
%如果噪聲估計(jì)過(guò)高,if noiseBiased>inEnergy,%降低噪聲估計(jì)。
%除了在零點(diǎn)之外,量化致使最小的改變1/ENERGY_SCALE。
%在匯編中,為了比特的正確性在右移之前求反。
NoiseStateVats(1)=noiseStateVars(1)-noiseStateVars(1)/64;Else%提高噪聲估計(jì)。
%乍看起來(lái)好象正確跟蹤遞減的噪聲電平僅需要在話(huà)音期間降低。然而,這將致使偏置變得過(guò)于負(fù)。根據(jù)經(jīng)驗(yàn)將提高確定成最快的可能,而不允許話(huà)音期間過(guò)多的錯(cuò)誤變化。因?yàn)樵跁和Vg話(huà)音可以持續(xù)若干秒,結(jié)果變得非常慢。
%不使用最小增量,否則對(duì)于話(huà)音期間的低噪聲電平的提高將過(guò)大。
NoiseStateVars(1)=noiseStateVars(1)+noiseStateVars(1)/1024;EndEnd%量化成32比特。
NoiseStateVars(1)=floor(noiseStateVars(1)*ENERGY_SCALE)/ENERGY_SCALE;%用于AMPS消隱和噪聲跳變跟蹤的狀態(tài)機(jī)。
%不要在初始化時(shí)執(zhí)行。
%如果狀態(tài)機(jī)處于空閑狀態(tài),if noiseStateVars(3)==0,%如果信號(hào)能量已經(jīng)明顯低于噪聲估計(jì),并且如果inEnergy的量化并不給出錯(cuò)誤結(jié)果,if noiseStateVars(1)>max(8*inEnergy,8/ENERGY_SCALE),%為狀態(tài)機(jī)存儲(chǔ)噪聲估計(jì)。
NoiseStateVars(2)=noiseStateVars(1);%開(kāi)始狀態(tài)機(jī)以查找消隱。
NoiseStateVars(3)=1;%如果VAD和狀態(tài)標(biāo)準(zhǔn)指示沒(méi)有話(huà)音,信號(hào)能量明顯高于噪聲估計(jì),并且如果噪聲估計(jì)的量化并不給出錯(cuò)誤結(jié)果,elseif noVoiceFlag &…(inEnergy>max(8*noiseStateVars(1),8/ENERGY_SCALE)),%初始化測(cè)試噪聲估計(jì)。
NoiseStateVars(2)=inEnergy;%開(kāi)始狀態(tài)機(jī)以查找噪聲跳變。
NoiseStateVars(3)=-1;End%否則如果狀態(tài)機(jī)在查找噪聲跳變,elseif noiseStateVars(3)<0,%如果VAD和狀態(tài)繼續(xù)指示沒(méi)有話(huà)音,并且如果信號(hào)能量保持明顯高于噪聲估計(jì),if noVoiceFlag & (inEnergy>8*noiseStateVars(1)),%偏置測(cè)試噪聲估計(jì)就象正規(guī)的噪聲估計(jì)一樣。
%在匯編中,為了比特的正確性在相減之前右移。
NoiseBiased=noiseStateVars(2)-noiseStateVars(2)/16;%量化成32比特。
NoiseBiased=cell(noiseBiased*ENERGY_SCALE)/ENERGY_SCALE;%如果測(cè)試噪聲估計(jì)過(guò)高,if noiseBiased>inEnergy,%降低測(cè)試噪聲估計(jì)。
%量化導(dǎo)致最小變化1/ENERGY_SCALE。
%在匯編中,為了比特正確性在右移之前求反。
NoiseStateVars(2)=noiseStateVars(2)-noiseStateVars(2)/16;Else%提高測(cè)試噪聲估計(jì)NoiseStateVars(2)=noiseStateVars(2)+noiseStateVars(2)/64;End%量化成32比特noiseStateVars(2)=floor(noiseStateVars(2)*ENERGY_SCALE)/ENERGY_SCALE;%遞減也用作一個(gè)計(jì)數(shù)器的狀態(tài)變量。
NoiseStateVars(3)=noiseStateVars(3)-1;%如果在一個(gè)足夠長(zhǎng)的周期內(nèi)信號(hào)能量保持明顯高于噪聲估計(jì)。
%(測(cè)試跟蹤s_top10_1.raw的回聲需要45個(gè)幀)if noiseStateVars(3)==-45,%噪聲估計(jì)跳轉(zhuǎn)到測(cè)試噪聲估計(jì)。
NoiseStateVars(1)=noiseStateVars(2);%將狀態(tài)機(jī)重置回空閑狀態(tài)。
NoiseStateVars(3)=0;EndElse,%否則狀態(tài)機(jī)在查找消隱。
Else,%遞增狀態(tài)變量。
NoiseStateVars(3)=noiseStateVars(3)+1;%狀態(tài)1-100計(jì)算所謂消隱周期內(nèi)的幀數(shù)。
If noiseStateVars(3)<101,%如果能量再次變高,if 8*inEnergy>noiseStateVars(2),%如果消隱小于5幀,if noiseStateVars(3)-1<5,%檢測(cè)是錯(cuò)誤的或者不值得恢復(fù)噪聲估計(jì)。使?fàn)顟B(tài)機(jī)返回空閑狀態(tài)。
NoiseStateVars(3)=0Else%話(huà)音已經(jīng)出現(xiàn)或者在消隱之前噪聲返回。
%將狀態(tài)變量設(shè)置為101以啟動(dòng)下一程序段。
NoiseStateVars(3)=101;End%如果低能量幀的計(jì)算過(guò)長(zhǎng),elseif noiseStateVars(3)-1==25,%消隱并未出現(xiàn)-而是噪聲電平降低。
%使?fàn)顟B(tài)機(jī)返回空閑狀態(tài)。
NoiseStateVars(3)=0;End%狀態(tài)機(jī)已經(jīng)檢測(cè)到所謂消隱周期的結(jié)束。
%不考慮狀態(tài)機(jī)是否在計(jì)算話(huà)音或噪聲幀,首先檢測(cè)能量是否又降低。
Elseif 8*inEnergy<noiseStateVars(2),
%消隱并未出現(xiàn)-而是噪聲電平降低。
%使?fàn)顟B(tài)機(jī)返回空閑狀態(tài)。
NoiseStateVars(3)=0;%狀態(tài)101-200計(jì)算所謂消隱周期之后話(huà)音或噪聲幀數(shù)。
Elseif noiseStateVars(3)<201,%如果能量變得很高,if inEnergy>noiseStateVars(2)*8,%假設(shè)這是話(huà)音。
%將狀態(tài)變量設(shè)置為201以啟動(dòng)下一程序段。
noiseStateVars(3)=201;%在最大和最小能量接近于所存儲(chǔ)的噪聲估計(jì)時(shí)存在足夠的幀數(shù),elseif noiseStateVars(3)-101==10,確認(rèn)消隱。
將噪聲估計(jì)恢復(fù)成消隱之前的值。
NoiseStateVars(1)=noiseStateVars(2);%使?fàn)顟B(tài)機(jī)返回空閑狀態(tài)。
NoiseStateVars(3)=0;End%狀態(tài)201-300計(jì)算所謂消隱周期之后話(huà)音幀的個(gè)數(shù)。
%在最小能量接近于所存儲(chǔ)的噪聲估計(jì)時(shí)存在足夠的幀數(shù),elseif noiseStateVars(3)-201==50,%確認(rèn)消隱。
%將噪聲估計(jì)恢復(fù)成消隱之前的值。
NoiseStateVars(1)=noiseStateVars(2);%使?fàn)顟B(tài)機(jī)返回空閑狀態(tài)。
NoiseStateVars(3)=0;EndEndEnd
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本發(fā)明不限于為說(shuō)明目的已經(jīng)在此描述的特定示范性實(shí)施例。例如,所公開(kāi)實(shí)施例的各種功能塊實(shí)際上是概念化的。這些塊功能的實(shí)際實(shí)施可以使用各種技術(shù)完成。此外,例如可以使用幾個(gè)標(biāo)準(zhǔn)數(shù)字信號(hào)處理芯片、單一應(yīng)用專(zhuān)用集成電路,或適當(dāng)配置的計(jì)算機(jī)實(shí)現(xiàn)每個(gè)示范性系統(tǒng)。
還注意,盡管已經(jīng)在在音頻回聲消除環(huán)境下描述了示范性實(shí)施例,本發(fā)明的教導(dǎo)同樣可以應(yīng)用于網(wǎng)絡(luò)回聲消除的環(huán)境中(例如,近端用戶(hù)是陸地線(xiàn)路用戶(hù)而遠(yuǎn)端用戶(hù)是移動(dòng)用戶(hù)的場(chǎng)合)。此外,本發(fā)明的某些方面一般可以應(yīng)用于通信系統(tǒng)而不限于回聲抑制系統(tǒng)。因此,本發(fā)明的范圍由附帶的權(quán)利要求書(shū)而非前面的說(shuō)明書(shū)所限定,所有與本發(fā)明思想相一致的等同發(fā)明均包含在其中。
權(quán)利要求
1.一種回聲抑制設(shè)備,包括回聲抑制器,配置以衰減第一通信信號(hào)從而抑制其回聲分量,所述回聲分量由第二通信信號(hào)的反射產(chǎn)生;和話(huà)音激勵(lì)檢測(cè)器,連接到所述回聲抑制器和配置以提供所述第二通信信號(hào)是否包括話(huà)音分量的指示,其中當(dāng)話(huà)音激勵(lì)檢測(cè)器指示所述第二通信信號(hào)并不包括話(huà)音分量時(shí)使所述回聲抑制器不工作。
2.根據(jù)權(quán)利要求1的回聲抑制設(shè)備,其中通過(guò)旁路使所述回聲抑制器不工作。
3.根據(jù)權(quán)利要求1的回聲抑制設(shè)備,其中通過(guò)調(diào)整回聲抑制器使所述回聲抑制器不工作以提供足以防止嘯聲的一定水平的衰減。
4.根據(jù)權(quán)利要求1的回聲抑制設(shè)備,其中所述回聲抑制器是單擲開(kāi)關(guān),并且其中通過(guò)閉合所述單擲開(kāi)關(guān)使所述回聲抑制器不工作。
5.根據(jù)權(quán)利要求1的回聲抑制設(shè)備,其中所述回聲抑制器是削波抑制器,并且其中通過(guò)將所述回聲抑制器的削波閾值設(shè)置為零使所述回聲抑制器不工作。
6.根據(jù)權(quán)利要求1的回聲抑制設(shè)備,其中所述回聲抑制器是定標(biāo)抑制器,并且其中通過(guò)將所述回聲抑制器的比例因子設(shè)置為1使所述回聲抑制器不工作。
7.根據(jù)權(quán)利要求1的回聲抑制設(shè)備,其中所述回聲抑制器是混合抑制器,并且其中通過(guò)將所述回聲抑制器的削波閾值設(shè)置為零和通過(guò)將所述回聲抑制器的比例因子設(shè)置為1使所述回聲抑制器不工作。
8.一種回聲抑制設(shè)備,包括回聲抑制器,配置以衰減第一通信信號(hào)從而抑制其回聲分量,其中所述回聲分量由第二通信信號(hào)的反射產(chǎn)生,并且其中所述回聲抑制器使所述第一通信信號(hào)的至少一部分乘以一個(gè)衰減因子;和增益控制處理器,配置以檢測(cè)所述通信信號(hào)的主要條件,并在所述回聲抑制器工作時(shí)根據(jù)所述檢測(cè)到的主要條件調(diào)整所述衰減因子。
9.根據(jù)權(quán)利要求8的回聲抑制設(shè)備,其中所述增益控制處理器包括一個(gè)話(huà)音激勵(lì)檢測(cè)器,配置以檢測(cè)所述第一通信信號(hào)是否包括近端話(huà)音分量,并且其中所述增益控制處理器根據(jù)所述話(huà)音激勵(lì)檢測(cè)器是否檢測(cè)到所述近端話(huà)音分量來(lái)調(diào)整所述衰減因子。
10.一種回聲抑制設(shè)備,包括回聲抑制器,配置以衰減第一通信信號(hào)從而抑制其回聲分量,其中所述回聲分量由第二通信信號(hào)的反射產(chǎn)生;和增益控制處理器,配置以檢測(cè)所述第一通信信號(hào)中的話(huà)音與噪聲比,并且其中所述增益控制處理器根據(jù)所述比值調(diào)整由所述回聲抑制器提供的一定級(jí)別的衰減。
11.根據(jù)權(quán)利要求10的回聲抑制設(shè)備,其中所述話(huà)音與噪聲比是回聲與噪聲比。
12.根據(jù)權(quán)利要求10的回聲抑制設(shè)備,其中當(dāng)所述比值等于或低于預(yù)定閾值時(shí),所述增益控制處理器使所述回聲抑制器不工作。
13.根據(jù)權(quán)利要求12的回聲抑制設(shè)備,其中通過(guò)旁路使所述回聲抑制器不工作。
14.根據(jù)權(quán)利要求12的回聲抑制設(shè)備,其中所說(shuō)增益控制處理器通過(guò)調(diào)整回聲抑制器以提供足以防止嘯聲的一定水平的衰減使所述回聲抑制器不工作。
15.根據(jù)權(quán)利要求12的回聲抑制設(shè)備,其中所述回聲抑制器是單擲開(kāi)關(guān),并且其中通過(guò)閉合所述單擲開(kāi)關(guān)使所述回聲抑制器不工作。
16.根據(jù)權(quán)利要求12的回聲抑制設(shè)備,其中所述回聲抑制器是削波抑制器,并且其中通過(guò)將所述回聲抑制器的削波閾值設(shè)置為零使所述回聲抑制器不工作。
17.根據(jù)權(quán)利要求12的回聲抑制設(shè)備,其中所述回聲抑制器是定標(biāo)抑制器,并且其中通過(guò)將所述回聲抑制器的比例因子設(shè)置為1使所述回聲抑制器不工作。
全文摘要
用于控制回聲抑制器的方法和設(shè)備在各種條件下優(yōu)化可察覺(jué)的信號(hào)質(zhì)量時(shí)提供優(yōu)越的回聲衰減。在使回聲抑制器將引入比所需要更多的衰減因而更多的信號(hào)失真的可能性最小的同時(shí),所公開(kāi)的技術(shù)提供所需水平的回聲衰減。在第一種示范性實(shí)施例中,當(dāng)話(huà)音激勵(lì)檢測(cè)器指示遠(yuǎn)端通信信號(hào)并不包括話(huà)音分量時(shí),停止聲音回聲抑制的工作。在第二種示范性實(shí)施例中,根據(jù)話(huà)音激勵(lì)檢測(cè)器指示近端通信信號(hào)是否包括近端話(huà)音分量來(lái)調(diào)整正在工作的聲音回聲消除器的衰減因子。在第三種示范性實(shí)施例中,根據(jù)所測(cè)量的聲音回聲消除器音頻輸入中話(huà)音和噪聲比調(diào)整由聲音回聲消除器提供的一定水平的衰減。
文檔編號(hào)H04B3/20GK1294814SQ98813858
公開(kāi)日2001年5月9日 申請(qǐng)日期1998年12月22日 優(yōu)先權(quán)日1998年1月9日
發(fā)明者E·D·羅梅斯博格 申請(qǐng)人:艾利森公司