基于EVRC解码算法的语音业务还原设计与实现
2017-03-02汪小雨郭淑明
汪小雨,郭淑明,贾 鑫
(国家数字交换系统工程技术研究中心 河南 郑州450000)
基于EVRC解码算法的语音业务还原设计与实现
汪小雨,郭淑明,贾 鑫
(国家数字交换系统工程技术研究中心 河南 郑州450000)
介绍了一种应用于码分多址 (CDMA)移动通讯系统中的增强型变速率语音编解码器(EVRC),阐述该声码器的解码实现原理并对解码过程进行C代码仿真。在此基础上提出了一个语音数据实时解码播放的设计方案,实现对获取的EVRC编码的语音数据流进行解码处理,通过设置数据缓冲池完成对语音数据的缓存,完成解码输出PCM语音数据到WAV文件的编码转换,从而实现输出语音的实时播放和存储。测试效果表明该方案能够较好的实现对合成语音的实时播放。
EVRC;WAV;语音;业务还原
社会的快速发展以及人们对方便、快捷生活方式的需求不断的推动着移动通讯技术的更新,移动终端逐渐成为人们工作、生活中必不可少的通信工具。语音业务作为移动通信系统的重要构成单元依旧据有着重要地。EVRC以其较高的合成语音质量和抗干扰性以及较低的码率成为第三代移动通信系统CDMA2000的语音编解码协议标准[1],对EVRC语音编解码算法的研究以及进一步功能开发对于研究CDMA2000终端用户的通信行为具有现实意义。传统的EVRC声码器的实现基于DSP芯片的设计,受硬件的制约,其功能的可扩展性受到限制,文中从移动通信系统的业务实现与计算机软件作业平台相融合的角度出发,在理解EVRC协议的基础上对解码过程进行C代码实现,在服务器端利用JNA技术移植封装的解码函数,进而实现对语音数据的解码还原和播放存储。该设计使解码过程软件化,摆脱了硬件的束缚,能够为公共安全管理者提供更多、更方便的安全需求服务与技术支持。
1 EVRC解码原理及实现
EVRC是由美国通信工业协会TIA发布的IS-127标准协议提出的一种混合变速率编解码器[2]。其核心算法是贝尔实验室在1994年提出的松散码激励线性预测(Relaxed Code Excited Linear Prediction,RCELP)技术,该技术是一种依合成分析的码激励线性预测算法,不需要严格的与原始语音信号进行匹配,而是每帧的基音延时和帧与帧之间的基音为参数进行线性内插得到简化的基音包络,再用基音包络对经过时域变形的残差信号进行修正匹配。使用三种编码速率:全速率8.55 kb/s(171 bit/包)、半速率4.0 kb/s(80 bit/包)、1/8速率0.8 kb/s(16 bit/包)[3]。编码输出的EVRC数据包的比特数分配如表1所示[4]。
表1 EVRC数据包比特分配
EVRC解码器对接收的经过上述速率格式编码的语音帧进行相应的解码处理,其输入包括数据包以及包类型指示[5]。如图1所示包含3个功能模块:RCELP解码模块、帧错误检测模块、后置滤波模块。帧错误检测模块判决当前数据帧的解码速率以及数据帧是否有错误,根据判决速率和帧错误标识,解码器对获取的语音数据包进行处理,每一帧解码得到的参数进一步合成PCM语音信号,最后把合成语音经过后置滤波器,从而减少量化噪声,提高合成语音质量[6-7]。
图1 EVRC解码原理框图
1.1 帧错误检测
帧错误检测模块输入信号包括语音数据包以及包类型指示,其算法核心是根据包类型指示判定每帧的解码速率以及每帧是否出错,错误标识由FRAME_FLAG(m)表示。另外,接收到的数据包类型与帧错误标志映射关系如表2所示[8]。
如果判定帧速率为1/8速率,上一帧速率为1且错误标识FRAME_FLAG为FALSE,则本帧应判决为全速率1,帧错误标志FRAME_FLAG为TRUE;如果判定本帧速率为全速率1或者半速率1/2,但是基因延迟DELAY>100,则帧错误标志FRAME_FLAG应判定为TRUE[3]。
表2 包类型与帧错误标志映射
1.2 数据包解码
由上可知,不同速率的数据包其解码过程有所差异,全速率和半速率解码主要包含线谱对(LSP)参数解码、延时解码、自适应码本贡献、固定码本增益和固定码本激励等。线谱对(LSP)参数解码过程中,如果帧有错误,则使用上一帧的LSP参数;否则就根据索引LSPIDX(k)从量化码本中得到LSP参数值。延时解码时,如果帧为差错帧,则使用上一帧的延时参数,否则就根据DELAY从量化码本中得到延时。如果速率为全速率,并且该帧为非差错帧,而上一帧为差错帧,则把上一有效帧的自适应码本存储进行变换,利用恢复出的延时包络重建本帧的延时包络。然后再利用解码得到的索引值ACBGIDX、FCBGIDX和码本求出自适应码本增益gp(msub)和固定码本增益gc(msub),由FCBSIDX求出固定码本激励c(n),最后再通过合成滤波器合成语音信号[9]。
1/8速率解码包含线谱对(LSP)参数解码和帧能量矢量解码。1/8速率LSP参数解码过程与全速率和半速率过程类似,速率帧能量矢量解码中,如果判定某帧为差错帧,则帧能量矢量γq(msub)定义为:
如果为非差错帧,帧能量定义为:
继而通过合成滤波器合成PCM语音信号[10]。
1.3 后置滤波
后置滤波模块主要用于抑制量化噪声,提高合成语音质量,其实现流程如图2所示。
图2 自适应后置滤波框图
斜补偿滤波器采用一阶FIR滤波器,其作用是对矢量量化过程中引入的频谱倾斜进行修正;长时后置滤波器为信号频谱的精细结构进行加强,从而减少由基音延时的变化造成的基音轮廓的不连续性,使输出语音信号更加平滑;短时后置滤波器的作用是加强输出信号的共振峰结构,增益归一化是对解码过程中输出语音损失的增益进行补偿,使滤波前后的语音能量相同,从而提高合成语音质量[11]。
综上所述,各个模块实现功能定义明确,结合EVRC解码协议中的具体流程即可完成程序代码,图3所示为解码过程程序设计流程图。
图3 解码过程软件设计流程图
解码过程中输入信号为经过EVRC算法编码的语音数据包,而输出信号为PCM语音数据,其格式为8 kHz采样,16 bit量化。由于程序为C代码实现,为了便于移植,采用动态链接库方式对解码函数进行封装,提供解码处理接口函数,通过在项目中导入接口函数来实现语音帧的解码处理。
2 语音业务还原系统设计与实现
在完成EVRC算法解码过程的基础上,结合移动通信系统业务可编程化的趋势,把传统的基于终端基带芯片实现语音数据解码处理的功能转移到服务器端,利用高性能计算机机强大的数据处理能力来对获取的语音数据进行解析,而语音数据的传输和获取仍然依靠传统的移动蜂窝网络[12]。
CDMA2000终端用户通过基站建立正常通话,基站能够获取终端参数信息,接收并转发语音数据,并把终端参数以及EVRC编码的语音数据流发送给控制台服务器端完成解码处理,从而获取PCM格式的合成语音数据。由于普通计算机的声卡不支持PCM格式文件,无法直接通过麦克风播放,而WAV波形语音文件作为最早的数字音频格式被广泛的应用,因此为了更加方便进行存储和播放,需对PCM数据转换为WAV文件[13-14]。逻辑功能架构如图4所示。
图4 逻辑功能架构图
整个设计在于控制台部分对数据的处理,主要包括4部分,即语音接收、语音解码、还原语音播放、语音数据格式转换存储。采用多线程处理模式,由控制台主线程、语音接收线程、语音解码线程、播放/存储线程构成。
控制台主线程进行语音数据传输,启动/终止语音数据接收;语音接收线程负责在服务器端接收EVRC语音数据,并把语音数据保存到数据缓冲区供解码线程调用;语音解码线程读取缓冲区的语音数据完成解码处理,实现合成语音数据到PCM数据格式的转换;播放/存储线程实现对输出语音数据的实时播放以及WAV格式编码存储[10,12]。具体功能处理流程如图5所示。
图5 设计流程图
基站以20 ms为间隔向控制台端口发送数据帧,控制台服务器端利用Socket套接字编程技术实现数据的接收,通过侦听对应的端口,有数据传输时开启音频接收线程,接收音频数据。另外,为了确保通信连接的状态,双方定时发送心跳包,一旦发现数据中断就终止数据的接收,并把状态信息反馈给用户[14]。
在服务器端通过建立的Socket连接读取音频数据,写入数据缓冲队列中,然后解码线程调用解码接口函数读取数据进行译码处理,并把译码输出的数据写入音频缓冲区,最后读取缓冲区的语音数据进行播放和存储,具体实现步骤如下:
1)建立Socket连接,接收语音数据流;
2)音频数据解码,从数据缓冲区读取语音数据帧,利用JNA技术移植经过动态链接库封装的解码接口函数进行语音数据的解码处理。
3)实时播放
创建SourceDataLine对象,由AudioFormat类封装其所需的音频格式,包括编码方式、数据采样率等。然后不断的把解码输出缓冲区中的数据写入SourceDataLine对象,实现对还原语音的实时播放。
4)WAV文件存储音频数据
把解码输出的音频数据写入字节输出流ByteArrayOutputStream对象,然后把该对象中的语音数据读入AudioInputStream类的对象;创建WAV语音格式文件,利用AudioSystem类中的write方法把数据输入流写入指定文件进行保存。
File file=new File(fileName);
AudioSystem.write(audiolnputStream,AudioFileFormat.Type.WAVE,file);
3 测试效果
在完成程序设计的基础上,对相应功能进行测试,通过基站获取语音数据流,实时上传给控制台服务器进行解码处理,完成语音的还原播放。图6分别为获取的一段原始语音和解码输出语音波形图,通过语音质量的对比可以得出解码输出的语音可以较自然的还原原始语音。
图6 原始语音与解码输出语音信号波形
4 结 论
文中在深入研究EVRC算法的基础上对解码过程进行C代码仿真实现,然后基于移动通信技术与计算机软件平台相融合的思想提出了基于计算机平台的语音解码方案,能够完成对终端用户语音数据的实时解码播放处理。通过多线程与多缓存模式的使用,有效的保证了语音数据处理的连续性和实时性,提高了解码效率,减小了处理时延,测试结果表明该设计能够实现对终端用户语音数据的解码处理以及播放存储,达到了预期的效果。
[1]王炳锡,王洪.变速率语音编码[M].西安:西安电子科技大学出版社,2004.
[2]王炳锡.语音编码[M].西安:西安电子科技大学出版社,2002.
[3]丁琦,王炳锡.EVRC语音编解码算法的研究与实现[J].信息工程大学学报,2003,4(3):57-60.
[4]TIA/EIA/IS-127.Enhanced Variable Rate Codec,Speech Service Option 3 for Wideband Spread Spectrum Digital System[S].
[5]TIA/EIA/IS-718.Minimum Performance Specification for The Enhanced Variable Rate Codec,Speech Service Option 3 for Wideband Spread Spectrum Digital System[S].
[6]杨晓东,郑树强.语音编码在IP调度系统中的应用研究[J].计算机与网络,2014(6):61-63.
[7]李爽.增强型可变速率编码器的设计与实现[J].微计算机信息,2007,23(27):177-179.
[8]彭勇群,苏娟,杨熙.EVRC速率判决算法及DSP实现[J].电声技术,2007,31(2):57-59.
[9]李彦,卢虎.基于DSP的EVRC声码器实现与软件优化技术[J].空军工程大学学报:自然科学版,2004,5(5):57-60.
[10]韩红帮,肖红,李海雁.基于IMBE语音编译码算法在PC机上的实时实现[J].电子设计工程,2015,23(7):186-188.
[11]李国汉,竺小松,刘越.ACELP算法在PC上实时播放的实现[J].声学技术,2010,29(1):60-62.
[12]郑珺,潘雪增.基于Android智能移动终端的远程音频采集系统的实现[J].中国有线电视,2012(5): 621-625.
[13]韩红帮.基于ACELP语音编译码算法的软件实现及应用[J].电子设计工程,2014,22(1):187-189.
[14]高健.基于机顶盒VoIP语音解码模块的设计与验证[J].电子测试,2012(1):70-74.
The design and implement of voice service restoration based on algorithms of EVRC decode
WANG Xiao-yu,GUO Shu-ming,JIA Xin
(National Digital Switching System Engineering&Technological R&D Center,Zhengzhou 450000,China)
This paper introduces the Enhanced Variable Rate Codec(EVRC),which is widely used in Code Division Multiple Access(CDMA)communication system,describes the principal concepts of speech decoding and implement of the floating point C-simulation,then,puts forward a design of voice service real-time restoration to perform voice data for EVRC encoding.In order to store voice data,it also set up buffer pool,thereby it can achieve real-time playback and storage.Finally,the performance testing and analysis results show the design can achieve real-time broadcast for synthesis speech.
EVRC;WAV;voice;service restoration
TN929-53
:A
:1674-6236(2017)03-0061-04
2016-05-04稿件编号:201605027
国家科技支撑计划课题支持(2014BAH30B01)
汪小雨(1990—),男,河南许昌人,硕士研究生。研究方向:无线接入网。