(中國(guó)西南電子技術(shù)研究所,成都 610036)
語(yǔ)音自動(dòng)增益控制(Automatic Gain Control,AGC)是用來(lái)穩(wěn)定語(yǔ)音信號(hào)幅度的一種技術(shù)。語(yǔ)音AGC能夠自動(dòng)地調(diào)節(jié)信號(hào)幅度,在提升語(yǔ)音的清晰度、可懂度,改善用戶的收聽體驗(yàn)等方面都有重要的作用。目前語(yǔ)音AGC已廣泛應(yīng)用于網(wǎng)絡(luò)語(yǔ)音通信(Voice over Internet Protocol,VoIP)、移動(dòng)語(yǔ)音通信、車載語(yǔ)音通信等領(lǐng)域。
由于語(yǔ)音屬于頻率不固定的非恒包絡(luò)、非平穩(wěn)信號(hào),而且正常語(yǔ)音之間存在通話間隙等停頓,所以往往無(wú)法直接借鑒自動(dòng)化控制[1]與衛(wèi)星通信等領(lǐng)域的自動(dòng)增益控制算法。傳統(tǒng)VoIP與3GPP的語(yǔ)音AGC[2]采用峰值檢測(cè)的方式實(shí)現(xiàn)語(yǔ)音的自動(dòng)增益控制,雖然實(shí)現(xiàn)簡(jiǎn)單,具備一定的增益處理能力,但算法的峰值參量按幾十甚至上百毫秒分段更新,迭代較慢,而且峰值檢測(cè)沒有考慮段內(nèi)語(yǔ)音能量變化,總是用固定的比值關(guān)系計(jì)算當(dāng)前段內(nèi)增益,增益效果較差。也有學(xué)者從實(shí)現(xiàn)的角度,開發(fā)基于現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,FPGA)的音頻AGC處理系統(tǒng)[3]、基于SOPC(System on Chip)的嵌入式數(shù)字音頻的自動(dòng)增益控制方案[4]等,但其算法核心都是根據(jù)能量將語(yǔ)音劃分閾值段,再根據(jù)語(yǔ)音的閾值范圍進(jìn)行增益調(diào)整,增益調(diào)節(jié)能力較差,通用性也不高。
基于最小均方誤差(Least Mean Square,LMS)的語(yǔ)音AGC算法,通過(guò)計(jì)算功率參量并結(jié)合LMS算法迭代計(jì)算增益,相比基于峰值檢測(cè)的語(yǔ)音AGC具有增益響應(yīng)速度快、增益處理后非線性失真小等優(yōu)點(diǎn)。其中固定步LMS語(yǔ)音AGC算法[5]面臨與其他固定步長(zhǎng)LMS算法一樣的問(wèn)題,即無(wú)法解決穩(wěn)態(tài)誤差和收斂速度兩者之間的矛盾,所以結(jié)合變步長(zhǎng)LMS算法的思想[6-10]可以進(jìn)一步提升增益控制的收斂速度與控制精度。文獻(xiàn)[11]針對(duì)歸一化最小均方誤差算法(Normalized Least Mean Square,NLMS)提出了一種變步長(zhǎng)LMS語(yǔ)音AGC方案,增益響應(yīng)速度相比文獻(xiàn)[5]固定步長(zhǎng)LMS語(yǔ)音AGC算法有所提高。文獻(xiàn)[12]則在文獻(xiàn)[11]的基礎(chǔ)上提出用功率誤差性能表面的梯度值來(lái)調(diào)節(jié)LMS算法的步長(zhǎng),進(jìn)一步提升了增益的響應(yīng)速度。
綜上所述,現(xiàn)有基于LMS的語(yǔ)音AGC 算法都是計(jì)算功率作為參量,進(jìn)而把功率誤差代入LMS公式迭代計(jì)算語(yǔ)音增益,但語(yǔ)音音量是否穩(wěn)定主要取決于語(yǔ)音信號(hào)的振幅是否穩(wěn)定,而現(xiàn)有功率參量跟蹤了語(yǔ)音每個(gè)點(diǎn)的功率變化,瞬時(shí)變化過(guò)快、過(guò)劇烈,導(dǎo)致迭代計(jì)算的增益變化激進(jìn)、抖動(dòng)劇烈,所以功率參量并不適合作為語(yǔ)音信號(hào)振幅的度量。而且,基于功率的LMS語(yǔ)音AGC算法需要對(duì)每個(gè)采樣點(diǎn)進(jìn)行迭代運(yùn)算,計(jì)算量較大。
針對(duì)上述問(wèn)題,本文提出一種基于語(yǔ)音包絡(luò)的變步長(zhǎng)LMS語(yǔ)音AGC算法。相比基于功率參量的LMS語(yǔ)音AGC算法[11-12],本文通過(guò)按幀計(jì)算語(yǔ)音包絡(luò)作為參量,提升了參量表示語(yǔ)音振幅的準(zhǔn)確度,解決了現(xiàn)有功率參量增益控制效率低的問(wèn)題,得到的增益曲線更平滑,增益處理后語(yǔ)音失真也更??;通過(guò)利用遞歸平滑的語(yǔ)音包絡(luò)誤差平方調(diào)節(jié)LMS算法的步長(zhǎng),算法的增益響應(yīng)速度更快;由于避免了對(duì)所有采樣點(diǎn)進(jìn)行迭代計(jì)算,算法的迭代運(yùn)算量還可以下降一個(gè)數(shù)量級(jí)。
現(xiàn)有LMS語(yǔ)音AGC算法[11-12]采用平滑功率作為參量,并依據(jù)功率誤差迭代計(jì)算語(yǔ)音增益。
首先對(duì)語(yǔ)音進(jìn)行端點(diǎn)檢測(cè),區(qū)分語(yǔ)音段和靜音段,如果是靜音段,則將增益值設(shè)為1,不對(duì)靜音段做增益處理;如果是語(yǔ)音段,則對(duì)語(yǔ)音信號(hào)計(jì)算平滑后的功率值:
Px(n)=aPx(n-1)+(1-a)x2(n)。
(1)
參數(shù)a是一個(gè)大于0小于1的數(shù),用來(lái)對(duì)功率進(jìn)行平滑。將語(yǔ)音功率值Px(n)作為輸入信號(hào)代入如下公式,進(jìn)行基于LMS算法的語(yǔ)音增益迭代計(jì)算:
y(n)=x(n)g(n),
(2)
Py(n)=g2(n)Px(n),
(3)
e(n)=Pexp(n)-Py(n),
(4)
g(n)=g(n-1)+uPx(n)e(n)。
(5)
語(yǔ)音增益系數(shù)g(n)即為L(zhǎng)MS算法的權(quán)值迭代參數(shù),其隨著功率誤差e(n)迭代變化,而功率誤差參數(shù)e(n)由期望功率Pexp(n)與輸出功率Py(n)相減得到,輸出功率Py(n)則是輸入功率Px(n)與增益參數(shù)g(n)平方的乘積。最后將語(yǔ)音增益系數(shù)g(n)與輸入語(yǔ)音信號(hào)x(n)相乘得到增益調(diào)整過(guò)后的輸出語(yǔ)音信號(hào)y(n)。公式(5)中的增益迭代參數(shù)u為算法中的步長(zhǎng)因子,u如果是固定值則算法為固定步長(zhǎng)LMS語(yǔ)音AGC算法,u如果由其他參量計(jì)算得到則為變步長(zhǎng)LMS語(yǔ)音AGC算法。
語(yǔ)音音量是否平穩(wěn)主要取決于語(yǔ)音信號(hào)的振幅是否穩(wěn)定,而包絡(luò)可以反映高頻信號(hào)振幅的變化情況,所以通過(guò)計(jì)算語(yǔ)音包絡(luò)就可以得到語(yǔ)音振幅的變化趨勢(shì)。
傳統(tǒng)希爾伯特變換計(jì)算信號(hào)包絡(luò)的方法對(duì)幅度調(diào)制或相位調(diào)制等包含確定載波的信號(hào)比較適用,而語(yǔ)音是頻率不固定的非恒包絡(luò)、非平穩(wěn)信號(hào),不包含確定的載波,所以希爾伯特變換并不適合用來(lái)計(jì)算語(yǔ)音信號(hào)的包絡(luò)。
通過(guò)對(duì)語(yǔ)音信號(hào)分幀,然后將每幀的最大值順序連接,也能得到包絡(luò)曲線,但是直接分幀取最值的方式,存在固有缺陷。分幀長(zhǎng)度太小,會(huì)導(dǎo)致每幀的點(diǎn)太少,每幀的最大值波動(dòng)較大,包絡(luò)出現(xiàn)很多毛刺,包含太多不必要的語(yǔ)音細(xì)節(jié);如果增大分幀長(zhǎng)度,雖然能夠緩解最大值波動(dòng)問(wèn)題,但無(wú)法兼顧段內(nèi)語(yǔ)音能量的變化,還會(huì)導(dǎo)致處理的實(shí)時(shí)性下降。
考慮到語(yǔ)音不含確定載波,而且語(yǔ)音包絡(luò)受人聲帶變化頻率的限制在毫秒量級(jí)上呈現(xiàn)緩慢衰減的特性,所以本文考慮將分幀取最值與包絡(luò)檢波相結(jié)合,提出分幀的包絡(luò)檢波法來(lái)提取語(yǔ)音振幅隨時(shí)間變化的規(guī)律。
首先對(duì)輸入語(yǔ)音信號(hào)x(n)取絕對(duì)值,得到
xabs(n)=|x(n)|。
(6)
然后將xabs(n)按N個(gè)點(diǎn)一幀劃分子幀,得到xabs(n,l),l代表幀數(shù),n(1≤n≤N)代表幀內(nèi)的點(diǎn)。選取每個(gè)子幀內(nèi)的最大值作為該子幀的模值,第l幀的模值
mnv(l)=max(xabs(n,l)),1≤n≤N。
(7)
為了避免傳統(tǒng)峰值檢測(cè)算法分幀長(zhǎng)度太大導(dǎo)致AGC響應(yīng)速度慢的問(wèn)題,本文按1 ms進(jìn)行分幀,但按1 ms分幀又會(huì)導(dǎo)致每幀的模值出現(xiàn)較大波動(dòng),所以本文并不直接使用模值作為語(yǔ)音包絡(luò)值,而是結(jié)合包絡(luò)檢波的思想,將每幀的模值mnv(l)與包絡(luò)值進(jìn)行比較,如果大于上一幀語(yǔ)音包絡(luò),則將當(dāng)前的模值mnv(l)作為語(yǔ)音包絡(luò)值,否則將上一幀的包絡(luò)值乘以衰減系數(shù)ρ作為當(dāng)前幀的語(yǔ)音包絡(luò)值:
(8)
式中:ρ為小于1且趨近于1的小數(shù)。分幀包絡(luò)檢波的處理方式既能保證計(jì)算的語(yǔ)音包絡(luò)值能立即跟上當(dāng)前語(yǔ)音幅度的峰值,又能利用語(yǔ)音包絡(luò)在毫秒量級(jí)上呈現(xiàn)緩慢衰減的特性,不僅計(jì)算簡(jiǎn)單,而且對(duì)語(yǔ)音包絡(luò)的擬合度很高。
同樣先對(duì)語(yǔ)音進(jìn)行端點(diǎn)檢測(cè),如果是語(yǔ)音段,則對(duì)語(yǔ)音計(jì)算語(yǔ)音包絡(luò)Sx(l),作為輸入信號(hào)代入如下公式,否則增益值設(shè)為1。
基于語(yǔ)音包絡(luò)的LMS語(yǔ)音AGC處理如下:
y(n,l)=x(n,l)g(l),1≤n≤N,
(9)
Sy(l)=g(l)Sx(l),
(10)
e(l)=Sexp(l)-Sy(l),
(11)
g(l)=g(l-1)+u(l)Sx(l)e(l)。
(12)
g(l)為按幀進(jìn)行迭代的語(yǔ)音增益系數(shù),u(l)是可變步長(zhǎng)因子,包絡(luò)誤差值e(l)是期望包絡(luò)Sexp(l)與增益作用后的輸出包絡(luò)Sy(l)的差值,輸出包絡(luò)功率Sy(l)則是輸入包絡(luò)Sx(l)與增益參數(shù)g(l)的乘積。最后將輸入的第l幀語(yǔ)音信號(hào)x(n,l)的每個(gè)點(diǎn)1≤n≤N乘以增益系數(shù)g(l)得到增益調(diào)整過(guò)后的輸出語(yǔ)音信號(hào)y(n,l)。
由于固定步長(zhǎng)LMS算法無(wú)法解決穩(wěn)態(tài)誤差和收斂速度之間的矛盾,所以本文結(jié)合可變步長(zhǎng)算法的思想,利用遞歸平滑的語(yǔ)音包絡(luò)誤差平方實(shí)現(xiàn)步長(zhǎng)因子的調(diào)整。
首先利用瞬時(shí)包絡(luò)誤差平方作為均方誤差函數(shù)的估計(jì):
(l)=e(l)2。
(13)
然后利用語(yǔ)音前后幀之間的強(qiáng)相關(guān)性,對(duì)均方誤差的估計(jì)值進(jìn)行遞歸平滑:
δ(l)=βδ(l-1)+(1-β)(l)。
(14)
最后將遞歸平滑后的均方誤差估計(jì)值乘上參數(shù)λ、加上參數(shù)?進(jìn)行限定,得到最終的可變步長(zhǎng)因子
u(l)=λδ(l)+?。
(15)
為了防止輸出信號(hào)過(guò)大對(duì)器件造成損害,AGC方案中需要配置限幅處理,將超出上限的語(yǔ)音信號(hào)控制在上限之內(nèi)?,F(xiàn)有基于LMS的語(yǔ)音AGC算法通過(guò)誤差控制增益,然后通過(guò)迭代逐漸向目標(biāo)值收斂,具有算法結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn),但是迭代的增益計(jì)算方式,無(wú)法保證當(dāng)前處理的語(yǔ)音不超出設(shè)定的上限,所以基于LMS算法的語(yǔ)音AGC在增益處理后需要增加限幅處理。
參見公式(9),本文算法按幀對(duì)語(yǔ)音信號(hào)乘以增益系數(shù),所以限幅處理也可以按幀進(jìn)行操作。首先計(jì)算增益處理后每幀的最大值:
ymax=max(y(n,l)),1≤n≤N。
(16)
再將最大值與設(shè)定的幅度上限進(jìn)行比較,如果超出上限,則將整幀的值作衰減使其不超過(guò)門限:
(17)
式中:1≤n≤N。
因?yàn)楸疚牡南薹鶛C(jī)制是將一幀信號(hào)整體的增益進(jìn)行衰減,如圖1(a)所示,保護(hù)了原本的波形包絡(luò),不會(huì)像傳統(tǒng)限幅處理導(dǎo)致削頂失真,如圖1(b)所示。所以經(jīng)過(guò)本文的限幅處理,語(yǔ)音既不會(huì)出現(xiàn)超過(guò)幅度上限的尖峰,同時(shí)也不會(huì)出現(xiàn)嚴(yán)重的失真。
圖1 限幅效果對(duì)比
本節(jié)首先在表示語(yǔ)音振幅的準(zhǔn)確度與計(jì)算量?jī)蓚€(gè)維度,對(duì)本文的包絡(luò)參量與現(xiàn)有平滑功率參量進(jìn)行比較,然后進(jìn)一步分析本文參數(shù)λ、?對(duì)步長(zhǎng)因子性能的影響。
圖 2(a)所示為采樣率16 kHz時(shí)漢語(yǔ)“電話”兩個(gè)字的語(yǔ)音信號(hào)絕對(duì)值的時(shí)域波形及其理想包絡(luò),可以看出“電話”兩字的整體音量穩(wěn)定,所以其包絡(luò)也比較穩(wěn)定,但是其內(nèi)部采樣點(diǎn)的幅度變化卻很劇烈。所以語(yǔ)音AGC想要準(zhǔn)確地進(jìn)行自動(dòng)增益控制,需要增益迭代參量能夠準(zhǔn)確地跟蹤語(yǔ)音包絡(luò)的變化,反映語(yǔ)音振幅的大小而忽略包絡(luò)內(nèi)部的瞬時(shí)變化,避免對(duì)包絡(luò)內(nèi)部點(diǎn)的過(guò)渡調(diào)整。
圖2 語(yǔ)音包絡(luò)參量對(duì)比功率參量
傳統(tǒng)基于功率參量的LMS語(yǔ)音AGC算法按照公式(1)進(jìn)行計(jì)算,其計(jì)算結(jié)果如圖 2(b)所示,由于功率參量計(jì)算時(shí)跟蹤了語(yǔ)音信號(hào)的每一個(gè)采樣點(diǎn),所以計(jì)算結(jié)果受每一個(gè)采樣點(diǎn)影響,瞬時(shí)起伏較大,其頻率分量與語(yǔ)音信號(hào)頻率類似,并沒有準(zhǔn)確地反映語(yǔ)音的振幅變化。傳統(tǒng)希爾伯特變化計(jì)算包絡(luò)如圖2(c)所示,可以看到其不適合用來(lái)計(jì)算語(yǔ)音信號(hào)的包絡(luò)。本文按1 ms分幀取極值如圖 2(d)黑色線條所示,可以看到1 ms的分幀極值波動(dòng)依然較大,包含太多不必要的語(yǔ)音細(xì)節(jié),而基于1 ms分幀計(jì)算的語(yǔ)音包絡(luò)如圖 2(d)紅色線條所示,其很好地跟蹤了語(yǔ)音的振幅變化,也更貼近語(yǔ)音的真實(shí)包絡(luò)。
對(duì)三段語(yǔ)音分別計(jì)算分幀包絡(luò)參量、傳統(tǒng)功率參量與理想包絡(luò)的均方誤差,如表1所示。可以看到,本文計(jì)算的分幀包絡(luò)與理想包絡(luò)的均方誤差小于功率參量與理想包絡(luò)的均方誤差,說(shuō)明分幀包絡(luò)表示振幅的準(zhǔn)確度更高,更好地跟蹤了振幅的變化。
表1 與理想包絡(luò)的均方誤差
現(xiàn)有基于功率參量的LMS語(yǔ)音AGC算法需要對(duì)每個(gè)采樣點(diǎn)計(jì)算平均功率,并將每個(gè)點(diǎn)的功率誤差代入LMS算法進(jìn)行迭代。本文算法的語(yǔ)音包絡(luò)參量按幀進(jìn)行計(jì)算,后續(xù)基于LMS的語(yǔ)音增益系數(shù)也按幀進(jìn)行迭代,所以本文算法的迭代運(yùn)算量只有現(xiàn)有基于功率參量算法的1/N,N為分幀長(zhǎng)度。以采樣率16 kHz的語(yǔ)音信號(hào)為例,按1 ms分幀計(jì)算語(yǔ)音包絡(luò),則本文算法的迭代運(yùn)算量只有現(xiàn)有基于功率的LMS語(yǔ)音AGC算法的1/16,下降了一個(gè)數(shù)量級(jí)。
真實(shí)的語(yǔ)音信號(hào)是一個(gè)非平穩(wěn)信號(hào),所以誤差e(l)一般難以長(zhǎng)時(shí)間收斂在0附近,但不妨礙用單音信號(hào)來(lái)測(cè)試參數(shù)對(duì)步長(zhǎng)因子的影響。
參見可變步長(zhǎng)因子公式(15),令固定參數(shù)λ=2,參數(shù)?依次變化為0、0.2、0.4。從圖 2可以看出,當(dāng)λ固定時(shí),參數(shù)?限定了步長(zhǎng)因子的最小值,即步長(zhǎng)因子收斂的極限值。在LMS中,為了保證穩(wěn)態(tài)誤差,希望收斂時(shí)步長(zhǎng)因子越小越好,但由于語(yǔ)音信號(hào)非平穩(wěn),一般難以完全收斂,所以通過(guò)設(shè)置?可以保證算法在時(shí)變語(yǔ)音信號(hào)下的響應(yīng)速度。
固定參數(shù)?=0.2,參數(shù)λ依次變化為2、3、4,從圖 3可以看出,參數(shù)λ主要影響步長(zhǎng)因子變化的斜率。參數(shù)λ的值越大,那么誤差較大時(shí)步長(zhǎng)因子就越大,收斂速度也越快,誤差曲線底部的變化也越快,小誤差下步長(zhǎng)因子的穩(wěn)定性欠佳;如果參數(shù)λ的值太小,誤差較大時(shí)步長(zhǎng)因子較小,影響收斂速度。
圖3 不同參數(shù)?下誤差和步長(zhǎng)關(guān)系曲線圖
圖4 不同參數(shù)λ下誤差和步長(zhǎng)關(guān)系曲線圖
仿真使用TIMIT語(yǔ)音庫(kù)中的連續(xù)語(yǔ)音作為語(yǔ)音樣本,按照16 kHz進(jìn)行采樣并對(duì)語(yǔ)音樣本的幅度進(jìn)行一定處理,模擬語(yǔ)音幅度不穩(wěn)定的情況。然后將文獻(xiàn)[5]中的固定步長(zhǎng)AGC算法、文獻(xiàn)[12]中的可變步長(zhǎng)AGC算法復(fù)現(xiàn),與本文的算法進(jìn)行比較。
圖 5(a)為一段時(shí)長(zhǎng)22 s、幅度變化較大的原始語(yǔ)音,其中語(yǔ)音的第2、3段的幅度偏小,第6段的幅度偏大,其余段語(yǔ)音幅度適中。圖 5(b)為原始語(yǔ)音經(jīng)過(guò)文獻(xiàn)[5]的固定步長(zhǎng)算法處理后的時(shí)域圖,該算法對(duì)幅度起伏的語(yǔ)音有一定的自動(dòng)增益作用,但增益調(diào)節(jié)速度慢,效果不佳。圖 5(c)為原始語(yǔ)音經(jīng)過(guò)語(yǔ)音包絡(luò)參量的固定步長(zhǎng)LMS語(yǔ)音AGC處理后的時(shí)域圖,可以看到增益變化速度更快,增益效果也更加明顯。圖 5(d)為原始語(yǔ)音經(jīng)過(guò)文獻(xiàn)[12]可變步長(zhǎng)算法處理后的時(shí)域圖,其采用可變步長(zhǎng)因子來(lái)提升增益響應(yīng)速度,語(yǔ)音增益效果得到了一定的提升,但由于缺少限幅處理,部分語(yǔ)音在乘以增益后出現(xiàn)了較大的尖峰,語(yǔ)音振幅不夠穩(wěn)定。圖 5(e)為原始語(yǔ)音經(jīng)過(guò)基于語(yǔ)音包絡(luò)參量的可變步長(zhǎng)LMS語(yǔ)音AGC處理后的時(shí)域圖,增益效果得到進(jìn)一步提升,對(duì)于語(yǔ)音幅度突然變小或變大時(shí)都能迅速響應(yīng),再加上限幅機(jī)制,處理后的語(yǔ)音幅度最穩(wěn)定。
圖5 語(yǔ)音AGC算法輸出時(shí)域圖
截取部分原始語(yǔ)音和四種方案輸出增益曲線,對(duì)增益效果差異作進(jìn)一步的說(shuō)明。圖6(a)為原始語(yǔ)音信號(hào)時(shí)域波形圖,該段語(yǔ)音信號(hào)兩端的幅值相對(duì)較大中間的幅值較小。圖6(b)為文獻(xiàn)[5]算法與本文固定步長(zhǎng)包絡(luò)AGC算法增益值對(duì)比圖。由于傳統(tǒng)平均功率參量瞬時(shí)變化較大,為了保證穩(wěn)態(tài)誤差,保證AGC能正常工作,其固定步長(zhǎng)不能取太大,導(dǎo)致算法在語(yǔ)音幅度變化時(shí)增益曲線變化緩慢。得益于計(jì)算的語(yǔ)音包絡(luò)參量能夠很好地跟蹤語(yǔ)音包絡(luò)的變化,包絡(luò)參量瞬時(shí)變化小,在保證穩(wěn)態(tài)誤差的情況下,基于語(yǔ)音包絡(luò)參量的AGC算法的固定步長(zhǎng)因子可以選取更大的值,增益變化速度更快,增益效果也更加明顯。圖6(c)為文獻(xiàn)[12]算法與本文可變步長(zhǎng)包絡(luò)AGC算法增益值對(duì)比圖。文獻(xiàn)[12]通過(guò)采用可變步長(zhǎng)因子來(lái)平衡穩(wěn)態(tài)誤差與增益變化速度之間的矛盾,提升算法在處理語(yǔ)音時(shí)的增益變化速度,但同樣受功率參量瞬時(shí)變化較快的影響,在語(yǔ)音振幅平穩(wěn)時(shí)其增益變化很激進(jìn),抖動(dòng)劇烈,而本文基于語(yǔ)音包絡(luò)參量的可變步長(zhǎng)LMS語(yǔ)音AGC算法疊加語(yǔ)音包絡(luò)參量與可變步長(zhǎng)兩者的優(yōu)勢(shì),增益曲線變化迅速而且平滑。
圖6 語(yǔ)音AGC算法增益對(duì)比圖
4.2.1 語(yǔ)音增益對(duì)音質(zhì)的影響
截取部分語(yǔ)音片段進(jìn)行增益曲線細(xì)節(jié)對(duì)比,圖7(a)是原始語(yǔ)音信號(hào),圖7(b)是文獻(xiàn)[12]與本文包絡(luò)可變步長(zhǎng)算法的增益曲線。文獻(xiàn)[12]可變步長(zhǎng)算法為了提升對(duì)語(yǔ)音信號(hào)的響應(yīng)速度,根據(jù)功率誤差平方進(jìn)行增益調(diào)節(jié),但由于計(jì)算的功率瞬時(shí)變化大,所以由此迭代計(jì)算的語(yǔ)音增益系數(shù),在語(yǔ)音振幅比較平穩(wěn)的階段,變化依舊劇烈,如圖7(b)中黑色曲線所示,增益曲線呈現(xiàn)出鋸齒狀,很不平滑。其增益處理后的語(yǔ)音如圖7(c)所示,相比原始語(yǔ)音波形包絡(luò)已經(jīng)出現(xiàn)明顯失真。本文基于語(yǔ)音包絡(luò)誤差計(jì)算的包絡(luò)語(yǔ)音AGC,由于按幀跟蹤的語(yǔ)音包絡(luò)幅度變化,并且忽略了包絡(luò)內(nèi)部值的變化,增益曲線如圖7(b)紅色曲線所示,在保證增益調(diào)節(jié)速度的情況下更加平滑,避免了語(yǔ)音幅度的過(guò)渡調(diào)整,對(duì)語(yǔ)音包絡(luò)保護(hù)更好。增益處理后的語(yǔ)音如圖7(d)所示,沒有出現(xiàn)明顯的失真。
圖7 語(yǔ)音AGC算法增益細(xì)節(jié)圖
4.2.2 語(yǔ)音音質(zhì)評(píng)分
分別采用18位實(shí)驗(yàn)者試聽打分的平均主觀評(píng)分(Mean Opinion Score,MOS)與客觀的語(yǔ)音質(zhì)量評(píng)價(jià)(Perceptual Evaluation of Speech Quality,PESQ)對(duì)文獻(xiàn)[5]、文獻(xiàn)[12]與本文基于算法的語(yǔ)音音質(zhì)進(jìn)行評(píng)價(jià),評(píng)分結(jié)果分別如表2和表3所示,分值越高代表語(yǔ)音效果越好。在進(jìn)行語(yǔ)音 AGC 增益處理后,由于語(yǔ)音幅度變得更加平穩(wěn),所以語(yǔ)音清晰度和可懂度都有一定的提高。但本文算法相比其他兩種算法,處理后的語(yǔ)音沒有尖峰,增益曲線更加平滑,對(duì)語(yǔ)音包絡(luò)損傷也更小,所以MOS 評(píng)分平均提高了0.34,PESQ 評(píng)分平均提高了0.45,證明經(jīng)本文算法處理后不僅輸出的語(yǔ)音幅度更穩(wěn)定,而且語(yǔ)音音質(zhì)也更好。
表2 三種算法的MOS分
表3 三種算法的PESQ分
針對(duì)現(xiàn)有LMS語(yǔ)音AGC算法功率參量表示語(yǔ)音振幅性能不佳的問(wèn)題,本文給出了一種簡(jiǎn)單高效的方式計(jì)算語(yǔ)音包絡(luò)作為參量,并建立了基于包絡(luò)參量的可變步長(zhǎng)LMS語(yǔ)音AGC算法,通過(guò)增加按幀處理的限幅運(yùn)算,在不損傷語(yǔ)音音質(zhì)的情況下進(jìn)一步解決了現(xiàn)有LMS語(yǔ)音AGC算法增益處理后存在尖峰超過(guò)門限的問(wèn)題。仿真實(shí)驗(yàn)表明,相比現(xiàn)有LMS語(yǔ)音AGC算法,本文算法既能有效提升參量表示語(yǔ)音振幅的準(zhǔn)確度,又能保證算法具備較快的收斂速度與更小的失真,而且迭代運(yùn)算量還能下降一個(gè)數(shù)量級(jí)。優(yōu)異的性能、更低的計(jì)算復(fù)雜度使得該算法具備較為廣闊的應(yīng)用前景。如何在含有噪聲的環(huán)境中保證語(yǔ)音AGC的性能將是下一步的研究工作。