語音信號短時域分析之預處理(三)

語音信號是一種非平穩的時變信號,它攜帶着各種信息。一般而言語音處理目的有兩種,一種是對語音信號進行分析,提取特徵參數,用於後續處理;一種是加工語音信號,如在語音增強中對含噪語音進行背景噪聲抑制,以獲得相對“乾淨”的語音。

       根據分析參數不同,可分爲時域分析和變換域(頻域、倒譜域)分析,其中時域分析是最簡單、最直觀的方法,它直接對語音信號的時域波形進行分析提取主要有語音短時能量和平均幅度、短時平均過零率、短時自相關函數和短時平均幅度差函數等。

       實際的語音信號是模擬信號,因此在對語音信號進行數字處理之前,首先要將模擬語音信號是s(t)以採樣週期T採樣,將其離散化爲s(n),採樣週期的選擇應根據模擬語音信號的帶寬來確定,以避免信號的頻域混疊失真。

      語音信號的預處理一般包括預加重處理和加窗處理

一 預加重處理
       對輸入的數字語音進行預加重,其目的是爲了對語音的高頻部分進行加重,去除口脣輻射的影響,增加語音的高頻分辨率。一般通過傳遞函數爲  的高通數字濾波器來實現預加重,其中a爲預加重係數,一般爲0.9<a<1。設n時刻語音採樣值爲x(n),經過預加重處理後的結果爲y(n) = x(n) - ax(n-1),這裏a=0.98。matlab代碼如下,可以參考。 

<span style="font-size:14px;">e=wavread('beijing.wav');
ee=e(200:455);            %選取原始文件e的第200到455點的語音,也可選其他樣點
r=fft(ee,1024);             %對信號ee進行1024點傅立葉變換
r1=abs(r);                 %對r取絕對值 r1表示頻譜的幅度值
pinlv=(0:1:255)*8000/512;    %點和頻率的對應關係
yuanlai=20*log10(r1);       %對幅值取對數
signal(1:256)=yuanlai(1:256);%取256個點,目的是畫圖的時候,維數一致
[h1,f1]=freqz([1,-0.98],[1],256,4000);%高通濾波器
pha=angle(h1);           %高通濾波器的相位
H1=abs(h1);             %高通濾波器的幅值
r2(1:256)=r(1:256);
u=r2.*h1';              % 將信號頻域與高通濾波器頻域相乘 相當於在時域的卷積
u2=abs(u) ;             %取幅度絕對值
u3=20*log10(u2);        %對幅值取對數
% un=filter([1,-0.98],[1],ee);  %un爲經過高頻提升後的時域信號
figure(1);subplot(211);
plot(f1,H1);title('高通濾波器的幅頻響應');
xlabel('頻率/Hz');
ylabel('幅度');
subplot(212);plot(pha);title('高通濾波器的相位響應');
xlabel('頻率/Hz');
ylabel('角度/radians');
figure(2);subplot(211);plot(pinlv,signal);title('原始語音信號頻譜');
xlabel('頻率/Hz');
ylabel('幅度/dB');
subplot(212);plot(pinlv,u3);title('經高通濾波後的語音信號頻譜');
xlabel('頻率/Hz');
ylabel('幅度/dB');</span>
其中高通濾波器和經預加重處理後的圖如下:

                                      

二 加窗處理
       在進行預加重數字濾波處理後,接下來進行加窗分幀處理,語音信號是一種隨時間而變化信號,主要分爲濁音和清音兩大類,由於發音器官的慣性運動,可以認爲在一小段時間裏(一般爲10ms-30ms),語音信號近似不變,即語音信號具有短時平穩性。這樣,可以把語音信號分爲一些短段來進行處理,語音信號的分幀是採用可移動的有限長度窗口進行加權的辦法來實現的,一般每秒的幀數爲33-100幀,分幀雖然可以採用連續分段的方法,但一般要採用如圖所示交疊分段的方法,爲了使幀與幀之間平滑過渡,保持連續性,前一幀與後一幀的交疊部分爲幀移,幀移和幀長的比值一般爲0-1/2。

                                                                               

      一般窗有兩種,一種是矩形窗,一種是漢明窗,窗函數如下:

  

 

                           (1) 矩形窗                                                                                                 (2) 漢明窗

      矩形窗的時域和頻域波形,窗長N=61,matlab代碼如下:

