找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] G.729.1语音编码算法的改进及实现

[复制链接]
admin 发表于 2013-3-27 18:41:58 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 在G.729.1语音编码算法中引入了一种长度为N=5×2m(m≥2)的MDCT/IMDCT实现的快速算法,编程实现该算法并在cygwin中仿真。在本方法中用孤立预乘的方法将N点的MDCT映射成N/2点的DCT-Ⅱ和DCT-IV,然后进入加窗阶段。该窗口是一种部分对称的窗,可以存储使用N/2的字,同时包含了一种只需4次乘法在一定的条件下就可以分解5点DCT-Ⅱ的方法。与其他算法相比,该算法可以明显地降低复杂度和减少存储空间。
关键词: G.729.1;语音编码;余弦变换;改进的离散深余弦变换
       G.729.1是基于分裂带宽的编码器,具有灵活的结构,通过利用正交镜像滤波器组分析和合成滤波器组不仅能够处理采样率为16 kHz的输入语音,还可以处理8 kHz采样率的输入语音,它是一个基于G.729的带宽扩展(50~7 000 Hz)的、8~32 Kb/s可分级编码器。由编码器产生的比特流具有可分级性,包含了12个嵌入式层。第1层为核心层,其编码速率为8 Kb/s,核心层与原有G.729中的比特流形式相同,这使得G.729.1与G.729之间具有互操作性。第2层为窄带增强层,每层均在之前一层的基础上增加2 Kb/s的编码速率,编码速率分别为14 Kb/s、16 Kb/s、18 Kb/s、20 Kb/s、22 Kb/s、24 Kb/s、26 Kb/s、28 Kb/s、30 Kb/s、32 Kb/s。编码器的默认输入为16 kHz采样,16 bit线性脉冲调制编码语音信号,也可对8 kHz采样的信号进行操作。解码器的输出可以为16 kHz或8 kHz采样的16 bit线性PCM语音信号[1]。
     G.729.1编解码器基于三阶段结构:嵌入式码本激励线性预测(CELP)编解码、时域带宽扩展(TDBWE)以及时域混叠消除(TDAC)的估计转换编解码。其中,嵌入式CELP阶段产生第1和第2层,生成8 Kb/s和12 Kb/s窄带合成信号(50~4 000 Hz)。TDBWE阶段产生在第3层,生成14 Kb/s宽带输出信号(50~7 000 Hz)。TDAC阶段工作在改进离散余弦变换域(MDCT),生成第4~12层,将信号从14 Kb/s提高到32 Kb/s。TDAC编解码同时代表50~4 000 Hz频带加权CELP编解码误码信号和4 000~7 000 Hz频带输入信号。算法中处理帧长为20 ms,每帧宽带信号样点数为640[2]。
     本文主要对其TDAC部分的MDCT变换进行改进并用程序实现。在G.729.1算法的时延中,用于MDCT分析(估计)的时延为20 ms,通过MDCT的快速算法来减少该部分的时延,从而提高算法的实时处理的性能。
     改进的离散深余弦(MDCT)广泛应用于语音和音频编码、分析和研究滤波器的时域别名取消特性。这是一种最为繁琐的计算密集型算法,因此需要一种快速算法来实现,到目前为止,已经提出了多种快速算法来实现MDCT。在这其中许多算法推导变换的长度为N=2m。本文将介绍一种基于长度为N=5×2m的新方法。这种长度的变换已建议在语音和音频编码中使用,典型的采样速率为8 kHz或16 kHz,帧延迟为10 ms或20 ms。ITU-TG.729.1和3GPP2EVRC-WB以及新兴的ITU-TG..EV-VBR标准中也提供了这种算法。本文对G.729.1中的MDCT引入了一种新的算法,该算法更简便和更易于实际应用,非常适合在语音算法中应用。
20121107044832470542510.gif
20121107044832533032511.gif
       通过以上的变换可以看到,矩阵D和窗函数相乘后所得到的结果遵循IMDCT,这样就可以减少做N/2次的乘法,也即可以节省N/2的存储空间。MDCT可以通过逆变换从IMDCT中得到。然后进行逆DCT-Ⅱ变换。变换需要一种算法可以适合任意长度的序列。因此本文采用了既对频率状态进行抽取同时又可以执行递归直到DCT的长度为5点的方法。基于5点的DCT-Ⅱ是通过平面旋转的方法来取代系数x(3)与x(4)之间的3次乘法和3次加法,用同样的方法对x(0)和x(2)进行处理。该方法使处理的路径变短、结构的规律性增强、传输过程中数据的动态范围减少。基于5点的DCT-Ⅱ变换的方程如下:
20121107044832579912512.gif
    20121107044832595532513.gif
     由式(16)可知,MDCT/IMDCT算法的复杂度受到快速5点DCT-Ⅱ算法复杂度的限制。
3 算法的实现
     经过改进后,新的MDCT变换算法如图1所示。图中,加窗所用的窗函数为一般情况下常使用的窗函数。
     从以上分析可知,该算法的复杂度受到DCTII算法复杂度的限制,所以在做DCTII变换时用的是HEIDEMAN M T的基于5点的DCTII变换的算法。该算法进行5点的DCTII变换只需14次加法和4次乘法,而可以提高运算速度和节省运算时间。
    20121107044832642412514.gif
       本文在G.729.1中的TDAC模块中引进了MDCT的快速算法,在G.729.1的默认模式下,该部分的时延为20 ms。通过使用本文中的方法进行改进,可以使该部分的时延降低约1/3,其存储空间也可节省约1/3。从而提高了该算法实现的实时性以及实际应用有了更大的可能性。在原来G.729.1的基础上实现了变速率,使该算法可以与G.729实现互操作,即该算法包含了G.729(因在原来G.729的基础上引入了TDBMW和TDAC技术)。
     本改进算法的仿真结果(默认模式)如图2所示。
    20121107044832658032515.gif
       由图2可以看到,该算法的降噪性能并不是很理想,加15 dB白噪声的语音基本上不可懂,但是解码后的语音虽然包含一定的噪声,而人耳基本上可以识别。该算法在降噪方面还有一定改进的余地,G.729.1算法的改进还有很大的价值。
参考文献
[1] ITU-T Rec.G.729.1. An 8-32 Kb/s scalable wideband coder bitstream interoperable with G.729. May. 2006.
[2] 贾懋珅,鲍长春,李锐.8~64 Kb/s超宽带嵌入式语音频编码方法[J].通信学报,2009(5).
[3] CHIVUKULA R K, REZNI Y A. Efficient implementation of a class of MDCT/IMDCT filterbanks for speech and audio coding applications[M]. ICASSP, 2008.
[4] HEIDEMAN M T. Computation of an odd-length DCT from a real-valued DFT of the same length[J]. Signal Processing, IEEE Transactions, 1992,40(1):54-61.
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-31 03:23 , Processed in 0.060015 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表