重點(端點檢測)_第1頁
重點(端點檢測)_第2頁
重點(端點檢測)_第3頁
重點(端點檢測)_第4頁
重點(端點檢測)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、語音識別系統(tǒng)的端點檢測算法研究西南林學院2004屆本科畢業(yè)論文PAGE 12PAGE 13在設計一個成功的端點檢測模塊時,會遇到下列一些實際困難: 信號取樣時,由于電平的變化,難于設置對各次試驗都適用的閥值。 在發(fā)音時,人的咂嘴聲或其他某些雜音會使語音波形產(chǎn)生一個很小的尖峰,并可能超過所設計的門限值。此外,人呼吸時的氣流也會產(chǎn)生電平較高的噪聲。 取樣數(shù)據(jù)中,有時存在突發(fā)性干擾,使短時參數(shù)變得很大,持續(xù)很短時間后又恢復為寂靜特性。應該將其計入寂靜段中。 弱摩擦音時或終點處是鼻音時,語音的特性與噪聲極為接近,其中鼻韻往往還拖得很長。 如果輸入信號中有50Hz工頻干擾或者A/D變換點的工作點偏移時,

2、用短時過零率區(qū)分無聲和清音就變的不可靠。一種解決方法是算出每一幀的直流分量予以減除,但是這無疑加大了運算量,不利于端點檢測算法的實時執(zhí)行;另一種解決方法是采用一個修正短時參數(shù),它是一幀語音波形穿越某個非零電平的次數(shù),可以恰當?shù)卦O置參數(shù)為一個接近于零的值,使得過零率對于清音仍具有很高的值,而對于無聲段值卻很低。但事實上,由于無聲段以及各種清音的電平分布情況變化很大,在有些情況下,二者的幅度甚至可以相比擬,這給這個參數(shù)的選取帶來了極大的困難5。由上可見,一個優(yōu)秀的端點檢測算法應該能滿足: 門限值應該可以對背景噪聲的變化有一定的適應。 將短時沖擊噪聲和人的咂嘴等瞬間超過門限值的信號納入無聲段而不是有

3、聲段。 對于爆破音的寂靜段,應將其納入語音的范圍而不是無聲段。 應該盡可能避免在檢測中丟失鼻韻和弱摩擦音等與噪聲特性相似、短時參數(shù)較少的語音。 應該避免使用過零率作為判決標準而帶來的負面影響。在做本課題時,端點檢測方法是將語音信號的短時能量與過零率相結合加以判斷的。但這種端點檢測算法如果運用不好,將會發(fā)生漏檢或虛檢的情況。語音信號大致可以分為濁音和清音兩部分,在語音激活期的開始往往是電平較低的清音,當背景噪聲較大時,清音電平與噪聲電平相差無幾。采用傳統(tǒng)的語音端點檢測方法很容易造成語音激活的漏檢。而語音信號的清音段,對于語音的質量起著非常重要的作用。另一方面,較大的干擾信號,又有可能被當成是語音

4、信號,造成語音激活的虛檢。如可能出現(xiàn)弱摩擦音和鼻韻被切除、誤將爆破音的寂靜段或字與字的間隔認為是語音的結束、誤將沖擊噪聲判決為語音等情況,因而實際運用中,如果處理的不好,則效果欠佳。為了克服傳統(tǒng)端點檢測算法的缺點,已有很多改進方法被提出來。例如,可以考慮采用基于相關性的語音端點檢測算法。這種方法依據(jù)的理論是:語音信號具有相關性,而背景噪聲則無相關性。因而利用相關性的不同,可以檢測出語音,尤其是可以將清音從噪聲中檢測出來。為此,可以定義一種有效的相關函數(shù),并且通過實驗可以找到判別門限設定方法以及防止漏檢和虛檢的方法6。3語音信號端點檢測vad算法的探討和實現(xiàn)本課題的端點檢測算法,該算法采用的是非

5、實時運行的,并且在實現(xiàn)端點檢測時,是在MATLAB下運行實現(xiàn)的,在MATLAB中,聲音文件是擴展名為wav文件中獲取語音采樣,所以在進行端點檢測之前要將聲音文件先處理和轉換為wav文件格式的聲音文件,再將其分幀并計算短時能量和過零率參數(shù),然后進行端點檢測。這種工作方式被稱為離線(off-line)處理方法,而實時的處理方法則是在線(on-line)的。以下將對語音信號的分幀,短時能量,過零率以及端點檢測進行探討和實現(xiàn)。3.1語音信號的分幀對語音信號進行分幀,本課題采用了voice box工具箱中的函數(shù)enframe。其函數(shù)主要功能是將待端點檢測的聲音文件進行分幀,進行語音信號的采樣,以便計算短

