概述:阐述在一款集成传呼功能的二合一PDA系统中,使用嵌入式处理器EP7211实现个人传呼信息的实时语音合成和播放的功能,主要包括字符语音库的建立、字符语音合成自满和Cdec语音中断服务例程等3部分。
PDA(Personal Digital Assitant,个人数字助理)是近年来继寻呼机和移动电话之后,在国内市场迅速崛起的便携式电子产品。就其扩展意义来讲,它能够集成移动计算、电话和网络等多种功能。根据不同的应用需求,它可以管理个人信息、提供名片存储和日程安排,也可以接收各种寻呼信息(如股市、天气预报等)。如果是集成通信模块,
还可以作为移动电话使用,进行无线网络互联。广义的PDA包括简单的电子记事本、电子辞典和功能强大的掌上电脑,它们的主要区别表现在操作系统、存储能力、运算速度和数据交换能力等方面。
目前国内传统PDA产品经过几年的高速发展后,市场基于饱和,销售额出现负增长。不过由于PDA产品的灵活性,有针对性的行业应用作为一个新亮点,开始为人们所关注。经过行业应用尾后的PDA产品,已经在国内市场大显身手。文曲星展现超强的语言释译能力,比较适合于大学生和语言翻译者使用;蓝火系列能实时接收股市信息和专家点评,适合工薪阶层的炒股者。国家信息产业部已经鼓励PDA产品在交通、警务、保险等领域的行业应用和推广。
分析市场需求,我们研发了集成传呼功能的、专门面向铁路交通行业应用的铁路交通信息系统PDA。本PDA系统除了具备传统PDA的个人名片管理和辞典检索等功能外,同时提供交通行业应用的民航航班查询、铁路列车时刻表查询等功能。
本PDA的寻呼系统实现如下功能:能够通过寻呼对列车时刻表、列车晚点信息、列车剩票额、股道信息等行业数据进行动态更新。作为另一个特色,当接收到个人寻呼时,能够将寻呼内容实时地转换成语音并播放。
下面重点介绍本PDA系统中使用嵌入式处理吕EP7211实现个寻呼内容的实时语音转换和播放。该功能的实现包含前后相关的3个部分:字符语音库的建立、字符的语音合成算法和Codec语音中断服务例程。
1 实现条件和要求
PDA属于嵌入式应用系统,其同一般PC机有很大差别。硬件方面,嵌入式处理器基于RISC体系结构,一般工作频率在几十MHz,甚至更低;系统内存容量一般在几百KB~几MB之间;一般使用容量小的ROM或者Flash作为硬盘来存储可执行程序序和数据。软件方面,PDA系统一般有专用的嵌入式操作系统和软件开发调试移植环境。
个人传呼信息的特点是单条传呼信息长度变化较大,20~50个字符不等。最为常见的是“请回电话***”;传呼信息涉及到的字符数量较大,字符语音合成时运算量大,单字符合成后语音数据占用的存储空间多;需要事先建立字符语音库等。
由于具体硬件环境的限制、传呼信息的特点和语音合成的要求,该功能能够实现的前提有:语音库占用的空间小;字符合成时速度更快;采用前台进行字符语音合成时,以后台中断方式进行合成语音的播放来保证其实时性和连续性。
2 具体实现
下面分别介绍字符语音库的建立、字符语音合成算法、本PDA系统的框架结构和语音中断服务例程。
2.1 建立字符语音库
我们选用G.729语音压缩编码标准来建立语音库。该标准采用的算法是共轭结构的代数码激励线性预测(CS-ACELP),是基于CELP(码激励线性预测)编码模型的算法。这种编码规范的严格性使性能达到或超过了32Kbps的G.726 ADPCM编码,具有很高的语音质量;同时,它是在语音信号8KHz取样的基础上得到16bit线性PCM后进行编码的,压缩后的数据速率仅为8Kbps,具有相当于8:1的高压缩率。其算法延迟少于16ms。由于G.726编解码器能够实现很高的语音质量和很低的算法延时,因此被广泛地应用。
字符语音库是一个单字发音语音数据的集合,中段数据之间相互独立,不具有相关性。语音库包含了国标一、二级字库中的所有6763个汉字、10个阿拉伯数字和26个英文字符的标准普通话语音数据。每个汉字或字符发音时长为0.65s,采用8KHz抽样频率,使用了G.729A语音编码算法对上述的语音数据进行压缩,压缩后数据速率为8Kbps,相当于具有8:1的高压缩率。在汉字中,同音字占了相当大的比例,而在语音合成中对于同音字的处理是没有区别的,故近7000个汉字,我们只存储1123个不同的发音。经过同音字处理和采用G.729标准压缩字符语音数据,则最终建立的语音库文件大小为729 950字节,完全符合本PDA系统的数据存储要求;否则,语音库数据量太大,本PDA系统不能接受!
建立一个语音压缩数据库的具体步骤如下:
*将数字和常用汉字的标准发音独立地录入到数据文件中,作为基础数据。使用cooledit2000软件完成语音的录入。
*对于输入数据,按照每帧10ms(80个样点)的长度,将A_law语音通过简单换算变成16bit PCM数据,作为编码算法的输入。
*按照G.729A算法标准,对数据进行编码。
*将编码后的数据转换为二进制比特流,写入语音库文件中。压缩后数据速率为8Kbps,具有相当于8:1的高压缩率。
用C语言实现这一过程的程序流程如图1所示。
字符语音库的建立是在Windows平台及Visual C++编程环境下实现的,最终压缩处理后数据量的大小为729 950字节,每个字符语音数据的大小是650字节。
2.2 语音合成
当收到个人传呼信息时,语音合成程序首先从指定位置获取传呼信息数据,然后在语音库中查找每个汉字、阿拉伯数字或者英文字符的发音,重组一个数据文件。解码程序对该文件进行解码并且输出原始语音。语音合成流程如图2所示。
语音合成过程首先是当前字符在语音库的定位。对于10个阿拉伯数字和26个英文字符,将其放在语音库开头。这些字符的查找比较方便。汉字是2字节存储,我们依居其区位码来作为语音库中的定位索引。字符语音检索结束后的语音压缩数据作为该字符解码过程的输入。
数据解码过程可以分为参数解码和重构信号后处理2部分。首先要从输入的数据中提取参数符号,对这些符号解码之后,可以获得相应于10ms话音帧的编码器参数。这些参数包括线性预测系数、自适应码本矢量、固定码本矢量以及它们的增益。解码之后的参数用来计算重建语音信号。得到重构语音信号只有通过后处理过程来对该信号进行放大,包括后向滤波、高通滤波以及按比例因子扩大,最后得到原始的语音数据。
字符解码器原理如图3所示。