天天看點

基于MATLAB的語音信号預處理

3.1.語音信号的預加重處理

對語音的的高頻部分進行加重以去除口唇部分的影響,就必須要對輸入的數字語音信号進行預加重處理,以此來增加語音的高頻分辨率。通常通過傳遞函數為的一階FIR高通數字濾波器來實作預加重,其中為預加重系數,0.9<<1.0。設n時刻的語音采樣值為 X (n), 經過預加重處理的結果為,這裡取=0.98。圖3.1為該高通濾波器的幅頻特性及相頻特性。圖3.2中分别給出了預加重前和預加重後的一段濁音信号及頻譜,可以看出預加重後的頻譜在高頻部分的幅度有了提升。實作高頻提升的MATLAB程式如下。

fid=fopen('voice2.txt','rt');
 e=fscanf(fid,'% f');
 ee=e(200:455);
r=fft(ee,1024);
r1=abs(r);
pinlv=(0:1:255)* 8000/512
yuanlai=20* log10(r1)
signal(1:256);
[h1,f1]=freqz([1,-0.98],[1],256,4000);
Pha=angle(h1);
H1=abs(h1);
r2(1:256)
u=r2.* h1’
 
u2=abs(u)
u3=20* log10(u2)
un=filter([1,-0.98],[1],ee)
figure(1);subplot(211);
plot(f1,H1);title(‘高通濾波器的幅頻特性’);
xlabel(‘ 頻率/Hz’);ylabel(‘幅度’);
subplot(212);plot(pha);title(‘高通濾波器的相頻特性’);
xlabel(‘頻率/Hz/’);ylabel(‘角度 /rad’);
figure(2);subplot(211);plot(ee);title(‘原始語音信号’);
xlabel(‘樣點數’);ylabel(‘幅度’);
axis([0 256-3*10ˆ4 2*10ˆ4]);
subplot(212);plot(real(un));
title(‘經高通濾波後的語音信号’);axis([0 256-1* 10ˆ41*10ˆ4]);
xlabel(‘樣點數’);ylabel(‘幅度’);
figure(3);subplot(211);plot(pinlv,signal);               title(‘原始語音信号頻譜’);
xlabel(‘頻率/Hz’);ylabel(‘幅度/dB’);
subplot(212);plot(pinlv,u3);title(‘經高通濾波後的信号頻譜’);
xlabel(‘頻率/HZ’);ylabel(‘幅度/dB’);      

在對語音信号進行預加重處理後,接下來要進行加窗分幀處理。語音信号主要分為濁音和清音兩類,是一種随時間變化的信号。濁音的基音周期、清濁音信号幅度以及聲道參數等都随時間而緩慢變化。由于發音器官的慣性運動,可以認為在一個很小的時間段裡(一般在10~30ms)語音信号近似不變,即語音信号具有短時平穩性。如此,便可以把語音信号分為一些短段(稱為分析幀)來進行處理。語音信号的分幀是采用可移動的有限長度視窗進行權重的方法來實作的。每秒的幀數一般為33~100幀,看實際情況而定。分幀雖然可以采用連續分段的方法,但一般要采用圖3.2.1所示的交疊分段的方法,這樣做是為了使幀與幀之間能平滑過渡,保持較好的連續性。幀與幀之間的交疊部分稱為幀移,幀移與幀長的比值一般取為0~0.5,圖3.2.1給出了幀移與幀長示意圖。

這兩種窗的時域和頻域波形用MATLAB程式來實作,下面分别叙述。

  • 矩形窗時域和頻域波形,窗長N=65

【程式3.2】 juxing.m

x=linspace(0,90,1000);      %在0-90的橫坐标間取1000個
y=zeros(1000,1);            %為矩陣h賦0值
y(1:191)=0;                 %前190個值取為0值
y(192:800)=1;               %窗長,窗内值取為1
y(801:1000)=0;              %後200個值取為0值
figure(1);                  %定義圖号
subplot(1,2,1)              %畫第一個圖
plot(x,y,'k');              %畫波形,橫坐标為x,縱坐标為y,k表示黑色
title('矩形窗時域波形');    %圖示題
xlabel('樣點數');           %橫坐标名稱
ylabel('振幅');             %縱坐标名稱
axis([0,100,-0.5,1.5])      %限定橫、縱坐标範圍
line([0,100],[0,0])         %畫出x軸
w1=linspace(0,65,65);         %取窗長内的65個點
w1(1:65)=1;                   %指派1,相當于矩形窗
w2=fft(w1,512);               %對時域信号進行512點的傅裡葉變換
w3=w2/w2(1)                   %幅度歸一化
w4=20*log10(abs(w3));         %對歸一化幅度去對數
w=2*(0:511)/512;              %頻率歸一化
subplot(1,2,2);               %畫第二個子圖
plot(w,w4,'k');               %畫幅度特性圖
axis([0,1,-100,0]);           %限定橫、縱坐标範圍
title('矩形窗幅度特性');      %圖示題
xlabel('歸一化頻率、f/fs');   %橫坐标名稱
ylabel('振幅;/dB');           %縱坐标名稱a      
圖3.2.2  矩形窗及其頻譜
基于MATLAB的語音信号預處理

圖3.2.1是程式運作後對應的矩形窗時域波形和頻譜特性圖。

x=linspace(20,90,65);
h=hamming(65);
figure(1);
subplot(1,2,1);
plot(x,h,'k');
title('漢明窗食欲波形');
xlabel('樣點數');ylabel('幅度');
w1=linspace(0,65,65);
w1(1:65)=hamming(65);
w2=fft(w1,1224);
w3=w2/w2(1);
w4=20*log10(abs(w3))
w=2*[0:1223]/1224;
subplot(1,2,2)
plot(w,w4,'k')
axis([0,1,-100,0])
title('漢明窗幅度特性');
xlabel('歸一化頻率');ylabel('幅度/dB');      

圖3.2.3是程式運作以後相應的漢明窗時域波形和幅頻特性。

繼續閱讀