于Matlab的语音端点检测算法研究.docx
《于Matlab的语音端点检测算法研究.docx》由会员分享,可在线阅读,更多相关《于Matlab的语音端点检测算法研究.docx(19页珍藏版)》请在冰点文库上搜索。
于Matlab的语音端点检测算法研究
湖南涉外经济学院
电气与信息工程学部
毕业设计
设计(论文)
题目:
基于Matlab的语音端点检测算法研究
班级:
0602
姓名:
彭海欧
专业:
应用电子技术
指导教师:
李晋
2009年5月4日
毕业设计(论文)评阅表
班级
0602
姓名
彭海欧
设计题目:
基于Matlab的语音端点检测算法研究
成绩:
评语:
指导教师________
年月日
毕业设计(论文)任务书
题目:
基于Matlab的语音端点检测算法研究
学生姓名:
彭海欧
指导老师:
李晋
学院(系)电气与信息工程学部
审核日期:
二0年月日
毕业设计(论文)基本内容和要求:
阐述语音端点检测在语音识别中的重要作用,结合实际语音信号的特点,采用短时能量和过零率相结合的双门限的算法来实现对给定语音文件的端点检测。
结合强大的计算工具MATLAB编写双门限算法的程序,实现对语音信号的端点检测;利用MATLAB的图形用户界面GUI制作语音信号端点检测的操作界面,方便对语音信号实现端点检测。
在低信噪比情况下进行仿真和比较。
毕业设计(论文)进度安排:
序号
毕业设计(论文)各阶段内容
时间安排
备注
1
资料收集,
第1周
2
确定方案
第2周
3
软件设计
第3-5周
4
综合设计项目验证
第6周
5
论文写作
第7-8周
6
毕业答辩
第8周
主要参考资料:
1ParhiKK.VLSIdigitalsignalprocessingsystems:
DesignandImplementation.北京:
机械工业出版社,2003
2KuoSM,LeeBH著,卢伯英译.实时数字信号处理.北京:
中国铁道出版社,2004
3韩雁,姚庆栋.数字专用集成电路中平方运算的硬件实现.电子科学学刊,1996;18(6)
43吴智勇.VoIP中语音压缩Codec的研究与实现.硕士论文.南开大学,2003
同组设计(论文)者:
指导教师(签名):
________________
学生开始执行
任务书日期:
_________________
学生送交全部
成果日期:
_________________
学生(签名):
___________________
目录
绪 论 …………………………………………………………7
第1章:
语音端点检测问题的提出 ………………………...8
第2章:
语音技术的现状 …………………………………..10
第3章:
端点检测技术的现状 ……………………………..13
第4章:
噪声环境下的端点检测…………………………...15
第5章:
短时能量和过零率…………………………………21
5.1算法及检测流程…………………………………………21
5.1.1算法简述……………………………………………….22
5.1.2检测流程………………………………………………..22
5.2.系统实现及优化………………………………………….23
5.2.1FIFO模块………………………………………….24
5.2.2滤波器模块………………………………………………25
5.2.3加窗、平均能量计算模块……………………………….27
5.2.4语音判决模块…………………………………….………29
5.2.5控制模块…………………………………………….…….30
5.2.6系统综合结果…………………………………………….30
5.2.7仿真结果及分析………………………………….……....30
第6章、总结……………………………………………………31
致谢………………………………………………………………33
参考文献…………………………………………………………34
绪论
语音端点检测的精确度直接影响语音识别的准确度。
在噪声环境下,语音端点检测很困难。
信噪比下降,语音端点检测的正确率也随之下降,同时,噪声类型的变化影响端点检测的正确率。
为此,提出了一种改进的、适合在电话语音城市名识别系统中应用的端点检测算法,并结合分带谱熵和谱能量形成了一个新的特征参数集,利用该参数集进行端点检测,弥补了分别采用分带谱熵和谱能量进行端点检测的缺陷,提高了检测性能
第1章语音端点检测问题的提出
语音是人类最自然的信息载体,理应成为未来从机交互的主要方式。
目前,随着计算机等飞速发展,语音分析、语音合成和语音识别的应用领域也越来越广泛,而语音端点检测是语音分析的、语音合成和语音识别中一个重要环节。
在实际运用中,通常要求首先对系统的输入信号进行判断,准确地找出语音信号的起始点和终止点。
这样才能采集真正的语音数据,减少数据量和运算量,并减少处理时间。
在语音识别中,通常是先根据一定的端点检测算法,对语音信号中的有声片和无声片段进行分割,而后在针对有声片段,依据语音的某些特征进行识别。
但我们知道,无声段或者语音段前后一般包含人为呼吸等产生的杂音,语音开始处也有弱摩擦音或弱爆破音,而在语音的终点处一般还包含鼻音,这些使得语音的端点比较模糊。
研究表明[1],即使在安静的环境中,语音识别系统一半以上的识别错误来自端点检测器。
因此,作为语音识别系统的第一步,端点检测的关键性不容忽视,尤其在噪声环境下语音的端点检测,它的准确性很大程度上直接影响着后续的工作能否有效进行。
语音端点检测也是语音增强算法和语音编码系统的重要部分。
例如,在语音增强算法最常用的谱减法就要求从含噪语音中提取噪声进行估计噪声谱;语音压缩编码算法可以利用“语音插空”以增加信道容量。
这些都离不开语音端点检测。
综上所述,语音信号的端点检测至今为止仍是有待进一步深入的研究课题。
第2章语音技术的现状
目前,语音技术正进入一个相对成熟点,很多厂商和研究机构有了语音技术在输入和控制上令人鼓舞的演示,输入的硬件和软件平台环境也日益向理想化迈进,但语音技术比起人类的听觉能力来还相差甚远,其应用也才刚刚开始,语音识别技术在开发和研究上还有大量的工作需要做。
从开发上讲,特别是从桌面型应用来看,语音技术需要在以下几个方面继续努力:
①进一步规范和建设语音输入的硬件通道、软件基本引擎和平台,使语音技术能集成到需要语音功能的大量软件中去。
②语音产业需要更加开放的环境,使有兴趣和实力的企业都能加入到这方面的研究和开发中,逐步改变只有某些大公司和实验室拥有这一技术的状况。
③在软件界面上不断创新,在现有技术基础上产生动人心魄的效果,逐步改变人们用鼠标、键盘的习惯。
当然这是一个漫长的过程。
在研究上,针对现有技术的缺陷,应该围绕三个目标开展诸方面的研究:
①提高系统的可靠性,使系统在不同说话人、不同说话风格和语速、不同带宽的语音信号及不同信噪比条件下具有同等效果。
这方面应该进一步细化目前的研究模块,从语音和语言的产生、编码、传输到解码等各个环节加以深入探索。
②提高系统的灵活性,包括对能方便地结合应用领域中基于统计、规则和有限语法等各种知识源的框架以及适合不同计算平台(CPU和内存等)算法的可伸缩技术(ScalableTechnology)的研究。
③围绕使语音识别系统具有自我进化能力(Evolution)开展研究,包括对识别结果的可信度衡量、无监督的声学和语言学层次上自适应等。
语音技术无疑是极具市场潜力的热点技术,这一点对中文来说尤其明显。
试想,多数中国人使用计算机时都在一定程度上受到电脑键盘输入的困扰,所以,很多人都看好中国是语音技术推广应用的最大市场。
同时,我们也希望电脑更加易于使用,能接受更多不受时间限制和具有良好态度的多种信息服务。
各大公司投资中文语音识别就是希望在未来占领这一领域里的制高点。
面对未来巨大的市场潜力,必须发展我们自己的民族语音产业。
对于桌面应用系统来说,虽然已有国外现成的API可以利用,但这样的技术不但离高质量的口述记录还相差甚远,更不用说满足多姿多彩现实世界的应用需求。
同时,中国地域的口音问题以及汉语极其灵活的语法需要更高要求的语音和语言处理模型。
另外,一方面,桌面语音识别技术的应用仅仅是语音识别应用的冰山一角,更大的商机和应用在于电话网络、Internet和各种电器设备,一旦语音技术可以实用化到内置于设备中,我们付出的将是非常昂贵的代价。
另一方面,语音识别作为非常大众化的应用,同当地的文字文化、使用习惯等密切相关,应用作为语音技术推动的原动力,至少目前还没有统一和固定的解决方案。
通过发展完全民族化的语音产业,培养一大批这方面的本地人才,才能推动这一技术的快速发展。
虽然目前国内从事语音识别技术研究的单位不是很多,学科基础薄弱,能进行非特定人、大词汇量、连续语音识别的更是寥若晨星,但在国家863计划的支持下,在我国科研人员长期艰苦的努力下,我国在语音技术研究水平和原型系统开发方面完全达到了世界级的水平。
中科院自动化研究所模式识别国家重点实验室研制的汉语非特定人、连续语音听写机系统的普通话系统,其错误率可以控制在10%以内,并具有非常好的自适应功能。
第3章端点检测技术的现状
随着科技的进步,语音端点检测目前主要的目的是:
①减少识别器的数据处理量:
可以大量减少信号传输量及识别器的运算负载,对于语音对话的实时识别有重要作用;
②拒绝非语音的信号:
对非语音信号的识别不仅是一种资源浪费,而且有可能改变对话的状态,造成对用户的困扰;
③在需要打断(barge-in)功能的系统中,语音的起始点是必须的。
在端点检测找到语音的起始点时,系统将停止提示音的播放。
完成打断功能;
在很长一段时间里,语音端点检测算法主要是依据语音信号的时域特性[2-3]。
其采用的主要参数有短时能量、短时平均过零率等,即通常说的基于能量的端点检测方法。
近年来,随着通信业的迅猛发展,在各行业对通信系统语音质量的客观评价以及语音识别方法等技术实用化的强烈需求了,又出现了很多的语音端点检测算法。
它们主要是通过采用各种新特征参数,以提高算法的抗噪声性能。
如基于1994年由JunquaJ-C提出的TF参数的语音端点检测[4-5],还有诸如倒谱系数[6-7]、短时频带方差[8]、自相关相似距离[9]、信息熵[10-11]等也逐渐的被应用到端点检测中。
有时,还通过将信号的几种特征组合成为一个新的特征参数业进行端点检测。
对语音端点的判决方式也由原来的单一门限[12]、双门限[13]发展到基于模糊理论的判决方式[14]。
第4章噪声环境下的端点检测
噪声环境下的端点检测在语音信号分析和识别中占有重要地位。
文中将分形理论中的分形记盒维数应用到端点检测算法中,采用了基于分形记盒维数与短时能零比相结合的端点检测算法,以分形记盒维数为主要判决条件,并在判决门限的设定上采用了自适应机制。
仿真结果表明,基于分形记盒维数和短时能零比相结合的端点检测算法在白噪声和粉红色噪声下具有很好的准确率和鲁棒性。
在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算。
这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算。
目前流行用Basic、Fortran和c语言编制计算程序,既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧。
对多数科学工作者而言,同时具备这两方面技能有一定困难。
通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率。
为克服上述困难,美国Mathwork公司于1967年推出了“MatrixLaboratory”(缩写为MATLAB)软件包,并不断更新和扩充。
目前最新的6.x版本(windows环境)是一种功能强、效率高便于进行科学和工程计算的交互式软件包。
其中包括:
一般数值分析、矩阵运算、数字信号处理、建模和系统控制和优化等应用程序,并集应用程序和图形于一便于使用的集成环境中。
在此环境下所解问题的MATLAB语言表述形式和其数学表达形式相同,不需要按传统的方法编程。
不过,MATLAB作为一种新的计算机语言,要想运用自如,充分发挥它的威力,也需先系统地学习它。
但由于使用MATLAB编程运算与人进行科学计算的思路和表达方式完全一致,所以不象学习其它高级语言--如Basic、Fortran和C等那样难于掌握。
实践证明,你可在几十分钟的时间内学会MATLAB的基础知识,在短短几个小时的使用中就能初步掌握它.从而使你能够进行高效率和富有创造性的计算。
MATLAB大大降低了对使用者的数学基础和计算机语言知识的要求,而且编程效率和计算效率极高,还可在计算机上直接输出结果和精美的图形拷贝,所以它的确为一高效的科研助手。
自推出后即风行美国,流传世界。
MATLAB算法是一个优秀的算法,我们在软件开发过程中,尤其是数据库开发方面,要进行数据汇总、统计分析、然后根据汇总的数据产生图表(包括柱图、饼图、四分图、雷达图等),这种需求甚为普遍。
由于MATLAB算法具有强大的计算处理功能,所以在许多软件中已经用到它,比如作个销售预测,前提是基于以往的销售数据,可以用MATLAB算法对以往的销售数据进行处理(如函数、矩阵的一系列运算,或者采用一些运筹学的知识进行数据处理),再由MATLAB算法产生出相关数据的精美图形输出,得到一个具有科学理论依据的方案,把我们的管理思想融合到了计算机程序设计中,使软件解决方案不是简单的电算化工具,而是一个综合许多学科的智慧的结晶!
微软的.NET开发工具,结合数据库SQLSERVER,是开发数据库应用的最佳选择!
我们可以把SQLSERVER里的数据用MATLAB算法进行处理,还可以将自己写的算法包装成COM,在.NET中引用就可以了。
在使用的MATLAB算法时,图形输出的功能往往被人忽略,下面的例子,就是采用的MATLAB出的图形
首先在.NET中,引用matlab的对象库(MatlabApplication(version6.5)TypeLibrary),笔者采用的是MATLAB6.5版本,然后在窗体上加一个图片框PictureBox1,用于显示图片;
一个Button1用于调用MATLAB,并加载图形。
代码:
DimstrMatLabAsString'定义matlab语句字符串
'显示正弦图
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimMatLabAsObject
'建立matlab应用
MatLab=CreateObject("matlab.application")
'最小化matlab命令窗口
MatLab.MinimizeCommandWindow()
'matlab语句
strMatLab="t=2:
0.2:
4*pi;y=sin(t);plot(t,y)"
'执行matlab算法
matlab.Execute(strMatLab)
'生成一个JPG的图形c:
\Test1.jpg
matlab.Execute("print(gcf,'-djpeg','c:
\Test1')")
'退出matlab,释放资源
matlab.Quit()
MatLab=Nothing
'显示在图片框
PictureBox1.Image=NewBitmap("c:
\Test1.jpg")
EndSub
'显示饼图
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
DimmatlabAsObject
matlab=CreateObject("matlab.application")
strMatLab="sale=[100400150250500];pie3(sale,[00100],{'公司A','公司B','公司C','公司D','公司E'})"
matlab.Execute(strMatLab)
matlab.Execute("print(gcf,'-djpeg','c:
\Test2')")
matlab.Quit()
matlab=Nothing
PictureBox1.Image=NewBitmap("c:
\Test2.jpg")
EndSub
'显示三维螺旋线图
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
DimmatlabAsObject
matlab=CreateObject("matlab.application")
strMatLab="t=0:
0.2:
4*pi;plot3(sin(t),cos(t),t)"
matlab.Execute(strMatLab)
matlab.Execute("print(gcf,'-djpeg','c:
\Test3')")
matlab.Quit()
matlab=Nothing
PictureBox1.Image=NewBitmap("c:
\Test3.jpg")
EndSub
'显示立体波浪图
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
DimmatlabAsObject
matlab=CreateObject("matlab.application")
strMatLab="[X,Y,Z]=peaks(20);surfc(X,Y,Z);colormaphsv;axis([-24-68-106])"
matlab.Execute(strMatLab)
matlab.Execute("print(gcf,'-djpeg','c:
\Test5')")
matlab.Quit()
matlab=Nothing
PictureBox1.Image=NewBitmap("c:
\Test5.jpg")
EndSub
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
PictureBox1.SizeMode=PictureBoxSizeMode.StretchImage
EndSub
总结:
一般情况下,我们将自己的算法在MATLAB中生成dll,供VB.NET调用此算法,输入一组数据,输出一系列数据,而且MATLAB算法比较简单,一个命令就完成了许多功能,大大提高了开发效率!
第5章短时能量和过零率
语音激活检测VAD(VoiceActivityDetection)是一种通过特定的判决准则判断语音中出现的停顿和静默间隔,检测出有效语音部分的技术。
运用这种技术可以在确保语音质量的前提下,对不同类别的语音段采用不同的比特数进行编码,从而降低语音的编码速率。
由于在双工移动通信系统中,一方只有35%的时间处于激活状态[1],如何降低静音期的编码速率对于减少传输带宽、功率以及容量具有积极的作用,因此VAD技术在语音通信领域具有重要的使用价值。
随着适合于变比特率语音编码的CDMA和PRMA等多址技术的出现,应用于蜂窝的语音激活检测的重要性也随之提高[2]。
由于语音通信的特殊性,要求检测过程能达到实时性的要求。
而目前主流DSP芯片的并行度并不高,因此在实时处理的要求下,保证语音质量和降低语音的编码速率两者难以兼顾。
而现场可编程门阵列(FPGA)由于其硬件具有可编程的灵活性,可以实现较高的并行度,从而可以在满足实时性要求的前提下,很好地保证语音质量并降低语音的编码率。
1算法及检测流程
1.1算法简述
语音激活检测算法可以基于时域或频域。
本文采用的算法是时域分析的方法。
算法对于输入信号的检测过程可分为短时能量检测和短时过零率检测两个部分。
算法以短时能量检测为主,短时过零率检测为辅。
根据语音的统计特性,可以把语音段分为清音、浊音以及静音(包括背景噪声)三种。
在本算法中,短时能量检测可以较好地区分出浊音和静音。
对于清音,由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;短时过零率则可以从语音中区分出静音和清音。
将两种检测结合起来,就可以检测出语音段(清音和浊音)及静音段。
1.2检测流程
检测流程:
对输入信号先进行高通滤波,减弱以噪声为主的信号能量。
接着进行窗长为80个数据的加窗处理,然后计算该帧的平均能量,再利用短时能量进行VAD初判。
若平均能量大于门限则判为语音帧,若平均能量小于门限则判为静音帧。
对于初判为静音帧的帧再进行VAD平滑,即参考前三帧的情况:
如果前三帧中至少包含一帧非平滑过的语音帧,则将该帧平滑为语音帧,同时记录下该帧为平滑所得的语音帧;反之,则判断为静音帧。
如果平滑结果仍为静音帧,且当前帧的过零率介于30~70之间时,则改判为语音帧;反之则仍判为静音帧[3]。
VAD算法的检测流程图如图1所示。
此外,由于人耳的听觉具有掩蔽效应,因此有必要对短时能量门限进行更新[3]。
本算法所采用的门限更新方式是:
如果连续检测到三帧语音,为了更好地检测到静音,将短时能量门限提高3dB,但如果提高后的门限超过当前帧的平均能量减12dB,则不提高门限;如果连续检测到三帧静音,为了更好地检测到语音,将短时能量门限降低3dB,但如果降低后的门限小于当前帧的平均能量加12dB,则不降低门限。
此外,为了防止门限变得太高或降得太低,还应把门限限制在GATE_MIN、GATE_MAX范围内。
2系统实现及优化
本设计采用QuartusII以及ModelSim进行开发(ModelSim是MentorGraphics公司的仿真软件)。
QuartusII是Altera公司的一套开发FPGA/CPLD的EDA软件,可以完成从设计输入、功能仿真、综合优化、后仿真、引脚配置、布局布线到配置芯片的一系列FPGA/CPLD的开发流程,并提供调用其他EDA工具,如ModelSim、Synplify/SynplifyPro、FPGAComplier的接口。
本设计的输入为16位PCM编码的数字语音信号,输出是每80个数据为一帧的语音信号的检测结果,其中高电平表示语音,低电平表示静音。
根据所用算法的特点,将本设计划分成五个模块:
FIFO模块、高通滤波模块、平均能量模块、判决模块以及控制模块。
系统结构框图如图2所示。
2.1FIFO模块
输入的语音信号的采样率为8kHz,如果将8kHz作为系统的时钟频率,极大地削弱了FPGA芯片的速度优势。