APP下载

基于SIC8008的VoIP原型系统中iLBC的应用研究

2012-08-07许悦李强

电子测试 2012年2期
关键词:机顶盒解码原型

许悦,李强

(重庆邮电大学 重庆 400065)

0 引言

随着工信部表示三网融合在“十二五”期间将有实质性的进展,使用于广电网络的数字高清电视机顶盒所具有的功能也将越来越丰富。除了能支持接收电视节目外,还可以支持VoD、Web浏览器、DVD、可视电话、远程教育、远程医疗、会议电视等多媒体,其功能正在向高档化多媒体终端发展。通过高清机顶盒的硬件扩展接口(USB接口或RCA接口),结合软件项目的开发,从而实现VoIP技术在机顶盒方面的应用。

1 数字高清电视机顶盒芯片SIC8008

SIC8008是重庆四联微电子有限公司设计的一款高性能MPEG2/AVS/H264高清解码芯片。SIC8008结构框图如图1所示。主CPU主要用于系统(Linux OS)应用,辅CPU实现音频实时解码功能及其它计算功能。

图1 SIC8008结构框图

2 基于SIC8008的VoIP原型系统整体设计

2.1 VoIP原型系统实现方式

文献[2]中指出,关于机顶盒实现VoIP功能,业界一般有3种方式:

STB通过USB接口外接USB话机,USB话机完成电话按键的输入、声音的采集和播放,机顶盒内实现USB话机驱动和其它协议,控制软件,从而实现机顶盒VoIP功能。

VoIP的输入输出主要通过机顶盒的RJ11接口,机顶盒设计时已经增加了RJ11电话机接口。电话机信号经过语音接口单元,送入语音处理单元完成语音编码压缩与解压缩,以及一些语音协议处理,如SIP、H.323等协议,再通过主控制器处理后传送给输入端。

VoIP的输入输出接口通过机顶盒的音频输出和MIC输入接口完成。

SIC8008整机设计本身没有实现RJ11和MIC输入接口,因此,第一种方式可以直接应用在VoIP原型系统。但是,由于市面上生产的USB话机不但价格很高,而且其驱动程序并不具有兼容性,同时如果自行开发SIC8008的USB话机驱动程序,即提高了开发成本,又延长了工作周期。为了节约研究成本并提高工作效率,最后采用在SIC8008整机外接USB声卡并连接耳机与话筒的方式来实现此原型系统。其中,USB声卡必须符合标准的USB audio协议。

在软件实现的方法上,将用于PC的语音实时流处理的开源代码经过修改后移植应用在SIC8008中,实现语音会话。采用的信令协议为SIP。VoIP原型系统结构如图2所示。

图2 数字高清电视机顶盒芯片SIC8008 VoIP原型系统结构

2.2 Linux内核的剪裁

SIC8008所用的操作系统是经过内核剪裁的linux-2.6.30。主要做了以下修改:在arch目录下只保留了arm子目录,并根据SIC8008的各项参数对此子目录下的各文件进行重新定义,在内核中加入符合SIC8008高清数字电视机顶盒相关的时钟、器件以及配置文件等。在fs路径下,根据NAND FLASH模块添加了ysffs2文件系统。Yaffs(Yet Another Flash File System)文件系统是专门针对NAND FLASH设计的嵌入式文件系统,yaffs2是此文件系统的第二个版本,能够更好的支持大容量的NAND FLASH芯片。

经过对Linux内核的剪裁,主要增添了针对SIC8008数字高清电视机顶盒SoC的ARM系统类型SICMicro HDSoC。由于VoIP原型系统的需要,在对内核进行配置时,设备驱动的声卡支持选项中要勾选USB声音器件选项。

2.3 Mediastreamer2

Mediastreamer2是由Simon Morlat开发的一个轻量级的流技术引擎,可以对音频和视频进行实时流的制作与处理。该引擎基于ortp库,全部由C语言编写,完全符合SIC8008上VoIP原型系统处理声音的需求。

正如在参考文献[3]介绍,在基于Linux平台的语音会话系统中,Mediastreamer2可以通过alsa或oss进行语音的读写,收发RTP包,完成语音编解码,播放及录制wav文件,利用FIR滤波器量化语音以及进行自动增益控制等[4]。其简单的设计思想,给利用Mediastreamer2开发语音处理程序的工作提供了一个良好的平台。

2.4 语音编码方案iLBC

[3]中对主要的语音压缩算法G.728、G.723.1、G.729.A和iLBC做了比较,最终选择iLBC作为最终的语音编码方案。在Mediastreamer2中,默认的语音编码方案为speex。iLBC和speex都是对CELP的发展,并且在算法复杂度及声音质量上都不相上下。但是,由于speex需要ogg作为其容器格式,在将其移植在SIC8008的过程中,还需要首先移植libogg库,这反而大大增加了整个系统开发的周期;而iLBC作为Mediastreamer2的默认语音编码算法,则只需要修改较少部分的代码并添加一个ilbc.c的文件即可。因此,iLBC最终作为此VoIP原型系统的语音压缩算法。同样,文献[3]为使iLBC作为默认算法对Mediastreamer2的修改方法进行了详细介绍。

