嵌入式TTS汉语语音系统的设计与实现
发布时间:2007/4/23 0:00:00 访问次数:731
采用波形编辑法的嵌入式TTS系统由于成本低、性能完善、自然度高,随着波形修改算法的不断提出以及微处理器和非易失性存储介质功能的不断增强,正日益受到人们的关注。本系统即采用时域波形编辑技术,采集GB2312汉字编码字符集中所有字符发音作为原始材料,通过使用改进的游程编码算法压缩生成可适用于当前Flash存储器的语音库,并采用多重查找表设计及预存储命令字技术有效地加快语音库的寻址速度,在基于Atmel公司的AT89S52单片机上成功实现了一个TTS语音系统,经测试取得了令人满意的效果。该系统应用简便,具有很小的尺寸和很低的功耗及通用的串行接口,可以广泛用于有关的汉语语音应用系统中。
图1为系统原理图框图以及主要操作流程。系统采用串行口与外界交互,任何具有标准串口的设备均可与本系统相连。欲发音汉字的国标码(GB码)由串口送入MCU,MCU将其映射为Flash存储器地址表中对应项的地址,然后根据此地址取得对应项中的命令字,由MCU根据该命令字读取该汉字发音对应的语音数据,连续读出语音数据并以游程码解码算法解码后,按照语音采样时的固定速率通过D/A转换和功率放大播放。本文中语音采样速率为11025B/s。为满足应用需求,本文首先构建易于快速解码的语音库,根据特定Flash存储器的存储格式,以快速多查找表寻址及命令字预先存储的方式组织并存储在Flash存储器中,以满足语音播放的实时要求。同样,MCU的代码也要优先考虑速度而牺牲诸如模块化、可读性方面的要求。最后,出于实用性考虑,系统中需加入足够的输入缓冲区支持,以满足一次输入多个流字或整句的要求。
2 原始语音数据的采集和处理
本系统共采集了1335种发音,内含1306个流字发音,26个英文字母发音及3个停顿音,语音采集卡AD转换整编11025B/s,分辨率8位,样本值域0~255,静默值为80H。原始语音以WAV文件的格式保存在PC机中。
本文根据上述静默值及边缘值的分布特点,提出了一种改进的游程编码用于语音数据的压缩,具体做法是:用00H代表游程压缩起始码,其后是被编码字符,再下一个字节是被编码字符的重复码,如:80 80 80 80 80可以表示为00 80 05。显然,游程长度小于等于3时没有编码的必要,因而不会出现值为00H、01H和02H的重复码。如上所述,在原始语音文件中,00H、01H这些边缘值是基本上不出现的。因为大量出现这些边缘值即意味着语音采集系统的动态范围设置错误。尽管如此,为确
采用波形编辑法的嵌入式TTS系统由于成本低、性能完善、自然度高,随着波形修改算法的不断提出以及微处理器和非易失性存储介质功能的不断增强,正日益受到人们的关注。本系统即采用时域波形编辑技术,采集GB2312汉字编码字符集中所有字符发音作为原始材料,通过使用改进的游程编码算法压缩生成可适用于当前Flash存储器的语音库,并采用多重查找表设计及预存储命令字技术有效地加快语音库的寻址速度,在基于Atmel公司的AT89S52单片机上成功实现了一个TTS语音系统,经测试取得了令人满意的效果。该系统应用简便,具有很小的尺寸和很低的功耗及通用的串行接口,可以广泛用于有关的汉语语音应用系统中。
图1为系统原理图框图以及主要操作流程。系统采用串行口与外界交互,任何具有标准串口的设备均可与本系统相连。欲发音汉字的国标码(GB码)由串口送入MCU,MCU将其映射为Flash存储器地址表中对应项的地址,然后根据此地址取得对应项中的命令字,由MCU根据该命令字读取该汉字发音对应的语音数据,连续读出语音数据并以游程码解码算法解码后,按照语音采样时的固定速率通过D/A转换和功率放大播放。本文中语音采样速率为11025B/s。为满足应用需求,本文首先构建易于快速解码的语音库,根据特定Flash存储器的存储格式,以快速多查找表寻址及命令字预先存储的方式组织并存储在Flash存储器中,以满足语音播放的实时要求。同样,MCU的代码也要优先考虑速度而牺牲诸如模块化、可读性方面的要求。最后,出于实用性考虑,系统中需加入足够的输入缓冲区支持,以满足一次输入多个流字或整句的要求。
2 原始语音数据的采集和处理
本系统共采集了1335种发音,内含1306个流字发音,26个英文字母发音及3个停顿音,语音采集卡AD转换整编11025B/s,分辨率8位,样本值域0~255,静默值为80H。原始语音以WAV文件的格式保存在PC机中。
本文根据上述静默值及边缘值的分布特点,提出了一种改进的游程编码用于语音数据的压缩,具体做法是:用00H代表游程压缩起始码,其后是被编码字符,再下一个字节是被编码字符的重复码,如:80 80 80 80 80可以表示为00 80 05。显然,游程长度小于等于3时没有编码的必要,因而不会出现值为00H、01H和02H的重复码。如上所述,在原始语音文件中,00H、01H这些边缘值是基本上不出现的。因为大量出现这些边缘值即意味着语音采集系统的动态范围设置错误。尽管如此,为确
上一篇:基于VxWorks的产品映象设计