本發(fā)明實施例涉及音頻數(shù)據(jù)處理技術(shù),尤其涉及一種音頻信號的自動增益控制方法和裝置。
背景技術(shù):
當(dāng)前,語音實時通信已經(jīng)得到了十分廣泛的應(yīng)用,利用語音通信,不僅可以實現(xiàn)雙方通信,還可以進一步實現(xiàn)多方通信。隨著語音通信的不斷發(fā)展,音頻數(shù)據(jù)處理技術(shù)在一定程度上也得到了相應(yīng)的提高。
在現(xiàn)有技術(shù)中,為了減小音頻信號的不連續(xù)性,提升語音通信的服務(wù)質(zhì)量,一般采用自動增益控制方法(Automatic Gain Control,AGC)對音頻信號進行處理。其中,自動增益控制方法可以下兩種方案包括:(1)以數(shù)據(jù)幀為分析基礎(chǔ),計算當(dāng)前幀中各個采樣點振幅值絕對值的平均幅值,將當(dāng)前幀中的目標(biāo)幅值除以平均幅值后得到當(dāng)前幀的增益值,然后基于該增益值調(diào)整當(dāng)前幀音頻信號的輸出幅值,從而實現(xiàn)音量的調(diào)整。(2)同樣以數(shù)據(jù)幀為分析基礎(chǔ),分別計算音頻信號前后兩幀的增益值,并將各幀的增益值平均分配到各采樣點中。為了實現(xiàn)前后兩幀增益的平滑過渡,通常將前一幀最后一個采樣點的增益值作為當(dāng)前幀第一個采樣點的增益值,基于確定的幀增益值調(diào)整各幀音頻信號的幅值。
現(xiàn)有自動增益控制方法僅是從音頻信號在時域中的平滑度進行考慮,雖然可以對音頻信號的處理達到了良好的效果,但由于該方法忽略了對信號頻域的影響,將會使得頻域中的音頻信號產(chǎn)生失真現(xiàn)象。例如,圖1為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后示意圖。圖2為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后的仿真示意圖。如圖1和圖2所示,若采用上述方案(1)進行增益調(diào)整后,音頻信號會出現(xiàn)“消頂”失真現(xiàn)象,即當(dāng)音頻信號的幅值經(jīng)增益放大時,為了防止超出允許的最大音量,會將超出設(shè)定幅值的音頻信號強制調(diào)整幅值為設(shè)定值,使其不會繼續(xù)增長,所以會出現(xiàn)消頂失真現(xiàn)象。再比如,圖3為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后示意圖。圖4為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后的仿真示意圖。如圖3和圖4所示,若采用上述方案(2)進行增益調(diào)整后,會使得增益調(diào)整后的斜率發(fā)生改變,進而使得在頻域中的音頻信號發(fā)生失真現(xiàn)象。同時由于人耳對頻域中信號的變化非常敏感,稍有差異用戶即可分辨出來,因此,將可能帶來不好的用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種音頻信號的自動增益控制方法和裝置,在自動調(diào)整音頻信號音量幅值的情況下,降低音頻信號的失真度。
第一方面,本發(fā)明實施例提供了一種音頻信號的自動增益控制方法,包括:
在待處理音頻信號中識別幅值過零點,將相鄰過零點之間確定為過零區(qū)間;
根據(jù)所述過零區(qū)間確定至少一個增益調(diào)整區(qū)間;
根據(jù)所述增益調(diào)整區(qū)間內(nèi)的音頻信號幅值確定音頻信號的有效狀態(tài);
如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長,則根據(jù)所述當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益;
根據(jù)所述調(diào)整增益對所述當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
第二方面,本發(fā)明實施例還提供一種音頻信號的自動增益控制裝置,包括:
過零區(qū)間確定模塊,用于在待處理音頻信號中識別幅值過零點,將相鄰過零點之間確定為過零區(qū)間;
調(diào)整區(qū)間確定模塊,用于根據(jù)所述過零區(qū)間確定至少一個增益調(diào)整區(qū)間;
有效狀態(tài)確定模塊,用于根據(jù)所述增益調(diào)整區(qū)間內(nèi)的音頻信號幅值確定音頻信號的有效狀態(tài);
第一調(diào)整增益確定模塊,用于如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長,則根據(jù)所述當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益;
幅值調(diào)整模塊,用于根據(jù)所述調(diào)整增益對所述當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
本發(fā)明實施例中提供的音頻信號的自動增益控制方案,首先在待處理音頻信號中識別幅值過零點,并將相鄰過零點之間確定為過零區(qū)間。然后根據(jù)過零區(qū)間確定至少一個增益調(diào)整區(qū)間并根據(jù)增益調(diào)整區(qū)間內(nèi)的音頻信號幅值確定音頻信號的有效狀態(tài)。如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長,則根據(jù)當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。最后根據(jù)調(diào)整增益對當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。通過采用上述技術(shù)方案,由于采用峰值來確定調(diào)整增益,因此調(diào)整增益可有效匹配最大幅值的音頻信號調(diào)整,避免了消頂失真現(xiàn)象。同時,每個增益調(diào)整區(qū)間可單獨確定調(diào)整增益,使得增益精度提高,也極大程度上降低頻域中音頻信號的失真度。此外,通過判斷當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號有效狀態(tài)是否發(fā)生變化且已持續(xù)設(shè)定時長,可以在音頻信號有效狀態(tài)發(fā)生持續(xù)變化時進行相應(yīng)的增益調(diào)整,而避免有效狀態(tài)發(fā)生突變時進行誤調(diào)整,達到提升用戶體驗的效果。
附圖說明
圖1為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后示意圖;
圖2為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后的仿真示意圖;
圖3為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后示意圖;
圖4為現(xiàn)有技術(shù)提供的對音頻信號增益調(diào)整前后的仿真示意圖;
圖5為本發(fā)明實施例一提供的一種音頻信號的自動增益控制方法的流程示意圖;
圖6為本發(fā)明實施例一提供的對采樣點增益調(diào)整前后示意圖;
圖7為本發(fā)明實施例二提供的一種音頻信號的自動增益控制方法的流程示意圖;
圖8為本發(fā)明實施例三提供的一種音頻信號的自動增益控制方法的流程示意圖;
圖9為本發(fā)明實施例四提供的一種音頻信號的自動增益控制方法的流程示意圖;
圖10為本發(fā)明實施例五提供的一種音頻信號的自動增益控制裝置的結(jié)構(gòu)框圖。
具體實施方式
下面結(jié)合附圖和實施例對本發(fā)明作進一步的詳細說明??梢岳斫獾氖?,此處所描述的具體實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
實施例一
圖5為本發(fā)明實施例一提供的一種音頻信號的自動增益控制方法的流程示意圖,該方法可以由音頻信號的自動增益控制裝置來執(zhí)行,具體包括如下步驟:
步驟101、在待處理音頻信號中識別幅值過零點,將相鄰過零點之間確定為過零區(qū)間;
其中,自動增益控制方法是對音頻信號輸出音量進行調(diào)整的一種控制方法,該方法利用線性放大和壓縮的有效組合對輸出的音頻信號進行動態(tài)調(diào)整。當(dāng)弱音頻信號輸入時,通過增大音頻信號的增益可以保證輸出音頻信號的強度;當(dāng)所輸入的音頻信號達到一定強度時,通過減小音頻信號的增益可以使輸出的音頻信號的幅值降低。也就是說,自動增益控制可以通過改變音頻信號輸入輸出幅值的壓縮比例來自動調(diào)整輸出音頻信號的幅值。本實施例所提供的自動增益控制方法也是通過調(diào)整音頻信號幅值的形式實現(xiàn)。
示例性的,本實施例中的音頻信號可以為語音實時通信過程中的音頻信號,也可以為通過多媒體播放出的音頻信號。其中,待處理音頻信號可包括有效音頻信號,即語音接收端能夠接收到的語音發(fā)送端所發(fā)送的音頻信號。示例性的,待處理音頻信號也可包括噪音音頻信號,即除語音接收端可以接收到發(fā)送端所發(fā)送的有效音頻信號之外的其他所有音頻信號。
示例性的,在對音頻信號進行處理的過程中,一般可將音頻信號按照固定時長分為若干音頻幀,其中,固定時長也預(yù)先進行設(shè)定。對于若干音頻幀中的每一幀音頻信號都包括若干個采樣點,每個采樣點分別具有各自的振幅值。具體的,可以將10ms內(nèi)所采集的樣點作為一幀,幀長可由用戶自行設(shè)定。例如,若在采樣頻率為16KHz的情況下,一幀10ms可以采集160個樣點。在本實施例中,對待處理音頻信號的識別過程實際上也就是對若干個音頻幀中的各個采樣點進行識別的過程。例如,可以從語音發(fā)送端所發(fā)送的音頻信號的數(shù)據(jù)流中抓取一幀作為當(dāng)前待處理的音頻幀,也可以將音頻信號的數(shù)據(jù)流中的連續(xù)幾幀作為當(dāng)前待處理的音頻幀。
其中,在待處理音頻信號中識別幅值過零點可包括:在所述待處理音頻信號中,判斷當(dāng)前采樣點幅值與任一相鄰的采樣點幅值的乘積是否為0,或與所述當(dāng)前采樣點相鄰的兩個采樣點的幅值是否異號;若是,則確定當(dāng)前采樣點為所述待處理音頻信號中的幅值過零點。
在本實施例中,在確定出待處理的音頻幀后,可以識別出音頻幀中幅值過零的采樣點,然后將相鄰兩個零點之間的區(qū)間確定為過零區(qū)間。對于當(dāng)前待處理的音頻幀,可以確定多個過零區(qū)間。值得注意的是,在過零區(qū)間確定的過程中,需要保證過零區(qū)間的完整性。例如,對于兩個采樣點,若其中一個采樣點的幅值為零,而另一個采樣點的幅值不為零,則這兩個采樣點所形成的區(qū)間不能確定為過零區(qū)間。示例性的,可以通過編寫過零檢測的C代碼實現(xiàn)對過零點的檢測,在識別音頻信號幅值過零點的過程中調(diào)用該代碼即可。通過采用軟件編程的方式實現(xiàn)過零點的檢測,可以達到降低成本的效果。具體的,C代碼可以具體為以下形式:
其中,數(shù)組Data的長度為2N,i表示第i個采樣點。
步驟102、根據(jù)過零區(qū)間確定至少一個增益調(diào)整區(qū)間。
示例性的,在對各個采樣點進行增益調(diào)整之前,可以首先確定需要進行增益調(diào)整的增益調(diào)整區(qū)間。具體的,可以將每個過零區(qū)間確定為一個增益調(diào)整區(qū)間,也可以將連續(xù)的至少兩個過零區(qū)間確定為一個增益調(diào)整區(qū)間??梢岳斫獾氖?,所確定的增益調(diào)整區(qū)間范圍越小,后續(xù)對增益調(diào)整區(qū)間內(nèi)采樣點的幅值調(diào)整將越準(zhǔn)確。
步驟103、根據(jù)增益調(diào)整區(qū)間內(nèi)的音頻信號幅值確定音頻信號的有效狀態(tài)。
示例性的,音頻信號的有效狀態(tài)可包括有效音頻和噪音音頻。其中,有效音頻可以為語音接收端能夠接收到的語音發(fā)送端所發(fā)送的音頻信號。噪音音頻可以為語音接收端可以接收到發(fā)送端所發(fā)送的有效音頻信號之外的其他所有音頻信號(例如環(huán)境聲音等)。
示例性的,音頻信號的有效狀態(tài)的確定方式可以有多種,本實施例在此不做具體限定。例如,可以通過語音活動檢測算法(Voice Activity Detection,VAD)來確定音頻信號的有效狀態(tài),以區(qū)分有效音頻和噪音音頻。
步驟104、如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長,則根據(jù)當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。
其中,音頻信號的有效狀態(tài)并不是固定不變的,其可隨語音發(fā)送端當(dāng)前的狀態(tài)或者根據(jù)語音發(fā)送端所處環(huán)境的改變而發(fā)生變化。當(dāng)音頻信號的有效狀態(tài)發(fā)生變化且持續(xù)設(shè)定時長時,當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益需要根據(jù)當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)來確定。
示例性的,在一定條件下,有效音頻信號可以變?yōu)樵胍粢纛l信號。具體的,在語音實時通信的過程中,語音信號的變化是一個連續(xù)的過程,講話用戶(語音發(fā)送端)所發(fā)出的字與字的音量并不完全相同。如果由于講話用戶個人原因或外界環(huán)境因素,使得用戶所講內(nèi)容的音量整體較低,同時該內(nèi)容所占用的時間超過了設(shè)定的時長,則可以確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)由有效音頻變?yōu)樵胍粢纛l。在上述情況下,當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益需要根據(jù)當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)(噪音音頻)確定,而不能根據(jù)上一增益調(diào)整區(qū)間的音頻信號有效狀態(tài)(有效音頻)來確定。示例性的,在一定條件下,音頻信號的有效狀態(tài)由噪音音頻變?yōu)橛行б纛l時,當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益需要根據(jù)當(dāng)前增益調(diào)整區(qū)間的有效音頻信號來確定。通過采用上述設(shè)置方式,可以根據(jù)當(dāng)前增益調(diào)整區(qū)間內(nèi)音頻信號有效狀態(tài)的實時變化確定出當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益,以提高增益確定的準(zhǔn)確性。
示例性的,如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)未發(fā)生變化,或變化后的有效狀態(tài)未持續(xù)設(shè)定時長,則可根據(jù)上一增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。其中,設(shè)定時長為在實際操作過程中,經(jīng)過大量實驗統(tǒng)計后所得到的經(jīng)驗值。例如,在實時語音通信的過程中,講話用戶(語音發(fā)送端)所發(fā)出的字與字之間存在一定的時間間隔。尤其當(dāng)用戶邊講話邊思考時,字與字之間的時間間隔可能較長但一般都會小于一定的閾值。或者當(dāng)用戶講到重點時可能會將重點部分的音量調(diào)高以突出重點的內(nèi)容,當(dāng)重點講完之后又恢復(fù)到原來的音量。在上述情況下,對于語音接收端來說,語音發(fā)送端所發(fā)送的音頻信號都為有效音頻信號。講話用戶所講內(nèi)容音量的變化或者所講內(nèi)容字與字之間的時間間隔的變化并不影響音頻信號有效狀態(tài)的變化(音頻信號未從有效音頻變?yōu)樵胍粢纛l)。此時,當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益可以根據(jù)上一增益調(diào)整區(qū)間的音頻信號有效狀態(tài)(有效音頻)來確定。示例性的,若當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)為噪音音頻時,由于噪音音頻也可能會存在突發(fā)情況(音量的突然提升或下降),但只要噪音音頻信號的變化不超過設(shè)定的時長,該噪音音頻的有效狀態(tài)則不會被誤判為有效音頻。此時,基于上一增益調(diào)整區(qū)間音頻信號有效狀態(tài)(噪音音頻)所確定的調(diào)整區(qū)間的調(diào)整增益同樣適用于當(dāng)前增益調(diào)整區(qū)間。因此,可以將上一增益調(diào)整區(qū)間的音頻信號有效狀態(tài)(噪音音頻)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。上述設(shè)置方式的好處在于:在確定出當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號未發(fā)生變化(或變化后的有效狀態(tài)未持續(xù)設(shè)定時長)時,不需要再次計算當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益,進而可以減小計算量。
步驟105、根據(jù)調(diào)整增益對當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
示例性的,在確定出當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益后,可以將當(dāng)前過零區(qū)間(當(dāng)前增益調(diào)整區(qū)間)內(nèi)的采樣點的幅值均乘以調(diào)整增益進而使得采樣點的幅值盡可能地達到目標(biāo)幅值,從而達到調(diào)整音量的效果。在具體實施過程中,可采用如下C代碼執(zhí)行:
FOR j=1:Index[i+1]-Index[i]
Data[Index[i]+j]=Data[Index[i]+j]*Gain;
END
示例性的,若所確定的當(dāng)前過零區(qū)間的調(diào)整增益大于1,則當(dāng)前過零區(qū)間中所有采樣點的幅值乘以該調(diào)整增益后,幅值均會增大,因此輸出的音頻信號將會被放大,用戶所能聽到的音量也會相應(yīng)增大。若所確定的當(dāng)前過零區(qū)間的調(diào)整增益小于1,則當(dāng)前過零區(qū)間中所有采樣點的幅值乘以該調(diào)整增益后,幅值均會減小,因此輸出的音頻信號將會被壓縮,用戶所能聽到的音量也會相應(yīng)降低。因此,通過對當(dāng)前過零區(qū)間音頻信號的幅值的調(diào)整可以達到用戶所需要的音量。圖6為本發(fā)明實施例一提供的對采樣點增益調(diào)整前后示意圖。如圖6所示,根據(jù)步驟104中所確定的調(diào)整增益對當(dāng)前增益調(diào)整區(qū)間采樣點的幅值進行調(diào)整后,可以將大于目標(biāo)幅值(TargetLevel)的采樣點的幅值減小,也可以將大于噪音門限值(NoiseGate)且小于目標(biāo)幅值(TargetLevel)的有效音頻的采樣點的幅值增大(盡可能達到目標(biāo)音量),同時也可將小于噪音門限值(NoiseGate)的噪音音頻信號采樣點幅值減小(對噪音信號進行抑制)。值得注意的是,在對各個采樣點的幅值進行增益調(diào)整后,各個采樣點之間的斜率未發(fā)生很大的改變,因此可以表明,在頻域中音頻信號未發(fā)生明顯的失真現(xiàn)象。
所以,通過采用上述方式對當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值經(jīng)過調(diào)整輸出后,語音接收端接收到的音頻信號不僅在時域中可以達到所需要的音量,同時也可保證頻域中音頻信號盡可能少的失真,提升了用戶體驗。
本發(fā)明實施例中提供的一種音頻信號的自動增益控制方法,通過采用峰值來確定調(diào)整增益,使得調(diào)整增益可有效匹配最大幅值的音頻信號調(diào)整,避免了消頂失真現(xiàn)象。同時,每個增益調(diào)整區(qū)間可單獨確定調(diào)整增益,使得增益精度提高,也極大程度上降低頻域中音頻信號的失真度。此外,通過判斷當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號有效狀態(tài)是否發(fā)生變化且已持續(xù)設(shè)定時長,可以在音頻信號有效狀態(tài)發(fā)生持續(xù)變化時進行相應(yīng)的增益調(diào)整,而避免有效狀態(tài)發(fā)生突變時進行誤調(diào)整,達到提升用戶體驗的效果。
實施例二
圖7為本發(fā)明實施例二提供的一種音頻信號的自動增益控制方法的流程示意圖。本實施例以上述實施例為基礎(chǔ)進行優(yōu)化,本實施例以上述實施例為基礎(chǔ)進行優(yōu)化,在本實施例中,將步驟“根據(jù)當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號幅值確定為有效音頻”優(yōu)化為“將當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值與噪音門限值進行比較,如果大于噪音門限值,則確定為有效音頻;如果小于或等于噪音門限值,則確定為噪音音頻”。參照圖7,本實施例具體包括如下步驟:
步驟201、在待處理音頻信號中識別幅值過零點,將相鄰過零點之間確定為過零區(qū)間;
步驟202、根據(jù)過零區(qū)間確定至少一個增益調(diào)整區(qū)間。
步驟203、判斷當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值是否大于噪音門限值,若是,則執(zhí)行步驟204;若否,則執(zhí)行步驟205。
其中,噪音門限值為實際操作過程中,經(jīng)過大量實驗統(tǒng)計后所得到的經(jīng)驗值。通過噪音門限值的設(shè)置可以將有效音頻和噪音音頻進行有效區(qū)分。示例性的,噪音門限值也可通過其他測驗或者計算方法進行設(shè)置,本實施在此不做具體限定。
在本實施例中,音頻信號峰值為在當(dāng)前增益調(diào)整區(qū)間內(nèi),所有采樣點振幅絕對值的最大值。音頻信號的峰值可由音頻信號的自動增益控制裝置默認設(shè)定。
本領(lǐng)域技術(shù)人員可以理解的是,統(tǒng)計采樣點振幅絕對值的最大值的實現(xiàn)方式可以有很多種,本實施例不作具體限定。優(yōu)選的,可通過編寫C代碼來獲取過零區(qū)間內(nèi)所有采樣點的振幅值,然后可以計算所有采樣點振幅值的絕對值,并從所有絕對值中獲取到絕對值最大值。具體操作如下:
其中,Peak為采樣點振幅絕對值的最大值,i表示第i個過零區(qū)間。
示例性的,在確定當(dāng)前增益調(diào)整區(qū)間內(nèi)的有效音頻信號峰值之后,可以將該峰值與噪音門限值作比較,進而確定出當(dāng)前增益調(diào)整區(qū)間內(nèi)音頻信號的有效狀態(tài)。
步驟204、確定為有效音頻。
步驟205、確定為噪音音頻。
步驟206、如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長,則根據(jù)當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。
步驟207、根據(jù)調(diào)整增益對當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
本實施例在上述實施例的基礎(chǔ)上,對上述實施例中的有效狀態(tài)進行細化。通過噪音門限值的設(shè)定,可以將有效音頻和噪音音頻進行有效區(qū)分,進而可以使得下一步過零區(qū)間增益的調(diào)整更具有針對性。
實施例三
圖8為本發(fā)明實施例三提供的一種音頻信號的自動增益控制方法的流程示意圖。本實施例以上述實施例為基礎(chǔ)進行優(yōu)化,本實施例以上述實施例為基礎(chǔ)進行優(yōu)化,在本實施例中,將步驟“確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長”優(yōu)化為“在確定當(dāng)前增益調(diào)整區(qū)間的有效狀態(tài)為有效音頻時,識別有效話音保持計數(shù)值是否大于或等于有效設(shè)定數(shù)量值;若是,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間;若否,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將有效話音保持計數(shù)值加一”以及“在確定當(dāng)前增益調(diào)整區(qū)間的有效狀態(tài)為噪音音頻時,識別噪音保持計數(shù)值是否等于零;若是,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間;若否,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將噪音保持計數(shù)值減一”。
上述對有效話音的保持時長和噪音的保持時長控制方案,可以單獨采用,也可以結(jié)合采用。本實施例將以結(jié)合采用的方案為例進行說明。參照圖8,本實施例具體包括如下步驟:
步驟301、在待處理音頻信號中識別幅值過零點,將相鄰過零點之間確定為過零區(qū)間。
步驟302、根據(jù)過零區(qū)間確定至少一個增益調(diào)整區(qū)間,本實施例中,優(yōu)選將每個過零區(qū)間均作為一個增益調(diào)整區(qū)間。
步驟303、判斷當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值是否大于噪音門限值,即Pake>NoiseGate,若是,則執(zhí)行步驟304;若否,則執(zhí)行步驟307。
步驟304、識別有效話音保持計數(shù)值(CountUp)是否大于或等于有效設(shè)定數(shù)量值(StartTime),即CountUp≥StartTime,若是,則執(zhí)行步驟305;否則,執(zhí)行步驟306。
其中,有效設(shè)定數(shù)量值為在實際操作過程中經(jīng)過大量試驗得出的經(jīng)驗值。有效話音保持計數(shù)值可理解為衡量音頻信號有效狀態(tài)是否發(fā)生變化的計數(shù)器。如果該計數(shù)器所累加的值超過有效設(shè)定數(shù)量值,則可以表示音頻信號的有效狀態(tài)發(fā)生了變化,即從噪音音頻變?yōu)橛行б纛l,且持續(xù)的時間足夠長。同時,也可以避免有效音頻發(fā)生突變,例如在持續(xù)的噪音中突然出現(xiàn)短時有效音頻時被誤判的情況。
步驟305、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間。此時,設(shè)置有效話音保持計數(shù)值為有效設(shè)定數(shù)量值,即CountUp=StartTime,維持有效話音保持計數(shù)值不變,不再增長。且同時可以將噪音保持計數(shù)值重置為噪音設(shè)定數(shù)量值,即CountDown=HoldTime,表明無需再持續(xù)噪音狀態(tài)。然后執(zhí)行步驟310。
其中,設(shè)定數(shù)量的增益調(diào)整區(qū)間為經(jīng)過大量試驗所確定的經(jīng)驗值。
步驟306、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將有效話音保持計數(shù)值加一,然后執(zhí)行步驟311。
此步驟表明雖然變更為有效話音,但可能是突變,所以仍然執(zhí)行噪音抑制策略。同時,可以將噪音保持計數(shù)值清零,以便短時內(nèi)再次出現(xiàn)噪音狀態(tài)時可進行噪音抑制。
示例性的,如果有效話音保持計數(shù)值CountUp的初始值為0,有效設(shè)定數(shù)量值StartTime為3時,如果當(dāng)前增益調(diào)整區(qū)間的有效狀態(tài)為有效音頻時,有效音頻變化一次(例如音量升高一次)但未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間時,有效話音保持計數(shù)值加一(此時等于2)。若在設(shè)定數(shù)量的增益調(diào)整區(qū)間范圍內(nèi),隨著有效音頻狀態(tài)的持續(xù),CountUp會不斷增加。當(dāng)CountUp增加到3時,表示該有效音頻已經(jīng)持續(xù)了設(shè)定數(shù)量的增益調(diào)整區(qū)間。
步驟307、識別噪音保持計數(shù)值(CountDown)是否等于零,若是,則執(zhí)行步驟308;否則,執(zhí)行步驟309。
其中,噪音保持計數(shù)值也可理解為衡量音頻信號有效狀態(tài)變?yōu)樵胍舻挠嫈?shù)器。該噪音保持計數(shù)值的初始值為噪音設(shè)定數(shù)量值(HoldTime),為非零值。噪音保持計數(shù)值降低到零時,表示音頻信號的有效狀態(tài)變化為噪音,并且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間。
步驟308、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將噪音保持計數(shù)值保持為零,同時可以將有效話音保持計數(shù)值重置為有效設(shè)定數(shù)量值StartTime,以便在噪音短時出現(xiàn)后再出現(xiàn)有效話音時,能執(zhí)行有效話音的增益調(diào)整策略。然后執(zhí)行步驟311。
其中,設(shè)定數(shù)量的增益調(diào)整區(qū)間以及噪音設(shè)定數(shù)量值為經(jīng)過大量試驗所確定的經(jīng)驗值。噪音保持計數(shù)值和噪音設(shè)定數(shù)量值的引入可以避免有效音頻中突然出現(xiàn)噪音時被誤判為噪音的情況,只有持續(xù)設(shè)定時長的噪音才會進行抑制。
步驟309、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將噪音保持計數(shù)值減一。然后執(zhí)行步驟310。
示例性的,若在當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)為有效音頻,并且噪音保持計數(shù)值為3(不等于0)時,如果變化為噪音音頻一次(例如音量突然減小一次)但未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,則噪音保持計數(shù)值減一(此時等于2)。若在設(shè)定數(shù)量的增益調(diào)整區(qū)間范圍內(nèi),隨著有效音頻狀態(tài)的變化,噪音保持計數(shù)值會不斷減小。當(dāng)噪音保持計數(shù)值減小到0時,表示該噪音音頻已經(jīng)持續(xù)了設(shè)定數(shù)量的增益調(diào)整區(qū)間。則此時當(dāng)前增益調(diào)整區(qū)間內(nèi)音頻信號的有效狀態(tài)可確定為噪音音頻,需進行抑制。
步驟310、將設(shè)定目標(biāo)幅值除以當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值,作為當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益,而后執(zhí)行步驟312。
其中,目標(biāo)幅值與噪音門限值的確定方式類似,也為在實際操作過程中,經(jīng)過大量實驗統(tǒng)計后所得到的經(jīng)驗值。在目標(biāo)幅值下音頻信號的播放效果最好。示例性的,目標(biāo)幅值也可通過其他測驗或者計算方法進行設(shè)置,本實施在此不做具體限定。
需要說明的是,由于每個過零區(qū)間內(nèi)音頻信號的峰值不一定完全相同,因此,基于音頻信號峰值所確定的調(diào)整增益只適用于當(dāng)前過零區(qū)間。這樣設(shè)置的好處在于可以使得音頻信號自動增益的調(diào)整更加具有針對性,并且可以提高增益精度。
步驟311、將當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益設(shè)置為設(shè)定的噪音抑制增益,而后執(zhí)行步驟312。
其中,設(shè)定的噪音抑制增益為在實際操作過程中,經(jīng)過大量實驗統(tǒng)計后所得到的經(jīng)驗值,該經(jīng)驗值大于0且小于1,表示對噪音音頻的壓縮比例。通過采用該經(jīng)驗值可以使得噪音音頻的壓縮效果最好。通過采用上述設(shè)置方式,可以實現(xiàn)對噪音音頻的抑制,進而可以提高語音通信的質(zhì)量,提升用戶體驗。
步驟312、根據(jù)調(diào)整增益對當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
本實施例三在上述實施例的技術(shù)上,通過判斷當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)是否發(fā)生變化且已持續(xù)設(shè)定時長,可以確定出在不同情況下音頻信號發(fā)生變化(或未發(fā)生變化)時的當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益,同時也可以防止由于音頻信號有效狀態(tài)的突變(并未持續(xù)設(shè)定時長)而導(dǎo)致當(dāng)前音頻信號的有效狀態(tài)被誤判等情況的發(fā)生。
實施例四
圖9為本發(fā)明實施例四提供的一種音頻信號的自動增益控制方法的流程示意圖。本實施例以上述實施例為基礎(chǔ)進行優(yōu)化,參照圖9,本實施例具體包括如下步驟:
步驟401、將音頻信號數(shù)據(jù)流中的上一幀音頻信號與當(dāng)前幀音頻信號拼合為待處理音頻信號。
其中,音頻信號數(shù)據(jù)流中上一幀音頻信號表示當(dāng)前要處理并播放的音頻信號。當(dāng)前幀音頻信號表示即將要處理的音頻信號。將上一幀音頻信號與當(dāng)前幀音頻信號拼合后作為待處理音頻信號,可以保證接收端所接收到音頻信號的平滑性。由于上一幀音頻信號與當(dāng)前幀音頻信號的拼合,將導(dǎo)致待處理的音頻信號的幀長度增大。示例性的,若上一幀音頻信號和當(dāng)前幀音頻信號的幀長度都為N,則將上一幀音頻信號與當(dāng)前幀音頻信號拼合后,當(dāng)前待處理音頻信號的幀長度為N+N=2N。
步驟402、在待處理音頻信號中識別幅值過零點,直至當(dāng)前幀音頻信號的第一個過零點。
將上一幀音頻信號與當(dāng)前幀音頻信號的拼合后,上一幀音頻信號最后一個過零點可以作為當(dāng)前幀音頻信號的第一個過零點。同時,上一幀音頻信號的最后一個過零區(qū)間也可以作為當(dāng)前音頻信號的第一個過零區(qū)間。通過將上一幀音頻信號與當(dāng)前幀音頻信號的拼合,也可以保證過零區(qū)間的完整性。
步驟403、將相鄰過零點之間確定為過零區(qū)間。
步驟404、根據(jù)過零區(qū)間確定至少一個增益調(diào)整區(qū)間。
步驟405、判斷當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值是否大于噪音門限值,即Pake>NoiseGate,若是,則執(zhí)行步驟406;若否,則執(zhí)行步驟409。
步驟406、識別有效話音保持計數(shù)值(CountUp)是否大于或等于有效設(shè)定數(shù)量值,(StartTime),即CountUp≥StartTime,若是,則執(zhí)行步驟407;否則,執(zhí)行步驟408。
步驟407、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,此時,設(shè)置有效話音保持計數(shù)值為有效設(shè)定數(shù)量值,即CountUp=StartTime,且同時可以將噪音保持計數(shù)值重置為噪音設(shè)定數(shù)量值,即CountDown=HoldTime,然后執(zhí)行步驟412。
步驟408、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將有效話音保持計數(shù)值加一,即CountUp++。同時,可以將噪音保持計數(shù)值清零,即CountDown=0,然后執(zhí)行步驟413。
步驟409、識別噪音保持計數(shù)值(CountDown)是否等于零,若是,則執(zhí)行步驟410;否則,執(zhí)行步驟411。
步驟410、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將噪音保持計數(shù)值保持為零,即CountDown=0,同時可以將有效話音保持計數(shù)值重置為有效設(shè)定數(shù)量值StartTime,即CountUp=StartTime。然后執(zhí)行步驟413。
步驟411、確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將噪音保持計數(shù)值減一,即CountDown--。然后執(zhí)行步驟412。
步驟412、將設(shè)定目標(biāo)幅值除以當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值,作為當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益Gain,即然后執(zhí)行步驟414。
步驟413、將當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益(Gain)設(shè)置為設(shè)定的噪音抑制增益(Gain_NG),即設(shè)置Gain=Gain_NG,其中,Gain_NG<1,然后執(zhí)行步驟414。
步驟414、根據(jù)調(diào)整增益對當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
本實施例四在上述實施例的基礎(chǔ)上,通過將音頻信號數(shù)據(jù)流中的上一幀音頻信號與當(dāng)前幀音頻信號拼合后,可以保證待處理音頻信號中過零區(qū)間的完整性,同時也可以實現(xiàn)上一幀音頻信號到當(dāng)前幀音頻信號的平滑過渡。
實施例五
圖10為本發(fā)明實施例五提供的一種音頻信號的自動增益控制裝置的結(jié)構(gòu)框圖。該裝置可由軟件和/或硬件實現(xiàn),可執(zhí)行音頻信號的自動增益控制方法。如圖10所示,該裝置包括:過零區(qū)間確定模塊501、調(diào)整區(qū)間確定模塊502、有效狀態(tài)確定模塊503、第一調(diào)整增益確定模塊504和幅值調(diào)整模塊505。
其中,過零區(qū)間確定模塊501,用于在待處理音頻信號中識別幅值過零點,將相鄰過零點之間確定為過零區(qū)間;調(diào)整區(qū)間確定模塊502,用于根據(jù)所述過零區(qū)間確定至少一個增益調(diào)整區(qū)間;有效狀態(tài)確定模塊503,用于根據(jù)所述增益調(diào)整區(qū)間內(nèi)的音頻信號幅值確定音頻信號的有效狀態(tài);第一調(diào)整增益確定模塊504,用于如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定時長,則根據(jù)所述當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益;幅值調(diào)整模塊505,用于根據(jù)所述調(diào)整增益對所述當(dāng)前增益調(diào)整區(qū)間音頻信號的幅值進行調(diào)整并輸出。
本發(fā)明實施例中提供的一種音頻信號的自動增益控制裝置,通過采用峰值來確定調(diào)整增益,使得調(diào)整增益可有效匹配最大幅值的音頻信號調(diào)整,避免了消頂失真現(xiàn)象。同時,每個增益調(diào)整區(qū)間可單獨確定調(diào)整增益,使得增益精度提高,也極大程度上降低頻域中音頻信號的失真度。此外,通過判斷當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號有效狀態(tài)是否發(fā)生變化且已持續(xù)設(shè)定時長,可以在音頻信號有效狀態(tài)發(fā)生持續(xù)變化時進行相應(yīng)的增益調(diào)整,而避免有效狀態(tài)發(fā)生突變時進行誤調(diào)整,達到提升用戶體驗的效果。
在上述實施例的基礎(chǔ)上,所述調(diào)整區(qū)間確定模塊具體用于:將每個過零區(qū)間確定為一個增益調(diào)整區(qū)間;或?qū)⑦B續(xù)的至少兩個過零區(qū)間確定為一個增益調(diào)整區(qū)間。
在上述實施例的基礎(chǔ)上,該裝置還包括:第二調(diào)整增益確定模塊,用于如果確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)未發(fā)生變化,或變化后的有效狀態(tài)未持續(xù)設(shè)定時長,則根據(jù)上一增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。
在上述實施例的基礎(chǔ)上,所述有效狀態(tài)確定模塊具體用于:將所述當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值與噪音門限值進行比較;如果大于所述噪音門限值,則確定為有效音頻;如果小于或等于所述噪音門限值,則確定為噪音音頻。
在上述實施例的基礎(chǔ)上,所述第一調(diào)整增益確定模塊包括:調(diào)整增益確定單元,用于如果所述當(dāng)前增益調(diào)整區(qū)間的音頻信號為有效音頻,則根據(jù)所述當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值確定所述當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益;噪音抑制增益設(shè)定單元,用于如果所述當(dāng)前增益調(diào)整區(qū)間的音頻信號為噪音音頻,將所述當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益設(shè)置為設(shè)定的噪音抑制增益。
在上述實施例的基礎(chǔ)上,所述調(diào)整增益確定單元具體用于:將設(shè)定目標(biāo)幅值除以所述當(dāng)前增益調(diào)整區(qū)間內(nèi)的音頻信號峰值,作為所述當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。
在上述實施例的基礎(chǔ)上,所述過零區(qū)間確定模塊具體用于:將音頻信號數(shù)據(jù)流中的上一幀音頻信號與當(dāng)前幀音頻信號拼合為待處理音頻信號;在待處理音頻信號中識別幅值過零點,直至當(dāng)前幀音頻信號的第一個過零點;將相鄰過零點之間確定為過零區(qū)間。
在上述實施例的基礎(chǔ)上,所述第一增益調(diào)整模塊具體用于:在確定當(dāng)前增益調(diào)整區(qū)間的有效狀態(tài)為有效音頻時,識別有效話音保持計數(shù)值是否大于或等于有效設(shè)定數(shù)量值;若是,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間;若否,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將有效話音保持計數(shù)值加一;根據(jù)所述當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。
在上述實施例的基礎(chǔ)上,所述第一增益調(diào)整模塊具體用于:在確定當(dāng)前增益調(diào)整區(qū)間的有效狀態(tài)為噪音音頻時,識別噪音保持計數(shù)值是否等于零;若是,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化且已持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間;若否,則確定當(dāng)前增益調(diào)整區(qū)間的音頻信號的有效狀態(tài)發(fā)生變化未持續(xù)設(shè)定數(shù)量的增益調(diào)整區(qū)間,將噪音保持計數(shù)值減一;根據(jù)所述當(dāng)前增益調(diào)整區(qū)間的音頻信號有效狀態(tài)確定當(dāng)前增益調(diào)整區(qū)間的調(diào)整增益。
上述實施例中提供的音頻信號的自動增益控制裝置可執(zhí)行本發(fā)明任意實施例所提供的音頻信號的自動增益控制方法,具備執(zhí)行該方法相應(yīng)的功能模塊和有益效果。未在上述實施例中詳盡描述的技術(shù)細節(jié),可參見本發(fā)明任意實施例所提供的音頻信號的自動增益控制方法。
注意,上述僅為本發(fā)明的較佳實施例及所運用技術(shù)原理。本領(lǐng)域技術(shù)人員會理解,本發(fā)明不限于這里所述的特定實施例,對本領(lǐng)域技術(shù)人員來說能夠進行各種明顯的變化、重新調(diào)整和替代而不會脫離本發(fā)明的保護范圍。因此,雖然通過以上實施例對本發(fā)明進行了較為詳細的說明,但是本發(fā)明不僅僅限于以上實施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。