本發明涉及信號處理領域,特別涉及一種回聲消除方法及裝置。
背景技術:
通話回聲是指語音通信設備的放音被麥克風再次采集,這樣就會被傳回對端,而干擾正常通話。通話回聲消除的基本原理是基于自適應濾波技術,利用原始遠端信號,從近端麥克風信號中消除掉遠端成分。
從處理回聲設備的類型進行劃分,可以將回聲處理方法分為硬件回聲消除和軟件回聲消除。硬件回聲消除方法主要通過專用ASIC芯片或DSP處理器等實現回聲消除,這類器件通常采用嚴格時間同步方式處理信號,其時間延遲一般較為固定。這類設備通常假設設備的回聲路徑是基本固定的,或者變化范圍很小的,因此廠商可以通過標定預先設置好延遲、步長因子等參數。
然而,對于軟件回聲消除上述方法不一定適用。軟件回聲消除主要通過通用計算機的CPU計算能力處理回聲信號,回聲消除功能和其他軟件一同運行于通用操作系統的進程空間中,此時受到系統負載變化、線程調度不均、設備插拔切換等因素影響,這種情況通常無法保證時間的完全同步,從而頻繁導致時延參數發生突變或者漸變,影響回聲消除效果。當不滿足這些假設條件時,通常需要額外的技術手段對濾波器進行控制或者修正。例如將相同的輸入信號交由多個采用不同參數的回聲消除模塊處理,然后從其結果中優選作為本次回聲消除的結果。另一種方式通過計算遠端聲音的幅度譜特征,然后在近端聲音中進行搜索匹配,從而定位時間延遲。然而,這些方式的結果使計算量增大為原來的多倍,不適用于計算能力有限的嵌入式設備。還有一些侵入式的回聲估計方法方法,通過在播放的遠端聲音中疊加特定音樂或隨機信號,然后從近端進行相關檢測來標定延遲的方法,這種方法計算量也比較大,而且不能頻繁使用否則會影響用戶的通話體驗。
技術實現要素:
本發明所要解決的一個技術問題是:實現了一種回聲消除效果穩定的回聲消除方法。
根據本發明實施例的一個方面,提供了一種回聲消除方法,包括:確定近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差;根據時間差調整遠端語音幀的緩沖進程,使得時間差不超過預設值;根據時間差確定近端語音幀所包含遠端語音成分對應的遠端語音幀,并將近端語音幀、近端語音幀所包含遠端語音成分對應的遠端語音幀輸入自適應濾波器進行回聲消除。
在一些實施例中,確定近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差包括:確定近端語音幀錄制時間;確定遠端語音幀播放時間;將近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間相減,得到近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差。
在一些實施例中,確定近端語音幀錄制時間包括:記錄近端語音幀的錄制時間戳;確定系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號;根據近端語音幀的錄制時間戳、系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號,確定近端語音幀錄制時間。
在一些實施例中,確定遠端語音幀播放時間包括:設定遠端語音幀播放時間的初始值;在系統播放緩沖區中的數據間斷處插入靜音幀,使得系統播放緩沖區中的數據時間上連續;在系統播放緩沖區中讀取遠端語音幀;在遠端語音幀播放時間的初始值基礎上累加讀取的遠端語音幀時長。
在一些實施例中,根據時間差調整遠端語音幀的緩沖進程包括:若時間差超過預設值,則重置遠端語音幀播放時間,并舍棄重置后遠端語音幀播放時間與重置前遠端語音幀播放時間差值范圍內的播放語音幀。
根據本發明實施例的一個方面,提供了一種回聲消除裝置,包括:時間差確定模塊,用于確定近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差;緩沖進程調整模塊,用于根據時間差調整遠端語音幀的緩沖進程,使得時間差不超過預設值;回聲消除模塊,用于根據時間差確定近端語音幀所包含遠端語音成分對應的遠端語音幀,并將近端語音幀、近端語音幀所包含遠端語音成分對應的遠端語音幀輸入自適應濾波器進行回聲消除。
在一些實施例中,時間差確定模塊包括:錄制時間確定單元,用于確定近端語音幀錄制時間;播放時間確定單元,用于確定遠端語音幀播放時間;時間差計算單元,用于將近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間相減,得到近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差。
在一些實施例中,錄制時間確定單元用于:記錄近端語音幀的錄制時間戳;確定系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號;根據近端語音幀的錄制時間戳、系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號,確定近端語音幀錄制時間。
在一些實施例中,播放時間確定單元用于:設定遠端語音幀播放時間的初始值;在系統播放緩沖區中的數據間斷處插入靜音幀,使得系統播放緩沖區中的數據時間上連續;在系統播放緩沖區中讀取遠端語音幀;在遠端語音幀播放時間的初始值基礎上累加讀取的遠端語音幀時長。
在一些實施例中,緩沖進程調整模塊包括:播放時間重置單元,用于若時間差超過預設值,重置遠端語音幀播放時間;語音幀刪除單元,用于舍棄重置后遠端語音幀播放時間與重置前遠端語音幀播放時間差值范圍內的播放語音幀。
本發明通過計算近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差,并調整遠端語音幀的緩沖進程使得語音幀錄播時間差不超過預設值,進而提供了一種回聲消除效果穩定的回聲消除方法。
通過以下參照附圖對本發明的示例性實施例的詳細描述,本發明的其它特征及其優點將會變得清楚。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1示出本發明回聲消除方法的一個實施例的流程示意圖。
圖2示出確定語音幀錄播時間差的一個實施例的流程示意圖。
圖3示出本發明使用的播放緩沖區的結構示意圖。
圖4示出調整遠端語音幀的緩沖進程的一個實施例的流程示意圖。
圖5示出本發明回聲消除裝置的一個實施例的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。以下對至少一個示例性實施例的描述實際上僅僅是說明性的,決不作為對本發明及其應用或使用的任何限制。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
首先結合圖1描述本發明回聲消除方法的一個實施例。
圖1示出本發明回聲消除方法的一個實施例的流程示意圖。如圖1所示,本實施例包括:
步驟S102,確定近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差(下文中可簡稱為錄播語音幀時間差)。
步驟S104,根據錄播語音幀時間差調整遠端語音幀的緩沖進程,使得錄播語音幀時間差不超過預設值。
步驟S106,根據錄播語音幀時間差確定近端語音幀所包含遠端語音成分對應的遠端語音幀,并將近端語音幀、近端語音幀所包含遠端語音成分對應的遠端語音幀輸入自適應濾波器進行回聲消除。
在錄播語音幀時間差恒定在初始時間差的情況下,合理設置自適應濾波器參數能夠穩定的執行回聲消除功能。例如,可以使得濾波器的長度為該時間對應的語音長度的兩倍。濾波器的具體實現可以基于MDF(Multi-delay block frequency-domain adaptive filter,多延遲塊頻域自適應濾波)、LMS(Least Mean Square,最小均方算法)、NLMS(Normalized Least Mean Square,歸一化最小均方算法)等算法,執行回聲消除操作后,可以在小時間尺度上進行搜索,并將優選后的結果作為最終輸出的回聲消除的結果。
上述實施例中,通過計算近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差,并調整遠端語音幀的緩沖進程使得語音幀錄播時間差不超過預設值,進而實現了一種回聲消除效果穩定的回聲消除方法,緩解了由于系統卡頓或者語音幀錄播線程調度不均勻導致回聲消除效果變差的技術問題。
下面結合圖2描述確定語音幀錄播時間差的一個實施例。
圖2示出確定語音幀錄播時間差的一個實施例的流程示意圖。如圖2所示,在圖1所示的實施例基礎上,步驟S102進一步包括:
步驟S2022,確定近端語音幀錄制時間trec_est。
首先可以記錄近端語音幀的錄制時間戳trec。由于操作系統會使用內存緩沖區對錄制音頻幀進行緩沖,只有當錄制緩沖區填滿后才可以通過軟件讀取。假設每幀語音對應的時間長度為tp,當兩次執行錄制操作的時間間隔小于tp時,認為當前語音幀實際是從緩沖區中讀取的,其錄制實際發生時間應該在錄制時間戳trec之前。然后確定系統錄制緩沖區所能存儲的近端語音幀最大數量cntmax、單個近端語音幀時長tp以及具有連續錄制時間戳的近端語音幀序號cnt。具體步驟如下:
(a)初始化cnt=0;cntmax=0。
(b)若當前近端語音幀的錄制時間戳trec與上一近端語音幀的錄制時間戳trec_last之間的差值小于tp,則將cnt加1;否則令cnt=1。
(c)若cntmax<cnt,則將cnt的取值賦值給cntmax。
最后,根據近端語音幀的錄制時間戳、系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號,確定近端語音幀錄制時間。例如通過公式(1)確定近端語音幀錄制時間trec_est:
trec_est=trec-tp*cntmax+tp*cnt(1)
步驟S2024,確定遠端語音幀播放時間tply_est。
本實施例中的系統播放緩沖區可以采用雙緩沖結構,能夠支持快速、高精度的時間平移操作,并且在讀出數據時采用播放信號預測步驟可以自動插入由于系統卡頓導致的靜音幀,例如圖3所示。播放緩沖區由三部分組成:鏈表、循環內存緩沖區以及起始時間戳tply_beg_est,播放緩沖隊列支持四種基本操作:初始化、寫入、讀出、重置起始時間。循環緩沖區中的數據是一段連續的語音數據,時間上處于所有鏈表數據之前,用于每次取出數據前將鏈表中的語音幀補充靜音數據從而變為時間上連續,并且存儲每次讀取后剩余的不滿一幀的數據。具體包括以下功能:
(a)初始化:設定遠端語音幀播放時間的初始值tply_beg_est=tcurr(tcurr為系統當前時間戳),清空鏈表和循環內存緩沖區。
(b)寫入:當從操作系統獲得一幀播放幀時,執行寫入操作。記錄當前時間戳和語音幀打包為一個數據結構,作為鏈表的一個節點插入鏈表尾部。
(c)讀取:在每次執行回聲消除步驟前,對播放緩沖隊列執行讀出操作,讀出一幀語音數據。該語音幀數據是通過播放信號預測方法根據播放緩沖隊列內容計算得到,目的是補償由于播放線程卡頓造成的靜音部分。具體做法為:如果循環內存緩沖區的數據長度大于要讀取的數據長度,則從循環緩沖區讀取相應長度的數據。數據讀取后即從循環緩沖區中刪除。如果循環內存緩沖區長度小于要讀取的數據長度,則檢查鏈表頭結點時間戳thead。若thead-tply_beg_est-tcirc≥tp,則將一幀靜音幀(全零幀)寫入循環緩沖區;若0<thead-tply_beg_est-tcirc<tp,則先寫入長度為tp-td的靜音數據,然后將鏈表頭部第一幀數據寫入循環緩沖區,同時將其從鏈表中移除;若td≤0,直接將鏈表頭部第一幀數據寫入循環緩沖區,同時將其從鏈表中移除。然后,從循環緩沖區讀取相應長度的數據。數據讀取后即從循環緩沖區中刪除。在系統播放緩沖區中的數據間斷處插入靜音幀,可以使得系統播放緩沖區中的數據時間上連續。
(d)在遠端語音幀播放時間的初始值基礎上累加讀取的遠端語音幀時長,即在tply_beg_est基礎上累加tp。最終將tply_beg_est的取值賦值給遠端語音幀播放時間tply_est。
步驟S2026,將近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間相減,得到近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差。
例如,通過公式(2)計算近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差:
td=trec_est-tply_est(2)
上述實施例能夠更加精確地確定近端語音幀錄制時間以及遠端語音幀播放時間,從而能夠精確計算近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差,以便于調整遠端語音幀的緩沖進程使得語音幀錄播時間差不超過預設值。
下面結合圖4描述調整遠端語音幀的緩沖進程的一個實施例。
圖4示出調整遠端語音幀的緩沖進程的一個實施例的流程示意圖。如圖4所示,在圖1所示的實施例基礎上,步驟S104進一步包括:
步驟S4042,判斷近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差是否大于預設值。
若錄播語音幀時間差小于等于預設值,則直接執行步驟S106。
若錄播語音幀時間差大于預設值,則執行步驟S4044,重置遠端語音幀播放時間,并舍棄重置后遠端語音幀播放時間與重置前遠端語音幀播放時間差值范圍內的播放語音幀,然后執行步驟S106。
仍以圖3為例,當近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差td大于預設值時,執行大尺度時間調整操作,輸入參數treset,并對播放緩沖隊列執行快速時間軸平移操作,然后執行播放信號預測步驟,獲得預測的播放信號幀。具體包括:
若treset≤tply_beg_est+tcirc,說明重置時間落在循環緩沖區內部,只需舍棄循環緩沖區中treset-tply_beg_est時間差值范圍內的播放語音幀。
若treset>tply_beg_est+tcirc,說明重置時間落在鏈表內部,需要估計鏈表中第i個數據若節點的實際播出時間t’(i)。其中,如果t(i)-t’(i-1)<tp,則t’(i)=t’(i-1)+tp;如果t(i)-t’(i-1)≥tp,則t’(i)=t(i),t(0)=tply_beg_est+tcirc。其中,t’(i)表示估計第i個數據節點的實際播出時間,t(i)表示數據節點的寫入時間戳。
重置遠端語音幀播放時間的原理是,由于操作系統會使用內存緩沖區對播放、錄制音頻幀進行緩沖,只有當緩沖區填滿后才真正扇出到硬件設備進行播放。假設每幀語音對應的時間長度為tp,當兩次執行播放操作的時間間隔小于tp時,認為當前語音幀被放入緩沖并沒有實際播出。若treset>t’(i)+tp,表明鏈表中第i節點的實際播放結束時間早于treset因此可以舍棄,若鏈表非空則繼續處理下一個數據節點;否則,若treset<t’(i)+tp,則表明鏈表中第i節點的物理播放結束時間晚于treset,因此第i節點中的部分數據仍然有效需要保留,將這部分數據填充到循環緩沖區,然后將節點i移除。
(c)更新起始時間:tply_beg_est=treset。
上述實施例中,在錄播時間差大于預設值的情況下重置遠端語音幀播放時間,通過舍棄播放語音幀的方式調整遠端語音幀的緩沖進程,從而實現了判斷近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差不超過預設值,進而提升時延抖動情形下的回聲消除的效果,解決由于系統卡頓、語音幀播放錄制速率不一致導致的回聲消除算法失效問題,保證回聲消除的效果。同時,本實施例中的方法具有計算量小、處理速度快的優點。一方面,緩沖隊列的操作計算復雜度較低;另一方面,本發明中的自適應濾波器的長度可以較為固定且不需要預留過長,降低計算復雜度的同時可以加快濾波器收斂速度。
下面結合圖5描述本發明回聲消除裝置的一個實施例。
圖5示出本發明回聲消除裝置的一個實施例的結構示意圖。如圖5所示,本實施例中的回聲消除裝置50包括:
時間差確定模塊502,用于確定近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差。
緩沖進程調整模塊504,用于根據所述時間差調整遠端語音幀的緩沖進程,使得所述時間差不超過預設值。
回聲消除模塊506,用于根據所述時間差確定近端語音幀所包含遠端語音成分對應的遠端語音幀,并將近端語音幀、近端語音幀所包含遠端語音成分對應的遠端語音幀輸入自適應濾波器進行回聲消除。
上述實施例中,通過計算近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差,并調整遠端語音幀的緩沖進程使得語音幀錄播時間差不超過預設值,進而緩解了由于系統卡頓或者語音幀錄播線程調度不均勻導致回聲消除效果變差的技術問題。
在一個實施例中,時間差確定模塊502包括:
錄制時間確定單元5022,用于確定近端語音幀錄制時間。
播放時間確定單元5024,用于確定遠端語音幀播放時間。
時間差計算單元5026,用于將近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間相減,得到近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差。
在一個實施例中,錄制時間確定單元5022用于:
記錄近端語音幀的錄制時間戳;確定系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號;根據近端語音幀的錄制時間戳、系統錄制緩沖區所能存儲的近端語音幀最大數量、單個近端語音幀時長以及具有連續錄制時間戳的近端語音幀序號,確定近端語音幀錄制時間。
在一個實施例中,播放時間確定單元5024用于:設定遠端語音幀播放時間的初始值;在系統播放緩沖區中的數據間斷處插入靜音幀,使得系統播放緩沖區中的數據時間上連續;在系統播放緩沖區中讀取遠端語音幀;在遠端語音幀播放時間的初始值基礎上累加讀取的遠端語音幀時長。
上述實施例能夠更加精確地確定近端語音幀錄制時間以及遠端語音幀播放時間,從而能夠精確計算近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差,以便于調整遠端語音幀的緩沖進程使得語音幀錄播時間差不超過預設值。
在一個實施例中,緩沖進程調整模塊504包括:
播放時間重置單元5042,用于若時間差超過預設值,重置遠端語音幀播放時間。
語音幀刪除單元5044,用于舍棄重置后遠端語音幀播放時間與重置前遠端語音幀播放時間差值范圍內的播放語音幀。
上述實施例中,在錄播時間差大于預設值的情況下重置遠端語音幀播放時間,通過舍棄播放語音幀的方式調整遠端語音幀的緩沖進程,從而實現了判斷近端語音幀錄制時間與近端語音幀所包含遠端語音成分對應的遠端語音幀播放時間之間的時間差不超過預設值,進而提升時延抖動情形下的回聲消除的效果,解決由于系統卡頓、語音幀播放錄制速率不一致導致的回聲消除算法失效問題,保證回聲消除的效果。同時,本實施例中的方法具有計算量小、處理速度快的優點。一方面,緩沖隊列的操作計算復雜度較低;另一方面,本發明中的自適應濾波器的長度可以較為固定且不需要預留過長,降低計算復雜度的同時可以加快濾波器收斂速度。
本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
以上僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。