Speex语音编码算法实现与优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
186 2009年第10期,第42卷 通 信 技 术 Vol.42,No.10,2009 总第214期 Communications Technology No.214,Totally
·信源处理·
Speex 语音编码算法实现与优化
穆 捷, 李 敬, 唐 昆
(清华大学 电子工程系,北京 100084)
【摘 要】介绍了Speex 编码原理,对其特有的编码方式进行了深入的分析,针对其编码特点提出了3种降低运算复杂度的优化方法,并在DSP 芯片上进行了实现。通过使用ITU P.862规范中的评分方法进行分析,所述方法能在保证语音质量基本不下降的前提下,显著的降低运算复杂度。
【关键词】Speex ;感觉加重;逆滤波;简单相关
【中图分类号】TN91 【文献标识码】A 【文章编号】1002-0802(2009)10-0186-03
Realization and Optimization of Speex
MU Jie , LI Jing , TANG Kun
(Department of Electronic Engineering, Tsinghua University, Beijing 10084, China )
【Abstract 】This paper first tells of the principle of Speex. Then, based on the analysis, three ways for simplifying computation are described. Through analysis by using PESQ in ITU P.862, the three proposed ways could help reduce the complexity of computation while the speech quality is guaranteed.
【Key words 】Speex; perceptual weighting; reverse filter; simple correlation
0 引言
互联网的发展推动着VOIP(V oice Over IP)技术应用的不断扩大,而现有的语音编码算法如G .729,虽然在语音质量上已经取得了很好的效果,但是由于应用环境不同,这些算法并不能很好的适应因特网网络环境多变的特点。Speex 是在VOIP 的应用背景下提出的一种基于CELP(Code Excited Linear Prediction)算法的免费、开源的语音编码器,其编码方式非常灵活,可以依据不同的应用环境采用统一的码流格式和编码算法,实现多码率,多采样率的灵活的语音编码,以适应网络语音通信的需求。
然而,传统的CELP 算法虽然在低码率的条件下依然能够保证良好的语音效果,但是其较高的运算量使得一些基于该算法的编码器难以在一些低功耗的芯片上实现。本文首先简要介绍了Speex 编解码算法,然后针对CELP 算法运算量大的缺点提出了调整感觉加权滤波器、利用简单互相关简化自适应码本搜索和固定码本逆滤波3种降低运算复杂度的优化方法,最后给出了试验结果,经试验验证,本文提出的优
化方法在较好保证语音质量的同时能够有效地降低运算量。
1 Speex 语音编解码算法简介
Speex 基于CELP(Code Excited Linear Prediction)算法,可同时进行窄带和宽带编码,并且具有多种速率。 自适应码本搜索利用互相关算法进行三阶基因预测,得到相应子帧的残差信号。然后将经过自适应码本搜索后的子帧残差信号分为长度不等的从5到20个样点的子矢量,依速率的不同采用各自对应的独立码本进行固定码本搜索。解码就是编码的逆过程,由于解码过程中并没有涉及码本搜索,因此,整个编解码的运算量主要集中在编码上,其中自适应码本和固定码本搜索占据了绝大部分,而宽带模式由于编码方式基本与窄带相同,因此我们的优化测试都基于窄带模式。
2 算法优化
CELP 结构的编码器虽然可以在低码率下仍然保持较高的语音质量,但其主要缺点就是运算量较大。对于Speex 编解码算法,当其工作在高模式下时,由于码本的增加和搜索精度的提高,使得算法复杂度加大,同时也就造成了在一些低功耗的DSP 芯片上较难实现实时的语音通信。为了解决这一问题,我们在CELP 模型运算量集中的码本搜索和基音周
收稿日期:2008-10-23。 作者简介:穆 捷(1979-),男,硕士研究生,从事语音压缩编码方
向研究;李 敬,男,讲师,从事多媒体通信方向研究;唐 昆,男,教授,从事多媒体通信方向研究。
万方数据
187
期的搜索上做了以下降低运算量的算法优化: 2.1 感觉加权滤波的调整
图1给出了Speex 感觉加权滤波调整前后的编码图,其中A(z)表示线性预测逆滤波器,在图1(a)所示的传统CELP 编码算法中,不论是在自适应码本搜索还是固定码本搜索过程中,每一个待选激励信号都需要通过感觉加权滤波,而在(b)中所示新的合成分析模型中,自适应码本在搜索最佳结果的过程中,并不需要对每一个候选激励进行加权滤波,与此同时,固定码本的搜索过程与传统CELP 模型相比并没有改变,因此
(a) 调整前
(b) 调整后
图1 调整前后的编码
在这种模型下,自适应码本搜索并没有在感觉加权域进行,而只是将感觉加权应用在了固定码本的搜索过程中。固定码本的生成与传统CELP 模型完全相同,而自适应码本的构建是由缓存激励得来的,其延时最大值不超过20ms 。通常,在这样的时间间隔内线性预测系数的变化是非常缓慢的,另一方面,自适应码本在重构语音信号时所需要的
基音延迟和码本增益在此间隔下的变化同样比较缓慢。此外,自适应码本搜索过程中,目标信号的能量较大,经过感觉加权后,与原始信号相比,信号改变所占比重较小,因此,图示模型所生成的语音信号质量与传统模型相比,是不会有太大的衰减的。
2.2 利用简单自相关简化自适应码本搜索[3]
在基音搜索过程中,基音周期是利用计算互相关的最大值来确定的。以子帧为例,传统的搜索算法需要计算子帧中全部40个样点在17~144范围内以每一个基音可能值为延迟的互相关值,然后取其中最大值的对应值作为基音周期。这种传统互相关运算可用下式表示:
)()()(39
L n x n x L R n -=
å=,L =17,18,…,144, (1)
由此可见,在传统的基音周期搜索方法中,基音周期的确定需要做127次40个样点的互相关运算,运算量很大。因此我们采用一种简单的互相关算法来降低运算量。这种简单的互相关运算可以用下式表示:
1
1
11
()()()()()a a b
b
n n R L x n x n L x n x n L =-=-=
-
+
-åå,
L =17,18,…,144, (2) (0)a x 和(0)b x 分别对应该子帧内信号的最大值和最小值,为了让结果更加精确,我们分别在两个最值两边各取两个相邻点,如图2所示,这样,()R L 最大值所对应的L 值
即可作为基因周期的预测值。
b
图2 简单互相关的取点
由于基音的变化范围为17~144,并且每个范围内的基音的权重也是不同的,因此,为了降低减少样点所带来的误差,使搜索更加准确,将范围内每20个样点分为一段,并
记录每段互相关最大值所对应L 值,这样一共可以得到7个基因延迟的预测值。最后,将这个7个预测值采用传统的逐点基音搜索算法求得最佳基因周期。
通过这种简单的互相关算法,互相关的运算的样点数由40个减少到6个,基音周期的变化范围也缩小到了7个,相比传统算法,运算量大大降低。 2.3 固定码本的逆滤波搜索方法
Speex 在固定码本搜索过程中,首先将全部码本通过感觉加权后的生成滤波器,然后将生成信号逐一与目标信号比
万方数据