端点检测课程报告_第1页
端点检测课程报告_第2页
端点检测课程报告_第3页
端点检测课程报告_第4页
端点检测课程报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信息工程系课程设计报告 课 程 MATLAB通信工程仿真 端点检测 专 业 通信工程 班 级 2013级本科一班 学生姓名 学号1314学生姓名 学号1314学生姓名 学号1314学生姓名 学号1314 学生姓名 学号1314二一四年十二月目录目 录目录.- 1- . 摘要 .- 2- 关键词.- 2 -1.程序描述.- 3-1.1程序功能.- 3-1.2基本原理.- 3-1.3端点检测的过程与目的.- 3-2.程序实现.- 5-2.1代码分析.- 6-2.2过零计算.- 7-2.3计算短时能量.- 8-2.4算法说明.- 9-3.实验结果.- 13-参考文献.- 14- Matlab通信工程

2、仿真课程设计摘 要:通过本次课程设计,主要训练学生对MATLAB通信系统建模与仿真设计的方法和技巧。作为一个完整的语音识别系统,其最终实现及使用的效果不仅仅限于识别的算法,许多相关因素都直接影响着应用系统的成功与否。语音识别的对象是语音信号,端点检测的目的就是在复杂的应用环境下的信号流中分辨出语音信号和非语音信号,并确定语音信号的开始及结束。关键词:过零计算 短时能量计算 端点检测1.程序描述1.1 程序功能: 从包含语音的一段信号中找出语音的起始点及结束点。1.2 基本原理: 整个端点检测可分为四个阶段:静音段、过渡段、语音段、结束。使用一个变量表示当前状态。静音段,如果能量或过零率超过低门

3、限,就开始标记起始点,进入过渡段。过渡段当两个参数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果过渡段中两个参数中的任一个超过高门限,即被认为进入语音段。处于语音段时,如果两参数降低到门限以下,而且总的计时长度小于最短时间门限,则认为是一段噪音,继续扫描以后的语音数据,否则标记结束端点。1.3端点检测的过程与目的: 一般的信号流都存在一定的背景声,而语音识别的模型都是基于语音信号训练的,语音信号和语音模型进行模式匹配才有意义。因此从信号流中检测出语音信号是语音识别的必要的预处理过程。详细说来,端点检测有两个过程:1基于语音信号的特征,用能量、过零率、商(entropy)、音高(pit

4、ch)等参数以及它们的衍生参数,来判断信号流中的语音或非语音信号。2在信号流中检测到语音信号后,判断此处是否是语句的开始点或结束点。在商用语音系统中,由于信号多变的背景和自然对话模式而更容易使句中有停顿(非语音),特别是在爆发声母前总会有无声间隙。因此,这种开始或结束的判定尤为重要。此外端点检测的目的还在于: 1减少识别器的数据处理量: 可以大量减少信号传输量及识别器的运算负载,对于语音对话的实时识别有重要作用。 2拒绝非语音的信号:对非语音信号的识别不仅是一种资源浪费,而且有可能改变对话的状态,造成对用户的困扰。 3在需要打断(barge-in)功能的系统中,语音的起始点是必须的。在端点检测

5、找到语音的起始点时,系统将停止提示音的播放。完成打断功能。2. 程序实现 语音信号的端点检测程序流程图: 输出样本端点检测图像 开始端点检测 调整能量门限 计算短时能量和过零率 设置参数 幅度归一化 输入语音信号 2.1代码分析第一部分:常数设置%常数设置FrameLen = 240;%指定帧长FrameInc = 80;%指定帧移,每一帧中未重叠的部分amp1 = 10; %初始短时能量高门限amp2 = 2; %初始短时能量低门限zcr1 = 10; %初始过零率高门限zcr2 = 5; %初始过零率低门限maxsilence = 8; % 8*10ms = 80ms 语音段中允许的最大静

6、音长度,如果语音段中的静音帧数未超过此值,则认为语音还没结束;如果超过了该值,则对语音段长度count进行判断,若count<minlen,则认为前面的语音段为噪音,舍弃,跳到静音状态0;若count>minlen,则认为语音段结束;minlen = 15; % 15*10ms = 150ms语音段的最短长度,若语音段长度小于此值,则认为其为一段噪音 status = 0; %初始状态为静音状态 count = 0; %初始语音段长度为0 silence = 0; %初始静音段长度为02.2 过零计算短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。过零分析是语音时域分析中最简

7、单的一种。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号称为过零。过零率就是样本改变符号次数 tmp1 = enframe(x(1:end-1), FrameLen, FrameInc); %分帧处理,tmp1和tmp2为分帧后形成的二维数组 tmp2 = enframe(x(2:end) , FrameLen, FrameInc);语音信号是一种典型的非平稳信号,但是语音信号具有短时平稳性, 因此在处理中要对采样的语音信号进行分割成一帧一帧的短时语音序列。分帧处理有利于对语音信号进行准确的分析 并且能够提高识别率 这时再分别求出每帧的短时能量和短时

