孤立词语音识别的并行编程实现 --毕业设计.doc_第1页
孤立词语音识别的并行编程实现 --毕业设计.doc_第2页
孤立词语音识别的并行编程实现 --毕业设计.doc_第3页
孤立词语音识别的并行编程实现 --毕业设计.doc_第4页
孤立词语音识别的并行编程实现 --毕业设计.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业论文(设计) 题 目: 孤立词语音识别的并行编程实现 2010 年 6 月 5 日 青岛大学本科毕业生论文(设计) Parallel Programming of Isolated Words Speech Recognition 青岛大学本科生毕业论文(设计) 摘 要 语音识别是解决机器“听懂”人类语言的一项技术。首先介绍了目前国内外语音识别系 统的现状、发展及研究方向,并对语音识别系统的原理、并行化的实现做了详细分析,在此 基础上进行语音识别系统的设计,主要内容有:提取语音、端点检测、特征值提取、训练数 据、语音识别。选用HMM隐马尔科夫模型,基于VC2005编译环境下的的多线程编程,实现 算法的并行运算,提升了语音识别的效率。设计完成后在实验室进行了模拟调试,实验结果 表明:所设计的程序满足语音识别系统的基本要求。 关键词 语音识别 孤立词 多线程 并行 特征值 断点检测 Abstract Speech recognition is a technique to solve the machine “understand“ human language. First introduces the current status of speech recognition system at home and abroad, development and research, and the principle of speech recognition systems, parallel implementation of a detailed explanation to do in this speech recognition system based on the design of main contents are: Extract voice, endpoint detection, feature extraction, training data, voice recognition. HMM hidden Markov model selection, based on VC2005 compiler environment of multi-threaded programming, parallel computing algorithms to improve the efficiency of speech recognition. Upon completion of the design was simulated in the lab debugging, experimental results show that: the design process to meet the basic requirements of speech recognition systems. Keywords Speech Recognition Isolated Words Multi-Threads Parallel Eigenvalue Breakpoint Detection 、 目 录 前 言.1 第 1 章 语音识别技术概述.2 1.1 语音识别的历史背景.2 1.1.1 国外研究历史及现状3 1.1.2 国内研究历史及现状4 1.2 语音识别技术应用.5 1.3 语音识别技术的发展.6 1.4 语音识别技术的研究方向.7 第二章 主要研究内容和方法.9 2.1 语音识别的研究内容.9 2.2 语音识别系统的分类.9 2.3 语音识别的研究方法.10 2.4 并行计算技术.11 2.5 OPENMP 编程模型13 2.5.1 OpenMP 介绍.13 2.5.2 OpenMP 指导命令流程.15 第三章 基于 VC2005 孤立词语音识别编程的实现 .18 3.1 语音识别系统原理及设计方法.18 3.1.1 语音识别系统的基本原理18 3.1.2 语音识别的几种基本设计方法19 3.2 孤立词语音识别系统.20 3.2.1 孤立词语音识别系统的构成20 3.2.2 孤立词语音识别系统的技术主要项目21 3.2.3 基于语音轨迹特征的匹配技术22 3.3 语音识别设计流程.22 3.3.1 样本语音采集22 3.3.2 语音信号预处理22 3.3.3 Mel 倒谱系数特征表示.23 3.3.4 HMM 隐马尔科夫模式匹配.25 3.3.7 OpenMP 编程实现多核并行运算.26 结束语.31 、 谢 辞.32 参考文献.33 附 录.34 青岛大学本科生毕业论文(设计) 1 前 言 语音识别是解决机器“听懂”人类语言的一项技术。作为智能计算机研究的主导方向和 人机语音通信的关键技术,语音识别技术一直受到各国科学界的广泛关注。如今,随着语音 识别技术研究的突破,其对计算机发展和社会生活的重要性日益凸现出来。以语音识别技术 开发出的产品应用领域非常广泛,如声控电话交换、信息网络查询、家庭服务、宾馆服务、 医疗服务、银行服务、工业控制、语音通信系统等,几乎深入到社会的每个行业和每个方面。 广泛意义上的语音识别按照任务的不同可以分为 4 个方向:说话人识别、关键词检出、 语言辨识和语音识别。说话人识别技术是以话音对说话人进行区别,从而进行身份鉴别和认 证的技术。关键词检出技术应用于一些具有特定要求的场合,只关注那些包含特定词的句子。 语言辨识技术是通过分析处理一个语音片断以判别其所属语言种类的技术,本质上也是语音 识别技术的一个方面。语音识别就是通常人们所说的以说话的内容作为识别对象的技术,它 是 4 个方面中最重要和研究最广泛的一个方向,也是本文讨论的主要内容。 语音识别技术,也被称为自动语音识别 Automatic Speech Recognition,(ASR),其目标是 将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。 与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的 词汇内容。 语音识别技术的应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的 听写数据录入等。语音识别技术与其他自然语言处理技术如机器翻译及语音合成技术相结合, 可以构建出更加复杂的应用,例如语音到语音的翻译。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和 听觉机理、人工智能等等。 、 2 第 1 章 语音识别技术概述 语音识别是解决机器“听懂”人类语言的一项技术。作为智能计算机研究的主导方向和 人机语音通信的关键技术,语音识别技术一直受到各国科学界的广泛关注。如今,随着语音 识别技术研究的突破,其对计算机发展和社会生活的重要性日益凸现出来。以语音识别技术 开发出的产品应用领域非常广泛,如声控电话交换、信息网络查询、家庭服务、宾馆服务、 医疗服务、银行服务、工业控制、语音通信系统等,几乎深入到社会的每个行业和每个方面。 广泛意义上的语音识别按照任务的不同可以分为 4 个方向:说话人识别、关键词检出、 语言辨识和语音识别。说话人识别技术是以话音对说话人进行区别,从而进行身份鉴别和认 证的技术。关键词检出技术应用于一些具有特定要求的场合,只关注那些包含特定词的句子。 语言辨识技术是通过分析处理一个语音片断以判别其所属语言种类的技术,本质上也是语音 识别技术的一个方面。语音识别就是通常人们所说的以说话的内容作为识别对象的技术,它 是 4 个方面中最重要和研究最广泛的一个方向,也是本文讨论的主要内容。 语音识别技术,也被称为自动语音识别 Automatic Speech Recognition,(ASR),其目标是 将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。 与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的 词汇内容。 语音识别技术的应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的 听写数据录入等。语音识别技术与其他自然语言处理技术如机器翻译及语音合成技术相结合, 可以构建出更加复杂的应用,例如语音到语音的翻译。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和 听觉机理、人工智能等等。 1.1 语音识别的历史背景 早在计算机发明之前,自动语音识别的设想就已经被提上了议事日程,早期的声码器可 被视作语音识别及合成的雏形。而 1920 年代生产的“Radio Rex“玩具狗可能是最早的语音识 别器,当这只狗的名字被呼唤的时候,它能够从底座上弹出来。最早的基于电子计算机的语 音识别系统是由 AT 、 12 LPTHREADSTARTROUTINE lpStartAddress。 LPVOID IpParameter DWORD dwCreationFlags; LPDW0RDIpThreadId); 其中:lpThreadAttributes 指定了线程的安全属性,在 Windows 95 中被忽略; dwStackSize 指定了线程的堆栈深度;lpStartAddress 指定了线程的起始地址,一般情况为原 型函数 DW0RDWINAPI ThreadFunc (I PVOID);lpParameter 指定了线程执行时传送给线程的 32 位参数,即上面函数的参数;dwCreationFlags 指定了线程创建的特性;lpThreadld 指向一 个 DWORD 变量,可返回线程 ID 值。如果创建成功则返回线程的句柄,否则返回 NUII。创 建了新的线程后,则该线程就开始启动执行了。如果在 dwCreationFlags 中用了 CREATE SUSPENDED 特性,那么线程并不马上执行,而是先挂起,等到调用 ResumeThread 后才开 始启动线程,在这个过程中可以调用函数:BOOI SetThread Priority (HANDI E hThread,int nPriority)来设置线程的优先权。当线程的函数返回后,线程自动中止。如果在线程的执行过 程中中止的话,则可调用函数:VOID Exit Thread(DWORD dwExit Code);如果在线程的外 面中止线程的话,则可调用下面的函数:BOoI TerminateThread (HANDI E hThread,DWORD dwExitCode)。但应注意:该函数可能会引起系统不稳定,而且线程所占 用的资源也不释放。因此,一般情况下,建议不要使用该函数。如果要中止的线程是进程内 的最后一个线程,则在线程被中止后相应的进程也应中止。 3、用 Win 32 函数控制线程对共享资源的访问在线程体内,如果该线程完全独立,与其 他的线程没有数据存取等资源操作上的冲突,则可按照通常单线程的方法进行编程。但是, 在多线程处理时情况常常不是这样,线程之间经常要同时访问一些资源。例如,一个线程负 责公式计算,另一个线程负责结果的显示,两个线程都要访问同一个结果变量。这时如果不 进行冲突控制的话,则很可能显示的是不正确的结果。对共享资源进行访问引起冲突是不可 避免的,但可用以下办法来进行操作控制: (1)通过设置线程的互斥体对象,在可能冲突的地方进行同步控制;首先,建立互斥体对 象,得到句柄:HANDLE CreateMutex();然后,在线程可能冲突区域的开始 (即访问共享资 源之前),调用 WaitForSingleObject 将句柄传给函数,请求占用互斥体对象:dwWaitResult =WaitForSingleObject(hMutex,5000L);共享资源访问完后,释放对互斥体对象的占用: ReleaseMutex (hMutex);互斥体对象在同一时刻只能被一个线程占用。当互斥体对象被一个 线程占用时,若有另一线程想占用他,则必须等到前一线程释放后才能成功。 (2)设置信号 在操作共享资源前,打开信号;完成操作后,关闭信号。这类似于互斥体对象的处理。 首先,创建信号对象:HANDLE CreateSemaphore();或者打开一个信号对象:HANDI E OpenSemaphore();然后,在线程的访问共享资源之前调用 WaitForSingleObject。共享资源访 问完后,释放对信号对象的占用:ReleaseSemaphore();信号对象允许同时对多个线程共享资 源的访问,在创建对象时指定最大可同时访问的线程数。当一个线程申请访问成功后,信号 、 13 对象中的计数器减 1;调用 ReleaseSemaphore 函数后,信号对象中的计数器加 1。其中,计 数器值创建时指定的最大值。利用信号对象,不仅可以控制共享资源的访问,还可以在应 用的初始化时候使用。假定一个应用在创建一个信号对象时,将其计数器的初始值设为 0, 这样就阻塞了其他线程,保护了资源。待初始化完成后,调用 ReleaseSemaphore 函数将其计 数器增加至最大值,进行正常的存取访问。 (3)利用事件对象的状态,进行线程对共享资源的访问用 ResetEvent 函数设置事件对象状 态为不允许线程通过;用 SetEvent 函数设置事件对象状态为可以允许线程通过。事件分为手 工释放和自动释放。如果是手工释放,则按照上述 2 个函数处理事件的状态;如果是自动释 放,则在一个线程结束后,自动清除事件状态,允许其他线程通过。 (4)设置排斥区 在排斥区中异步执行时,他只能在同一进程的线程之间共享资源处理。虽然此时上面介 绍的 3 种方法均可使用,但是,使用排斥区的方法则使同步管理的效率更高;先定义一个 CRITICAl 一 SECTlON 结构的排斥区对象,在进程使用之前先对对象进行初始化,调用如 下函数:VO1D Initialize Critical Section(LPCRlTlCALSECTlON);当一个线程使用排斥区 时,调用函数:EnterCriticalSection 或者 TryEnterCriticalSection;当要求占用、退出排斥区时, 调用函数:LeaveCriticalSection。释放对排斥区对象的占用,供其他线程使用。互斥体对象、 信号对象和事件对象也可以用于进程间的线程同步操作。 在用 win32 函数创建了对象时,可以指定对象的名字,还可以设置同步对象在子进程的 继承性。创建返回的是 HANDLE 句柄,可以用函数 DuplicateHandle 来复制对象句柄,这样 每个进程都可以拥有同一对象的句柄,实现进程之间的线程同步操作。另外,在同一进程内, 可以用 OpenMutex,OpenSemaphore 和 OpenEvent 来获得指定名字的同步对象的句柄。排斥 区异步执行的线程同步方法只能用于同一进程的线程之问共享资源处理,但是这种方法的使 用效率较高,而且编程也相对简单一些。在 Visual C+中,除了利用 Win32 函数进行多线程 同步控制外,如果用到了 MFC 类库,则可利用已经封装成 C+类结构的同步对象,使编程 更加简捷。 2.5 OpenMP 编程模型 2.5.1 OpenMP 介绍 OpenMP 使用 fork-join(见图 2-1)并行机制,程序开始串行执行,此时只有一个主线程, 然后在遇到用户定义的并行区域时创建出一组线程。在并行区域之内,多个线程可以执行相 同的代码块,或使用工作共享结构体并行执行不同的任务。 、 14 主线程 并行区域 图 2-1 fork-join 并行机制 OpenMP 由指导命令、环境变量和运行库组成,见图 2-2 #1/bin/ksh # Shell-Script f90 openmp test_f90 export OMP_THREADS*4 a.out Environment variables ! Source file test_f90 Program main Intager omp_get_thread_num ! $omp parallel print *, me: omp_get_num() ! $omp and parallel end program directives (special comment lines) runtime library me:0 me:3 me:2 me:1 图 2-2 OpenMP 组成 通过在串行程序里加入适当的指导命令和运行库函数,就可以把串行并行化,这种增量 并行的模式使得开发并行程序变得很容易。 OpenMP 结构如图 2-3 所示 图 2-3 OpenMP 体系结构 user directives envronment variables OpenMP runtime system operating system-theads runtime functions OpenMP program shell 、 15 2.5.2 OpenMP 指导命令流程 OpenMP 主要包含如图所示的指导命令 图 2-4 OpenMP 指导命令流程 图 parallel begin parallel endloop end loop beginsingle begin single end critical begin master end master begin critical end ordered begin orderd end section begin section end section begin section end sections begin sections end barrierflush 我们用流程图的形式把 OpenMP 指导指令的特点描绘出来,对于 parallel 指导命令包含 的代码段,线程组中所有的线程都要执行,对于 loop 指导命令包含的代码段,可能只有部分 线程执行,右侧的方向线表示有的线程没有执行完这段代码,左侧的方向线刻画出循环的特 点,执行完一次迭代后,如果还有任务,从循环开始处执行下一次迭代;barrier 指导命令表 示所有线程在此处同步,然后再执行接下来的语句,barrier 指导命令没有包含代码段;flush 指导命令后面加上需刷新的共享变量,所以在图中没有画出中间的箭头,即表示不包含代码 段;single 指导命令所包含的代码段只由一个线程组执行,别的线程跳过这段代码,如果 、 16 single 指导命令由 nowait 从句,则所有线程在 single 指导命令结束处隐式同步点同步; master 指导命令和 single 指导命令类似,区别在于 master 指导命令包含的代码段由主线程执 行, single 指导命令包含的代码段可以由任一线程执行,并且 master 指导命令在结束处没有 隐式同步,也不能指定 nowait 从句;critical 指导命令包含的代码段称为临界段,同时只能有 一个线程访问;ordered 指导命令表示循环的迭代次序和串行程序一样;sections 指导命令包 含一些 section,根据 section 的数量和线程的数量不同,可能有时一个线程执行多个 section;也可能有的线程没有执行任何 section,右边的方向线即标识出后面这种情况。 通过流图的形式来对 OpenMP 指导命令进行描绘,可以很清晰的观察出 OpenMP 指导命 令的特点。 OpenMP 是面向共享主存结构的标准,程序员在开发的过程中不用考虑数据分布,因此 使用 OpenMP 开发并行程序比较容易,一般 OpenMP 程序是从串行程序出发,通过在适当位 置加入编译指导命令和运行库函数来并行化串行程序,通常 OpenMP 并行程序有几种不同的 开发形式,本文列出最常见的两种开发形式:一是通过简单的 fork-join 形式对串行程序并行 化;二是采用单程序多数据 SPMD 形式对串行程序并行化。 1、fork-join 形式的程序。这种形式的 OpenMP 程序是最常见的,很多 OpenMP 程序设 计教程里都是采用这种形式来并行化串行程序,好处是可以采用增量化的方式方便的开发 OpenMP 程序,主要是对相应的循环进行并行化,线程组的产生和结束和循环的边界重合, 也就是在循环的开始前启动线程组,在循环结束后销毁线程组,开发的关键是进行相关性分 析,判断循环是否可以并行,对不能并行的循环进行分块或变量重命名等技术手段来消除依 赖性。这种开发形式的缺点是性能不高,主要有以下几个方面的原因:一是对程序局部进行 变化,并不能有效地开发并行性;二是频繁的启动和销毁线程组,会带来比较高的开销;三 是对程序的局部性(CACHE 不能有效利用)开发不够,因为很多跨循环的优化无法实施。 下面代码片段给出这种形式程序的样式: #pragma omp parallel for for() 2、SPMD 形式的程序。OpenMP 程序下的 SPMD 形式的程序是指在一个完整的程序有 一个多或多个具有 SPMD 特征的并行块组成。在每个并行快中,任务在线程组中进行分配。 利用 OpenMP 的库函数 omp _get_num_threads()和 omp _get_ thread _ num ()可以进行任务划 分。SPMD 形式的优点主要包括:一是可以减少线程管理带来的开销;二是可以消除冗余同 、 17 步;三是可以使程序拥有较好的局部性。SPMD 形式的缺点是编写困难,因为要考虑诸如并 行块结构是否合适,是否存在冗余的同步等问题。下面代码片段给出这种形式程序的样式: #pragma omp parallel shared(x,npoints)private(iam,np,ipoints) iam=omp_get_thtead_num(); no= omp _get_num_threads(); ipoints=npoint/np; subdomain(x,iam,ipoints); 一般来说,如果对程序的性能要求不高,可以采用 fork-join 形式,如果对程序性能有很 高要求,建议采用 SPMD 形式,事实上,一些标准的 benchmark,比如 NPB 2.3 COMP benchmark 和 NPB 3.0 FROTRAN OMP benchmark 等都是采用 SPMD 形式。 、 18 第三章 基于 VC2005 孤立词语音识别的编程实现 3.1 语音识别系统原理及设计方法 3.1.1 语音识别系统的基本原理 使用 C 语言编程,实现基于马尔科夫模型的数据特征提取,在此基础上编程实现特定语 音实例的语音识别;将语音识别功能编写成可供其他模块调用的函数,为进一步实现语音识 别系统提供基础;并且从中培养、提高查阅文献和综合运用知识的编程开发能力。 语音识别本质上是一种模式识别的过程,未知语音的模式与已知语音的参考模式逐一进 行比较,最佳匹配的参考模式被作为识别结果。图 3-1 是基于模式匹配原理的自动语音识别 系统原理框图。 图 3-1 语音识别系统原理框图 (1)预处理模块:对输入的原始语音信号进行处理,滤除掉其中的不重要的信息以及背景 噪声,并进行语音信号的端点检测、语音分帧以及预加重等处理。 (2)特征提取模块:负责计算语音的声学参数,并进行特征的计算,以便提取出反映信 号特征的关键特征参数用于后续处理。现在较常用的特征参数有线性预测(LPC)参数、线谱 对(LSP)参数、LPCC、MFCC、ASCC、感觉加权的线性预测(PLP)参数、动态差分参数和 高阶信号谱类特征等。其中,Mel 频率倒谱系数(MFCC)参数因其良好的抗噪性和鲁棒性而 应用广泛。 (3)训练阶段:用户输入若干次训练语音,经过预处理和特征提取后得到特征矢量参数, 建立或修改训练语音的参考模式库。 (4)识别阶段:将输入的语音提取特征矢量参数后与参考模式库中的模式进行相似性度量 比较,并结合一定的判别规则和专家知识(如构词规则,语法规则等)得出最终的识别结果。 参考模式库 判别 规则 预处理 模式 匹配 特征 提取 训练 识别 结果 语音信号 输入 、 19 3.1.2 语音识别的几种基本设计方法 语音识别的方法主要有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利 用人工神经网络的方法。 (1)基于语音学和声学的方法 该方法起步较早,在语音识别技术提出的开始,就有了这方面的研究,但由于其模型及 语音知识过于复杂,现阶段没有达到实用的阶段。 通常认为常用语言中有有限个不同的语音基元,而且可以通过其语音信号的频域或时域 特性来区分。这样该方法分为两步实现: 第一步,分段和标号 把语音信号按时间分成离散的段,每段对应一个或几个语音基元的声学特性。然后根据 相应声学特性对每个分段给出相近的语音标号。 第二步,得到词序列 根据第一步所得语音标号序列得到一个语音基元网格,从词典得到有效的词序列,也可 结合句子的文法和语义同时进行。 (2)模板匹配的方法 模板匹配的方法发展比较成熟,目前已达到了实用阶段。在模板匹配方法中,要经过四 个步骤:特征提取、模板训练、模板分类、判决。常用的技术有三种:动态时间规整(DTW)、 隐马尔可夫(HMM)理论、矢量量化(VQ)技术。 a.动态时间规整(DTW) 语音信号的端点检测是进行语音识别中的一个基本步骤,它是特征训练和识别的基础。 所谓端点检测就是在语音信号中的各种段落(如音素、音节、词素)的始点和终点的位置,从 语音信号中排除无声段。在早期,进行端点检测的主要依据是能量、振幅和过零率。但效果 往往不明显。60 年代日本学者 Itakura 提出了动态时间规整算法 (DTW:DynamicTimeWarping)。算法的思想就是把未知量均匀的升长或缩短,直到与参考模 式的长度一致。在这一过程中,未知单词的时间轴要不均匀地扭曲或弯折,以使其特征与模 型特征对正。 b.隐马尔可夫法(HMM) 隐马尔可夫法(HMM)是 70 年代引入语音识别理论的,它的出现使得自然语音识别系统 取得了实质性的突破。HMM 方法现已成为语音识别的主流技术,目前大多数大词汇量、连 续语音的非特定人语音识别系统都是基于 HMM 模型的。HMM 是对语音信号的时间序列结 构建立统计模型,将之看作一个数学上的双重随机过程:一个是用具有有限状态数的 Markov 链来模拟语音信号统计特性变化的隐含的随机过程,另一个是与 Markov 链的每一个 状态相关联的观测序列的随机过程。前者通过后者表现出来,但前者的具体参数是不可测的。 人的言语过程实际上就是一个双重随机过程,语音信号本身是一个可观测的时变序列,是由 、 20 大脑根据语法知识和言语需要(不可观测的状态)发出的音素的参数流。可见 HMM 合理地模 仿了这一过程,很好地描述了语音信号的整体非平稳性和局部平稳性,是较为理想的一种语音 模型。 c.矢量量化(VQ) 矢量量化(VectorQuantization)是一种重要的信号压缩方法。与 HMM 相比,矢量量化主要 适用于小词汇量、孤立词的语音识别中。其过程是:将语音信号波形的 k 个样点的每一帧, 或有 k 个参数的每一参数帧,构成 k 维空间中的一个矢量,然后对矢量进行量化。量化时, 将 k 维无限空间划分为 M 个区域边界,然后将输入矢量与这些边界进行比较,并被量化为 “距离”最小的区域边界的中心矢量值。矢量量化器的设计就是从大量信号样本中训练出好 的码书,从实际效果出发寻找到好的失真测度定义公式,设计出最佳的矢量量化系统,用最 少的搜索和计算失真的运算量,实现最大可能的平均信噪比。 核心思想可以这样理解:如果一个码书是为某一特定的信源而优化设计的,那么由这一 信息源产生的信号与该码书的平均量化失真就应小于其他信息的信号与该码书的平均量化失 真,也就是说编码器本身存在区分能力。 在实际的应用过程中,人们还研究了多种降低复杂度的方法,这些方法大致可以分为两 类:无记忆的矢量量化和有记忆的矢量量化。无记忆的矢量量化包括树形搜索的矢量量化和 多级矢量量化。 (3)神经网络的方法 利用人工神经网络的方法是 80 年代末期提出的一种新的语音识别方法。人工神经网络 (ANN)本质上是一个自适应非线性动力学系统,模拟了人类神经活动的原理,具有自适应性、 并行性、鲁棒性、容错性和学习特性,其较强的分类能力和输入输出映射能力在语音识别 中都很有吸引力。但由于存在训练、识别时间太长的缺点,目前仍处于实验探索阶段。 由于 ANN 不能很好的描述语音信号的时间动态特性,所以常把 ANN 与传统识别方法结 合,分别利用各自优点来进行语音识别。 3.2 孤立词语音识别系统 3.2.1 孤立词语音识别系统的构成 参考以模板为单词单位 单词参考 模板 单词 识别 声学参数 分析 识别 输出 、 21 图 3-2 参考以模板为单词单位 参考模板为音素单位 图 3-3 参考模板为音素单位 3.2.2 孤立词语音识别系统的技术主要项目 词 汇词汇固定可变,内容(数字、命令、地名等) ,声学性质的类似性 说话人特定说话人非特定说话人 发生法孤立发声连续发声 分析法频域分析,倒谱域分析,线性预测分析 模式变换固定长可变长,特征提取,语音分段,因素识别 模式法多重参考模式匹配法,统计决定法,构词识别法 标准模式标准模板(多重) ,单词辞典,概率分布,生成规则 输入方式电话话筒(近讲话筒) 发声环境信噪比 SNR30dB(SNR:Signal to Noise Ratio) 环 境比较安静的办公室 宽敞的办公室 行驶中的小轿车内 电 平40-50dB 60-70dB 65-75dB 单词 辞典 单词 识别 音素参考 模板 单词 模板 声学参数 分析 识别 输出 表 3-1 孤立词语音识别系统的技术主要项目 、 22 3.2.3 基于语音轨迹特征的匹配技术 S1 S2 SS SS SS V1 V2 V3 V4 V5 V6 V7 S1 S2 SS V1 V2 V3 V4 V5 V6 V6 (V1) (V6) S1 S2 SS SS Concept: a sequence of symbols Parameterize Recognize Vector space (V2) (V3) (V5) (V4) Speech Wavefor m Speech Vectors Vector space (V2,V3) (V4,V5,V6,V7) ) (V1) 图 3-4 基于语音轨迹特征的匹配技术 3.3 语音识别设计流程 3.3.1 样本语音采集 在室内录制标准汉语数字 0-9 的 wav 语音做样本语音,录音软件采用 MS Visual C+WavRecorder,采样率 16KHz,采样位 16 位,语音数据以 wav 文件格式存储,其音 频格式为 Windows PCM。 3.3.2 语音信号预处理 1、语音信号数字化 通过采样及量化提取语音信号的数据。 其中,数据提取部分,掌握语音文件的存储形式极为重要,有效地提取并清楚各部分数 据的含义,对分析数据起到帮助作用,为下一步工作做了良好的起步。 2、预加重处理 提升高频部分,使信号频谱变得平坦,以便于进行声道参数分析或频谱分析。预加重语 音信号的平均功率谱受声门激励和口鼻辐射影响,高频端大约在 800Hz 以上按 6dB/倍频程跌 落,即 6dB/oct(2 倍频)或 20dB/dec(10 倍频)。求语音信号频谱时,频率越高,相应的成分越 、 23 小。为此,要在预处理中进行预加重处理(Preemphasis)。预加重的目的是使信号的频谱变 得平坦,保持从低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声 道参数分析。预加重一般是采用一阶的数字滤波器 :H(Z)=1-, 值接近于 1,或者采 -1 z 用公式 y(n)=x(n)-x(n-1),其中,x(n)为原始信号序列;y(n)为预加重后序列; 为预加重系 数。 3、端点检测及分帧加窗 断点检测主要为实现对数据中有效部分的提取。阈值采用 0.3(最大值-最小值),语音信 号是一种典型的非平稳信号,处理中一般使用窗函数截取其中一段来进行分析,截取出来 的那部分信号被认为是短时平稳的。加窗处理的另一个作用就是消除由无限序列截断导致 的 Gibbs 效应。常见的窗函数有: 1)矩形窗(RectangularWindow) (1) 1(01) 0 (0) n N 其他 2)汉明窗(Hamming Window) (2) 2 0.54 0.46cos()(01) 1 0 (n) n n N N 其他 3)哈宁窗(Hann Window) (3) 2 0.5 0.5cos()(01) 1 0 (n) n n N N 其他 汉明窗和哈宁窗都属于广义升余弦函数,通过分析他们的频率响应幅度特征,可以发 现,矩形窗的谱平滑性能好,但是旁瓣太高,容易造成频谱泄露,损失高频成分;哈宁窗 衰减太快,低通特性不平滑;汉明窗由于其平滑的低通特性和最低的旁瓣高度而得到广泛 的应用。 3.3.3 Mel 倒谱系数特征表示 提取 MFCC 参数、PLCC 参数,即状态转移矩阵 A,混合高斯分布的权矩阵 C,均值矢 量 和协方差矩阵 U 这四个参数的训练过程,并进行极大似然值估计。 Mel 倒谱系数提取 人耳对不同频率的语音具有不同的感知能力,是一种非线性的关系。结合人耳的生理结 构,运用对数关系来模拟人耳对不同频率语音的感知特性,Davies 和 Merelstein 于 1980 年提 出了 Mel 频率的概念。其意义为 1Mel 为 l000Hz 的音调感知程度的 l/1000。Hz 频率与 Mel f Mel 频率之间的转换关系如公式: Mel f 、 24 =1127ln(1+) (4) Mel f 700 Hz f Mel 倒谱频率系数(MFCC)是上述 Mel 频率概念基础上提出的,其计算机流程如图 3-3-3- 1 所示 预加重,加窗 DCT 求倒谱Log 对数能量 Mel 频率滤波 器组 FFT 图 3-5 MFCC 计算流图 1)将原始语音信号预加重,分帧加窗之后得到一帧语音信号。 2)对一帧语音信号进行快速傅立叶变换(fast fouriert transform,FFT),得到信号的离散功 率谱 X(k)。 3)定义一个由 M 个三角型带通滤波器组成的滤波器组,每个滤波器的中心频率为 f(m), m=1,2,M,肘,相邻滤波器交叉重叠在一起,且其中心频率在 Mel 频率轴上为等间距 分布,滤波器组在频域上覆盖从 0Hz 到 Nyquist 频率,即采样率的二分之一。三角滤波器的 中心频率 f(m)和频率响应 H(k)分别为 (5) 1 1 1 ()()N f(m)=( () 1 h S B fB f BB fm FM (5)式中:和分别是滤波器组覆盖范围的低通频率和高通频率;是信号采样频率, 1 f h fF 单位都是 Hz;M 是滤波器组中滤波器的个数;N 是进行 FFT 变换时的点数;()是公式(4) 1 B 的反函数。 (6) 1/127 ( )700(1) b Bbe 4)通过步骤 3),每个滤波器产生输出频谱能量,取对数之后便得到一组如下系数 (7) 1 2 0 ( )ln(|( )|( ),1,2,., N m k S mX kHkmM 再经过离散余弦变换(DCT)将 S(m)转换到时域,就是 MFCC。MFCC 系数 c(i)的计算过程为 (8) 1 0 (0.5) ( )( )cos(),1 N k m n c mS kmM M MFCC 的 HzMel 尺度对应的曲线和滤波器组分布如图 3-6 所示。 、 25 0 500 1000 1500 2000 3500 4000 2000 1500 1000 500 频率/Hz 频率/Mel 图 3-6 MFCC 尺度对应曲线 3.3.4 HMM 隐马尔科夫模式匹配 HMM 是一种用参数表示的,用于描述随机过程统计特性的概率模型,它是由马尔可夫 链演变来的一个双重随机过程。个有个状态的 HMM 模型通常由来表示,这( , , )A B 些参数的含义解释如下: N 是模型的状态数,一个输入的观察序列在某一特定时刻只能处于S,是 12 ,. T Oo oo N 个状态中的一个。1,2N ,.,S SS 是状态转移概率矩阵:。它是一个隐含的马 A ij a 1 |,1, ijtjii aP qSqSi jN 尔可夫链,每次从状态转移到状态的概率只与状态有关,而与它以前的状态无关。矩 i S j S i S 阵元素必须满足:。 1 1 M ij j a 为各状态的初始概率分布,表示观察序列在 t=l 时刻可能 12 ,., N 12 ,. T Oo oo 处于模型各个状态的概率值,即,并且它满足。 1 (),1,2,., ii P qSiN 1 1 N i t B 为输入语音特征序列中的任意观察值在各状态的输出概率。它有离散 12 ,. T Oo oo i o 型和连续型两类,对于离散 HMM 模型,B 是一个概率矩阵;( ) ,1,2,., j Bb kjM k=1,2,M,其中,M 是编码符号集中符号的总数,并且满 ( )(|) jktj b kP oqS 足;对于连续型 HMM 模型,且 1 ( )1 M j i b k ( ) ,1 j Bb ojN 、 26 ,其中,o 是语音特征参数中的任一特征向量,M 是每个 1 ( )( ,),1 M jjijiji i b oc N oUjN 状态包含的高斯元的数目,是第 j 个状态第 l 个混合高斯函数的权,N 是正态高斯概率密 ji c 度函数,代表第 j 个状态第 l 个混和高斯元的均值矢量,代表第 j 个状态第 l 个混和高 ji ji U 斯元的协方差矩阵,并且它满足条件:。 1 1,1 M ji i cjN 根据 HMM 模型的不同参数,HMM 模型有不同的分类方式。 一种分类方式是根据转移概率矩阵的不同将 HMM 模型分为各态历经的和从左 A ij a 至右的两种结构。各态历经的 HMM 模型就是模型中的任一状态都可以经过有限步到达其他 的所有状态;从左至右的 HMM 模型随着时间的增加,状态序列号是非递减的,这种模型又 分为有跨越的和无跨越的两种。各态经历的 HMM 模型多用于说话人识别、语种辨识等,而 语音的内容与时序有很大相关性,这个时序可以采用状态的先后关系来表示,所以语音识别 必须采用从左至右的 HMM 模型。本文基于孤立词语音识别,不允许语音中间某部分被跳过, 所以须采用从左向右并且无跨越的 HMM 模型。它的状态转移概率矩阵必须满足 A ij a 且。0, ij aji1ji 另一种分类方式是根据输出概率 B 的不同将 HMM 模型分为连续型、离散型、半连续型 HMM。离散 HMM 的每一个状态的输出概率 B 是一个离散的概率矩阵,使用之前须对语音 信号的特征参数向量进行矢量量化。连续 HMM 模型的输出概率 B 是连续的输出概率密度函 数,它的形式有单高斯概率密度函数、混合高斯概率密度函数和分化高斯概率密度函数三种。 半连续 HMM 模型是将离散 HMM 和连续 HMM 结合起来使用的一种方法。本文采用连续 H1MM 模型。 基于 HMM 模型的孤立词语音识别系统需解决的以下问题: (1)如何确定一个最优的状态转移序列,并计算观察序列对12 (,.,) T qq qq 12 ,. T Oo oo HMM 模型的输出概率 P(O|),根据此概率判断语音命令的识别结果; (2)如何调整允=(A,B,)的参数使得输出概率 P(O|)最大。这是对 HMM 模型进行参数训 练的问题。 在解决上述两个问题的过程中,都需要对输出概率 P(Ol 允)进行计算,因此这是此算法 的另外一个关键问题。 3.3.5 OpenMP 编程实现多核并行运算 实验平台为 SAMSUNG R428 系列双核笔记本。采用 IntelPM45+ICH9M 芯片组,Intel(R) Core(TM)2 Duo CPU,T6600 处理器,2.20GHz 主频,高速缓存 2MB,前端总线 800MHz,内存 DDR3,2048M,系统为 Microsoft Windows XP Professional ( 5.1,版本 2600), 、 27 编译器为 MicrosoftVisual Studio 2010。在此平台上,用 OpenMP 改进二维离散快速傅里叶变 换,实验数据为程序多次运行的平均值。 1、FFT 算法编程实现 FFT 程序设计分为两个部分:倒序排列和蝶形运算。倒序排列用于时域提取 FFT 的输入 序列,本设计采用按时间抽选(DIT)的基-2 蝶形运算,输入导位序,输出自然序。 (1)倒序排列部分编程: 串行版本:串行版本: /*变址运算*/ for(i=1;i=k)j=j-k;k=k/2; j=j+k; 并行版本:并行版本: /*变址运算*/ / OpenMP并行处理 #pragma omp parallel for private(i,j) for(i=1;i=k)j=j-k;k=k/2; j=j+k; (2)蝶形运算部分编程实现 串行版本:串行版本: for(i=1;i #include int m_cepOrder = 12; int m_fbOrder = 23; float m_dctMatrix(12+1)*23; int m_sampleRate=32000; WfMelFB m_MelFB23; float m_MelWeight512/2+1; float m_logEnergyFloor; float m_energyFloor; /Filter:H(z) = 1-a*z(-1) int preemphasize(float *sample, int sampleN) /* Setting emphFac=0 turns off preemphasis. */ int i; float emphFac = (float)0.97; /并行处理 #pragma

温馨提示

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

评论

0/150

提交评论