語音信號短時域分析之預處理(三)
標簽: 預加重加窗分幀矩形窗漢明窗 2014-07-13 21:09 934人閱讀 收藏 舉報 本文章已收錄于: 分類: 語音信號處理(6) 作者同類文章X
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
目錄(?)[+]
一 預加重處理二 加窗處理 ????? ??? 語音信號是一種非平穩(wěn)的時變信號,它攜帶著各種信息。一般而言語音處理目的有兩種,一種是對語音信號進行分析,提取特征參數(shù),用于后續(xù)處理;一種是加工語音信號,如在語音增強中對含噪語音進行背景噪聲抑制,以獲得相對“干凈”的語音。
?????? 根據(jù)分析參數(shù)不同,可分為時域分析和變換域(頻域、倒譜域)分析,其中時域分析是最簡單、最直觀的方法,它直接對語音信號的時域波形進行分析提取主要有語音短時能量和平均幅度、短時平均過零率、短時自相關(guān)函數(shù)和短時平均幅度差函數(shù)等。
?????? 實際的語音信號是模擬信號,因此在對語音信號進行數(shù)字處理之前,首先要將模擬語音信號是s(t)以采樣周期T采樣,將其離散化為s(n),采樣周期的選擇應根據(jù)模擬語音信號的帶寬來確定,以避免信號的頻域混疊失真。
????? 語音信號的預處理一般包括預加重處理和加窗處理
一 預加重處理
???? ? 對輸入的數(shù)字語音進行預加重,其目的是為了對語音的高頻部分進行加重,去除口唇輻射的影響,增加語音的高頻分辨率。一般通過傳遞函數(shù)為? 的高通數(shù)字濾波器來實現(xiàn)預加重,其中a為預加重系數(shù),一般為0.9<a<1。設(shè)n時刻語音采樣值為x(n),經(jīng)過預加重處理后的結(jié)果為y(n) = x(n) - ax(n-1),這里a=0.98。matlab代碼如下,可以參考。?
[plain] view plaincopy print?
<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;????%點和頻率的對應關(guān)系??yuanlai=20*log10(r1);???????%對幅值取對數(shù)??signal(1:256)=yuanlai(1:256);%取256個點,目的是畫圖的時候,維數(shù)一致??[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);????????%對幅值取對數(shù)??%?un=filter([1,-0.98],[1],ee);??%un為經(jīng)過高頻提升后的時域信號??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('經(jīng)高通濾波后的語音信號頻譜');??xlabel('頻率/Hz');??ylabel('幅度/dB');</span>?? <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; %點和頻率的對應關(guān)系
yuanlai=20*log10(r1); %對幅值取對數(shù)
signal(1:256)=yuanlai(1:256);%取256個點,目的是畫圖的時候,維數(shù)一致
[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); %對幅值取對數(shù)
% un=filter([1,-0.98],[1],ee); %un為經(jīng)過高頻提升后的時域信號
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('經(jīng)高通濾波后的語音信號頻譜');
xlabel('頻率/Hz');
ylabel('幅度/dB');</span>
其中高通濾波器和經(jīng)預加重處理后的圖如下:
????????????????????? ?????? ????? ??
二 加窗處理
?????? 在進行預加重數(shù)字濾波處理后,接下來進行加窗分幀處理,語音信號是一種隨時間而變化信號,主要分為濁音和清音兩大類,由于發(fā)音器官的慣性運動,可以認為在一小段時間里(一般為10ms-30ms),語音信號近似不變,即語音信號具有短時平穩(wěn)性。這樣,可以把語音信號分為一些短段來進行處理,語音信號的分幀是采用可移動的有限長度窗口進行加權(quán)的辦法來實現(xiàn)的,一般每秒的幀數(shù)為33-100幀,分幀雖然可以采用連續(xù)分段的方法,但一般要采用如圖所示交疊分段的方法,為了使幀與幀之間平滑過渡,保持連續(xù)性,前一幀與后一幀的交疊部分為幀移,幀移和幀長的比值一般為0-1/2。
???????????????????????????????????????????????????????????????????????????????
????? 一般窗有兩種,一種是矩形窗,一種是漢明窗,窗函數(shù)如下:
???? ????????????????????????????
?????????????????????????? (1) 矩形窗??????????????????????????????????????????????????????????????????????????? ????????????????? ?? (2) 漢明窗
??????矩形窗的時域和頻域波形,窗長N=61,matlab代碼如下:
[plain] view plaincopy print?
<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;??????????????????????%窗長?,窗內(nèi)值取為1???h(8004:10001)=0;?????????????????????%后2000個值取為0值??figure(1);????????????????????????????%定義圖號??subplot(1,2,1)????????????????????????%畫第一個子圖??plot(x,h,'k');??????????????????????????%畫波形,橫坐標為x,縱坐標為h,k表示黑色??title('矩形窗時域波形');????????????????%圖標題??xlabel('樣點數(shù)');??????????????????????%橫坐標名稱??ylabel('幅度');????????????????????????%縱坐標名稱??axis([0,100,-0.5,1.5])??????????????????%限定橫、縱坐標范圍??line([0,100],[0,0])????????????????????%畫出x軸????w1=linspace(0,61,61);????????????????%取窗長內(nèi)的61個點??w1(1:61)=1;????????????????????????%賦值1,相當于矩形窗???w2=fft(w1,1024);????????????????????%對時域信號進行1024點的傅立葉變換??w3=w2/w2(1)???????????????????????%幅度歸一化??w4=20*log10(abs(w3));???????????????%對歸一化幅度取對數(shù)??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>?? <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; %窗長 ,窗內(nèi)值取為1
h(8004:10001)=0; %后2000個值取為0值
figure(1); %定義圖號
subplot(1,2,1) %畫第一個子圖
plot(x,h,'k'); %畫波形,橫坐標為x,縱坐標為h,k表示黑色
title('矩形窗時域波形'); %圖標題
xlabel('樣點數(shù)'); %橫坐標名稱
ylabel('幅度'); %縱坐標名稱
axis([0,100,-0.5,1.5]) %限定橫、縱坐標范圍
line([0,100],[0,0]) %畫出x軸w1=linspace(0,61,61); %取窗長內(nèi)的61個點
w1(1:61)=1; %賦值1,相當于矩形窗
w2=fft(w1,1024); %對時域信號進行1024點的傅立葉變換
w3=w2/w2(1) %幅度歸一化
w4=20*log10(abs(w3)); %對歸一化幅度取對數(shù)
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代碼如下:
[plain] view plaincopy print?
<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('樣點數(shù)');??????????????%橫坐標名稱??ylabel('幅度');?????????????%縱坐標名稱??w1=linspace(0,61,61);?????????%取窗長內(nèi)的61個點??w1(1:61)=hamming(61);?????????%加哈明窗??w2=fft(w1,1024);???????????????%對時域信號進行1024點傅立葉變換??w3=w2/w2(1);?????????????????%幅度歸一化??w4=20*log10(abs(w3))???????????%對歸一化幅度取對數(shù)??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>?? <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('樣點數(shù)'); %橫坐標名稱
ylabel('幅度'); %縱坐標名稱
w1=linspace(0,61,61); %取窗長內(nèi)的61個點
w1(1:61)=hamming(61); %加哈明窗
w2=fft(w1,1024); %對時域信號進行1024點傅立葉變換
w3=w2/w2(1); %幅度歸一化
w4=20*log10(abs(w3)) %對歸一化幅度取對數(shù)
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。在確定窗函數(shù)后,對語音信號的分幀處理實際上就是對各幀進行某種變換或運算,設(shè)這種變換用T[]表示,x(n)為輸入語音信號,w(n)為窗序列,h(n)是與w(n)有關(guān)的濾波器,則各幀經(jīng)處理后輸出可表示為
??????????????????????????????????????? ??
頂
0 踩
0 - 上一篇shell 統(tǒng)計一個文件夾下不同類型文件的個數(shù)
- 下一篇語音信號短時域分析之短時平均能量(四)
我的同類文章
語音信號處理(6) http://blog.csdn.net
- ?語音信號處理之DTW2014-08-23閱讀275
- ?matlab三維數(shù)據(jù)繪圖2014-07-15閱讀824
- ?語音信號之特性分析圖(二)2014-07-04閱讀1048
- ?加窗分幀中各種窗函數(shù)2014-08-03閱讀619
- ?語音信號短時域分析之短時平均能量(四)2014-07-13閱讀1310
- ?語音信號之基礎(chǔ)知識(一)2014-06-29閱讀551
總結(jié)
以上是生活随笔為你收集整理的语音信号短时域分析之预处理(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。