6、時能量和過零率,為端點檢測做基本的準備,在進行分幀時,根據(jù)實際的要求定義幀的屬性,比如幀長和幀移。在使用這個函數(shù)時,非常方便,只用將其加入到MATLAB的搜索路徑,就可以直接使用該函數(shù)了。Enframe函數(shù)的語法為:f=enframe(x,len,inc);這里x為輸入語音信號,len指定了幀長,inc指定幀移。函數(shù)返回為n*len的一個矩陣,每行都是一幀數(shù)據(jù)。例如對大象聲音的采樣序列進行分幀的過程為以下所示,以下命令在MATLAB中的command window里直接就可以看到變量的屬性8。 y=enframe(x,240,80); whos y xName Size Bytes Class

7、 x 66156x1 529248 double array y 824x240 1582080 double arrayGrand total is 263916 elements using 2111328 bytes可以看到包含語音采樣的一維數(shù)組x經(jīng)過enframe處理后得到二維數(shù)組y,有824行,表示總的幀數(shù)為有824幀,每行都是240個采樣,為一幀,幀移是80,在進行采樣時,當一幀采樣完時,采樣第二幀,那么就有80幀與第一次采樣是一樣的,這就是幀移的用法。還可以看到屬性,比如x是66156*1的矩陣,有529248bytes,y是824*240的矩陣,有1582020bytes。如果

8、改變幀長為120和幀移為40,輸出結果如下,同樣可以看到采樣后變量x和y的屬性如下: y=enframe(x,120,40); whos y x Name Size Bytes Class x 66156x1 529248 double array y 1651x120 1584960 double arrayGrand total is 264276 elements using 2114208 bytes3.2短時能量的計算圖2是數(shù)字“0”的波形圖,可以看到,在7500之前的部分信號幅度很低,明顯是屬于靜音,而在7500以后,信號幅度開始增強,并呈現(xiàn)比較明顯的周期性。在波形下半部分可以觀察

9、到有規(guī)律的尖峰,兩個尖峰之間的距離就是所謂的基音周期,實際上也就是說話人的聲帶振動的周期9。圖2 數(shù)字“0”的語音波形由圖可以很直觀地想到,可以用信號的幅度作為特征,區(qū)分靜音和語音。只要設定一個門限,當信號的幅度超過該門限的時候,就認為語音開始,當幅度降低到門限以下就認為語音結束。實際上,一般是用短時能量的概念來描述語音信號的幅度的。對于輸入的語音信號X(N),其中N為采樣點,首先進行幀的操作,將語音信號分成每2030毫秒一段,相鄰兩幀起始點之間的間隔為10毫秒,也就是說兩幀之間有1020毫秒的交疊。由于采樣頻率的差異,幀長和幀移所對應的實際采樣點數(shù)也是不同的。對于8KHZ采樣頻率,30毫的幀

10、長對應240點,記為N,而10毫秒的幀移對應80點,記為M11。對于第i幀,第n個樣本,它與原始語音信號的關系為: xi(n)=x(i-1)M+n第i幀語音信號的短時能量可以用下面幾種算法得到: e(i)=|xi(n)| e(i)=xn(n) e(i)=logxn(n)三種定義的短時能量分別用下面三行MATLAB命令實現(xiàn):amp1 = sum(abs(y),2);amp2 = sum(y.*y,2);amp3 = sum(log(y.*y+eps),2);其中amp3中之所以加上小的浮點數(shù)eps,是為了防止log運算中可能出現(xiàn)的溢出。以下利用語音信號分幀的幀長和幀移的不同取值,對三種短時能量的

11、圖形進行分析。圖3為當幀長len=240,幀移inc=80時,大象聲音的三種短時能量的圖形:圖3 len=240,inc=80大象三種短時能量圖圖4為當幀長len=120,幀移inc=40時,大象聲音的三種短時能量的圖形:圖4 len=120,inc=40大象三種短時能量圖由以上兩圖可以看出,三種能量的輸出要由語音信號的分幀函數(shù)enframe決定,當分幀的幀長和幀移比較大的時候,那么輸出的短時能量值就比較大,當語音信號的分幀的幀長和幀移比較小的時候,那么輸出的短時能量值就比較小。而且由以上兩圖可以看出,圖3相對應的值幾乎是圖4的兩倍,這主要是圖3的幀長和幀移的取值是圖4的兩倍,并且短時能量的主

