语音实验一端点检测.docx

上传人:b****0 文档编号:12613261 上传时间:2023-04-20 格式:DOCX 页数:13 大小:64.99KB
下载 相关 举报
语音实验一端点检测.docx_第1页
第1页 / 共13页
语音实验一端点检测.docx_第2页
第2页 / 共13页
语音实验一端点检测.docx_第3页
第3页 / 共13页
语音实验一端点检测.docx_第4页
第4页 / 共13页
语音实验一端点检测.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

语音实验一端点检测.docx

《语音实验一端点检测.docx》由会员分享,可在线阅读,更多相关《语音实验一端点检测.docx(13页珍藏版)》请在冰豆网上搜索。

语音实验一端点检测.docx

语音实验一端点检测

语音实验一端点检测

实验一语音信号端点检测

一、实验目的

1.学会MATLAB的使用,掌握MATLAB的程序设计方法;

2.掌握语音处理的基本概念、基本理论和基本方法;

3.掌握基于MATLAB编程实现带噪语音信号端点检测;

4.学会用MATLAB对信号进行分析和处理。

5.学会利用短时过零率和短时能量,对语音信号的端点进行检测。

二、实验仪器设备及软件

HPD538、MATLAB

三、实验原理

端点检测是语音信号处理过程中非常重要的一步,它的准确性直接影响到语音信号处理的速度和结果。

本次实验利用短时过零率和短时能量相结合的语音端点检测算法利用短时过零率来检测清音,用短时能量来检测浊音,两者相配合便实现了信号信噪比较大情况下的端点检测。

算法对于输入信号的检测过程可分为短时能量检测和短时过零率检测两个部分。

算法以短时能量检测为主,短时过零率检测为辅。

根据语音的统计特性,可以把语音段分为清音、浊音以及静音(包括背景噪声)三种。

在本算法中,短时能量检测可以较好地区分出浊音和静音。

对于清音,由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;短时过零率则可以从语音中区分出静音和清音。

将两种检测结合起来,就可以检测出语音段(清音和浊音)及静音段

1、短时能量计算

定义n时刻某语言信号的短时平均能量

为:

式中N为窗长,可见短时平均能量为一帧样点值的平方和。

特殊地,当窗函数为矩形窗时,有

2、短时过零率

过零就是指信号通过零值。

过零率就是每秒内信号值通过零值的次数。

对于离散时间序列,过零则是指序列取样值改变符号,过零率则是每个样本的改变符号的次数。

对于语音信号,则是指在一帧语音中语音信号波形穿过横轴(零电平)的次数。

可以用相邻两个取样改变符号的次数来计算。

如果窗的起点是n=0,短时过零率Z为

波形穿过横轴(零电平)的次数

短时过零可以看作信号频率的简单度量

浊音的短时平均幅度最大,无声的短时平均幅度最小,清音的短时过零率最大,无声居中,浊音的短时过零率最小。

3、短时自相关函数

是偶函数;

s(n)是周期的,那么R(k)也是周期的;

可用于基音周期估计和线性预测分析

4、判断语音信号的起点和终点

利用短时平均幅度和短时过零率可以判断语音信号的起点和终点。

语音端点检测方法可采用测试信号的短时能量或短时对数能量、联合过零率等特征参数,并采用双门限判定法来检测语音端点,即利用过零率检测清音,用短时能量检测浊音,两者配合。

首先为短时能量和过零率分别确定两个门限,一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。

低门限被超过未必是语音的开始,有可能是很短的噪声引起的,高门限被超过并且接下来的自定义时间段内的语音。

四、实验步骤及程序

(1)实验步骤:

1、取一段录音作为音频样本。

2、利用公式分别编程计算这段语音信号的短时能量和短时过零率,然后分别画出它们的曲线。

3、调整能量门限。

4、进行幅度归一化并设置帧长、短时能量阈值、过零率阈值等参数。

5、编写程序实现语音端点检测。

