×
嵌入式开发 > 详情

基于CM70C01的语音压缩编码

发布时间:2020-06-17 发布时间:
|

2004年6月A版

摘 要:CM70C01是处理多种语音压缩格式的混合信号处理芯片,由于编码和解码部分的标准不统一,使得部分语音压缩文件与CM70C01不兼容。本文在深入了解CM70C01解码和语音合成的基础上,就LPC-10提出符合CM70C01的语音压缩编码方法。

关键词:能量;音调;反射系数;语音压缩

引言

CM70C01是中科微电子公司生产的混合信号处理芯片,集成8位MCU和语音合成电路,具有编程方便,能处理LPC-10、CELP、PCM、MELP等多种语音压缩格式的能力和较优的性价比,可以应用在各种语音处理场合。但由于LPC-10、CELP和MELP等语音格式在编码和解码部分有多种不同的标准,而且这些标准之间并不兼容,因此用户自行编制的语音数据并不一定能被CM70C01识别或处理。在熟知语音压缩基本算法而又缺少语音开发板和相应软件的情况下,就可以用纯软件的方法来实现基于CM70C01的语音压缩编码。本文以LPC-10为例子,说明特征参数的提取、编码的帧结构以及CM70C01的解码和编码的实现。

特征参数的提取

语音具有样点间的短时相关性和相邻基因周期间的长时相关性,可以用一个全极点模型来描述一小段语音的生成模型。在利用线性预测方法对语音进行上述两种相关性的去相关处理后,能够得到预测的余量信号。根据余量信号和全极点模型的预测系数,就可以合成语音。这就是线性预测编码。

线性预测编码(LPC-10)是将线性预测理论运用到语音编码领域的一个典型例子。在预测编码过程中,以帧为单位来分析和提取语音信号的相关特征参数,这些特征参数有包括:全极点模型的预测参数{ai}、能量增益(Energy)、音调(Pitch)、浊/清音标志(V/UV)。由特征参数来表述语音信号既可减小存储空间,又可以低速率来进行传输。在接收端,根据帧的特征参数决定激励源、基音块和帧块间的插值,最后通过格型滤波器来合成语音。

由于预测参数不适于直接量化,因为它的微小变化会造成极点位置很大的变化,所以一般采用在数学上与之完全等价的反射系数K1~K10代替预测参数进行量化编码。反射系数的稳定条件是|Ki|<1,这在量化时是容易保证的。可以用Choleski UV分解法对LPC正则方程的系数矩阵求逆,得出反射系数。这种算法能够比较准确的计算出共振峰的宽度,但由于篇幅关系,在这里不详细叙述。

能量(语音波形的振幅)一般用如下公式计算:

式中Si为采样取得的数字语音(一般还需经过预加重处理,加强音谱中的高频共振峰),M为一帧的采样点数。

音调即基音周期,用平均幅度差函数AMDF计算。数字语音经过一个四阶Butterworth低通滤波器后再经过二阶逆滤波,然后计算延迟时间为个样点的AMDF,由AMDF的最小值确定周期。

t的取值可为20~156。假设数字语音的采样频率为8KHz,t为60时AMDF最小,则

浊/清音的标志是根据AMDF最大值与最小值之比和过零率,用动态规划算法,在三帧范围内进行平滑和错误纠正而得出的。该标志有稳定的清音、清音向浊音转换、浊音向清音转换和稳定的浊音这四种状态。

编码的帧结构

在LPC-10传输数据流中,以帧为单位对特征系数进行编码。一般LPC-10数据按帧类型可划分为浊音帧和清音帧,其比特分配如表1。

基因周期和浊/清音标志用7比特表示,能量用5比特表示。浊音帧有10个反射系数,而清音帧只有4个反射系数,但比浊音多用20比特作为误差纠正。另外,每一帧数据当中还包含有1比特同步信号。

而在CM70C01默认的语音编码格式中,除了浊音帧和清音帧,还细分出重复帧、静音帧和停止帧。顾名思义,这三种类型的帧分别表示重复上一帧的反射系数、静音和停止合成语音。它的比特分配表如表2。