8、过零率signs = (tmp1.*tmp2)<0;当 tmp1.*tmp <0 的时候,说明tmp1>0,tmp2<0 或tmp1<0,tmp2>0; 即信号过零点。 diffs = (tmp1 -tmp2)>0.02;当信号过零点,而tmp1与tmp2距离又过近(<0.02)的话就认为是噪音,舍去. zcr = sum(signs.*diffs, 2);定义语音信号Xn(m)的过零率为Zn,则Zn=2.3计算短时能量语音和噪声的区别可以体现在它们的能量上,语音段的能量比噪声段能量大,语音段的能量是噪声段能量叠加语音声波能量的和。在信噪比很高时

9、,那么只要计算输入信号的短时能量或短时平均幅度就能够把语音段和噪声背景区分开amp = sum(abs(enframe(filter(1 -0.9375, 1, x), FrameLen, FrameInc), 2);过零率有两类重要的应用: 用于粗略地描述信号的频谱特性,就是用将为若干个通道, 对各通道进行短时平均过零率和短时能量的计算,即可粗略地估计频谱特性; 用于判别清音和浊音、有话和无话。计算过零率容易受低频干扰, 特别是50 Hz 交流干扰的影响。解决这个问题的办法,一个是做高通滤波器或带通滤波,减小随机噪声的影响(filter函数滤波器)%调整能量门限amp1 = min(amp1

10、, max(amp)/4);amp2 = min(amp2, max(amp)/8);若第N帧音信号Xn(m)短时能量为En,则En=2.4算法说明for n=1:length(zcr)goto = 0;switch statusstatus是判断语音在哪个状态的函数,当status=0时,为静音状态status=1时,为可能开始状态;当status=2时,为语音状态,当status=3时,为结束状态; case 0,1 % 0 = 静音, 1 = 可能开始 if amp(n) > amp1 % 确信进入语音段 x1(end+1) = max(n-count-1,1); status =

11、 2; %进入语音段 silence = 0; count = count + 1; elseif amp(n) > amp2 | . % 可能处于语音段从静音段开始,当amp(n)高于短时能量低门限时,可能进入语音段,如果信号长度大于最短语音长度的话,即为语音段,否则为静音段。在语音段的时候,当amp(n)高于短时能量低门限时,将保持在语音段,当amp(n)低于短时能量低门限时,进入静音段。 zcr(n) > zcr2 从静音段开始,当zcr(n)高于过零率低门限时,可能进入语音段,如果信号长度大于最短语音长度的话,即为语音段,否则为静音段。在语音段的时候,当zcr(n)高于过零

12、率低门限时,将保持在语音段,当amp(n)低于过零率低门限时,进入静音段。status = 1; count = count + 1;else % 静音状态status = 0; % 进入静音段count = 0;else % 语音结束status = 3; end endcase 3, status=0; x2(end+1)=x1(end)+count-silence/2-1; endend % count = count-silence/2;% v_count(i)=v_count(i)+v_count(i-1);% v_silence(i)=v_count(i)+v_silence(i)

13、;if length(x2)<length(x1) x2(end+1)=length(zcr);endsubplot(311)(将多个图画到一个平面的工具。3是把图排成3行,1是排成1列,1表示在图中的位置,从左到右计数)plot(x)(命令打开图形窗口的工具,将x轴为横坐标)axis(1 length(x) -1 1)( axis(xmin xmax ymin ymax ) -xmin和xmax分别表示在绘图时x、 y轴的上下限 )ylabel(Speech);(ylabel是表明y轴的意义,定义y轴为Speech)for i=1:length(x2);line(x1(i)*Frame

14、Inc x1(i)*FrameInc, -1 1, 'Color', 'red');line(x2(i)*FrameInc x2(i)*FrameInc, -1 1, 'Color', 'green');End(当line(a,b,c)时,相应地会在三维图中画一条线。) % line(x1*FrameInc x1*FrameInc, -1 1, 'Color', 'red');% line(x2*FrameInc x2*FrameInc, -1 1, 'Color', 're

15、d');subplot(312)plot(amp);axis(1 length(amp) 0 max(amp)ylabel('Energy');for i=1:length(x2);line(x1(i) x1(i), min(amp),max(amp), 'Color', 'red');line(x2(i) x2(i), min(amp),max(amp), 'Color', 'green');endsubplot(313)plot(zcr);axis(1 length(zcr) 0 max(zcr)ylabel('ZCR');for

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论