專利名稱:一種回聲抑制器中近端話音檢測的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通訊設(shè)備中的回聲抑制器中近端話音檢測的實現(xiàn)方法。
背景技術(shù):
回聲抑制是目前廣泛應(yīng)用于通訊領(lǐng)域的一項技術(shù),該技術(shù)的應(yīng)用目的是消除掉由于電路的阻抗不匹配或者由于聲學(xué)反射造成的回聲,以為通話雙方提供更高質(zhì)量的語音通訊服務(wù)。
目前應(yīng)用最廣泛的回聲抑制器由以下三個部分組成,分別是雙工檢測器、回聲估計消除器和非線性處理器。其中雙工檢測器的作用是指示回聲估計消除器是否進行濾波器系數(shù)更新以及是否開啟非線性處理器。回聲估計消除器的核心結(jié)構(gòu)為自適應(yīng)濾波器,該濾波器的作用是根據(jù)遠端輸入的語音估計出回聲數(shù)據(jù)并從近端輸入中減掉該數(shù)據(jù)以達到削弱或消除回聲的作用,同時依據(jù)估計誤差即近端輸入和估計數(shù)據(jù)的差并按照某種收斂算法來進行濾波器系數(shù)的更新,以使濾波器系數(shù)更逼近于回波路徑參數(shù)從而使得濾波器達到收斂。非線性處理器的作用是通過一些非線性的處理方法來消除掉殘余回聲,從而進一步提升語音質(zhì)量。
雙工檢測器最重要的工作是檢測近端是否有話音輸入。如果檢測到近端有話音輸入的話則立即停止自適應(yīng)濾波器的系數(shù)更新,并停止非線性處理器。因為此時濾波器估計回聲與近端輸入的差已經(jīng)不是估計誤差而是估計誤差與近端語音的和,如果此時進行濾波器系數(shù)的更新,則會導(dǎo)致濾波器處于非正常工作狀態(tài),對于某些收斂算法甚至?xí)?dǎo)致濾波器發(fā)散。如果此時仍進行非線性處理則會導(dǎo)致近端語音被削波,影響語音質(zhì)量。由此看出近端話音檢測在回波抑制器中起著非常重要的作用。為在同一硬件平臺上實現(xiàn)更多通道的回聲抑制處理或集成更多功能,有必要提供一種高效率的,穩(wěn)定的近端話音檢測方法。
目前近端話音檢測中最為經(jīng)典的算法是Geigel算法,該算法的前提是假設(shè)回聲相對于語音至少有6dB的衰減,即回聲的幅值至少會小于遠端語音幅值的一半。假設(shè)濾波器長度為N,近端當(dāng)前采樣數(shù)據(jù)為s(i),遠端輸入序列為y(i)到y(tǒng)(i-N-1),則如果不等式|s(i)|≥0.5max(|y(i)|,|y(i-1)|,...,|y(i-N+1)|)成立則表明近端一定有語音輸入。
由上式可以看出,如果采用圖1所描述的方法1直接按照以上判決條件進行判斷,則對應(yīng)每一個近端輸入采樣點需要計算N點遠端輸入序列的最大值,其計算量跟濾波器階數(shù)N成正比。以在8KHz采樣的電話系統(tǒng)中實現(xiàn)16ms的回聲抑制為例,按照通用處理器或DSP上對N點數(shù)據(jù)取最大值至少需要2N個指令周期來計算,每秒鐘需要的計算量為16*8*2*8000=2048000,合2MIPS,這樣的運算量接近甚至大于核心濾波器運算的計算量,因此直接在通用處理器或者DSP中采用這種方法運算的話是非常不經(jīng)濟的。
一種改進的實現(xiàn)方法為圖2描述的方法2,這種實現(xiàn)方法是在初始化時計算一下遠端輸入序列的最大值,在后續(xù)的處理中,只需要計算|y(i)|和上一幀最大值之間的最大值即為本幀數(shù)據(jù)的最大值,但是在運算結(jié)束后需要檢測|y(i-N+1)|是否即為本幀最大值,如果是則表示下次從滑動窗口中移出的值為最大值,需要重新計算N-1點的最大值給下幀使用。由這種方法的原理可以看出在正常語音情況下,這種情況可以大幅度降低運算量。但是在極限情況下,例如一段時間內(nèi)遠端輸入為靜音情況下,即所有的遠端輸入序列的絕對值均相等,則此時的運算量和上述運算量沒有改變。即這種方法可以將運算量的平均值降至一個不確定的水平,但是運算量峰值并沒有變。而在回聲抑制這種實時運算中,需要保證在下一數(shù)據(jù)點或數(shù)據(jù)幀到來之前必須完成上一數(shù)據(jù)點或數(shù)據(jù)幀的操作,因此開發(fā)人員在設(shè)計時必須按照處理量的峰值來分配計算資源,而這種方法提供的運算峰值與方法1的運算峰值相同,因此相對于方法1來講并沒有實際的進步。同時該方法的運算平均值隨遠端輸入信號的不同而不同,不能通過測試的方法獲得實際運行計算量峰值,因此不便于開發(fā)人員進行性能統(tǒng)計。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種近端話音檢測的低運算量解決方法,從而可以在同一計算平臺上實現(xiàn)更多通道的回聲抑制解決方案,或為其它模塊結(jié)余更多的處理器計算資源,從而達到降低成本的目的。同時能夠在開發(fā)階段就能夠精確的計算出模塊的運算量,便于開發(fā)人員進行性能統(tǒng)計和計算資源分配,并有利于產(chǎn)品的穩(wěn)定性和兼容性。
為了實現(xiàn)上述目的,本發(fā)明提供了一種回聲抑制器中近端話音檢測的實現(xiàn)方法,采用Geigel算法進行近端話音檢測,其特點在于,在遠端輸入序列y(i)中取M個采樣點作為一子幀,M小于所述回聲抑制器中的濾波器長度N,在對每一子幀的第一個采樣點的輸入進行計算時,首先獲得所述遠端輸入的滑動窗口內(nèi)|y(i)|到|y(i-N+M)|共N-M+1個采樣點的最新數(shù)據(jù)的最大值,并保存為Frame_MAX,然后對所述子幀的M個采樣點逐個進行運算,取所述最大值Frame_MAX與當(dāng)前滑動窗口內(nèi)余下的M-1個采樣點的數(shù)據(jù)的最大值做作為所述子幀的各個采樣點的最大值MAX,若所述子幀的采樣點的近端輸入序列s(i)滿足條件|s(i)|≥u*MAX,則所述近端有話音。
上述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特點在于,對所述遠端輸入序列y(i)中的子幀進行近端話音檢測的方法包括如下步驟步驟一,初始化一子幀計數(shù)器計數(shù)值為0;步驟二,取近端輸入數(shù)據(jù)絕對值為|s(i)|,取遠端輸入數(shù)據(jù)絕對值為|y(i)|,并將所述數(shù)據(jù)保存到遠端數(shù)據(jù)緩沖區(qū)中,該緩沖區(qū)保存了從|y(i)|到|y(i-N+1)|共N個采樣點的數(shù)字序列;步驟三,如果子幀計數(shù)器為0,則表示當(dāng)前遠端數(shù)據(jù)采樣點為該子幀的第一個采樣點,計算遠端輸入滑動窗口內(nèi)最新的從|y(i)|到|y(i-N+M)|共計N-M+1個采樣點數(shù)據(jù)的最大值,并將該值保存為Frame_MAX;如果子幀計數(shù)器計數(shù)值不為0,則執(zhí)行步驟四;步驟四,計算遠端數(shù)據(jù)緩沖區(qū)中Frame_MAX及剩余的M-1個采樣點的最大值MAX;步驟五,比較衰減因子u與MAX的乘積u*MAX與近端輸入數(shù)據(jù)絕對值|s(i)|的大小,如果滿足條件|s(i)|≥u*MAX,則表明近端有語音輸入;步驟六,更新所述子幀計數(shù)器,子幀計數(shù)器數(shù)值加1;步驟七,如果子幀計數(shù)器值等于M,則將子幀計數(shù)器數(shù)值復(fù)位為0;步驟八,跳轉(zhuǎn)到步驟二,對所述子幀的下一采樣點數(shù)據(jù)進行計算。
上述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特點在于,在所述方法應(yīng)用于本身有語音幀長概念的應(yīng)用中時,M同時應(yīng)該為所述語音幀長的公約數(shù)。
上述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特點在于,對于一個固定的系統(tǒng),根據(jù)不同的設(shè)計需求,有一個或兩個最優(yōu)的M值,在采用所述最優(yōu)的M值時所消耗的處理器運算指令周期數(shù)最小。
上述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特點在于,所述最優(yōu)M值通過實際測試的方法獲得。
上述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特點在于,所述方法中,所有子幀的運算量均一致,而在各個子幀內(nèi)部每個采樣點的運算量不一致。
上述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特點在于,參照用戶電路回聲相對語音至少衰減6dB,所述回聲幅度衰減因子u取0.5。
相較于現(xiàn)有技術(shù),本發(fā)明提出的方法的特點是在運算結(jié)果與現(xiàn)有方法完全一致的情況下能夠大幅度的降低程序運算所需要的運算量,因此可以在同一處理平臺上實現(xiàn)更多通道的回聲抑制處理,或為實現(xiàn)更多的功能提供足夠的處理能力,因此可以達到降低成本的目的。同時使用該方法運算量的最大值和平均值一致,在參數(shù)一定的情況下運算量為一定值,便于開發(fā)人員進行性能統(tǒng)計和計算資源分配,并有利于應(yīng)用產(chǎn)品的穩(wěn)定性和兼容性。
以下結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述,但不作為對本發(fā)明的限定。
圖1是一種現(xiàn)有回聲抑制中近端話音檢測的實現(xiàn)方法的流程圖;圖2是另一種現(xiàn)有回聲抑制中近端話音檢測的實現(xiàn)方法的流程圖;圖3是本發(fā)明方法的流程圖。
具體實施例方式
本發(fā)明提供的一種通訊領(lǐng)域內(nèi)實現(xiàn)回聲抑制器近端話音檢測的實現(xiàn)方法,該方法的原理描述如下(1)近端話音檢測采用Geigel算法,濾波器長度為N,近端輸入序列為s(i),遠端輸入序列為y(i),回聲幅度衰減因子為u。則在下面不等式成立時則近端有話音
|s(i)|≥u*max(|y(i)|,|y(i-1)|,...,|y(i-N+1)|)(2)取M個采樣點為一子幀,M小于濾波器長度N。如果本發(fā)明被使用在VOIP等本身有語音幀長概念的應(yīng)用中時,M同時應(yīng)該為幀長的公約數(shù),例如在G.729應(yīng)用中,幀長為10ms,對應(yīng)8000Hz采樣的80采樣點,則M應(yīng)該可以被80整除。在本發(fā)明中可以保證在每一子幀數(shù)據(jù)的運算量完全一致。
(3)在對每一子幀的第一點輸入進行計算時,首先計算|y(i)|到|y(i-N+M)|共計N-M+1點的最大值,并保存為Frame_MAX,再將該值與滑動窗口內(nèi)余下的M-1點取最大值做為該采樣點的最大值。
(4)在對該子幀剩余的M-1點逐個進行運算時,用于計算Frame_MAX的N-M+1點此時仍然保留在滑動窗口內(nèi)(同計算第一點時,不需要重復(fù)進行運算),因此只需要計算Frame_MAX與此時滑動窗口內(nèi)剩余的M-1點的最大值即可,即相當(dāng)于取M點的最大值運算。
請參照圖3,要實現(xiàn)本發(fā)明方法,具體的操作步驟如下步驟1初始化子幀計數(shù)器COUNT值為0。
步驟2取近端輸入數(shù)據(jù)絕對值為|s(i)|。取遠端輸入數(shù)據(jù)絕對值為|y(i)|,并將該數(shù)據(jù)保存到緩沖區(qū)BUFFER中。該緩沖區(qū)保存了從|y(i)|到|y(i-N+1)|共N點的數(shù)字序列。
步驟3判斷子幀計數(shù)器是否為0?如果子幀計數(shù)器COUNT為0,則執(zhí)行步驟4;如果子幀計數(shù)器COUNT不為0,則直接執(zhí)行步驟5。
步驟4如果子幀計數(shù)器為0,則表示當(dāng)前遠端數(shù)據(jù)采樣點為該子幀的第一個采樣點,計算遠端輸入滑動窗口內(nèi)最新的N-M+1點,即|y(i)|到|y(i-N+M)|共計N-M+1點數(shù)據(jù)的最大值,并將該值保存為Frame_MAX。
步驟5計算遠端數(shù)據(jù)緩沖區(qū)BUFFER中Frame_MAX及剩余的M-1點的最大值,該值為MAX。
步驟6比較衰減因子u與MAX的乘積u*MAX與近端輸入數(shù)據(jù)絕對值|s(i)|的大小。
步驟7如果不等式|s(i)|≥u*MAX成立則表明近端有語音輸入(參照用戶電路回聲相對語音至少衰減6dB,可以取u為0.5)。如果不成立,則直接轉(zhuǎn)為執(zhí)行步驟8。
步驟8更新子幀計數(shù)器,子幀計數(shù)器數(shù)值加1。
步驟9判斷子幀計數(shù)器值是否等于M?如果子幀計數(shù)器值不等于M,則跳轉(zhuǎn)到步驟2,對下一采樣點數(shù)據(jù)進行計算;如果子幀計數(shù)器值等于M,則執(zhí)行步驟10。
步驟10將子幀計數(shù)器數(shù)值復(fù)位為0,并跳轉(zhuǎn)到步驟2,對下一采樣點數(shù)據(jù)進行計算。
依照以上實施步驟,對于整個子幀而言耗費的運算量共需要進行N+M*(M-1)次兩點取最大值運算而不是N*M次兩點取最大值運算,從而達到了降低運算量的目的,并且可以保證每一子幀的運算量相等并且該運算量在設(shè)計階段即可經(jīng)過計算精確獲得。
以實現(xiàn)16ms回聲抑制器而言,以處理器內(nèi)部實現(xiàn)一次兩點取最大值需要兩個指令周期為例,針對8000Hz采樣的系統(tǒng),濾波器長度N為(8000/1000)*16=128。如取M為16,則按照圖1方法實現(xiàn)一子幀M點的近端話音檢測在計算最大值處所消耗的指令周期數(shù)為N*M*2=128*16*2=4096,而如果按照本發(fā)明所提供的方法進行運算所耗費的指令周期數(shù)為(N+M*(M-1))*2=(128+16*(16-1))*2=736。相對于原方法可以節(jié)省超過80%的處理器運算能力。
對于一個固定的系統(tǒng),根據(jù)不同的設(shè)計需求,有一個或兩個最優(yōu)的M值,在采用此M值時所消耗的處理器運算指令周期數(shù)最小。即此時在所有滿足系統(tǒng)要求的M的取值范圍中(N+M*(M-1))/M最小。并且該最優(yōu)M值也可以通過實際測試的方法獲得。
綜上所述,本發(fā)明的特征如下(1)本發(fā)明采用子幀概念,在下一子幀數(shù)據(jù)到來之前處理完上一子幀內(nèi)容。子幀的長度M小于濾波器階數(shù)N,如果應(yīng)用在有語音幀概念的應(yīng)用上,子幀長度M應(yīng)該能夠被語音幀采樣點數(shù)FRAME整除。
(2)本發(fā)明保證所有子幀的運算量均一致,但在各個子幀內(nèi)部每個采樣點的運算量不一致。
(3)本發(fā)明中每幀運算時總是先計算最新的N-M+1點的最大值Frame_MAX,在本子幀的后續(xù)采樣點中只需要計算M點的最大值。
當(dāng)然,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。
權(quán)利要求
1.一種回聲抑制器中近端話音檢測的實現(xiàn)方法,采用Geigel算法進行近端話音檢測,其特征在于,在遠端輸入序列y(i)中取M個采樣點作為一子幀,M小于所述回聲抑制器中的濾波器長度N,在對每一子幀的第一個采樣點的輸入進行計算時,首先獲得所述遠端輸入的滑動窗口內(nèi)|y(i)|到|y(i-N+M)|共N-M+1個采樣點的最新數(shù)據(jù)的最大值,并保存為Frame_MAX,然后對所述子幀的M個采樣點逐個進行運算,取所述最大值Frame_MAX與當(dāng)前滑動窗口內(nèi)余下的M-1個采樣點的數(shù)據(jù)的最大值做作為所述子幀的各個采樣點的最大值MAX,若所述子幀的采樣點的近端輸入序列s(i)滿足條件|s(i)|≥u*MAX,則所述近端有話音,其中u為回聲幅度衰減因子。
2.根據(jù)權(quán)利要求1所述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特征在于,對所述遠端輸入序列y(i)中的子幀進行近端話音檢測的方法包括如下步驟步驟一,初始化一子幀計數(shù)器計數(shù)值為0;步驟二,取近端輸入數(shù)據(jù)絕對值為|s(i)|,取遠端輸入數(shù)據(jù)絕對值為|y(i)|,并將所述數(shù)據(jù)保存到遠端數(shù)據(jù)緩沖區(qū)中,該緩沖區(qū)保存了從|y(i)|到|y(i-N+1)|共N個采樣點的數(shù)字序列;步驟三,如果子幀計數(shù)器為0,則表示當(dāng)前遠端數(shù)據(jù)采樣點為該子幀的第一個采樣點,計算遠端輸入滑動窗口內(nèi)最新的從|y(i)|到|y(i-N+M)|共計N-M+1個采樣點數(shù)據(jù)的最大值,并將該值保存為Frame_MAX;如果子幀計數(shù)器計數(shù)值不為0,則執(zhí)行步驟四;步驟四,計算遠端數(shù)據(jù)緩沖區(qū)中Frame_MAX及剩余的M-1個采樣點的最大值MAX;步驟五,比較衰減因子u與MAX的乘積u*MAX與近端輸入數(shù)據(jù)絕對值|s(i)|的大小,如果滿足條件|s(i)|≥u*MAX,則表明近端有語音輸入;步驟六,更新所述子幀計數(shù)器,子幀計數(shù)器數(shù)值加1;步驟七,如果子幀計數(shù)器值等于M,則將子幀計數(shù)器數(shù)值復(fù)位為0;步驟八,跳轉(zhuǎn)到步驟二,對所述子幀的下一采樣點數(shù)據(jù)進行計算。
3.根據(jù)權(quán)利要求1或2所述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特征在于,在所述方法應(yīng)用于本身有語音幀長概念的應(yīng)用中時,M同時應(yīng)該為所述語音幀長的公約數(shù)。
4.根據(jù)權(quán)利要求3所述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特征在于,對于一個固定的系統(tǒng),根據(jù)不同的設(shè)計需求,有一個或兩個最優(yōu)的M值,在采用所述最優(yōu)的M值時所消耗的處理器運算指令周期數(shù)最小。
5.根據(jù)權(quán)利要求4所述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特征在于,所述最優(yōu)M值通過實際測試的方法獲得。
6.根據(jù)權(quán)利要求4所述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特征在于,所述方法中,所有子幀的運算量均一致,而在各個子幀內(nèi)部每個采樣點的運算量不一致。
7.根據(jù)權(quán)利要求3所述的回聲抑制器中近端話音檢測的實現(xiàn)方法,其特征在于,參照用戶電路回聲相對語音至少衰減6dB,所述回聲幅度衰減因子u取0.5。
全文摘要
本發(fā)明涉及一種回聲抑制器中近端話音檢測的實現(xiàn)方法,采用Geigel算法進行近端話音檢測,在遠端輸入序列y(i)中取M個采樣點作為一子幀,M小于所述回聲抑制器中的濾波器長度N,在對每一子幀的第一個采樣點的輸入進行計算時,首先獲得所述遠端輸入的滑動窗口內(nèi)|y(i)|到|y(i-N+M)|共N-M+1個采樣點的最新數(shù)據(jù)的最大值,并保存為Frame_MAX,然后對所述子幀的M個采樣點逐個進行運算,取所述最大值Frame_MAX與當(dāng)前滑動窗口內(nèi)余下的M-1個采樣點的數(shù)據(jù)的最大值做作為所述子幀的各個采樣點的最大值MAX,若所述子幀的采樣點的近端輸入序列s(i)滿足條件|s(i)|≥u*MAX,則所述近端有話音。本發(fā)明的方法能在運算結(jié)果與現(xiàn)有方法完全一致的情況下大幅降低程序運算所需要的運算量,降低成本。
文檔編號H04M9/08GK1584977SQ20041000916
公開日2005年2月23日 申請日期2004年5月31日 優(yōu)先權(quán)日2004年5月31日
發(fā)明者肖志方, 杜軍, 王侃 申請人:中興通訊股份有限公司