下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 通信工程毕业论文

通信工程毕业论文.doc

通信工程毕业论文

Hilda红
2017-09-28 0人阅读 举报 0 0 暂无简介

简介:本文档为《通信工程毕业论文doc》,可适用于高等教育领域

通信工程毕业论文青岛大学本科毕业生论文(设计)题目:孤立词语音识别的并行编程实现专业:通信工程青岛大学本科生毕业论文(设计)摘要语音识别是解决机器“听懂”人类语言的一项技术。首先介绍了目前国内外语音识别系统的现状、发展及研究方向并对语音识别系统的原理、并行化的实现做了详细分析在此基础上进行语音识别系统的设计主要内容有:提取语音、端点检测、特征值提取、训练数据、语音识别。选用HMM隐马尔科夫模型基于VC编译环境下的的多线程编程实现算法的并行运算提升了语音识别的效率。设计完成后在实验室进行了模拟调试实验结果表明:所设计的程序满足语音识别系统的基本要求。关键词语音识别孤立词多线程并行特征值断点检测AbstractSpeechrecognitionisatechniquetosolvethemachine"understand"humanlanguageFirstintroducesthecurrentstatusofspeechrecognitionsystemathomeandabroad,developmentandresearch,andtheprincipleofspeechrecognitionsystems,parallelimplementationofadetailedexplanationtodointhisspeechrecognitionsystembasedonthedesignofmaincontentsare:Extractvoice,endpointdetection,featureextraction,trainingdata,voicerecognitionHMMhiddenMarkovmodelselection,basedonVCcompilerenvironmentofmultithreadedprogramming,parallelcomputingalgorithmstoimprovetheefficiencyofspeechrecognitionUponcompletionofthedesignwassimulatedinthelabdebugging,experimentalresultsshowthat:thedesignprocesstomeetthebasicrequirementsofspeechrecogniti询委员会(CCITT)第组提出了许多急需制订的话音编码标准建议以推动通信网的发展。由于VLDSI的发展实现这一技术的代价已从在昂贵的信道中采用发展到一般信道中都可接受的水平因此编码技术日益受到重视。当前数字移动通信和个人通信(PCN)是深受人们重视的通信手段其重要问题之一是压缩语音编码速率形成面向对象的语音编码技术。数字语音编码技术从年提出PCM开始其编码方法已有了很大的发展如年提出的线性预测编码技术(LPC)、世纪年代末出现的隐马尔科夫技术(HMM)以及矢量量化(VQ)等。、口语机器翻译受到重视口语翻译的一个重要目的就是帮助聋哑人与正常人交流近来越来越受到人们的重视。首先聋哑人要戴上一副特制的手套计算机根据他打出的手语进行识别然后通过语音合成系统就可以把图像信息翻译成语言信息。同时系统还能够完成将正常人的语言翻译成聋哑人的手语只要将正常人说的话键入计算机经程序分析处理之后翻译成有表情、有动作的三维图像从而最终达到聋哑人与正常人之间通过翻译机进行交流的目的。口语翻译的研究在其他很多方面都有重要价值如用手势控制计算机甚至用手势导航等。语音识别技术的发展、神经网络用于训练韵律模型由于人工神经网络具备良好的自学习和自适应能力将其应用于语音合成系统中的韵律模型研究具有很重要的意义。将神经网络模型与已有的文语转换系统有机结合可以改变传统的文语转换系统的韵律模型具有更强的适应性和可训练性使合成语音的自然度得到显著提高增加了系统的灵活性和风格的多样性。、数据挖掘用于发现语音知识数据挖掘作为一种在大量数据库中发现隐藏新知识的计算技术方法通过语音定性模型的建立将数据分析和挖掘结果转化为逻辑规则或用可视化的形式进行表达。因此将数据挖掘和人机交互接口紧密地联系在一起将对计算机语音信号处理的研究工作产生巨大的推动力为语音信号处理提供了一条崭新的研究途径。、文本可视语音转换系统研制成功文本可视语音转换技术的出现是多媒体技术迅速发展的产物也迎合了社会发展的需求。它给人们的生活增添了新的色彩使计算机更加人性化人们与计算机的交流变得更为简单。相信在不久的将来它会在众多的技术、商业和娱乐领域得到广泛的应用并逐步进入我们每个人的生活。语音识别技术的研究方向、连续自然语音的识别与理解自然语音识别与理解研究的是计算机如何理解人类的语言其目的就是让计算机能够理解人说的话当我们使用计算机时要告诉它应该做什么它就能按照所理解的去执行。虽然现在自然语音识别与理解的理论研究得到了进一步完善同时计算机的功能、容量和速度都有了很大的提高但研究仍局限在对孤立音节的识别与理解上。人类流畅的自然发音不是孤立音节发音的简单组合它是在一定时间范围内输出的一种连续语流因此需要对连续语音进行处理。连续语音识别与理解技术中需要解决的难点很多对它的研究是语音技术今后的目标之一。、高自然度、具有表现力的合成语音提高合成语音的自然度仍然是高性能文语转换的当务之急。就汉语语音合成来说目前在单字和词组级上合成语音的可懂度和自然度已基本解决但是对于句子乃至篇章级其自然度问题就比较大。未来的文语转换系统的发展趋势是采用基于语境相关的合成思想进行设计能够将发音人的原始发音特征最大限度地保留下来辅助以先进的层次化语言韵律模型通过分散统计的模型方法来涵盖语义语音之间的内在联系使系统能够输出具有高自然度和表现力的合成语音。但是在目前的合成系统中普遍存在合成输出语音的机器味比较浓、语境的知识层次模型研究不完善等问题。因此获得高自然度、具有表现力的合成语音也是今后语音技术的研究目标之一。、语音技术与多媒体技术的结合伴随着现代语音技术的不断发展人类对语音信号的需要已经不仅仅停留在可懂性和正确性上语音合成技术的研究方向已是合成语音的美感并同时输出辅助的视频特征实现虚拟主持人的效果通过将视觉效果包括人的头部建模、唇形同步技术和表情因素等视频信息的加入可以更好地体现语音合成系统的表现力和感染力。因此我们完全有理由相信语音技术和多媒体技术的有机结合将使合成系统展现出广阔的应用前景。、语音技术与网络技术的结合目前语音技术已逐渐应用于电信的声讯信息服务领域和互联网消息收发方面。随着电话网与互联网的融合、网络信息项目的增多和时效性要求逐步提高建立适合于股票交易、航班动态查询、电话自动报税等业务的语音系统成为可能电话用户可以通过传统的语音、传真获取互联网上无穷无尽的信息。这些业务将彻底解决传统数字录音回放技术所无法解决的海量信息库和动态变化信息的实时生成与存储的难题。因此将语音技术与网络进行完美的结合具有强大的生命力。、多语种语言是人们交流的工具不同民族有自己不同的语言不同语言之间的交流在今天开放的信息社会和网络时代显得十分重要因此多语种的文语合成有着独特的应用价值。例如在自动电话翻译、有声电子邮件等应用中都提出了多语种语音合成的需求即使是对汉语合成也有多方言文语转换问题。理想的多语种合成系统最好是各种语言共用一种合成算法或语音合成器但现有的语音合成系统大多是针对某一种语言或若干种语言开发出来的所采用的算法及规则都是与某种语言密切相关的因此很难推广到其他语种。如汉语和西方语言之间存在着很大的差异而目前国内的系统都是做汉语文语转换的其韵律控制规则完全不适合于英语而且它们主要是合成汉语普通话的即使推广到广东话和上海话都有相当的难度。可见要真正解决多语种的文语合成从文本处理到语音合成都必须有新的思路因此研制多语种语音合成转换系统具有重要的理论和现实意义。第二章主要研究内容和方法语音识别的研究内容语音识别技术是利用计算机对语音进行特征提取获取最能表征语音特征的有用信息根据这些信息来对语音所代表的内容或说话人身份判断的技术。因此需要对语音波形的幅值、频率等特点进行研究我们把语音识别的研究内容大致可以分为语音提取、特征提取、语音识别、内容分析、内容匹配。语音识别是一门交叉学科语音识别正逐步成为信息技术中人机接口的关键技术语音识别技术与语音合成技术结合使人们能够甩掉键盘通过语音命令进行操作。语音技术的应用已经成为一个具有竞争性的新兴高技术产业。与机器进行语音交流让机器明白你说什么这是人们长期以来梦寐以求的事情。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。语音识别是一门交叉学科。近二十年来语音识别技术取得显著进步开始从实验室走向市场。人们预计未来年内语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。语音识别听写机在一些领域的应用被美国新闻界评为年计算机发展十件大事之一。很多专家都认为语音识别技术是年至年间信息技术领域十大重要的科技发展技术之一。语音识别系统的分类语音识别系统可以根据对输入语音的限制加以分类。如果从说话者与识别系统的相关性考虑可以将识别系统分为类:()特定人语音识别系统:仅考虑对于专人的话音进行识别()非特定人语音系统:识别的语音与人无关通常要用大量不同人的语音数据库对识别系统进行学习()多人的识别系统:通常能识别一组人的语音或者成为特定组语音识别系统该系统仅要求对要识别的那组人的语音进行训练。如果从说话的方式考虑也可以将识别系统分为类:()孤立词语音识别系统:孤立词识别系统要求输入每个词后要停顿()连接词语音识别系统:连接词输入系统要求对每个词都清楚发音一些连音现象开始出现()连续语音识别系统:连续语音输入是自然流利的连续语音输入大量连音和变音会出现。如果从识别系统的词汇量大小考虑也可以将识别系统分为类:()小词汇量语音识别系统。通常包括几十个词的语音识别系统。()中等词汇量的语音识别系统。通常包括几百个词到上千个词的识别系统。()大词汇量语音识别系统。通常包括几千到几万个词的语音识别系统。随着计算机与数字信号处理器运算能力以及识别系统精度的提高识别系统根据词汇量大小进行分类也不断进行变化。目前是中等词汇量的识别系统到将来可能就是小词汇量的语音识别系统。这些不同的限制也确定了语音识别系统的困难度。语音识别的研究方法根据语音识别技术的发展历史语音识别方法大致可分为基于说话人的语音识别方法、基于说话内容的语音识别方法、基于统计的语音识别方法和基于网络的语音识别方法。目前主流的大词汇量语音识别系统多采用统计模式识别技术。典型的基于统计模式识别方法的语音识别系统由以下几个基本模块所构成:信号处理及特征提取模块。该模块的主要任务是从输入信号中提取特征供声学模型处理。同时它一般也包括了一些信号处理技术以尽可能降低环境噪声、信道、说话人等因素对特征造成的影响。统计声学模型。典型系统多采用基于一阶隐马尔科夫模型进行建模。发音词典。发音词典包含系统所能处理的词汇集及其发音。发音词典实际提供了声学模型建模单元与语言模型建模单元间的映射。语言模型对系统所针对的语言进行建模。理论上包括正则语言上下文无关文法在内的各种语言模型都可以作为语言模型但目前各种系统普遍采用的还是基于统计的N元文法及其变体。解码器解码器是语音识别系统的核心之一其任务是对输入的信号根据声学、语言模型及词典寻找能够以最大概率输出该信号的词串。从数学角度可以更加清楚的了解上述模块之间的关系。首先统计语音识别的最基本问题是给定输入信号或特征序列符号集(词典)求解符号串使得:W=argmaxP(W|O)通过贝叶斯公式上式可以改写为:由于对于确定的输入串OP(O)是确定的因此省略它并不会影响上式的最终结果因此一般来说语音识别所讨论的问题可以用下面的公式来表示可以将它称为语音识别的基本公式。从这个角度来看信号处理模块提供了对输入信号的预处理也就是说提供了从采集的语音信号(记为S)到特征序列O的映射。而声学模型本身定义了一些更具推广性的声学建模单元并且提供了在给定输入特征下估计P(O|uk)的方法。为了将声学模型建模单元串映射到符号集就需要发音词典发挥作用。它实际上定义了映射的映射。为了表示方便也可以定义一个由到U的全集的笛卡尔积而发音词典则是这个笛卡尔积的一个子集。并且有:最后语言模型则提供了P(W)。这样基本公式就可以更加具体的写成:对于解码器来所就是要在由ui以及时间标度t张成的搜索空间中找到上式所指明的W。并行计算技术多任务在位的Windows系统中采用的是抢先式多任务这意味着程序对CPU的占用时间是由系统决定的。系统为每个程序分配一定的CPU时间当程序的运行超过规定时间后系统就会中断该程序并把CPU控制权转交给别的程序。与协同式多任务不同这种中断是汇编语言级的。程序不必调用像PeekMessage这样的函数来放弃对CPU的控制权就可以进行费时的工作而且不会导致系统的挂起。例如在Windows(x中如果某一个应用程序陷入了死循环那么整个系统都会瘫痪这时惟一的解决办法就是重新启动机器。而在Windows,NT中一个程序的崩溃一般不会造成死机其他程序仍然可以运行用户可以按CtrlAltDel键来打开任务列表并关闭没有响应的程序。、进程与线程在位的Windows系统中多任务指系统可同时运行多个进程而每个进程也可同时执行多个线程。进程就是应用程序的运行实例。每个进程都有自己私有的虚拟地址空间都有一个主线程(但可以建立另外的线程。进程中的线程是并行执行的每个线程占用CPU的时间由系统来划分。可以把线程看成是操作系统分配CPU时间的基本实体。系统不停地在各个线程之间切换他对线程的中断是汇编语言级的。系统为每一个线程分配一个CPU时间片某个线程只有在分配的时间片内才有对CPU的控制权。实际上在PC机中同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(ms左右)所以看上去好像是多个线程在同时运行。进程中的所有线程共享进程的虚拟地址空间这意味着所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便但另一方面也容易造成冲突。虽然在进程中进行费时的工作不会导致系统的挂起但这会导致进程本身的挂起。所以如果进程既要进行长期的工作又要响应用户的输入那么他可以启动一个线程来专门负责费时的工作而主线程仍然可以与用户进行交互。、基于Win基础上进行多线程编程的过程线程分用户界面线程和工作者线程种。用户界面线程拥有自己的消息泵来处理界面消息可以与用户进行交互。工作者线程没有消息泵一般用来完成后台工作。()用Win函数创建和中止线程win函数库中提供了多线程控制的操作函数包括创建线程、中止线程、建立互斥区等。首先在应用程序的主线程或者其他活动线程的适当地方创建新的线程。创建线程的函数如下:HANDLECreateThread(LPSECURITYATTRIBUTESlpThreadAttributesDWORDdwStackSizeLPTHREADSTARTROUTINElpStartAddress。LPVOIDIpParameterDWORDdwCreationFlagsLPDWRDIpThreadId)其中:lpThreadAttributes指定了线程的安全属性在Windows中被忽略dwStackSize指定了线程的堆栈深度lpStartAddress指定了线程的起始地址一般情况为原型函数DWRDWINAPIThreadFunc(IPVOID)lpParameter指定了线程执行时传送给线程的位参数即上面函数的参数dwCreationFlags指定了线程创建的特性lpThreadld指向一个DWORD变量可返回线程ID值。如果创建成功则返回线程的句柄否则返回NUII。创建了新的线程后则该线程就开始启动执行了。如果在dwCreationFlags中用了CREATESUSPENDED特性那么线程并不马上执行而是先挂起等到调用ResumeThread后才开始启动线程在这个过程中可以调用函数:BOOISetThreadPriority(HANDIEhThreadintnPriority)来设置线程的优先权。当线程的函数返回后线程自动中止。如果在线程的执行过程中中止的话则可调用函数:VOIDExitThread(DWORDdwExitCode)如果在线程的外面中止线程的话则可调用下面的函数:BOoITerminateThread(HANDIEhThreadDWORDdwExitCode)。但应注意:该函数可能会引起系统不稳定而且线程所占用的资源也不释放。因此一般情况下建议不要使用该函数。如果要中止的线程是进程内的最后一个线程则在线程被中止后相应的进程也应中止。、用Win函数控制线程对共享资源的访问在线程体内如果该线程完全独立与其他的线程没有数据存取等资源操作上的冲突则可按照通常单线程的方法进行编程。但是在多线程处理时情况常常不是这样线程之间经常要同时访问一些资源。例如一个线程负责公式计算另一个线程负责结果的显示两个线程都要访问同一个结果变量。这时如果不进行冲突控制的话则很可能显示的是不正确的结果。对共享资源进行访问引起冲突是不可避免的但可用以下办法来进行操作控制:()通过设置线程的互斥体对象在可能冲突的地方进行同步控制首先建立互斥体对象得到句柄:HANDLECreateMutex()然后在线程可能冲突区域的开始(即访问共享资源之前)调用WaitForSingleObject将句柄传给函数请求占用互斥体对象:dwWaitResult=WaitForSingleObject(hMutexL)共享资源访问完后释放对互斥体对象的占用:ReleaseMutex(hMutex)互斥体对象在同一时刻只能被一个线程占用。当互斥体对象被一个线程占用时若有另一线程想占用他则必须等到前一线程释放后才能成功。()设置信号在操作共享资源前打开信号完成操作后关闭信号。这类似于互斥体对象的处理。首先创建信号对象:HANDLECreateSemaphore()或者打开一个信号对象:HANDIEOpenSemaphore()然后在线程的访问共享资源之前调用WaitForSingleObject。共享资源访问完后释放对信号对象的占用:ReleaseSemaphore()信号对象允许同时对多个线程共享资源的访问在创建对象时指定最大可同时访问的线程数。当一个线程申请访问成功后信号对象中的计数器减调用ReleaseSemaphore函数后信号对象中的计数器加。其中计数器值创建时指定的最大值。利用信号对象不仅可以控制共享资源的访问还可以在应用的初始化时候使用。假定一个应用在创建一个信号对象时将其计数器的初始值设为这样就阻塞了其他线程保护了资源。待初始化完成后调用ReleaseSemaphore函数将其计数器增加至最大值进行正常的存取访问。()利用事件对象的状态进行线程对共享资源的访问用ResetEvent函数设置事件对象状态为不允许线程通过用SetEvent函数设置事件对象状态为可以允许线程通过。事件分为手工释放和自动释放。如果是手工释放则按照上述个函数处理事件的状态如果是自动释放则在一个线程结束后自动清除事件状态允许其他线程通过。()设置排斥区在排斥区中异步执行时他只能在同一进程的线程之间共享资源处理。虽然此时上面介绍的种方法均可使用但是使用排斥区的方法则使同步管理的效率更高先定义一个CRITICAl一SECTlON结构的排斥区对象在进程使用之前先对对象进行初始化调用如下函数:VODInitializeCriticalSection(LPCRlTlCALSECTlON)当一个线程使用排斥区时调用函数:EnterCriticalSection或者TryEnterCriticalSection当要求占用、退出排斥区时调用函数:LeaveCriticalSection。释放对排斥区对象的占用供其他线程使用。互斥体对象、信号对象和事件对象也可以用于进程间的线程同步操作。在用win函数创建了对象时可以指定对象的名字还可以设置同步对象在子进程的继承性。创建返回的是HANDLE句柄可以用函数DuplicateHandle来复制对象句柄这样每个进程都可以拥有同一对象的句柄实现进程之间的线程同步操作。另外在同一进程内可以用OpenMutexOpenSemaphore和OpenEvent来获得指定名字的同步对象的句柄。排斥区异步执行的线程同步方法只能用于同一进程的线程之问共享资源处理但是这种方法的使用效率较高而且编程也相对简单一些。在VisualC中除了利用Win函数进行多线程同步控制外如果用到了MFC类库则可利用已经封装成C类结构的同步对象使编程更加简捷。OpenMP编程模型OpenMP介绍OpenMP使用forkjoin(见图)并行机制程序开始串行执行此时只有一个主线程然后在遇到用户定义的并行区域时创建出一组线程。在并行区域之内多个线程可以执行相同的代码块或使用工作共享结构体并行执行不同的任务。主线程并行区域图forkjoin并行机制OpenMP由指导命令、环境变量和运行库组成见图#binkshEnvironmentvariables#ShellScriptf–openmptestfexportOMPTHREADS*directivesaout(specialcommentlines)!SourcefiletestfruntimelibraryProgrammainIntagerompgetthreadnumme:!$ompparallelme:print*,‘me:‘ompgetnum()!$ompandparallelme:me:endprogram图OpenMP组成通过在串行程序里加入适当的指导命令和运行库函数就可以把串行并行化这种增量并行的模式使得开发并行程序变得很容易。OpenMP结构如图所示userOpenMPprogramshellruntimefunctionsenvronmentvariablesdirectivesOpenMPruntimesystemoperatingsystemtheads图OpenMP体系结构OpenMP指导命令流程OpenMP主要包含如图所示的指导命令parallelbeginloopbeginsinglebeginbarrierflushparallelendloopendsingleendmasterbegincriticalbeginorderedbeginmasterendcriticalendorderdendsectionsbeginsectionbeginsectionbeginsectionendsectionendsectionsend图OpenMP指导命令流程图我们用流程图的形式把OpenMP指导指令的特点描绘出来对于parallel指导命令包含的代码段线程组中所有的线程都要执行对于loop指导命令包含的代码段可能只有部分线程执行右侧的方向线表示有的线程没有执行完这段代码左侧的方向线刻画出循环的特点执行完一次迭代后如果还有任务从循环开始处执行下一次迭代barrier指导命令表示所有线程在此处同步然后再执行接下来的语句barrier指导命令没有包含代码段flush指导命令后面加上需刷新的共享变量所以在图中没有画出中间的箭头即表示不包含代码段single指导命令所包含的代码段只由一个线程组执行别的线程跳过这段代码如果single指导命令由nowait从句则所有线程在single指导命令结束处隐式同步点同步master指导命令和single指导命令类似区别在于master指导命令包含的代码段由主线程执行single指导命令包含的代码段可以由任一线程执行并且master指导命令在结束处没有隐式同步也不能指定nowait从句critical指导命令包含的代码段称为临界段同时只能有一个线程访问ordered指导命令表示循环的迭代次序和串行程序一样sections指导命令包含一些section根据section的数量和线程的数量不同可能有时一个线程执行多个section也可能有的线程没有执行任何section右边的方向线即标识出后面这种情况。通过流图的形式来对OpenMP指导命令进行描绘可以很清晰的观察出OpenMP指导命令的特点。OpenMP是面向共享主存结构的标准程序员在开发的过程中不用考虑数据分布因此使用OpenMP开发并行程序比较容易一般OpenMP程序是从串行程序出发通过在适当位置加入编译指导命令和运行库函数来并行化串行程序通常OpenMP并行程序有几种不同的开发形式本文列出最常见的两种开发形式:一是通过简单的forkjoin形式对串行程序并行化二是采用单程序多数据SPMD形式对串行程序并行化。、forkjoin形式的程序。这种形式的OpenMP程序是最常见的很多OpenMP程序设计教程里都是采用这种形式来并行化串行程序好处是可以采用增量化的方式方便的开发OpenMP程序主要是对相应的循环进行并行化线程组的产生和结束和循环的边界重合也就是在循环的开始前启动线程组在循环结束后销毁线程组开发的关键是进行相关性分析判断循环是否可以并行对不能并行的循环进行分块或变量重命名等技术手段来消除依赖性。这种开发形式的缺点是性能不高主要有以下几个方面的原因:一是对程序局部进行变化并不能有效地开发并行性二是频繁的启动和销毁线程组会带来比较高的开销三是对程序的局部性(CACHE不能有效利用)开发不够因为很多跨循环的优化无法实施。下面代码片段给出这种形式程序的样式:„#pragmaompparallelforfor(…){„}„、SPMD形式的程序。OpenMP程序下的SPMD形式的程序是指在一个完整的程序有一个多或多个具有SPMD特征的并行块组成。在每个并行快中任务在线程组中进行分配。利用OpenMP的库函数ompgetnumthreads()和ompgetthreadnum()可以进行任务划分。SPMD形式的优点主要包括:一是可以减少线程管理带来的开销二是可以消除冗余同步三是可以使程序拥有较好的局部性。SPMD形式的缺点是编写困难因为要考虑诸如并行块结构是否合适是否存在冗余的同步等问题。下面代码片段给出这种形式程序的样式:„#pragmaompparallelshared(xnpoints)private(iamnpipoints){iam=ompgetthteadnum()no=ompgetnumthreads()ipoints=npointnpsubdomain(x,iam,ipoints)}„一般来说如果对程序的性能要求不高可以采用forkjoin形式如果对程序性能有很高要求建议采用SPMD形式事实上一些标准的benchmark比如NPBCOMPbenchmark和NPBFROTRANOMPbenchmark等都是采用SPMD形式。第三章基于VC孤立词语音识别的编程实现语音识别系统原理及设计方法语音识别系统的基本原理使用C语言编程实现基于马尔科夫模型的数据特征提取在此基础上编程实现特定语音实例的语音识别将语音识别功能编写成可供其他模块调用的函数为进一步实现语音识别系统提供基础并且从中培养、提高查阅文献和综合运用知识的编程开发能力。语音识别本质上是一种模式识别的过程未知语音的模式与已知语音的参考模式逐一进行比较最佳匹配的参考模式被作为识别结果。图是基于模式匹配原理的自动语音识别系统原理框图。参考模式库语音信号训练特征输入提取预处理识别结果模式判别匹配规则图语音识别系统原理框图()预处理模块:对输入的原始语音信号进行处理滤除掉其中的不重要的信息以及背景噪声并进行语音信号的端点检测、语音分帧以及预加重等处理。()特征提取模块:负责计算语音的声学参数并进行特征的计算以便提取出反映信号特征的关键特征参数用于后续处理。现在较常用的特征参数有线性预测(LPC)参数、线谱对(LSP)参数、LPCC、MFCC、ASCC、感觉加权的线性预测(PLP)参数、动态差分参数和高阶信号谱类特征等。其中Mel频率倒谱系数(MFCC)参数因其良好的抗噪性和鲁棒性而应用广泛。()训练阶段:用户输入若干次训练语音经过预处理和特征提取后得到特征矢量参数建立或修改训练语音的参考模式库。()识别阶段:将输入的语音提取特征矢量参数后与参考模式库中的模式进行相似性度量比较并结合一定的判别规则和专家知识(如构词规则语法规则等)得出最终的识别结果。语音识别的几种基本设计方法语音识别的方法主要有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。()基于语音学和声学的方法该方法起步较早在语音识别技术提出的开始就有了这方面的研究但由于其模型及语音知识过于复杂现阶段没有达到实用的阶段。通常认为常用语言中有有限个不同的语音基元而且可以通过其语音信号的频域或时域特性来区分。这样该方法分为两步实现:第一步分段和标号把语音信号按时间分成离散的段每段对应一个或几个语音基元的声学特性。然后根据相应声学特性对每个分段给出相近的语音标号。第二步得到词序列根据第一步所得语音标号序列得到一个语音基元网格从词典得到有效的词序列也可结合句子的文法和语义同时进行。()模板匹配的方法模板匹配的方法发展比较成熟目前已达到了实用阶段。在模板匹配方法中要经过四个步骤:特征提取、模板训练、模板分类、判决。常用的技术有三种:动态时间规整(DTW)、隐马尔可夫(HMM)理论、矢量量化(VQ)技术。a动态时间规整(DTW)语音信号的端点检测是进行语音识别中的一个基本步骤它是特征训练和识别的基础。所谓端点检测就是在语音信号中的各种段落(如音素、音节、词素)的始点和终点的位置从语音信号中排除无声段。在早期进行端点检测的主要依据是能量、振幅和过零率。但效果往往不明显。年代日本学者Itakura提出了动态时间规整算法(DTW:DynamicTimeWarping)。算法的思想就是把未知量均匀的升长或缩短,直到与参考模式的长度一致。在这一过程中未知单词的时间轴要不均匀地扭曲或弯折以使其特征与模型特征对正。b隐马尔可夫法(HMM)隐马尔可夫法(HMM)是年代引入语音识别理论的它的出现使得自然语音识别系统取得了实质性的突破。HMM方法现已成为语音识别的主流技术目前大多数大词汇量、连续语音的非特定人语音识别系统都是基于HMM模型的。HMM是对语音信号的时间序列结构建立统计模型将之看作一个数学上的双重随机过程:一个是用具有有限状态数的Markov链来模拟语音信号统计特性变化的隐含的随机过程另一个是与Markov链的每一个状态相关联的观测序列的随机过程。前者通过后者表现出来但前者的具体参数是不可测的。人的言语过程实际上就是一个双重随机过程语音信号本身是一个可观测的时变序列是由大脑根据语法知识和言语需要(不可观测的状态)发出的音素的参数流。可见HMM合理地模仿了这一过程很好地描述了语音信号的整体非平稳性和局部平稳性,是较为理想的一种语音模型。c矢量量化(VQ)矢量量化(VectorQuantization)是一种重要的信号压缩方法。与HMM相比,矢量量化主要适用于小词汇量、孤立词的语音识别中。其过程是:将语音信号波形的k个样点的每一帧或有k个参数的每一参数帧构成k维空间中的一个矢量然后对矢量进行量化。量化时将k维无限空间划分为M个区域边界然后将输入矢量与这些边界进行比较并被量化为“距离”最小的区域边界的中心矢量值。矢量量化器的设计就是从大量信号样本中训练出好的码书从实际效果出发寻找到好的失真测度定义公式设计出最佳的矢量量化系统用最少的搜索和计算失真的运算量实现最大可能的平均信噪比。核心思想可以这样理解:如果一个码书是为某一特定的信源而优化设计的那么由这一信息源产生的信号与该码书的平均量化失真就应小于其他信息的信号与该码书的平均量化失真也就是说编码器本身存在区分能力。在实际的应用过程中人们还研究了多种降低复杂度的方法这些方法大致可以分为两类:无记忆的矢量量化和有记忆的矢量量化。无记忆的矢量量化包括树形搜索的矢量量化和多级矢量量化。()神经网络的方法利用人工神经网络的方法是年代末期提出的一种新的语音识别方法。人工神经网络(ANN)本质上是一个自适应非线性动力学系统模拟了人类神经活动的原理具有自适应性、并行性、鲁棒性、容错性和学习特性其较强的分类能力和输入,输出映射能力在语音识别中都很有吸引力。但由于存在训练、识别时间太长的缺点目前仍处于实验探索阶段。由于ANN不能很好的描述语音信号的时间动态特性所以常把ANN与传统识别方法结合分别利用各自优点来进行语音识别。孤立词语音识别系统孤立词语音识别系统的构成参考以模板为单词单位声学参数单词识别识别分析输出单词参考模板图参考以模板为单词单位参考模板为音素单位声学参数分析单词识别单词模板输出识别音素参考单词模板辞典图参考模板为音素单位孤立词语音识别系统的技术主要项目词汇词汇固定可变内容(数字、命令、地名等)声学性质的类似性说话人特定说话人非特定说话人发生法孤立发声连续发声分析法频域分析倒谱域分析线性预测分析模式变换固定长可变长特征提取语音分段因素识别模式法多重参考模式匹配法统计决定法构词识别法标准模式标准模板(多重)单词辞典概率分布生成规则输入方式电话话筒(近讲话筒)发声环境信噪比SNR>dB(SNR:SignaltoNoiseRatio)环境比较安静的办公室宽敞的办公室行驶中的小轿车内dBdBdB电平表孤立词语音识别系统的技术主要项目基于语音轨迹特征的匹配技术Concept:asequenceofsymbolsSSSSVectorspace(V,V)SpeechWavefor(V,V,V,V)m(V)ParameterizeSpeechVVVVVVVVectorsSSSSRecognizeVectorspace(V’)(V’)(V’)(V’)(V’)(V’)V’V’V’V’V’V’V’SSSS图基于语音轨迹特征的匹配技术语音识别设计流程样本语音采集在室内录制标准汉语数字的wav语音做样本语音录音软件采用MSVisualCWavRecorder采样率KHz采样位位语音数据以wav文件格式存储其音频格式为WindowsPCM。语音信号预处理、语音信号数字化通过采样及量化提取语音信号的数据。其中数据提取部分掌握语音文件的存储形式极为重要有效地提取并清楚各部分数据的含义对分析数据起到帮助作用为下一步工作做了良好的起步。、预加重处理提升高频部分使信号频谱变得平坦以便于进行声道参数分析或频谱分析。预加重语音信号的平均功率谱受声门激励和口鼻辐射影响高频端大约在Hz以上按dB倍频程跌落即dBoct(倍频)或dBdec(倍频)。求语音信号频谱时频率越高相应的成分越小。为此要在预处理中进行预加重处理(Preemphasis)。预加重的目的是使信号的频谱变得平坦保持从低频到高频的整个频带中能用同样的信噪比求频谱以便于频谱分析或声道参数分析。预加重一般是采用一阶的数字滤波器µ:H(Z)=µµ值接近于或者采用公式zy(n)=x(n)αx(n)其中x(n)为原始信号序列y(n)为预加重后序列α为预加重系数。、端点检测及分帧加窗断点检测主要为实现对数据中有效部分的提取。阈值采用(最大值最小值)语音信号是一种典型的非平稳信号处理中一般使用窗函数截取其中一段来进行分析截取出来的那部分信号被认为是短时平稳的。加窗处理的另一个作用就是消除由无限序列截断导致的Gibbs效应。常见的窗函数有:)矩形窗(RectangularWindow)(),,,nN,(),()其他)汉明窗(HammingWindow),ncos()(),,,,nN,,N,(n),其他(),)哈宁窗(HannWindow),ncos()(),,,,nN,N,,(n),其他(),汉明窗和哈宁窗都属于广义升余弦函数通过分析他们的频率响应幅度特征可以发现矩形窗的谱平滑性能好但是旁瓣太高容易造成频谱泄露损失高频成分哈宁窗衰减太快低通特性不平滑汉明窗由于其平滑的低通特性和最低的旁瓣高度而得到广泛的应用。Mel倒谱系数特征表示提取MFCC参数、PLCC参数即状态转移矩阵A混合高斯分布的权矩阵C均值矢量µ和协方差矩阵U这四个参数的训练过程并进行极大似然值估计。Mel倒谱系数提取人耳对不同频率的语音具有不同的感知能力是一种非线性的关系。结合人耳的生理结构运用对数关系来模拟人耳对不同频率语音的感知特性Davies和Merelstein于年提f出了Mel频率的概念。其意义为Mel为lHz的音调感知程度的l。Hz频率与MelMelf频率之间的转换关系如公式:MelfHzf=×ln()()MelMel倒谱频率系数(MFCC)是上述Mel频率概念基础上提出的其计算机流程如图所示FFTMel频率滤波预加重加窗器组DCT求倒谱Log对数能量图MFCC计算流图)将原始语音信号预加重分帧加窗之后得到一帧语音信号。)对一帧语音信号进行快速傅立叶变换(fastfourierttransformFFT)得到信号的离散功率谱X(k)。)定义一个由M个三角型带通滤波器组成的滤波器组每个滤波器的中心频率为f(m)m=…M肘相邻滤波器交叉重叠在一起且其中心频率在Mel频率轴上为等间距分布滤波器组在频域上覆盖从Hz到Nyquist频率即采样率的二分之一。三角滤波器的中心频率f(m)和频率响应H(k)分别为BfBf()(),N,hf(m)=(())BBfm()FMSff()式中:和分别是滤波器组覆盖范围的低通频率和高通频率是信号采样频率Fh,单位都是HzM是滤波器组中滤波器的个数N是进行FFT变换时的点数B()是公式()的反函数。,bBbe()(),,())通过步骤)每个滤波器产生输出频谱能量取对数之后便得到一组如下系数N,SmXkHkmM()ln(|()|()),,,,,,(),mk,再经过离散余弦变换(DCT)将S(m)转换到时域就是MFCC。MFCC系数c(i)的计算过程为N,,mn()cmSkmM()()cos(),,,,(),Mk,MFCC的HzMel尺度对应的曲线和滤波器组分布如图所示。频率Mel频率Hz图MFCC尺度对应曲线HMM隐马尔科夫模式匹配HMM是一种用参数表示的用于描述随机过程统计特性的概率模型它是由马尔可夫链演变来的一个双重随机过程。,个有个状态的HMM模型通常由,,,(,,)AB来表示这些参数的含义解释如下:Oooo,,,N是模型的状态数一个输入的观察序列在某一特定时刻只能处于{S是TSSS,,,,N个状态中的一个。,NA,a,,ijaPqSqSijN,,,,,|,,是状态转移概率矩阵:。它是一个隐含的马尔ijtjiiSSSjii可夫链每次从状态转移到状态的概率只与状态有关而与它以前的状态无关。矩阵Ma,,ij元素必须满足:。j,,,,,,,,,Oooo,,,,,为各状态的初始概率分布表示观察序列在t=l时刻可能NTN,,,,,,,PqSiN(),,,,i处于模型各个状态的概率值即并且它满足。iit,oOooo,,,iTB为输入语音特征序列中的任意观察值在各状态的输出概率。它有离散型BbkjM,,(),,,,和连续型两类对于离散HMM模型B是一个概率矩阵k=(((,,jMbkPoqS()(|),,M其中M是编码符号集中符号的总数并且满足对jktjbk(),,j,iMbocNoUjN()(,,),,,,,,jjijijiBbojN,,,(),于连续型HMM模型且其中o,,ji,cji是语音特征参数中的任一特征向量M是每个状态包含的高斯元的数目是第j个状态第l,个混合高斯函数的权N是正态高斯概率密度函数代表第j个状态第l个混和高斯元的jiU均值矢量代表第j个状态第l个混和高斯元的协方差矩阵并且它满足条件:jiMcjN,,,,,ji。i,根据HMM模型的不同参数HMM模型有不同的分类方式。一种分类方式是根据转移概率矩阵的不同将HMM模型分为各态历经的和从左A,a,,ij至右的两种结构。各态历经的HMM模型就是模型中的任一状态都可以经过有限步到达其他的所有状态从左至右的HMM模型随着时间的增加状态序列号是非递减的这种模型又分为有跨越的和无跨越的两种。各态经历的HMM模型多用于说话人识别、语种辨识等而语音的内容与时序有很大相关性这个时序可以采用状态的先后关系来表示所以语音识别必须采用从左至右的HMM模型。本文基于孤立词语音识别不允许语音中间某部分被跳过所以须采用从左向右并且无跨越的HMM模型。它的状态转移概率矩阵A,a必须满足,,ijji,aji,,,且。ij另一种分类方式是根据输出概率B的不同将HMM模型分为连续型、离散型、半连续型HMM。离散HMM的每一个状态的输出概率B是一个离散的概率矩阵使用之前须对语音信号的特征参数向量进行矢量量化。连续HMM模型的输出概率B是连续的输出概率密度函数它的形式有单高斯概率密度函数、混合高斯概率密度函数和分化高斯概率密度函数三种。半连续HMM模型是将离散HMM和连续HMM结合起来使用的一种方法。本文采用连续HMM模型。基于HMM模型的孤立词语音识别系统需解决的以下问题:(qqqq,(,,,)Oooo,,,()如何确定一个最优的状态转移序列T并计算观察序列对HMMT模型的输出概率P(O|)根据此概率判断语音命令的识别结果,,,()如何调整允=(AB)的参数使得输出概率P(O|)最大。这是对HMM模型进行参数训练的问题。在解决上述两个问题的过程中都需要对输出概率P(Ol允)进行计算因此这是此算法的另外一个关键问题。OpenMP编程实现多核并行运算实验平台为SAMSUNGR系列双核笔记本。采用IntelPMICHM芯片组Intel(R)Core(TM)DuoCPUT处理器GHz主频高速缓存MB前端总线MHz内存DDRM系统为MicrosoftWindowsXPProfessional(版本)编译器为MicrosoftVisualStudio。在此平台上用OpenMP改进二维离散快速傅里叶变换实验数据为程序多次运行的平均值。、FFT算法编程实现FFT程序设计分为两个部分:倒序排列和蝶形运算。倒序排列用于时域提取FFT的输入序列本设计采用按时间抽选(DIT)的基蝶形运算输入导位序输出自然序。()倒序排列部分编程:串行版本:*变址运算*for(i=i<=nmi){下标倒序排列if(i<j){t=xinjxinj=xinixini=t}k=LHwhile(j>=k){j=jkk=k}j=jk}并行版本:*变址运算*OpenMP并行处理#pragmaompparallelforprivate(i,j)for(i=i<=nmi){下标倒序排列if(i<j){t=xinjxinj=xinixini=t}k=LHwhile(j>=k){j=jkk=k}j=jk}()蝶形运算部分编程实现串行版本:for(i=i<=nmi)for(L=L<=mL){le=pow(,L)B=lepi=for(j=j<=Bj){p=pow(,mL)*jps=*piN*pwreal=cos(ps)w做初始化wimag=sin(ps)for(i=ji<=Ni=ile){ip=iBt=EE(xinip,w)蝶形运算部分xinipreal=xinirealtrealxinipimag=xiniimagtimagxinireal=xinirealtrealxiniimag=xiniimagtimag}}}并行版本:OpenMP并行处理#pragmaompparallelforprivate(L)for(i=i<=nmi)for(L=L<=mL){le=pow(,L)B=lepi=for(j=j<=Bj){p=pow(,mL)*jps=*piN*pwreal=cos(ps)w初始化wimag=sin(ps)for(i=ji<=Ni=ile){ip=iBt=EE(xinip,w)蝶形运算部分xinipreal=xinirealtrealxinipimag=xiniimagtimagxinireal=xinirealtrealxiniimag=xiniimagtimag}}}、声音识别提取MFCC特征编程对每一帧进行离散余弦变换(DiscreteCosineTransform简称DCT变换)后得到MFCC特征值参数此算法具有较强的抗干扰能力将信号的能量集中到少数几个变换系数上采用量化和熵编码可有效地压缩帧能量数据。()DCT变换部分编程实现串行版本:voidMfccDCT(float*x,float*dctMatrix,intceporder,intnumChannels,float*melcep){inti,jfor(i=i<=ceporderi){melcepi=for(j=j<numChannelsj){melcepi=xj*dctMatrixi*numChannelsj}}return}并行版本:voidMfccDCT(float*x,float*dctMatrix,intceporder,intnumChannels,float*melcep){inti,jOpenMP并行处理#pragmaompparallelforprivate(i)for(i=i<=ceporderi){melcepi=for(j=j<numChannelsj){melcepi=xj*dctMatrixi*numChannelsj}}return}()Mel滤波器编程实现串行版本:MfccMelFilterBank(a,fborder,filterbank,)for(i=i<fborderi)filterbanki=*LogE(filterbanki)free(a)free(b)return()}并行版本:MfccMelFilterBank(a,fborder,filterbank,)OpenMP并行处理#pragmaompparallelforprivate(i)for(i=i<fborderi)filterbanki=*LogE(filterbanki)free(a)free(b)return()}结束语此次设计针对语音识别的特殊要求以数字信号处理为基础采用了快速傅里叶变换。从总体来看基本达到了设计要求。由于时间和学识有限设计中仍然存在着很多问题例如对环境噪音影响的处理部分不够完善。本文仍然有需要改进和提高的地方。通过本次设计我深刻体会到理论联系实际的重要性。学到的是知识而会应用才是能力。在设计过程中实践是非常重要和非常艰难的如何将所学专业知识应用于实际这是我们必须解决的问题。通过本次设计我本人受益颇丰。首先本人熟悉了语音识别的基本设计方法初步了解了编程实践的设计流程。其次在设计过程中通过网络及书籍查阅了大量资料使自己的知识面进一步拓宽。最后在大量资料中提取出有用信息加以利用将理论知识与实际相结合提高了自己分析问题和解决问题的能力。谢辞本论文是在庄老师的悉心指导下完成的首先我要感谢庄老师半年以来对我的指导。他治学严谨学识渊博平易近人具有丰富的实践经验在设计过程中庄老师向我提出了深思熟虑的建议和概念清晰的见解意见和建议他既激发了我的灵感又给了我持久不断的鼓励使我少走了很多弯路又学到了很多的东西。在整整半年的学习、科研中我还得到了其他许多老师和领导的帮助学院的老师们严谨治学的教学态度使我受益非浅。同时我还要感谢语音识别小组的几位同学正是大家的共同努力、激烈研讨才使研究有所成果。最后向所有关心帮助过我的老师同学致以衷心的感谢。参考文献(胡光锐语音处理与识别上海科学技术文献出版社(赵立语音信号处理机械工业出版社(程佩青数字信号处理教程(第三版)清华大学出版(拉宾纳LRabinerLawrence阮平望,JuangBiingHwang语音识别基本原理,清华大学出版社,(王炳锡屈丹彭煊实用语音识别基础M北京:国防工业出版社(詹新明黄南山杨灿语音识别技术研究进展J现代计算机(高新涛陈乖丽语音识别技术的发展现状及应用前景J甘肃科技纵横(王军宁吴成柯数字信号处理器技术原理与开发应用高等教育出版社:(第四届全国大学生设计竞赛获奖作品选编北京理工大学出版社(BarryWilkinsonMichaelAlien并行程序设计机械工业出版社(陈国良并行计算结构算法编程高等教育出版社(莫则尧并行计算导论电子工业出版

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/47

通信工程毕业论文

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利