预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

语音信号处理实验一:端点检测 姓名:XXX学号:XXXX班级:XX 一、实验目的: 理解语音信号时域特征和倒谱特征求解方法及其应用。 二、实验原理与步骤: 任务一:语音端点检测。 语音端点检测就是指从包含语音的一段信号中确定出语音的起始点和结束点。正确的端点检测对于语音识别和语音编码系统都有重 要的意义。 采用双门限比较法的两级判决法,具体如下 第一级判决: 1.先根据语音短时能量的轮廓选取一个较高的门限T1,进行一次粗判:语音起止点位于该门限与短时能量包络交点所对应的时间 间隔之外(即AB段之外)。 2.根据背景噪声的平均能量(用平均幅度做做看)确定一个较低的门限T2,并从A点往左、从B点往右搜索,分别找到短时能量包 络与门限T2相交的两个点C和D,于是CD段就是用双门限方法根据短时能量所判定的语音段。 第二级判决: 以短时平均过零率为标准,从C点往左和从D点往右搜索,找到短时平均过零率低于某个门限T3的两点E和F,这便是语音段的 起止点。门限T3是由背景噪声的平均过零率所确定的。 注意:门限T2,T3都是由背景噪声特性确定的,因此,在进行起止点判决前,T1,T2,T3,三个门限值的确定还应当通过多次实验。 任务二:利用倒谱方法求出自己的基音周期。 三、实验仪器: Cooledit、Matlab软件 四、实验代码: 取端点流程图 一:clc,clear [x,fs,nbits]=wavread('fighting.wav');%x为0~N-1即1~N x=x/max(abs(x));%幅度归一化到[-1,1] %参数设置 FrameLen=240;%帧长,每帧的采样点 inc=80;%帧移对应的点数 T1=10;%短时能量阈值,语音段 T2=5;%短时能量阈值,过渡段 T3=1;%过零率阈值,起止点 minsilence=6;%无声的长度来判断语音是否结束 silence=0;%用于无声的长度计数 minlen=15;%判断是语音的最小长度 state=0;%记录语音段状态0=静音,1=语音段,2=结束段 count=0;%语音序列的长度 %计算短时能量 shot_engery=sum((abs(enframe(x,FrameLen,inc))).^2,2); %计算过零率 tmp1=enframe(x(1:end-1),FrameLen,inc);%tmp1为二维数组=帧数*每帧的采样点FrameLen tmp2=enframe(x(2:end),FrameLen,inc);% signs=(tmp1.*tmp2)<0;%signs为一维数组,符合的置1,否则置0 zcr=sum(signs,2); %开始端点检测,找出A,B点 forn=1:length(zcr) ifstate==0%0=静音,1=可能开始 ifshot_engery(n)>T1%确信进入语音段 x1=max(n-count-1,1);%记录语音段的起始点 state=2;silence=0; count=count+1; elseifshot_engery(n)>T2||zcr(n)>T3%只要满足一个条件,可能处于过渡段 status=1; count=count+1; x2=max(n-count-1,1); else%静音状态 state=0;count=0; end end ifstate==2%1=语音段 ifshot_engery(n)>T2%保持在语音段 count=count+1; elseifzcr(n)>T3%保持在语音段 x3=max(n-count-1,1); else%语音将结束 silence=silence+1; ifsilence<minsilence%静音还不够长,尚未结束 count=count+1; elseifcount<minlen%语音段长度太短,认为是噪声 state=0; silence=0; count=0; else%语音结束 state=3; end end end ifstate==3%2=结束段 break; end end x1,x2,x3%A、C、E坐标 x11=x1+count-1%B坐标 x22=x2+count-1%D坐标 x33=x3+count-1%F坐标 %画图 subplot(3,1,1) plot(x) axis([1length(x)-11])%标定横纵坐标 title('原始语音信号','fontsize',17); xlabel('样点数');ylabel('Speech'); line([x3*incx3*inc],[-11],'Color','red');%画竖线 line([x33