3 iLBC编解码原理

iLBC是一种基于独立帧的利用线性预测方法对残差信号进行编码的算法,主要支持两种帧长格式:20 ms和30 ms。对于20 ms帧,每帧的位数为304 bit,共有160个采样点,分为4个子帧;对于30 ms,每帧的位数为400 bit,共有240个采样点,分为6个子帧。通过使语音信号通过LPC滤波器后得到残差信号,之后对帧中残差信号能量最大的部分进行标量量化,搜索到开始状态,建立动态码书,用动态码书对剩余的残差信号进行编码。这种编码方法即为独立帧编码,这种方法增加了帧与帧之间的独立性,从而消除了传输时由于丢包而引起的感知下降。

iLBC编码器的输入必须是采样率为8 000 Hz,16 bit的PCM信号。

3.1 iLBC编码原理

iLBC的编码过程如图3所示。

在文中的VoIP原型系统中,经过USB声卡采集后得到的PCM信号首先通过高通滤波器,滤除直流分量和低频噪音。用Levinson-Durbin算法求解LPC系数得到LPC-10的系数。每一次LPC分析,得到线性预测滤波器的系数之后都需要将其转换为一个线谱频率(LSF)的集合,量化内插后得到线谱对(LSP)集合。因为线谱对系数更利于量化、内插,其对量化误差不敏感,具有良好的强健性[5]。得到PLC分析器后,计算出信号的残差,从残差中找到两个能量最大的连续子帧,然后把能量值较小的首23/22个样点(30 ms/20 ms)或尾23/22样点从连续子帧中去除,剩余的57/58个被选定为本次处理的开始状态。之后对开始状态以基于DPCM的标量量化进行编码[6]。已经编码的残差信号再经解码得到的LPC激励样点集合作为自适应码书。对于剩余的残差信号,矢量量化将按下面顺序进行:包含有初始状态的两个连续子帧中剩余的23/22个样点;时间轴上在开始状态后的各子帧;时间轴上在初始状态前的各子帧。对于此矢量量化,每次码书搜索的范围是动态的,随着最新的解码结果,该动态码书被更新。最后将编码的语音信号打包放入有效载荷中。

3.2 iLBC解码原理

iLBC的解码模块的运算量相对与编码模块要小。根据文献[7]的介绍,解码的主要过程如下:解包后提取参数。从得到的LSF参数进行内插,并转化各子帧的LPC系数,以便进行合成操作。对开始状态进行解码,解码结果一方面作为激励信号暂时储存,另一方面存入码本存储区,以构成动态码本的初始值。对剩余的子帧部分,按照与编码相同的次序进行残差解码,并用解码结果更新动态码本,重复此步骤直到所有子帧完成解码。对于解码得到的残差信号,进行语音增强的操作。之后进行语音合成,形成解码后的语音。最后通过高通滤波器,消除合成后的低频语音。解码模块的流图如图4所示。

图4 SIC8008 VoIP原型系统iLBC解码模块流图

4 SIC8008 VoIP原型系统中iLBC编码模块的实现与优化

SIC8008是一套采用专用视频硬件模块处理高清视频解码的方案,并不是由嵌入式CPU或DSP加软件的方式处理视频编解码,能够有效降低芯片功耗。该高清机顶盒方案的视频解码核,在进行高清H.264解码时的工作主频约为250 MHz,远低于CPU或DSP的600 M~1 000 MHz,可显著降低功耗。释放CPU的计算能力,用于实现其他功能。VoIP系统作为SIC8008数字电视高清机顶盒产品中的一项增值业务,要在不影响高清电视信号视频解码的情况下,来实现IP电话的应用。该原型系统主要利用SIC8008的辅CPU计算功能来实现其功能。

4.1 iLBC编码模块优化前的测试结果

文件xend.c是基于Mediastreamer2和oRTP开发的功能测试文件,用来模拟语音信号从接收到iLBC编码,之后通过RTP包发送的过程。其运行结果如图5所示。

有图5中可以看出,在测试程序运行过程中,延迟告警随着运行时间持续增大,并不能达到预期的效果。究其原因,参考图6的辅CPU占用情况可以看出,是因为测试程序中PID为354的线程对CPU的占用率过高。此PID正是图5中名为ms_ticker_run的线程ID,即语音处理时的线程。

PID为354的线程所实现功能主要是对语音进行iLBC编码压缩及RTP打包发送(发送地址为127.0.0.1)。初步认为是由于iLBC压缩算法复杂度而引起的CPU占用过高。通过对iLBC库中的编码测试文件ilbc_encoder.c来进一步试验,证实了上述判断,测试结果见图7。

