语音信号基音周期检测的软件设计毕业论文.doc_第1页
语音信号基音周期检测的软件设计毕业论文.doc_第2页
语音信号基音周期检测的软件设计毕业论文.doc_第3页
语音信号基音周期检测的软件设计毕业论文.doc_第4页
语音信号基音周期检测的软件设计毕业论文.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

黑龙江工程学院本科生毕业设计语音信号基音周期检测的软件设计毕业论文目 录摘要IAbstractII第1章 引言11.1 课题研究目的及意义11.2 基音周期检测的国内外研究现状11.3 课题所作主要工作51.4 各章节内容安排5第2章 总体方案设计62.1 语音信号基音周期检测软件设计的思路62.2 语音信号基音周期检测软件设计的功能分析62.3 软件设计的组成62.3.1 可视化界面62.3.2 基因周期检测算法72.4 本章小结7第3章 算法实现83.1 常用算法介绍83.1.1平均幅度差函数法83.1.2 倒谱法93.2 自相关算法原理103.3 自相关算法流程113.4 自相关算法数据分析123.4.1 清/浊音判断分析123.4.2 基音检测数据分析123.4.3 自相关函数的抗噪性分析143.5 自相关算法的实现及结果分析143.6 算法的改进及存在问题173.7 本章小结18第4章 系统软件设计204.1 软件的介绍204.2 软件总体设计思路204.3 主程序流程设计214.4 子程序设计214.5 可视化界面设计254.5.1 MFC界面介绍及使用说明254.5.2 可视化界面组成部分及各部分功能分析254.5.3 可视化界面的软件实现254.6 软件调试274.7 本章小结28结束语31参考文献32致谢34附录35黑龙江工程学院本科生毕业设计第1章 引 言1.1 课题研究目的及意义语音不仅是人类最自然的信息载体,是人与人之间进行信息交流最直接、最方便和最有效的工具,而且也是人与机器之间进行通信的重要工具1。语音是语言的声学表达形式,在高度发达的信息时代,用数字化的方式进行语音传送、识别、合成、增强等,也是整个数字化通信网络中最重要、最基本的组成部分之一。言语工程学所要解决的是用什么样的代码去处理言语的可变量和不变量2。就目前的发展趋势显示 ,未来计算机将能实现人机自然对话,具有一个和谐的人机交互环境。这意味着数字语音处理技术的普及与飞跃,语音将成为未来人机交互的主要方式。数字语音处理已经在众多领域得到了广泛的应用,其中包括语音压缩、语音合成、语音识别、说话人识别以及语音增强等。这些方面的研究成果已经深入到通信、办公自动化、远距离控制、邮件分检、声控电话拨号、计算机语音应答,以及机器人听觉和口语系统等实际应用系统中,而且越来越受到人们的重视。语音信号最基本的研究方向就是语音信号的基音周期。基音周期作为语音信号的一个重要参数,反映了语音激励源的重要特征。它的检测和估计是语音信号处理中的一项重要技术,与许多语音信号处理技术相关。基音周期估计常称为基音检测,它的目标是找出和声带振动频率完全一致的基音周期变化轨迹曲线,或者是尽量吻合的轨迹曲线。语音信号的基因周期检测问题的实质上也就是准周期的周期估计问题。基音周期提取的精确性和效率直接影响到合成语音能否真实快速地再现原始语音信号。基因周期检测已经应用在语音信号的各个领域中,如语音分析与合成、有调语音的辨意、低速率语音压缩编码、说话人识别等,它的准确性对语音处理的很多领域都起着非常关键的作用。1.2 基音周期检测的国内外研究现状语音信号处理的研究工作最早可以追溯到19世纪70年代,而在20世纪得到了长足的发展,到了20世纪90年代,IBM、Apple、AT&T、NTT等著名公司为语音识别的实用化开发投以巨资,致使语音信号处理技术的应用掀起了热潮3。近半个世纪以来,语音技术一直是许多学者研究的重点。尤其是八十年代后,在短短不到二十年的时间中, 语音技术研究在各个方面均取得了重大突破。在语音识别方面,隐马尔柯夫技术被成功地用于描述随机语音信号,并由此形成了以“倒谱”作为技术引擎的统计语音识别主流算法。在此基础上,许多非特定人大词汇量连续语音识别系统在办公室环境下已接近实用化程度4。 汉语是一种单音节字组成词,然后在组成句子的语言结构系统里,汉语又是一种声调语言,声调在辨别语义中具有重要的作用,声调曲线分为弯头段、调型段和降尾段,其中只有调型段才有区别声调的作用,声调的识别是以基音周期的估计作为基础的。声调曲线就是基音周期的倒数基音频率的轨迹5。基音频率是语音信号最重要的参数之一 ,它的高低取决于声带的尺寸和特性,也决定于它所受的张力,男性说话的基音频率分布在60200Hz范围内,女性说话者和小孩的基音频率值在 200450Hz范围内。基音周期的提取是语音处理中的重要任务,基音检测是语音处理中的一个非常重要的问题,但由于影响基音检测的因素众多,使得基音周期的准确估计非常困难。如短时平均幅度差函数法、倒谱法、小波变换法等几种经典的基音检测方法,都存在各自的优点及不足,应在预处理、后处理、语音信号的产生模型、语音信号的个性特征、发音时的情感及力度等基音检测的各个环节上提出了一些新的看法,并就一些可能出现的突破口做了一些展望6。在语音信号分析中,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等进行处理研究7。从国内外研究现状来看,基音检测技术的研究热点和难点已经集中于处理低信噪比语音。着眼于基音的检测方法,主要有以下三个方面的研究:(1)稳定并提取准周期性信号的周期性方法;(2)因周期混乱,采取基音提取误差补偿的方法;(3)消除声道噪声影响的方法。人们从语音信号的时域特性、频域和时频混合特性三个方面出发,已经开发了许多基音检测方法,这些方法中的一些方案已经得到了应用,例如自相关函数估计法,倒频谱估计法以及残差检测法等。各方法各有其特点,首先用求残差系数,然后对残差系数求自相关周期,进而求出基音周期。估计出来的基音周期精确度较高,且容易在计算机中实现。 估计基音周期的算法及其改进语音信号的提取人的正常发音是模拟信号,需要对语音进行离散化处理,变为数字信号,具体手段可以采用专用语音采样设备或者使用计算机进行 转换时采样的频率、量化等级等。在语音信号的处理中只有准确捕获语音信号参数,才能高效地识别语音。而在这些语音信号参数中,基音周期提取的精确性和效率直接影响到合成语音能否真实快速地再现原始语音信号,精确地确定语音最大幅度的位置是语音信号基音同步分析的一个重要部分8 。因为在语音信号数字处理的各个领域,无论是语音分析与合成 、语音压缩编码,还是语音识别和说话者确认等,准确可靠地检测语音信号的基音周期都至关重要,将直接影响到整个系统的性能9 。噪声环境下常用基音检测方法的检测效果都不理想,而实际语音在产生过程中,不可避免地要受到背景噪声的影响10。估计基音周期真正有用的是出现在周期处的振幅高的自相关峰,其他较低的谐波峰都是多余的11。根据基音周期平滑变化的特点,基于语音信号的准周期性进行了语音信号的基音提取,能够使预测结果更加的准确,更具实时性,有利于语音的编码与识别12 。为了提高基音检测的准确性,降低计算复杂度,人们己经从基于事件的检测方法和非基于事件的检测方法出发,开发了许多基音检测算法13。(1)非基于事件的基音周期检测方法非基于事件的方法一般都先将语音信号分为长度一定的语音帧,然后对每一帧语音求平均基音周期,相比基于事件的基音周期检测方法来说,它的优点就是比较简单,主要应用于只需要平均基音周期作为参数的语音编解码,语音识别。这些方法有:自相关函数法平均幅度差函数法和倒谱方法。传统的自相关函数法(ACF)是RosS等人于 1977年提出的,自相关函数法的原理是周期信号的自相关函数将在时延等于函数周期的地方产生一个极大值 ,因此通过计算语音信号的自相关函数可以估计信号的基音。自相关函数方法适合于噪声环境下,但单独使用经常发生基频估计结果为其实际基音频率的二次倍频或二次分频的情况;传统的平均幅度差函数法(AMDF)是RosS等人于1974年提出的,平均幅度差函数法无需乘法运算,因而算法复杂度小。倒谱法是由Noll等人于1967年提出的,这种算法的优点是对于纯净语音的基音检测精度比较高,可以较好地从语音信号中分离出基音信息和声道信息,缺点是算法比较复杂平均幅度差法、倒谱法在静音环境下或噪声较小时都可以取得较好的检测结果,但在语音环境较恶劣信噪比较低时,检测的结果下降较快,难以让人满意。(2)基于事件的基音周期检测方法相比非基于事件的基音周期检测方法而言,基于事件的基音周期检测方法并不多尽管基音周期检测有许多困难,但因为它的重要性,基音周期检测一直是一个研究的重要课题。为了从语音波形中能够准确地提取到基音,使全世界的科学家忙了几十年,从20世纪60年代以来出现了很多种基音周期检测方法,特别是在有噪环境一下的语音信号的基音周期检测方面更是提出了许多有效的方法。进行基音检测方面早期研究工作的国家主要有美国等欧美国家,之后,我国在基音检测方面,尤其是对汉语的基音检测工扩见,如:小波变换方法和 Hilbert Huang变换方法,这两种方法都具有跟踪基音周期变化的能力,能将微小的周期变化检测出来。 目前,基音检测主要存在以下困难:(1)语音信号变化十分复杂,声门激励的波形并不是一个完全的周期序列。在语音的头尾部并不具有声带振动那样的周期性,对有些清浊音的过渡帧很难判定它属于周期性还是非周期性,从而对估计基音周期带来一定的影响。(2)从语音信号中去除声道的影响,直接取出仅与声带振动有关的声源信息并非易事。如声道共振峰可能强烈改变声门波形的结构,从而严重影响激励信号的谐波结构,会给基音检测造成困难。(3)语音信号是准周期的,且共振峰结构和噪声有时会影响波峰和过零率,很难准确定位基音周期的开始和结束。(4)区分清音语音和低电平语音是导致基音检测困难的另一个重要因素。在许多情况下,清音语音与低电平浊音段之间的过度段是非常细微的,要确认它是极其困难的。(5)在实际应用中,背景噪声强烈影响基音周期检测的性能。(6)基音频域变化范围大,从老年男性的80Hz到儿童女性的500Hz,接近三个倍程,给基音检测带来了一定的困难。自相关基音周期检测是语音信号处理的关键技术,除了保证信号处理的质量外还要注重算法的效率。通过短时自相关函数得到浊音语音的基音周期,在自相关运算过程中采用极性相关法和峰值估算法以提高运算效率14。在用传统的自相关基音检测法计算基音周期时,判决错误的可能性较大,一般采用谱平整的预处理和和基音平滑后处理等技术以改善基音估计的性能。由于平滑处理需要缓存至少一帧的语音信号样点,因而不可避免地带来了额外的编码迟延15。为了减少基音周期提取中的倍频和半频错误,进行更准确的基音周期估计,提出一种基于混合幅度差函数的基音周期提取方法16。而前人研究的大量实验结果显示:基于分数自相关函数的基音检测的性能比自相关函数法和倒谱法有着明显的改善17。噪声环境下的基音检测在语音信号分析和识别中十分常见,结合自相关法和平均幅度差函数两种方法,提出了一种有效的噪声环境下基音检测方法,自相关基音检测算法的效率直接影响语音信号实时处理的质量18。可视化(Visual)程序界面设计是一种全新的程序设计方法,它主要是让程序设计人员利用软件本身所提供的各种控件,像搭积木式地构造应用程序的各种界面。这样就能极大地提高设计人员的工作效率。目前能进行可视化程序设计的语言很多,比较常用的有微软的Visual Basic、Visual C+、Borland公司的Delphi等。 Visual C+的语言灵活性好,效率高,可以接触到软件开发比较底层的东西,并且基于微软的MFC库博大精深,学会它可以让随心所欲地进行编程,与操作系统的结合更加紧密19。C+及Windows可视化程序设计计算机科学发展的每一步几乎都在软件设计和程序设计语言中得到充分体现。软件是一个发展的概念,随着软件开发规模的扩大和开发方式的变化,人们开始将程序设计语言作为一门科学来对待20。基音周期检测的最终目的是得到与声音振动频率吻合较好的基音周期变化的轨迹曲线21。基音周期检测是语音信号处理的关键技术,除了保证信号处理的质量外还要注重算法的效率。自相关基音检测算法是一种时域算法,它能直接对时域信号采样值进行分帧、求短时自相关函数,并根据一定的判决准则进行清浊音判断22。自相关基音检测算法,经过实验,它在保持较好的性能的基础上提高了检测效率23。随着信息处理技术日新月异地发展,各种先进的基音周期检测方法将不断涌现,基音周期检测的准确性和健壮性将逐渐得到改善24。1.3 课题所作主要工作对于软件实现部分的设计,包括可视化界面设计,算法设计,基音检测子程序设计。 而算法部分的设计,自相关算法流程,自相关算法数据分析,自相关算法的实现及结果分析,最后分析算法的改进及存在问题。1.4 各章节内容安排各章节具体内容如下:在第2章中,总体设计方案主要阐述了关于本设计的总体思路以及在设计中各项的功能分析。在第3章中,算法实现部分阐述主要内容是各主流算法的实现原理,算法流程以及算法的数据分析,实现及改进方法。在第4章中,软件实现的主要内容是编程语言的介绍,主程序设计的整体流程,以及各子程序实现的功能及可视化界面的组成及功能分析。 预期达到目标是在Visual C+语言环境下编写可视化界面,操作可视化界面能够实现语音信号的提取,语音信号的播放,自相关算法的选择,及各算法比较,从而能较准确检测输入的自相关语音信号的基音周期。第2章 总体方案设计2.1 语音信号基音周期检测软件设计的思路首先进行软件的选择,对比各主流软件的优缺点,并基于课题需要,最终选择VC+来进行程序的编写,其次是对于可视化界面的设计,了解MFC的编写过程及使用说明,根据课题需要设计相应按钮,如语音信号的提取,语音信号的播放,算法的选择及基音周期的检测,使之能够实现课题所要求的对于基音周期的检测。最后进行算法实现,当前有几种经典基音检测算法,从非基于事件的基音周期检测方法和基于事件的基音周期检测方法来看,非基于事件的方法一般都先将语音信号分为长度一定的语音帧,然后对每一帧语音求平均基音周期,相比基于事件的基音周期检测方法来说,它的优点是比较简单,但在语音环境较恶劣 、信噪比较低时,检测的结果下降较快,难以让人满意。主要方法有自相关函数法平均幅度差函数法和倒谱方法。相比非基于事件的基音周期检测方法而言,基于事件的基音周期检测方法并不多,主要方法有小波变换方法和Hilbert Huang变换方法,但实现却较为困难。综合自身对于各算法的掌握程度 ,本课题使用自相关算法来进行基音周期的检测。2.2 语音信号基音周期检测软件设计的功能分析 通过操作在Visual C+环境下编写的可视化界面,能够实现的功能有语音信号的提取,语音信号的播放,基音周期检测算法的选择,及最终的基音周期的检测 。在可视化界面上选择语音信号提取选项,从而关联运行语音信号提取程序代码,提取语音信号并在界面上显示语音信号的相关参数及原始语音信号的原始波形图,在可视化界面上选择自相关算法后,程序将会调用已经编写好的自相关法基音周期检测代码,从而运行基音检测程序,最后在可视化界面上显示基音周期的数值和语音信号自相关卷积之后的基音周期图,通过观察卷积之后的图,能够能加清晰地观察出峰峰间距。也可在界面上选择其他算法对基音周期进行检测并比较其检测结果。2.3 软件设计的组成2.3.1 可视化界面界面由框架窗口,菜单,工具栏,状态栏,交互对象的动态更新,图标和光标等元素组成。可视化界面主要的几个基本概念有表单、组件、属性、事件、方法等。本课题的可视化菜单在Visual C+环境下编写,MFC的英文全称为Microsoft function class(微软基础类库),是为了程序员提供调用Windows系统功能来提供接口。MFC提供了面向对象的框架,程序开发员可以基于这一框架来开发Windows应用程序。通过VC+设计界面的边框及空白的部分,本课题所设计出的可视化界面简洁清晰,能够通过操作界面来实现对于基音的检测。2.3.2 基因周期检测算法基音检测方法大致上可以分为三类:(1)时域估计法,直接由波形来估计基音周期,常见的有自相关(ACF)法、平均幅度差法(AMDF)等;(2)频域估计法,利用同态分析方法将声道的影响消除,得到属于激励部分的信息,然后求取基音周期,常见的有简化逆滤波(SIFT)法,倒谱法;(3)混合法,基于以上方法的衍生组合算法,如:自相关法和平均幅度差法相结合,这些方法在实验室特定条件下都取得了非常不错的效果,本课题使用自相关算法进行基因检测。分析计算浊音段信号的自相关函数,根据自相关函数的周期性计算语音信号的基音周期。浊音有基音周期,而清音的基音周期为零,因而清浊音判断是基音周期检测的第一步。语音浊音段的短时平均能量远远大于清音段的短时平均能量,因此通过短时能量En的计算可以区分清音段与浊音段。通过比较原始信号和它移位后的信号之间的类似性来确定基音周期,如果移位距离等于基音周期,那么,两个信号具有最大类似性。自相关基音周期检测法,能准确地检测到语音的清浊音端点从而检测到基音周期,而不需要专门的端点检测技术,算法结构简单,运算量小,效率高。 2.4 本章小结本章给出了设计的的总体方案,首先选择VC+编程语言来对设计进行实现。首先通过可视化界面的功能分析,得出本课题的设计思路,然后说明设计的各个组成部分,分别介绍了可视化MFC界面的组成,基因周期检测所使用的算法,最后使用自相关算法进行检测。56黑龙江工程学院本科生毕业设计第3章 算法实现3.1 常用算法介绍常用的基音周期检测方法如自相关函数法、倒谱法、平均幅度差函数法都属于非基于事件基音检测方法,先将语音信号分为长度一定的语音帧,然后对每一帧语音求平均基音周期,它们的优点是比较简单,主要应用于只需要平均基音周期作为参数的语音编解码,语音识别等。自相关函数具有很好的抗噪性,但易受半频、倍频错误影响。平均幅度差函数只需加法、减法和取绝对值等计算,算法简单;倒谱虽然算法复杂,但基音估计效果较好。它们在无背景噪声情况下可以精确地提取的语音基音周期,但在语音环境较恶劣、信噪比较低时,检测的结果很差,难以让人满意。3.1.1平均幅度差函数法 语音信号的短时平均幅度差函数定义为: (3.1)其中,是窗函数,N是一帧语音信号的长度,因为语音信号的浊音段具有周期性,我们假设基音周期为,则在浊音段,在处将出现谷点,谷点间的距离即为基音周期。 实际应用中,窗函数和取矩形窗,这样可使短时平均幅度差函数的定义更简单。短时平均幅度差函数可以写成: (3.2)由于只需加法、减法和取绝对值等计算,故算法简单,很易于硬件实现,从而使得短时平均幅度差函数法在基音检测中使用得相当普遍研究表明:当在静音环境下或当噪声较小时,AMDF法可以取的较好的检测结果,但在语音环境较恶劣、信噪比较低时,检测的效果很差,难以让人满意。3.1.2 倒谱法 倒谱法被认为是一种比较成功的基音检测方法,但是由于对数运算的引入致使倒谱法在具体数字实现时变得困难,而且还增大了计算量。当采用无噪语音时,用倒谱进行基音提取的效果是很理想的,然而当存在加性噪声时,其性能将恶化。含噪语音的对数功率谱的低电平部分会被噪声填满,掩盖了基音峰值点的周期性。语音信号不是加性信号,而是卷积信号。为了能用线性系统对其进行处理,可以先采用卷积同态系统处理。经过卷积同态系统后输出的伪时域序列称为原序列的“复倒频谱”。它的定义式可以表示为: (3.3)倒谱或称“倒频谱”的定义为: (3.4) 其中DFT是离散傅立叶变换,IDFT是离散反傅立叶变换。倒谱是复倒谱中的偶对称分量,它们都将卷积运算变为伪时域中的加法运算,使得信号可以运用满足叠加性的线性系统进行处理。复倒谱涉及复对数运算,它是对原信号的模求傅立叶变换,取对数,再求逆傅立叶变换;而倒谱只进行实数的对数运算,较复倒谱的运算量大大减少,它是对原信号的傅立叶变换的模取对数,对所求出的实部再做逆傅立叶变换。在发浊音时,声门激励是以,为周期的冲激序列 (3.5)式中,是正整数;是正整数,且;是幅度因子;是基音周期(用样点数表示的)。根据复倒谱的定义,可以得到的复倒谱为: (3.6)其中。 由上式可知,一个周期冲激的有限长度序列,其复倒谱也是一个周期冲激序列,而且长度不变,只是序列变为无限长度序列。同时其幅度随着值的增大而衰减,衰减速度比原序列要快。倒谱是复倒谱的偶对称分量,它同样具有与基音周期相同的周期,因而能容易且精确地求出基音周期,但算法实现较为困难。本课题使用自相关法对语音信号基音周期进行检测。3.2 自相关算法原理对于离散语音信号,它的短时自相关函数定义为: (3.7) 如果信号是随机的或周期的,则这时的定义为: (3.8) 上述公式表示,一个信号和延迟k点后的该信号本身的相似性,在任何一种情况下,信号的自相关函数都是描述信号特性的一种便利方法。短时自相关函数有以下重要性质:1如果是周期信号,周期是,则他的自相关函数也是周期信号且周期相同。2当时,自相关函数具有最大值;当,处周期信号的自相关函数达到极大值。3自相关函数是偶函数,即。短时自相关函数法基音检测的主要原理是利用短时自相关函数的第二条性质,通过比较原始信号和它移位后的信号之间的类似性来确定基音周期,如果移位距离等于基音周期,那么,两个信号具有最大类似性。浊音信号具有准周期性,浊音信号的自相关函数在基音周期的整数倍位置上出现峰值,而清音信号的自相关函数没有明显的峰值。所以首先要进行清浊音分析,只要检测到峰值的位置,就可以估计语音信号的基音周期值。自相关基音检测算法,经过实验,它在保持较好的性能的基础上提高了检测效率。随着信息处理技术日新月异地发展,各种先进的基音周期检测方法将不断涌现,基音周期检测的准确性和健壮性将逐渐得到改善。自相关函数可以估计信号的基音,自相关函数方法适合于噪声环境下。基于自相关函数的算法是基音周期估计的常用方法,特别适用于噪声环境下的基音提取。自相关函数在基音周期处表现为峰值,相邻两个峰值之间的间隔为一个基音周期。但通常情况下,基波分量往往不是最强的分量,丰富的谐波成分使语音信号的波形变得非常复杂,给基音检测带来了困难,经常发生基频的估计结果为实际基音频率的二次倍频或二次分频的情况。加之还有清浊混杂等情况,使基音检测成为一大难题。3.3 自相关算法流程通过对自相关基音检测原理的分析后,考虑到检测准确度和检测速率两方面的因素,这里提出了算法实现方案,如图3.1所示。算法中大致可分为了六个功能模块:取样 、带通滤波、分帧、自相关运算和基音检测。图3.1 自相关基音检测算法流程图在对语音信号进行分析和处理之前,为了提高检测的准确度,必须对其进行预处理。本课题中引入了一个带通滤波模块来滤除语音帧的高次谐波分量,由于声道响应的阻尼振荡,使自相关函数计算得到的图形可能有许多突起,有的时候并不是简单的找到第一最大峰值点就可以判断基音周期的位置。如果帧长选得比基音周期短,或共振峰频率快速改变,会使得自相关函数不在基音周期附近取得最大值,从而导致简单地选取自相关函数中最大峰的方法失败,因此,选择合适的帧长是重要的,帧长(窗宽)至少要覆盖两个基音周期,在目前普遍使用的系统中,一般选择帧长为30ms;为提高基音检测的可靠性,减少错判、倍频或分频,无论采用哪一种基音检测算法都可能产生基音检测错误,使求得的基音周期轨迹中有一个或几个基音周期估值偏离了正常轨迹(通常是偏离到正常值的2倍或1/2),称这种偏离点为基音轨迹的“野点” 。为了去除这些野点,本课题中我们采用的是中值平滑处理。采用九阶滤波器来进行均值滤波。3.4 自相关算法数据分析3.4.1 清/浊音判断分析在基音检测的同时,应进行清、浊音判断,即在浊音段应能正确检测出基音周期。用短时平均能量进行清/浊音的判断,语音信号的某帧信号的短时平均能量定义为: (3.9) 式中为窗函数,为窗长。根据En 由高到低的跳变可定出浊音变为清音语音的时刻,En 由低向高的跳变可定出清音变为浊音语音的时刻;而只有浊音才有基音周期,清音的基音周期为零。故清浊音判断是基音检测的第一步。3.4.2 基音检测数据分析 在对语音信号进行分析和处理之前,必须对其进行预处理。语音信号的采样率为22.05kHz。自相关计算点数(窗长)至少要大于基音周期的两倍,所以我们取帧长为30ms(660)点,重叠20ms,帧移10ms,可满足基音提取要求,保证基音频率应不低于67Hz。预处理除了数字化、放大和增益控制外,还包括反混叠滤波和预加重等。由于人在发声时,传输气流通道的共振特性会使得所提取的第一最大峰值所对应的周期值与真实的基音周期不一致。为了解决声道响应的谐波影响,我们只需在计算自相关函数之前对语音信号进行预处理。 在进行语音信号的数字处理时,最直观的就是它的时域波形。通常将语音用话筒转化为电信号,再用转换器将其转化成离散的数字采样信号后,最后,存入计算机内存中。图3.2是“ m_5”的时域波形图,语音信号具有很强的“时变特性”。但在较短时间之内,可以认为其特征基本保持不变,即具有“短时平稳性”。所以,通常截取一段语音进行分析处理,这一段语音称为一帧语音,其长度称为帧长,一般取帧长度为1030ms。图3.3是经Matlab验证的“m_5”的时域波形图,证明VC+所编写的界面运行状况良好,能够比较准确的显示出语音信号的波形图。一般汉语基音频率下限可取 60Hz(16.7ms),由于考虑到基音频率范围为80 500Hz,本课题用60900Hz带通滤波器滤去除低于60Hz的噪声干扰和高频成分,以得到较平滑的波形首先对所选取的浊音片段进行滤波。图3.4为语音信号“m_5”九阶滤波后的时域波形图。图3.2 界面显示的“m_5”时域波形图图3.3 经Matlab验证的“m_5”时域波型图 如图3.2、3.3和3.4所示,经过滤波信号的高频成分被滤掉了,原本高频信号很稠密,滤掉后信号变得稀松些。去掉高频成分,防止共振峰的影响以及高次谐波的影响,使波形变的平滑。 信号经过滤波后,就可以对其进行分帧。所取语音信号信号的采样频率为22.05KHz,所以所取帧长只要大于两倍基音周期就可以了。图3.4 九阶滤波后的“m_5”时域波形图3.4.3 自相关函数的抗噪性分析设噪声语音信号由语音信号及噪声信号组成,表示为式: (3.10)则的短时自相关函数为: (3.11) 式中N为帧长,为位移,是的自相关函数,是与的互相关函数,为的自相关函数。根据自相关函数的对称性性质,有公式: (3.12)当时,互不相关,则,则可以表示为: (3.13)由以上推导可以看出,当时,语音信号的自相关函数不受噪声的影响,所以自相关函数的抗噪性能强,特别适合噪声环境下的基音提取,这也是选择自相关算法的原因。3.5 自相关算法的实现及结果分析 由以上分析,自相关算法进行基音检测。算法即是对数据的操作,而自相关的实质即是自己对自己卷积的过程,数据变成原来的两倍减一,本课题所用的样本是用Cooldit在普通室内环境下录制的语音样本为“m_5” ,采样频率为22050hz,通道数位1,文件长度为374934字节,传输速率44100hz,调整数为2,每个样本的数据位数为16位,操作可视化界面,首先点击打开文件按钮,从而运行提取语音信号的子程序,并且创建打开文件对话框,选择“m_5”语音文件打开,即在界面上显示“m_5”文件的时域波形图;点击播放按钮,可视化界面从而播放打开的“m_5”语音文件,在算法选择按钮上选择自相关算法,从而关联自相关子程序,对“m_5”语音文件进行自相关处理:分帧滤波处理后,去噪并截取有声段,在进行相关计算,检测峰峰间距,最后点击基因检测按键,计算出基音周期并将结果显示在界面,结果为0.0154736s,并在界面上显示卷积之后的基音周期图。卷积之后的基音周期图如图3.5所示,该图是自己画上去的,用以表示客户矩形区,观察卷积之后的图,能够对自相关法测基音周期有更加清晰的了解和认知,可见其峰峰间隔恒定,有 (3.14)其中为基因频率,为峰间距,为抽样率。图3.6为界面上显示的语音信号时域波形图,图3.7为最后的界面显示状况,图3.8为算法实现流程图。图3.5 卷积之后的图图3.6 界面显示的“m_5”时域波形图图3.7 界面显示图图3.8 算法实现流程图本次设计的界面也可以选择其他算法,即将其他算法挂到界面上即可,MFC主程序框架具有消息响应机制,当选择一种算法,就会选择其对应的消息响应函数,进而执行相应的算法,如选择平均幅度差法实现时,首先将算法写好,并将计算基音周期要用的相应的数据准备好,在界面上点击平均幅度差按钮,将相应的接口对应上,调用函数,将准备好的检测数据传进去,进行算法的实现,最终出来的数据即为平均幅度差法检测出的基音周期数值,数据检测完成后,要在界面上将数值显示出来,微软MFC提供了一种调用弹出对话框函数messagebox(),能把用户自定义的字符串,显示在界面上。定义字符串“该语音的基音周期为:”如果检测出的基音周期大于0.001,就用对话框函数将数值显示出来。3.6 算法的改进及存在问题 自相关函数法、倒谱法、平均幅度差函数法都是经典的基音检测方法,但实际应用中,语音信号的环境千差万别,有的是安静环境,有的有强烈的背景噪声,有的方法没有考虑声道的影响,有的方法没有考虑发音者的个体差异,有的方法在预处理和后处理上欠妥,有的方法不管什么场合都采用传统的语音模型,而基音检测的健壮性及准确性却与对象、方法、环境密切相关,这使得上述方法在运用中,在安静的实验室环境下,有较高的准确性,但一到噪声环境,准确性剧减。有的对选定的人群有效,对任意的个体性能陡降,有的在说话者情绪平静时有效,但一遇情绪激动,则大打折扣。所以说,至今没有一种万能的方法在任何情况下都能准确可靠地估计出基音周期。 各种基音检测算法中,最复杂的是倒谱法,它要做傅立叶变换、计算功率谱、再做傅立叶逆变换,因此运算量很大。而本文自相关算法,在刚开始对语音信号处理时没有用的分帧这样的处理方法,而是对将该语音信号作为一帧进行处理,导致求解出的基音周期误差非常大,且基音周期曲线不是很平滑,所以在后来的程序中,进行分帧处理后,所求出的基音周期准确度提高。 在此次所做的程序设计中,还有许多的不足之处与需要改进的地方,在处理语音信号时,只是对其中的一帧进行了处理,没有对所有的帧进行统计,这样就不具有代表性,不能代表整个语音信号的特性。在对其中的一帧进行处理时,由于这一帧的长度是固定的,所有不需要再进行加窗截断处理,在进行自相关函数运算时,自相关函数中所携带的参量也都是需要考虑的。我们可以在以下方面作一些改进和突破: 1在预处理上下功夫由于实际的语音信号常常混和着强烈的背景噪声及共振峰频率,从而使语音信号的波形变得非常复杂,这常常引起基音检测的错判和误判。预处理的主要任务是在基音检测前,尽量去除背景噪声的影响及第一共振峰的影响,这对自相关法和平均幅度差函数法是非常必要的。 2在语音信号的产生模型上寻找突破口传统的语音产生模型起源于1930年Duddley发明的声码器,其基本思想是将激励和系统相分离,使语音信号解体来分别进行描述而不是直接研究信号波形的本身。传统的基音检测方法都是建立在这个模型上的,使用中,对每帧语音信号只进行一次清浊判决,若判为浊音,则以基音周期间隔的脉冲序列作为该帧的激励信号;若为清音,则以随机噪声作为该帧的激励信号,实际中,清浊信号的过渡段是很难区分的,且激励信号也常常含有类噪声成分,很难加以区分。 3适当考虑个性特征及情感、发音力度的影响近年来国内外的研究表明,基音周期的大小与个人的发音习惯及性别、年龄、发音时的力度及情感有很大的关系,传统的基音检测都是以“冷漠的”语音为研究对象的,而在实际中,人在发音时,常常带着惊讶、喜悦、紧张、愤怒、悲伤等复杂的感情有时,环境噪声引起Lombard效应(说话人在高噪声环境中为了使自己的声音能被听到,有意或无意地提高嗓音,致使其发音速度及质量发生变化),在这些感情和力度的驱使下,人的声带开启到最大面积的时间及关闭的速度与平静时相比,都要发生变化,同时共振峰的带宽和位置都要发生畸变,这些变化不可避免地影响到基音周期。 3.7 本章小结 本章简述了自相关算法的原理,算法流程,并从请浊音判断,基音检测数据和抗噪性上对自相关算法进行分析,详述算法实现过程及仿真结果分析。传统的语音基音检测算法中,只对输出的信号进行处理。当被处理的信号呈现准周期性的时候,这些方法能比较准确的检测出基音周期,然而当被处理信号是清浊音交替的时候,它们就很容易出现误判或漏判的情况。本课题在采用传统自相关法进行基因检测的同时,对语音信号进行带通滤波及分帧等各项处理,减少误差,使检测结果得到改善。其中语音信号采样率为22050Hz。通过对语音信号的一系列处理,可得出基音周期曲线。经过实验证明,该方法可以较精确的检测出语音信号的基音周期。 第4章 系统软件设计4.1 软件的介绍可视化(Visual)程序界面设计是一种全新的程序设计方法,它主要是让程序设计人员利用软件本身所提供的各种控件,像搭积木式地构造应用程序的各种界面。这样就能极大地提高设计人员的工作效率。目前能进行可视化程序设计的语言常用的有Visual Basic、Visual C+、Delphi等。Visual Basic 提供了强大的可视化编程能力,但Visual Basic不是真正的面向对象的开发工具,且不是真正的编译型语言,它产生的最终代码不是可执行的,是一种伪代码。Delphi是一门真正的面向对象的开发工具,并且是完全的可视化,它使用了真编译,可以让你的代码编译成为可执行的文件,而且编译速度非常快。 Visual C+的语言灵活性好,效率高,可以接触到软件开发比较底层的东西,并且基于微软的MFC库博大精深,学会它可以让随心所欲地进行编程,与操作系统的结合更加紧密。C+及Windows可视化程序设计计算机科学发展的每一步几乎都在软件设计和程序设计语言中得到充分体现。软件是一个发展的概念,随着软件开发规模的扩大和开发方式的变化,人们开始将程序设计语言作为一门科学来对待。MFC是建立在C+的基础上,所以强调C/C+语言基础对开发的重要性,本课题使用VC+作为编程语言。4.2 软件总体设计思路在VC+环境下编写可视化菜单,完成MFC界面的空白部分及边框部分,加入相关操作指令,使之在编写完成的界面下实现对语音信号的各种操作。 利用Pc机上的声卡和window操作系统可以进行数字信号的采集。以文件名 “m_5”保存,文件存储器的后缀默认后缀为.wav ,这是WINDOWS操作系统规定的声音文件保存的标准。首先读取音频文件,得到音频数据和那些相应的编码信息,之后对数据进行处理,1.去噪2.有声段截取3.自相关检测4.音频的峰峰检测5.计算得到基音周期,最后在可视化界面上显示基音周期数值,静态波形图及卷积之后的基音周期图。4.3 主程序流程设计 通过软件分析及总体设计思路的综合考虑,主程序的总体设计流程如下:图4.1 主程序流程图本设计的主程序流程图中中包括MFC框架的设计流程和基音检测的设计流程,通过软件的编写,实现在MFC界面上操作语音信号,并嵌入自相关算法。4.4 子程序设计基音周期检测的软件设计主要包括几部分:1基因主测试子程序对于基音检测的软件设计部分,自相关法进行基音检测子程序,定义输入语音样点及最大样点数,定义输出语音信号的基音周期,采样频率为22050hz。经过有声段检测,分帧,卷积,平均峰峰间隔检测,最后计算出输入语音信号的基音周期。基音周期检测主测试程序的流程图如图4.2所示。 图4. 2 基音检测主测试流程图 2滤波器设计滤波器(filter),是一种用来消除干扰杂讯的器件,对特定频率的频点或该频点以外的频率进行有效滤除的电路,就是滤波器,其功能就是得到一个特定频率或消除一个特定频率。滤波本质上是从被噪声畸变和污染了的信号中提取原始信号所携带的信息的过程。为了选取语音频率段,滤掉所需语音频率段以外的,并消除语音帧的高次谐波分量, 本课题选择带通滤波器对语音信号进行滤波,带通滤波器能允许一定频段的信号通过,抑制低于或高于该频段的信号干扰和噪声。实际上,并不存在理想的带通滤波器。滤波器并不能够将期望频率范围外的所有频率完全衰减掉,尤其是在所要的通带外还有一个被衰减但是没有被隔离的范围。这通常称为滤波器的滚降现象,并且使用每十倍频的衰减幅度dB来表示。通常下情况下,滤波器的设计尽量要保证滚降范围越窄越好,这样滤波器的性能就与设计更加接近。根据设计需要,设置滤波器参数。无论采用哪一种基音检测算法都可能产生基音检测错误,使求得的基音周期轨迹中有一个或几个基音周期估值偏离了正常轨迹(通常是偏离到正常值的2倍或1/2),称这种偏离点为基音轨迹的“野点” 。为了去除这些野点,本课题中我们采用的是均值平滑处理。运用九阶滤波器滤掉语音信号中不等于0的部分,为之后发现有声段做准备。九阶滤波流程图如图4. 3所示。 3检测有声段,去噪对于已知的原始语音信号,定义 pavg,max,num 等函数参数,pavg为数据指针,max为其最大值,num为数据量。只要数据指针第K个数据小于最大值的二分之一,都把数据指针第K个数据赋值0,作用是去除噪声,从而检测到有声段,检测有声段的软件流程图如图4.4所示。 4峰峰值检测 定义成员函数divid用来实现语音信号的峰峰间距检测,定义一个数组来存放下标值,定义单精度浮点型数据max为卷积之后的数据中的最大值,将有声段分成每段1000的样本点,将这1000个样本点进行卷积,卷积出来的数据为1999个。将这1999个样本点分成两段,在0999个样本点里,从999开始,每150个样本点里取一个最大值,直到样本点数小于等于250个则跳出循环,并记录保存这些最大值的下标,跳出循环后,记录这1000个样本点中有多少个最大值的下标,用各标下标的后项减前项,即为各下标值间的距离,将这些间距保存起来的,如果下标间距小于100,则将该下标滤除,因为间距小于100的不属于人的基音周期范围,如果下标之间的距离大于100,再对10001999个样本点进行上述操作,保存各最大值下标间距,最后将所有的下标间距加起来之后求出平均间距,即为该有声段平均的峰峰间距。图4.3 九阶滤波流程图 图4.4 检测有声段流程图4.5 可视化界面设计4.5.1 MFC界面介绍及使用说明 MFC,英文全称为Microsoft function class(微软基础类库),是为程序员提供调用Windows系统功能提供接口。MFC提供了面向对象的框架,程序开发员可以基于这一框架开发Windows应用程序。MFC采用面向对象设计,将大部分的API封装到C+类中,一类成员函数的形式提供给程序开发员调用。MFC借助C+的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C+的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C+中的对象,这样一来使开发更接近开发语言而远离系统。 利用C+的封装性开发者可以更容易理解和操作各种窗口对象;利用C+的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。而且C+本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。 在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。4.5.2 可视化界面组成部分及各部分功能分析 本课题所编写的可视化界面主要包括打开文件,播放,算法的选择,基音周期检测及各算法结果比较选项。点击打开文件按钮,关联语音信号提取程序,可打开所要检测的语音信号,并在界面上显示需要的各项数据及语音信号时域波形图。点击播放按钮,可播放已打开的语音文件,在算法选择选项中,可以选择不同的算法来进行基音周期检测,本课题在算法选

温馨提示

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

评论

0/150

提交评论