文档详情

华南理工大学语音信号处理实验-5次实验汇总版..docx

发布:2017-01-28约2.06万字共45页下载文档
文本预览下载声明
《语音信号处理》实验报告 实验名称 端点检测 学 院 外国语学院 专 业 科技英语 学生姓名 周孝松 提交日期 2014年4月 23日1.实验目的语音信号端点检测技术其目的就是从包含语音的一段信号中准确地确定语音的起始点和终止点,区分语音和非语音信号,它是语音处理技术中的一个重要方面。本实验的目的就是要掌握基于MATLAB编程实现带噪语音信号端点检测,利用MATLAB对信号进行分析和处理,学会利用短时过零率和短时能量,对语音信号的端点进行检测。2. 实验原理1、短时能量语音和噪声的区别可以体现在它们的能量上,语音段的能量比噪声段能量大,语音段的能量是噪声段能量叠加语音声波能量的和。在信噪比很高时,那么只要计算输入信号的短时能量或短时平均幅度就能够把语音段和噪声背景区分开。这是仅基于短时能量的端点检测方法。信号{x(n)}的短时能量定义为: 语音信号的短时平均幅度定义为: 其中w(n)为窗函数。2、短时平均过零率短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。过零分析是语音时域分析中最简单的一种。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号称为过零。过零率就是样本改变符号次数。信号{x(n)}的短时平均过零率定义为: 式中,sgn为符号函数,即:过零率有两类重要的应用:第一,用于粗略地描述信号的频谱特性;第二,用于判别清音和浊音、有话和无话。从上面提到的定义出发计算过零率容易受低频干扰,特别是50Hz交流干扰的影响。解决这个问题的办法,一个是做高通滤波器或带通滤波,减小随机噪声的影响;另一个有效方法是对上述定义做一点修改,设一个门限T,将过零率的含义修改为跨过正负门限。于是,有定义: 3、检测方法利用过零率检测清音,用短时能量检测浊音,两者配合。首先为短时能量和过零率分别确定两个门限,一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。低门限被超过未必是语音的开始,有可能是很短的噪声引起的,高门限被超过并且接下来的自定义时间段内的语音超过低门限,意味着信号开始。此时整个端点检测可分为四段:静音段、过渡段、语音段、结束。实验时使用一个变量表示当前状态。静音段,如果能量或过零率超过低门限,就开始标记起始点,进入过渡段。过渡段当两个参数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果过渡段中两个参数中的任一个超过高门限,即被认为进入语音段。处于语音段时,如果两参数降低到门限以下,而且总的计时长度小于最短时间门限,则认为是一段噪音,继续扫描以后的语音数据,否则标一记结束端点。3. 实验数据及平台本实验所采用的数据是几段语音文件(老师提供),平台是MATLAB。4. 实验过程(步骤)取一段录音作为音频样本。利用公式分别编程计算这段语音信号的短时能量和短时过零率,然后分别画出它们的曲线。调整能量门限。进行幅度归一化并设置帧长、短时能量阈值、过零率阈值等参数。编写程序实现语音端点检测。最后得到语音端点检测图像。5. 实验结果与总结1、语音1_2.wav2、语音你好.wav这次实验利用MATLAB对信号进行分析和处理,利用短时过零率和短时能量,对语音信号的端点进行检测。由于知识储备的不足,在实验过程中还是遇到比较大的困难,代码是参考网上的,在理解的基础上参考借鉴。但是整个过程自己还是投入其中,收获是比较大的。但是经过这次实验,对短时过零率和短时能量等概念,以及matlab中enframe函数分帧的使用有了深入了解,做出来的结果与结论差不多,效果不错。实验代码function point_check2z=0;s1=wavread(1_2.wav);s=s1/max(abs(s1));s=filter([1 -0.9375],1,s);plot(s);len=length(s);round=160;repeat=80;inc=round-repeat; ka=ceil((len-round)/(round-repeat))+1;s=[s;zeros((round-repeat)*(ka-1)+round-len,1)];len=length(s);w=zeros(round,ka);for i=1:kafor k=1:roundw(k,i)=s(k+(i-1)*(round-repeat),1);endendST=0.01;f=zeros(ka,1);F=zeros(ka,round);for i=1:kafor k=0:round-1for j=1:round-kF(ka,k+1)=F(ka,k+1)+abs(w(j,i)-w(j+k,i));endif(kround-1)if(w(k+1,i)0w(k+2,i)0)z=sign(w
显示全部
相似文档