图5 由xend.c编译生成的xend_original.elf运行情况

图6 xend_original.elf运行时辅CPU占用情况

图7 iLBC编码测试

图7中,第二个参数为iLBC编码时使用帧长的选择;第三个参数为输入文件,即采样率为8000Hz,16bit的PCM信号;第三个参数为编码后的输出文件。从图中可以看出,PCM输入文件时长30.24秒,经iLBC编码的时间为36.79秒,是实际语音时间的121.7%,超出了6.55秒,远远不能达到语音处理的实时性。

4.2 iLBC编码模块的优化

为了使VoIP原型系统的编码模块在SIC8008上尽可能的降低其对辅CPU的占用率,在实际开发应用的过程中,对iLBC编码算法代码进行优化改进。

文献[8]针对编码算法提出了三个改进方案,并在Windows XP上验证了优化的可行性。其中,文献[8]中提出的减少自适应码书比较次数和搜索范围是有效降低算法复杂度的方法,即考虑到扩展码书与基本码书的相关性,在基本码书中搜索时取定一个步长跳跃式地搜索,并且在第一级搜索时,编码的目标向量具有较大能量,而第二、第三级搜索时的目标向量能量逐级减小,可以将步长继续增大,节约编码时间。

由于第二和第三级搜索时目标向量的能量越来越小,和第一级搜索时相比处于次要地位,SIC8008上iLBC编码模块的实际应用过程中,在基本码书和扩展码书搜索中只保留第一级的搜索,同时使用步长为2的跳跃式搜索。

4.3 优化结果

根据上一节的优化方法和文献[8]中提到的其他方案,修改iLBC的代码,在SIC8008上测试相关功能。

iLBC编码模块优化后,其编码测试结果如图8所示。在参数不变的情况下,编码时间为实际语音时间的57.5%,比优化前缩短了19.39 s。

图8 iLBC代码优化后的编码测试

应用于实时声音处理并以RTP包发送的程序中,xend.elf测试结果如图9所示。图9中结果没有延迟告警,正常显示发送带宽。

此时,辅CPU占用率降低了40%左右,如图10所示。

最后,基于优化后的iLBC编码模块将文献[3]中提到的IP电话语音留言功能移植在SIC8008中,进行语音留言测试,所得new message.wav声音质量略有下降,但是依然具有很强的可懂度和清晰度。

通过优化,证明了iLBC编码模块在SIC8008芯片上开发VoIP原型系统的可实现性,符合实时语音处理的要求;同时,证明了iLBC编码优化方案在嵌入式软件开发过程中的可行性。

图9 iLBC代码优化后xend.elf的运行情况

图10 iLBC代码优化后xend.elf运行时辅CPU的占用情况

5 结论

基于SIC8008芯片开发的VoIP原型系统,在保证不能影响辅CPU进行高清视频解码的情况下,尽可能的降低对其资源的占用。其中,对语音进行实时编码处理的模块设计及优化是解决问题的关键所在。经过对iLBC编码模块代码的改进与优化,测试结果与为优化前的模块相比,CPU占用率降低了40%左右,并且语音质量仍然清晰,具有很强的可懂度。虽然,在自适应码书搜索中采用步长不等于1和只进行一级搜索的方法从理论上不能保证最优解,但是在应用过程中其实验结果对信噪比的影响不大,因此,iLBC模块的优化方案在VoIP原型系统开发中还是值得的。

参考文献

[1]重庆四联微电子. SIC8008产品说明[R]. 重庆四联微电子,2011.

[2]于文华.基于网络机顶盒实现VOIP终端[J].电脑知识与技术,2010,6(3).

[3]许悦.基于Mediastreamer2的IP电话语音信箱功能的设计与实现[J].电子测试,2011(12).

[4]Simon Morlat, Mediastreamer2 Documentation 2.4.0[EB/OL]. May 19, 2010. http://download-mirror.savannah.gnu.org/releases/linphone/mediastreamer/doc/index.html.

[5]杨拯. iLBC语音算法研究及DSP实现[D].北京:北京邮电大学,2008.

[6]S. V. Anderson. Internet Low Bit Rate Codec (iLBC)[EB/OL]. December 2004. http://tools.ietf.org/html/rfc3951.

[7]郭廷廷,李 敬.iLBC编码算法及其在VoIP中的应用[JOL].电子技术应用,2006(7).

[8]肖博,刘炯鑫,黄永峰.iLBC语音编解码器的实现与优化[J].计算机研究与发展,2007,44(z1).

猜你喜欢

机顶盒解码原型
《解码万吨站》
包裹的一切
解码eUCP2.0
安全使用机顶盒注意五点
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
《哈姆雷特》的《圣经》叙事原型考证
数字电视机顶盒软件自动测试系统的开发及应用
论《西藏隐秘岁月》的原型复现
有线电视高清数字电视机顶盒测试系统的构建