語音信號是一種非平穩的時變信號,它攜帶着各種信息。
一般而言語音處理目的有兩種,一種是對語音信號進行分析。提取特征參數。用於興許處理;一種是加工語音信號,如在語音增強中對含噪語音進行背景噪聲抑制。以獲得相對“干凈”的語音。
依據分析參數不同。可分為時域分析和變換域(頻域、倒譜域)分析,當中時域分析是最簡單、最直觀的方法,它直接對語音信號的時域波形進行分析提取主要有語音短時能量和平均幅度、短時平均過零率、短時自相關函數和短時平均幅度差函數等。
實際的語音信號是模擬信號,因此在對語音信號進行數字處理之前,首先要將模擬語音信號是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)有關的濾波器。則各幀經處理后輸出可表示為