12、要是對矩陣y求和的過程,所以從圖形中可以直觀地看到,不同的幀長和幀移對短時能量輸出的影響7。能量之前應用該濾波器,還可以起到消除直流漂移、抑制隨機噪聲和提升清音部分能量的效果。將這些寫在MATLAB語句是12: amp= sum(abs(enframe(filter(1-0.9375,1,x),framelen,frameinc),2);在這里采用的是絕對值能量,實際上就是平均幅度。3.3過零率的計算將語音信號分幀后計算每幀的短時能量,再設定一個門限,就可以實現(xiàn)一個簡單的端點檢測算法。但是這樣的算法是很不可靠的,因為人的語音分清音和濁音兩種,濁音為聲帶振動發(fā)出,對應的語音信號有幅度高,周期性明

13、顯的特點,而清音則不會有聲帶的振動,只是靠空氣在口腔中的摩擦,沖擊或爆破而發(fā)聲,其短時能量一般比較小,如聲母“s”,“ c”等的幅度很低,往往會基于能量的算法漏過去。圖5顯示的是數(shù)字“7”的波形,可見聲母“q”的范圍約為6500-7500,其幅度明顯比后面的幅度低,而比前面的靜音部分高。聲母“s”和“c”的幅度往往更低,以至于有時用肉眼都難以與靜音部分相辨別,因此基于能量的算法對這些清音信號幾乎無能為力9。圖5 數(shù)字“7”的波形對于圖5的靜音段聲母開始段,可以發(fā)現(xiàn)靜音和聲母的區(qū)分點大致在6550左右。盡管此時不能用短時能量可靠地區(qū)分,但是可以發(fā)現(xiàn)在靜音段信號的波形變化相對比較緩慢,而在清音段,

14、由于口腔空氣摩擦的效果,所造成的波形在幅度上的變化比較劇烈,通??梢杂靡粠盘栔胁ㄐ未┰搅汶娖降拇螖?shù)來描述這種變化的劇烈程度,稱為過零率。實際應用中,為了避免靜音段的隨機噪聲產(chǎn)生過高的過零率,通常都先設定一個門限,當前后兩個采樣的符號不同,而且差值大于該門限的時候,就將過零率的數(shù)值加1。在MATLAB中,用以下核心代碼實現(xiàn)過零率:zcr=zeros(size(y,1),1);delta=0.02;for i=1:size(y,1)x = y(i,:);for j = 1:length(x)-1 if x(j) *x(j+1)delta zcr(i) = zcr(i)+1;end endend其

15、核心思想是:判斷相鄰兩幀的符號是否小于零,并且兩幀的差值是否大于設定的一個門限值delta,如果滿足以上兩個條件,那么過零率加1。其中設置了門限delta=0.02,這是個經(jīng)驗值,可以進行細微的調(diào)整。在此條件下,可以得到大象的過零率波形,如圖6所示:圖6 大象聲音的過零率為了進一步探討過零率對語音信號的判斷作用,分別對數(shù)字“7”和“5”進行過零率輸出圖形進行比較,圖7為數(shù)字“7”的過零率圖形,圖8為數(shù)字“5”的過零率圖形:圖7 數(shù)字“7”的過零率圖8 數(shù)字“5”的過零率從圖可以看到,數(shù)字“7”語音信號部分的幅度比較低,但是其過零率的數(shù)值卻很高,峰值將近50,而在后面的韻母部分過零率則比較低,在

16、20左右。而數(shù)字“5”語音信號部分一開始的幅度就比較高,而過零率也比較高,隨著幅度的升高,過零率也升高。由此可見,過零率能夠敏感得表示清音。在實際應用中,通常是利用過零率來檢測清音,用短時能量來檢測濁音,兩者配合實現(xiàn)可靠的端點檢測。3.4端點檢測的流程和算法實現(xiàn)3.4.1 端點檢測的流程在開始進行端點檢測之前,首先為短時能量和過零率分別確定兩個門限。一個是比較低的門限,其數(shù)值比較小,對信號的變化比較敏感,很容易就會被超過。另一個是比較高的門限,數(shù)值比較大,信號必須達到一定的強度,該門限才可能被超過。低門限被超過未必就是語音的開始,有可能是時間很短的噪聲引起的。高門限被超過則可以基本確信是由于語