<span style="font-size:14px;">% 程序3.2:juxing.m
x=linspace(0,100,10001);               %在0~100的橫座標間取10001個值
h=zeros(10001,1);                     %爲矩陣h賦0值
h(1:2001)=0;                         %前2000個值取爲0值
h(2002:8003)=1;                      %窗長 ,窗內值取爲1 
h(8004:10001)=0;                     %後2000個值取爲0值
figure(1);                            %定義圖號
subplot(1,2,1)                        %畫第一個子圖
plot(x,h,'k');                          %畫波形,橫座標爲x,縱座標爲h,k表示黑色
title('矩形窗時域波形');                %圖標題
xlabel('樣點數');                      %橫座標名稱
ylabel('幅度');                        %縱座標名稱
axis([0,100,-0.5,1.5])                  %限定橫、縱座標範圍
line([0,100],[0,0])                    %畫出x軸

w1=linspace(0,61,61);                %取窗長內的61個點
w1(1:61)=1;                        %賦值1,相當於矩形窗 
w2=fft(w1,1024);                    %對時域信號進行1024點的傅立葉變換
w3=w2/w2(1)                       %幅度歸一化
w4=20*log10(abs(w3));               %對歸一化幅度取對數
w=2*[0:1023]/1024;                  %頻率歸一化
subplot(1,2,2);                       %畫第二個子圖
plot(w,w4,'k')                        %畫幅度特性圖
axis([0,1,-100,0])                     %限定橫、縱座標範圍
title('矩形窗幅度特性');               %圖標題
xlabel('歸一化頻率 f/fs');           %橫座標名稱
ylabel('幅度/dB');                 %縱座標名稱
</span>
       漢明窗matlab代碼如下:


<span style="font-size:14px;">x=linspace(20,80,61);         %在20~80的橫座標間取61個值作爲橫座標點
h=hamming(61);             %取61個點的哈明窗值爲縱座標值
figure(1);                   %畫圖
subplot(1,2,1);               %第一個子圖
plot(x,h,'k');                 %橫座標爲x,縱座標爲h,k表示黑色
title('Hamming窗時域波形');   %圖標題
xlabel('樣點數');              %橫座標名稱
ylabel('幅度');             %縱座標名稱
w1=linspace(0,61,61);         %取窗長內的61個點
w1(1:61)=hamming(61);         %加哈明窗
w2=fft(w1,1024);               %對時域信號進行1024點傅立葉變換
w3=w2/w2(1);                 %幅度歸一化
w4=20*log10(abs(w3))           %對歸一化幅度取對數
w=2*[0:1023]/1024;            %頻率歸一化
subplot(1,2,2)                  %畫第二個子圖
plot(w,w4,'k')                  %畫幅度特性圖
axis([0,1,-100,0])                %限定橫、縱座標範圍
title('Hamming窗幅度特性');      %圖標題
xlabel('歸一化頻率 f/fs');      %橫座標名稱
ylabel('幅度/dB');             %縱座標名稱</span>
               


                                           (1) 矩形窗                                                                                                 

                                           (2) 漢明窗
      通過圖可以看出漢明窗具有更平滑的低通特性,能夠在較高的程度上反映短時信號的頻率特性。    

      下圖說明了加窗方法,其中窗序列沿着語音樣點值逐幀從左到右移動,窗w(n)長度爲N。在確定窗函數後,對語音信號的分幀處理實際上就是對各幀進行某種變換或運算,設這種變換用T[]表示,x(n)爲輸入語音信號,w(n)爲窗序列,h(n)是與w(n)有關的濾波器,則各幀經處理後輸出可表示爲

                                          



————————————————
版權聲明:本文爲CSDN博主「冬瓜子」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yongchunaq/article/details/37742339

發佈了5 篇原創文章 · 獲贊 147 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章