6、最后得到语音端点检测图像。

(2)语音信号的端点检测程序流程图:

 

图1.1语音信号的端点检测程序流程图

(3)语音信号的端点检测实验源程序:

clc;

clear;

[x,fs]=wavread('2.wav');

%%

[y]=end_point(x);

%%

%[f0]=pitch_sift(x,0.38,fs);

%plot(f0);

%%

e_x=(frame(x,'lpc_spectrum',fs));

%plot(e_x(2,:

));%某一维随时间变化

plot(e_x(:

89));%一帧信号各维之间变化

holdon;

c=melcepst(x,fs);

plot(c(89,:

),'k');

frame定义

%function[y]=frame(x,func,SAMP_FREQ,l,step)

%whereyisoutputonaframebyframebasis,xisinputspeech,

%andlisthewindowsize.landstepareoptionalparameters,

%bydefaultSAMP_FREQis8000,lis200,andstepis100.

%funcisastringe.g.'pitch'thatdeterminesafunctionthatyouwant

%toapplytoxonashort-timebasis.

%

%Writtenby:

LeventArslanApr.11,1994

%

function[yy]=frame(x,func,SAMP_FREQ,l,step)

[m,n]=size(x);

ifm>n

n=m;

else

n=n;

x=x';

end

ifnargin<3,SAMP_FREQ=16000;end;

ifnargin<4,l=SAMP_FREQ/40;end;

ifnargin<5,step=l/2;end;

num_frames=ceil(n/step);%NUMBEROFFRAMES

x(n+1:

n+2*l)=zeros(2*l,1);%ADDZEROSATTHEENDOFTHESPEECHSIGNAL

i=[0:

step:

num_frames*step]';%iisthearithmeticalproportionseriesbystep

j=i*ones(1,l);

i=j+ones(num_frames+1,1)*[1:

l];

y=reshape(x(i),num_frames+1,l)';

y=(hanning(l)*ones(1,num_frames+1)).*y;

fori=1:

num_frames

cmd=sprintf('yy(:

i)=%s(y(:

i));',func);

eval(cmd);

end

melcepst定义

functionc=melcepst(s,fs,w,nc,p,n,inc,fl,fh)

%MELCEPSTCalculatethemelcepstrumofasignalC=(S,FS,W,NC,P,N,INC,FL,FH)

%

%

%Simpleuse:

c=melcepst(s,fs)%calculatemelcepstrumwith12coefs,256sampleframes

%c=melcepst(s,fs,'e0dD')%includelogenergy,0thcepstralcoef,deltaanddelta-deltacoefs

%

%Inputs:

%sspeechsignal

%fssamplerateinHz(default11025)

%ncnumberofcepstralcoefficientsexcluding0'thcoefficient(default12)

%nlengthofframe(defaultpowerof2<30ms))

%pnumberoffiltersinfilterbank(defaultfloor(3*log(fs)))

%incframeincrement(defaultn/2)

%fllowendofthelowestfilterasafractionoffs(default=0)

%fhhighendofhighestfilterasafractionoffs(default=0.5)

%

%wanysensiblecombinationofthefollowing:

%

%'R'rectangularwindowintimedomain

%'N'Hanningwindowintimedomain

%'M'Hammingwindowintimedomain(default)

%

%'t'triangularshapedfiltersinmeldomain(default)

%'n'hanningshapedfiltersinmeldomain

%'m'hammingshapedfiltersinmeldomain

%

%'p'filtersactinthepowerdomain

%'a'filtersactintheabsolutemagnitudedomain(default)

%

%'0'include0'thordercepstralcoefficient

%'e'includelogenergy

%'d'includedeltacoefficients(dc/dt)

%'D'includedelta-deltacoefficients(d^2c/dt^2)

%

%'z'highestandlowestfilterstaperdowntozero(default)

%'y'lowestfilterremainsat1downto0frequencyand

%highestfilterremainsat1uptonyquistfreqency

