


摘要:語音由發音器官發出,通過聲電傳感器,語音可以轉化連續的模擬電信號;隨著電子技術和計算機技術的進一步發展,語音信號的處理得到了飛速的發展;語音信號分析處理包括時域分析和頻域分析兩大類;語音的時域分析包括短時能量分析、短時過零率分析、短時相關分析,時域分析目的是提取語音時域特征,據此進行語音端點檢測。
關鍵詞:語音信號;時域分析;幀能量;幀過零率;端點檢測
中圖分類號:TP391 ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)13-0096-03
語言是人類特有的能力,是人們相互交流的重要工具。語音由發音器官發出,通過聲電傳感器,語音可以轉化連續的模擬電信號,例如電話機就屬于這樣一種轉換,這就是最早的語音信號處理。通過聲電和電聲的轉換,實現語音和電信號之間的相互轉換,達到遠距離傳輸的目的。隨著電子技術和計算機技術的進一步發展,語音信號的處理得到了飛速的發展。
對語音信號進行分析和處理,一直是研究的熱門。通常首先需要對連續的模擬語音信號進行采樣和量化,轉換為離散的數字信號,形成音頻文件,便于計算機處理。用計算機進行語音信號處理,極大地提高了語音信號處理的效率。
語音信號分析處理包括時域分析和頻域分析兩大類。分析前通常需要先對語音信號進行分幀,即把語音信號分解為很多相對短時間的、固定時長的一段信號,稱為幀。每一幀語音信號可以視為短時平穩的隨機信號。時域分析用于分析和提取語音的時域特征,是最簡單、直觀的分析手段。語音的時域特征包括短時能量分析、短時過零率分析、短時相關分析等。這里短時指的是一幀語音。頻域分析用于分析和提取語音的頻域特征,這些特征包括語音的頻譜、倒譜、復倒譜、功率譜等。分析方法有離散傅里葉變換、帶通濾波器組,以及線性預測等[1]。
本文對語音信號進行時域分析,分析其幀能量,幀過零率等時域特征,并對語音進行端點檢測。
1 語音采樣數據的獲取
目前很多用于語音處理的語音庫文件都采用wav格式,這種文件格式是一種重要的數字音頻文件格式。wav格式的文件沒有對語音數據進行壓縮,所以其文件比其他格式如MP3、MP4、RAM等格式的音頻文件更大。但也正因為沒有采用壓縮技術,wav文件中聲音的采樣數據很容易被讀出來,便于做其他處理。wav格式是微軟公司開發的一種聲音文件格式,也叫波形文件,是最早的數字音頻文件格式,它具有RIFF(Resource Interchange File Format)格式。RIFF格式的wav文件由若干個Chunk(塊)組成,按順序為RIFF WAVE Chunk、Format Chunk、Fact Chunk(可選)和Data Chunk。每個塊都有固定而且類似的格式,第1部分是塊的ID,作為標識,4個字節,緊跟其后的是該塊的大小,也是用4個字節表示,低字節表示低位,高字節表示高位;第3部分略有差異[2]。
筆者用C++編程,首先讀取Web語音文件,為此,定義了四種結構體,分別對應上述4種塊。再定義文件指針,并打開文件:
FILE *wav_in;
wav_in=fopen(filename,"rb");
wav文件是二進制文件,所以用參數"rb"。再結合文件位置指針進行讀取:
file_pos=ftell(wav_in);
由于wav格式存儲的語音數據是整數,因此定義了整型數組pcm_data來存儲。存儲在wav文件中的每個音頻數據為16位,因此數組pcm_data是16位。
2 語音信號的端點檢測
端點檢測的目的是檢測和確定語音信號的開始和結束端點,進而把非語音信號部分舍棄,只保留語音信號部分的數據,以減少數據量,節約計算機處理時間,從而提高處理速度。如果語音信號沒有噪音,端點檢測比較容易處理。可以簡單通過語音信號的短時(幀)過零率,和短時(幀)能量檢測到端點,因為語音信號都有一定的能量和過零率,而靜音狀態下的語音信號能量很小,幾乎為0,過零率也沒有。計算出每幀語音的能量和過零率,并比較相鄰幀的能量和過零率,就這樣可以確定語音的端點。
如果語音信號混合了噪音,端點檢測過程比較復雜。除了幀能量和過零率之外,還需要結合其他的參數,才能確定語音的端點[3]。例如,可以結合頻譜來分析端點,有些噪音的頻率高于正常的語音信號,因此,可以把頻譜中頻率高的部分認為是噪音。也可以采取措施先消除噪聲,例如用小波消除噪聲[4]。小波變換是一個時間和頻率的局部變換[5]。
先對語音信號進行分幀,幀長統一采用20ms,相鄰兩幀沒有交叉重疊。
FrmLength=(unsigned short int)20.0*fmt_block.wavFormat.dwSamplesPerSec/1000;
其中dwSamplesPerSec是每秒采樣點數,即采樣率。上述語句把幀長由20ms時間轉換為離散點數。
計算幀的數量:
nFrm=nSamples/FrmLength;
其中nSamples是采樣點總數。
接下來通過一個循環計算每幀能量和過零率,其中,計算幀能量時,采用歸一化的幅值的平方和。而過零率計算,則判斷前后兩個幅值,如果是異號,則過零率加2;如果是同號,則過零率不變。
(1) 置每幀能量初值為0,每幀過零率初值為0;
(2) 在一幀內,循環計算每個點的能量值,累加到本幀的能量中;判斷前后兩個語音點的幅值,如果是異號,則過零率加2;如果是同號,則過零率不變;
(3) 判斷是否所有幀都計算機完畢,如果沒有,則轉(1),計算下一幀;如果所有幀都已經計算完畢,則循環結束,進入下面的端點檢測。
端點檢測就是確定語音信號的開始和結束端點,本文假設語音信號都是沒有噪音的,因此,在沒有語音的部分,信號幅值幾乎等于零。大致步驟是:先確定端點所在幀,為此,設定一個閾值,再按順序檢測每一幀的能量。當檢測到某一幀的能量大于等于閾值時,可以確定端點在這一幀。考慮到計算一幀語音的能量時,用的是歸一化后的幅值的平方和,幀語音能量的絕對值不大,因此,設定閾值為1。具體步驟如下:
(1) 置幀號為1;
(2) 讀取該幀語音能量;
(3) 判斷其能量值是否大于等于1,若大于等于1,則該幀號就是起始端點所在幀,結束循環;否則幀號加1,轉(2)。
確定結束端點所在幀時,從最后一幀語音開始,逆序向前檢測每一幀語音的能量值,判斷其是否大于等于閾值。具體步驟如下:
(1) 置幀號為幀數量,即最后一幀;
(2) 讀取該幀語音能量;
(3) 判斷其能量值是否大于等于1,若大于等于1,則該幀號就是結束端點所在幀,結束循環;否則幀號減1,轉(2)。
確定端點所在幀之后,再在該幀語音內進一步確定具體哪個位置,才是語音的開始和結束端點。為此,也設定一個閾值0.05。之所以設置比較小的一個數,是因為用的是歸一化后的幅值。在該幀范圍內,從第一個點按順序檢測。當某個點的幅值歸一化值大于等于0.05時,可以確定該點就是語音的端點。具體步驟如下:
(1) 置循環初值j=1;
(2) 由起始點所在語音幀號spFrm,以及j,由下式計算得到實際的語音采樣點順序號k,
k=(spFrm-1)*FrmLength+j;
(3) 獲取該采樣點的歸一化幅值;
(4) 判斷其幅值是否大于等于0.05,若大于等于0.05,則該采樣點編號k就是起始端點的真實語音采樣點號sp,結束循環;否則j+1,檢測下一個采樣點,轉(2)。
確定語音結束端點的過程如下:
(1) 置循環初值j為幀長,即從結束端點所在幀的最后一個點開始,逆序往前逐個檢測;
(2) 由結束點所在語音幀號epFrm,以及j,由下式計算得到實際的語音采樣點順序號k,
k=(epFrm-1)*FrmLength+j;
(3) 獲取該采樣點的歸一化幅值;
(4) 判斷其幅值是否大于等于0.05,若大于等于0.05,則該采樣點編號k就是結束端點的真實語音采樣點號ep,結束循環;否則j+1,檢測下一個采樣點,轉(2)。
3 運算結果
本文錄制了幾個英文單詞,音頻文件全部為wav格式,用全面介紹的方法進行了預處理,包括分幀和端點檢測,并且用圖形把結果顯示出來,如圖1所示為英文單詞“important”的語音波形及短時能量和短時過零率波形。
從圖2可知,英文單詞important的波形文件是雙聲道音頻文件,第5行起是具體的雙聲道的采樣數據。
從圖3可以看出,端點檢測結果是語音起始端點號為1797,該點采樣數據位于第3幀。語音結束端點號為41453,該點采樣數據位于第47幀。端點檢測前采樣點數為圖2的46739,經過端點檢測,去掉起始端點前,和結束端點后無語音部分采樣點數據,剩余采樣點數為圖3的39657,其數據量減少為原來的84%,為后續處理減少了數據量。
圖4所示為英文單詞“dictionary”的語音波形及短時能量和短時過零率波形。
從圖5可知,英文單詞dictionary的波形文件也是雙聲道音頻文件,第5行起是具體的雙聲道的采樣數據。
從圖6可以看出,端點檢測結果是語音起始端點號為7676,該點采樣數據位于第9幀。語音結束端點號為41222,該點采樣數據位于第47幀。端點檢測前采樣點數為圖5的47184,經過端點檢測,去掉起始端點前,和結束端點后無語音部分采樣點數據,剩余采樣點數為圖6的33547,其數據量減少為原來的71%。
其余計算結果也說明,端點檢測是減少語音采樣數據量的很有效的方法。
4 結語
隨著計算機技術的發展,計算機語音處理技術獲得了廣泛的應用。其應用領域包括人工智能、虛擬現實、智能服務、智能家居等。語音信號處理實際上涉及多個學科領域,包括語音學、語言學、認知科學,以及心理學等多個學科。語音端點檢測是檢測和確定語音的實際起始端點和結束端點。明確了端點,就可以把端點以外的采樣點數據舍棄,進而減少數據量,為后續處理提高效率。
參考文獻:
[1] 趙力.語音信號處理[M].3版北京:機械工業出版社,2016.
[2] 羅海濤.wav格式與數據獲取[J].電腦知識與技術,2016,12(27):211-213.
[3] 羅海濤.含噪語音信號端點檢測[J].計算機時代,2017(10):8-10.
[4] Luo H T.Local thresholding de-noise speech signal[C]//SPIE Proceedings,Fifth International Conference on Digital Image Processing (ICDIP 2013).Beijing,China.SPIE,2013.
[5] 羅海濤.用小波消除語音噪聲[J].福建電腦,2017,33(8):119-120.
【通聯編輯:梁書】