语音识别算法及其实现
2.2. 语音识别的 DSP 实现技术 2.21. 浮点运算的定点实现
2
在语音识别的算法中,有许多的浮点运算。用定点 DSP 来
实现浮点运算是在编写语音识别程序中需要首先解决的问题。这个问
题可以通过数的定标方法来实现。数的定标就是决定小数点在定点数
中的位置。Q 表示法是一种常用的定标方法。其表示机制是:
设定点数是 J,浮点数是 f,则 Q 法表示的定点数与浮点数
的转换关系为: 浮点数 f 转换为定点数 x:x= (int)y×2Q;定点数 z 转换
为浮点数 y:y
=(float)x×2-Q。
2.22. 数据精度的处理
用 16b 的定点 DSP 实现语音识别算法时,虽然程序的运行
速度提高了,但是数据精度比较低。这可能由于中间过程的累计误差
4
要的注释与说明,以增强程序的可读性。 在总调时,需要在各模块中设置好相应的人口参数与出口
参数,维护好堆栈指针与中间变量等。 三、硬件设计及功能描述
3.1. 外接电路组成部分 IOB1 IOB0 两个发光二极管 5V 电压 此部分硬件用于显示语音控制的现象。1K 电阻用于限流作用。 3.2. 凌阳单片机简介 凌阳十六位单片机是台湾凌阳公司 2001 年推出的新一代单片机, 具有高速度、低价、可靠、实用、体积小、功耗低和简单易学等特点。其 有多种型号,经过比较我们选择了其代表型号 SPCE061A。因为该型 号在存储器资源方面考虑到用户的较少资源的需求以及便于程序调 试等功能,芯片只内嵌 32K 字的闪存(FLASH)。较高的处理速度使其 能够非常容易地、快速地处理复杂的数字信号。现比较而言, SPCE061A 微控制器是适用于数字语音识别应用领域产品的一种经 济的选择。 SPCE061A 的内部结构图如下图所示,其中输出端 IOA15 和
5
IOB15 分别接上图的 IOB1 和 IOB0,组成整体电路。
四、软件设计及使用说明 4.1. 主程序软件设计流程及说明 4.11. 语音识别函数 1) 【API 格式】int BSR_DeleteSDGroup(0); 【功能说明】SRAM 初始化。 【参 数】该参数是辨识的一个标识符,0 代表选择 SRAM,并初始 化。
DSP 程序中,所有声明的变量在链接时都会分给数据空间。所以如果 按照高级语言那样定义局部变量,就会浪费大量的 DSP 存储空间,这 对数据空间较为紧张的定点 DSP 来说,显然是不合理的。为了节省存 储空间,在编写 DSP 程序时,最好维护好一张变量表。每进入一个 DSP 子模块时,不要急于分配新的局部变量,应优先使用已分配但不 用的变量。只有在不够时才分配新的局部变量。
一、概述 1.1. 选题意义 目前,高科技发展迅速,日新月异,而因为实际需要,各种防盗技 术也日趋多样化。其中智能人声防盗系统引起了我们的兴趣,因此我 们选了语音识别算法及其实现这一课题,来探究一下语音识别的原理 及其实现过程。语音识别研究的根本目的是研究出一种具有听觉功能 的机器,能直接接受人的口呼命令,理解人的意图并做出相应的反映。 语音识别系统的研究涉及微机技术、人工智能、数字信号处理、模式 识别、声学、语言学和认知科学等许多学科领域,是一个多学科综合 性研究领域。近年来,高性能数字信号处理芯片 DSP 技术的迅速发展, 为语音识别的实时实现提供了可能。其中,凌阳公司的单片机以其良 好的性价比和代码的可移植性被广泛地应用于各个领域。因此,我们 采用凌阳公司的具有 DSP 功能和语音特色的完全 SOC 技术的凌阳十 六位单片机来实现语音信号的识别。 1.2. 实验目的 1、掌握特定人语音辨识技术。 2、可以应用于简单语音控制场合。 二、算法原理 2.1. 语音识别的基本过程
2.24. 采用模块化的程序设计方法 在语音识别算法的实现中,为了便于程序的设计和调试,
采用了模块化的程序设计方法。以语音识别的基本过程为依据进行模 块划分,每个模块再划分为若干个子模块,然后以模块为单元进行编 程和调试。在编写程序之前,首先用高级语言对每个模块进行算法仿 真,在此基础上再进行汇编程序的编写。在调试时,可以采用高级语 言与汇编语言对比的调试方式,这样可以通过跟踪高级语言与汇编语 言的中间状态,来验证汇编语言的正确性,并及时的发现和修改错误, 缩短编程周期。另外,在程序的编写过程中,应在关键的部分加上必
根据实际中的应用不同,语音识别系统可以分为:特定人
1
与非特定人的识别、独立词与连续词的识别、小词汇量与大词汇量以 及无限词汇量的识别。但无论那种语音识别系统,其基本原理和处理 方法都大体类似。一个典型的语音识别系统的原理图如图 1 所示。
语音识别过程主要包括语音信号的预处理、特征提取、模 式匹配几个部分。预处理包括预滤波、采样和量化、加窗、端点检测、 预加重等过程。语音信号识别最重要的一环就是特征参数提取。提取 的特征参数必须满足以下的要求:
而引起运算结果的不正确。为了提高数据的运算精度,在程序中采用
了以下的处理方法:
(1)扩展精度 在精度要求比较高的地方,将计算的中间变
量采用 32b,甚至 48b 来表示。这样,在指令条数增加不多的情况下却
使运算精度大大提高了。
(2)采用伪浮点法来表示浮点数
伪浮点法即用尾数+指数的方法来表示浮点数。这时,数
据块的尾数可以采用 Q1.15 数据格式,数据块的指数相同。这种表示
数据的方法有足够大的数据范围,可以完全满足数据精度的要求,但
是需要自己编写一套指数和尾数运算库,会额外上两种方法,都可以提高运算精度,但在实际操作时,要
根据系统的要求和算法的复杂度,来权衡考虑。 2.23. 变量的维护 在高级语言中,有全局变量与局部变量存储的区别,但在
(1)提取的特征参数能有效地代表语音特征,具有很好的 区分性; (2)各阶参数之间有良好的独立性;
(3)特征参数要计算方便,最好有高效的算法,以保证语音 识别的实时实现。
在训练阶段,将特征参数进行一定的处理后,为每个词条 建立一个模型,保存为模板库。在识别阶段,语音信号经过相同的通 道得到语音特征参数,生成测试模板,与参考模板进行匹配,将匹配 分数最高的参考模板作为识别结果。同时,还可以在很多先验知识的 帮助下,提高识别的准确率。