%

%If'ty'or'ny'isspecified,thetotalpowerinthefftispreserved.

%

%Outputs:

cmelcepstrumoutput:

oneframeperrow

%

%Copyright(C)MikeBrookes1997

%

%LastmodifiedThuJun1509:

14:

482000

%

%VOICEBOXisaMATLABtoolboxforspeechprocessing.Homepageisat

%http:

//www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html

%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Thisprogramisfreesoftware;youcanredistributeitand/ormodify

%itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby

%theFreeSoftwareFoundation;eitherversion2oftheLicense,or

%(atyouroption)anylaterversion.

%

%Thisprogramisdistributedinthehopethatitwillbeuseful,

%butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof

%MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe

%GNUGeneralPublicLicenseformoredetails.

%

%YoucanobtainacopyoftheGNUGeneralPublicLicensefrom

%ftp:

//prep.ai.mit.edu/pub/gnu/COPYING-2.0orbywritingto

%FreeSoftwareFoundation,Inc.,675MassAve,Cambridge,MA02139,USA.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ifnargin<2fs=11025;end

ifnargin<3w='M';end

ifnargin<4nc=12;end

ifnargin<5p=floor(3*log(fs));end

ifnargin<6n=pow2(floor(log2(0.03*fs)));end

ifnargin<9

fh=0.5;

ifnargin<8

fl=0;

ifnargin<7

inc=floor(n/2);

end

end

end

ifany(w=='R')

z=enframe(s,n,inc);

elseifany(w=='N')

z=enframe(s,hanning(n),inc);

else

z=enframe(s,hamming(n),inc);

end

f=rfft(z.');

[m,a,b]=melbankm(p,n,fs,fl,fh,w);

pw=f(a:

b,:

).*conj(f(a:

b,:

));

pth=max(pw(:

))*1E-6;

ifany(w=='p')

y=log(max(m*pw,pth));

else

ath=sqrt(pth);

y=log(max(m*abs(f(a:

b,:

)),ath));

end

c=rdct(y).';

nf=size(c,1);

nc=nc+1;

ifp>nc

c(:

nc+1:

end)=[];

elseifp

c=[czeros(nf,nc-p)];

end

if~any(w=='0')

c(:

1)=[];

end

ifany(w=='e')

c=[log(sum(pw)).'c];

end

%calculatederivative

ifany(w=='D')

vf=(4:

-1:

-4)/60;

af=(1:

-1:

-1)/2;

ww=ones(5,1);

cx=[c(ww,:

);c;c(nf*ww,:

)];

vx=reshape(filter(vf,1,cx(:

)),nf+10,nc);

vx(1:

8,:

)=[];

ax=reshape(filter(af,1,vx(:

)),nf+2,nc);

ax(1:

2,:

)=[];

vx([1nf+2],:

)=[];

ifany(w=='d')

c=[cvxax];

else

c=[cax];

end

elseifany(w=='d')

vf=(4:

-1:

-4)/60;

ww=ones(4,1);

cx=[c(ww,:

);c;c(nf*ww,:

)];

vx=reshape(filter(vf,1,cx(:

)),nf+8,nc);

vx(1:

8,:

)=[];

c=[cvx];

end

ifnargout<1

[nf,nc]=size(c);

t=((0:

nf-1)*inc+(n-1)/2)/fs;

ci=(1:

nc)-any(w=='0')-any(w=='e');

imh=imagesc(t,ci,c.');

axis('xy');

xlabel('Time(s)');

ylabel('Mel-cepstrumcoefficient');

map=(0:

63)'/63;

colormap([mapmapmap]);

colorbar;

end

五、实验结果与分析

六、实验体会

这次的实验,,给我最大的收获就是培养了独立思考的能力,通过读程序,我更加了解MATLAB的程序设计方法,进一步的了解了掌握基于MATLAB编程实现带噪语音信号端点检测的原理,让我对这门课程又有了新的理解。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1