能量用4比特表示:全0时为静音帧,没有音调和反射系数;全1时为停止帧,相当于结束标志,只会出现在语音数据末尾。重复标志(Repeat)为1时,该帧为重复帧,表示它的反射系数与上一帧的相同。音调用7比特表示,全0时表示该帧为清音帧。所有的帧都没有误差纠正和同步信号。

CM70C01的解码和编码

在对比帧结构的不同之后,再进一步了解特征参数在CM70C01解码、合成语音过程中的作用。CM70C01取得一帧的数据后,按下列步骤进行处理

各参数根据自身的解码表进行解码,而根据解码表可以近似的推算出编码表。一般语音信号量化采用的是非均匀量化,采用最佳非均匀量化时,最佳分层电平应取两个相邻量化电平的中点。

xk为分层电平,即量化区间的上限值;yk为量化电平;L为量化电平数。落在区间jk={xk

解码后的参数都为十六进制数,并且要与下一帧的参数进行插补。音调的插补公式:

P=(Pcurrent-Pnew)Timer+Pnew

Pcurrent为上一帧的周期值,Pnew为当前帧的周期值,Timer为定时器的值。其他参数的插补方法同上。特征参数在插补后,能量和反射系数直接送到CM70C01选通声道相应的参数寄存器,而音调在乘以二后送入音调寄存器。

在语音合成中,浊/清音标志决定了采用的激励信号。如果是清音,则以随机数(白噪声)为激励源;如果是浊音,则用一周期性冲激信号通过全通滤波器来产生激励源。能量决定了合成语音的增益,也就是音量大小。反射系数直接确定了格型滤波器的参数。决定音调的除了音调寄存器(Pitch Register,PR)还有音调周期计数器(Pitch Period Counter,PPC)。

假设合成器的取样频率是8K,在音调寄存器PR用TASYN指令加载后,每次取样音调周期计数器PPC减20h,当PPC小于0时,用音调寄存器PR中的值重新装入PPC。当PPC中的值减到小于200h或加载值小于200h时,微处理器可以做到,并决定何时执行插补。当音调周期计数器PPC减到140h~000h之间时,激励函数加到LPC滤波器的输入端。如果解码后音调的值为7C0h,PR的值则为F80h,实际周期和频率

当音调为133.33Hz即t为60(十进制数,十六进制时为3Ch)时,对应的解码值为,对应的量化码子可查询解码表得到。

根据上述参数的作用可知,能量和反射系数在解码后直接用于语音合成,所以可根据解码表直接推算出量化编码表;而基因周期经过一些简单的计算也能由解码表算出量化编码表。经过提取特征参数,推算量化编码表等一系列准备工作后,现在可以按照CM70C01帧的结构对特征参数进行量化编码。其步骤如下:

对于本文的例子LPC-10来说,在编码后有时还需要用户根据经验修改反射系数,那么只需在量化编码过程中加入一个表格窗口,用于显示和修改量化编码数据,就能完全替代语音开发板及其软件独立进行语音压缩编码。对于CELP、MELP这些语音压缩格式,不需要提供表格窗口来修改编码数据。

结语

综上所述,用纯软件的方法来实现基于CM70C01的LPC-10编码是可行的。对于那些缺少相应语音开发板和相关软件支持而又希望使用CM70C01的用户来说,本文提供的方法能够较好的解决语音压缩编码的问题。如果要使用CM70C01支持的其他几种语音压缩格式,如CELP、MELP等,由于其编码的原理与LPC-10类似,根据本文所提供的解决方法,可以实现基于CM70C01的语音压缩编码。■

参考文献:

1. 杨行峻、迟惠生等,‘语音信号数字处理’,第二版,电子工业出版社,1998

2. L.R.拉宾那、R.W.谢弗 ,‘语音数字信号处理’,科学出版社,1982

3. 彭崇梅、李全圣,‘对线性预测语音解压缩方法的探讨’,电子产品世界,2001年4B期



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
一只老鸟的嵌入式ARM学习心得