17、音信號引起的。整個語音信號的端點檢測可以分為四段:靜音,過渡段,語音段,結束。程序中使用一個變量status來表示當前所處的狀態(tài)。在靜音段,如果能量或過零率超過了低門限,就應該開始標記起始點,進入過度段。在過度段中,由于參數(shù)的數(shù)值比較小,不能確信是否處于真正的語音段,因此只要兩個參數(shù)的數(shù)值都回落到低門限以下,就將當前狀態(tài)恢復到靜音狀態(tài)。而如果在過度段中兩個參數(shù)中的任一個超過了高門限,就可以確信進入語音段了。一些突發(fā)性的噪聲也可以引起短時能量或過零率的數(shù)值很高,但是往往不能維持足夠長的時間,如門窗的開關、物體的碰撞等引起的噪聲,這些都可以通過設定最短時間門限來判別。當前狀態(tài)處于語音段時,如果兩個

18、參數(shù)的數(shù)值降低到低門限以下,而且總的記時長度小于最短時間門限,則認為這是一段噪音,繼續(xù)掃描以后的語音數(shù)據(jù)。否則就標記好結束端點,并返回。3.4.2 端點檢測算法的實現(xiàn)在實現(xiàn)端點檢測的算法中,對語音信號的分幀,設幀長len=240,幀移inc=80。在進行端點檢測之前,首先將語音信號進行幅度歸一化處理到-1,1,為了避免幅度太大,不便于分析。在MATLAB中,用以下語句實現(xiàn):x=double(x);x=x/max(abs(x);在端點檢測時,設置最大靜音長度maxsilence=3,也就是為3*10ms=30ms,并且設置一個符號標記靜音,用silence表示,在實際設置時,可以根據(jù)實際情況進行

19、微調(diào),不同的對象發(fā)出的聲音的特點不同,比如音頻,音調(diào)以及發(fā)音的連續(xù)性,比如大象發(fā)出的聲音一般都是連續(xù)性的吼叫,而人發(fā)出聲音,一般都是字詞句,所以二者有者的最大靜音長度的設置有著很大的不同,大象的最大靜音長度可以設置相對小一些。在端點檢測的過程中,處于語音段的時候,那么就要對語音段中出現(xiàn)的靜音進行判斷,如果出現(xiàn)靜音(silence)的長度小于maxsilence,那么認為靜音還不夠長,語音段還尚未結束,語音還在進行,將繼續(xù)判斷語音信號。與此同時,還要設置一個最小噪聲長度minlen=15,也就是為15*10ms=150ms,并且設置一個標記語音信號的長度,用count來表示,此參數(shù)主要是用于判斷

20、一些突發(fā)性和偶然性的噪聲,比如關門聲和關窗聲,這些突發(fā)性的聲音的能量都很大,甚至于可以達到所設定的能量的高門限,但是這些聲音屬于噪聲,并不是我們所需要的有效語音信號部分,所以必須能夠判斷出來并且過濾。在實際應用時,也可以對此參數(shù)根據(jù)實際情況進行調(diào)整。在語音段的過程中,要對已經(jīng)滿足短時能量和過零率的語音信號進行進一步的判斷,如果語音信號長度標記count小于最小噪聲長度minlen,那么認為語音長度太短,判斷為噪聲13。在前面的過零率計算方法用到了兩重循環(huán),其速度比較慢,為了提高算法的效率,在端點檢測中采用一種矢量化的計算方法在,MATLAB中是用以下核心代碼實現(xiàn)的:tmp1 = enframe

21、(x(1:end-1), FrameLen, FrameInc); tmp2 = enframe(x(2:end) , FrameLen, FrameInc);signs = (tmp1.*tmp2)0.02; zcr = sum(signs.*diffs, 2); temp1和temp2都是由X得到,但是相互之間相差一個采樣點,即相鄰的兩幀。signs為符號數(shù)組,用于存儲相鄰兩個采樣點的符號是否相同,即是否穿越零電頻,如果為負,則表明穿越零電頻,反之則沒有穿越。設置了門限0.02,這是個經(jīng)驗值,diffs用來度量相鄰兩個采樣點之間的距離,要為相鄰兩個采樣點定義一個距離門限,如果信號只是簡單地

22、穿越零電頻,也不能說明是語音信號,因為一些噪聲也是有可能穿越零電頻,但是其幅度很小,所以就為其設置一個門限,可以有效地防止噪聲。如果距離大于門限0.02,則為1,否則為0。然后將兩個矩陣點相乘就可以得到同時滿足兩個基本點條件的采樣點矩陣。然后將其按幀求和,就可以得到過零率。在計算短時能量時,主要用的時取絕對值的短時能量。計算短時能量之前,首先將語音信號通過一個一階高通濾波器1-0.9375z-1,可以有效濾除低頻干擾,尤其是50Hz或60Hz的工頻干擾,將對于語音識別更為有用的高頻部分的頻譜進行提升。在計算短時能量之前應用該濾波器,還可以起到消除直流漂移、抑制隨機噪聲和提升清音部分能量的效果。

23、將這些寫在MATLAB語句是:amp = sum(abs(enframe(filter(1-0.9375,1,x), framelen, frameinc),2);在這里采用的是絕對值能量,實際上就是平均幅度。以上進行了常數(shù)設置,以及短時能量和過零率的計算,然后分別為短時能量和過零率計算和定義兩個門限,一個高門限和一個低門限。以下將對端點檢測的四個階段進行討論。四個階段:靜音,過渡段,語音段,結束,分別用0123來表示。在靜音段和過渡段(0,1),如果語音信號的短時能量amp(n)大于短時能量的高門限amp1,那么可以確信進入語音段,status=2;靜音silence=0;語音長度標識cou

24、nt加1。如果短時能量amp(n)只大于短時能量的低門限amp2或者過零率zcr(n)大于低門限zcr2,那么只能判斷可能處于語音段,status=1。在語音段(2),如果短時能量amp(n)大于短時能量低門限amp2或者過零率zcr(n)大于過零率的低門限zcr2,那么就可以判斷保持在語音段,語音長度count加1。在語音段中,還要判斷靜音長度silence是否小于最大靜音長度,如果小于,那么認為靜音還不夠長,語音還沒有結束,語音還在進行,語音長度count加1。同時也要判斷語音的長度count,如果count小于最小噪聲長度minlen,那么認為語音長度count太短,不是語音信號,是噪聲

25、,status=0;count=0。最后一個階段,結束(3)10。程序在最后還將原始語音信號、短時能量和過零率繪制出來,同時在各自圖形上用紅線標出了開始端點和結束端點。該函數(shù)vad返回兩個變量x1和x2分別為起始端點和結束端點的幀數(shù)。以下為數(shù)字“7”和數(shù)字“4”的端點檢測圖:圖9 數(shù)字“7”的端點檢測圖圖10 數(shù)字“4”的端點檢測圖由圖10可以看到,聲母s的短時能量明顯比較低,即便是用手工標注也很容易將其誤認為是噪聲而切除,但是該段的過零率很高,可以很準確地區(qū)分靜音和聲母,這就保證了端點檢測的準確性2。4課題過程中遇到的困難及解決4.1遇到的主要困難本課題主要是為語音識別系統(tǒng)提供一個語音信號的

26、端點檢測功能,端點檢測就是要能夠確定語音信號的起點和終點,使語音識別系統(tǒng)處理時間減到最小,排除無聲段的噪聲干擾,從而使識別系統(tǒng)具有良好的識別功能。所以在設計端點檢測算法時,就要使端點檢測具有這些功能。在實際中主要遇到以下一些困難:本課題設計的端點檢測,不僅可以檢測大象的聲音信號的端點,也可以檢測人的聲音信號的端點,在信號取樣時,由于大象和人的聲音特征有很大的不同,所以對一些參數(shù)的設置存在困難。在發(fā)音時,人的咂嘴聲或其他某些雜音會使語音波形產(chǎn)生一個很小的尖峰,并可能超過所設計的門限值,所以對門限值的設定也是一個困難。在取樣數(shù)據(jù)中,錄音的時候有時存在突發(fā)性干擾,使短時參數(shù)變得很大,持續(xù)很短的時間后又恢復為寂靜特性。應該將其計如寂靜段中。弱摩擦聲或終點處是鼻音時,語音的特性與噪聲極為接近,有些字的鼻韻往往還拖的很長。由于是第一次接觸語音識別方面的知識,剛入手做有很多困難,比如錄音設備的限制,因為在端點檢測主要是在MATLAB上實現(xiàn)的,在MATLAB里只能識別WAV格式的文件,并且第一次使用MATLAB這個軟件,與其他軟件存在許多不同的地方,也是一個從

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論