基于TMS320C642的语音解码实现

2014-08-14 05:16张芹江新道
电脑知识与技术 2014年19期
关键词:码本发送数据解码

张芹 江新道

摘要:该文根据G.729编解码理论和具体解码流程,结合TI公司DSP产品TMS320C6000系列的TMS320DM642、CCS6000集成开发环境以及G.729的硬件实现平台,提出了DSP传送数据给ARM的算法,以及实现G.729解码算法的主要程序,在最后给出了G.729解码的结果。实验表明:该方案能够成功地实现语音解码。该方法具有低延迟、低速率、高语音质量的优点。

关键词:语音解码;G.729标准;数字信号处理器

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2014)19-4558-04

The Realization for Speech Decoder Based on TMS320DM642

ZHANG Qin, JIANG Xin-dao

(Anhui Vocational College of Electronic and Information Technology,Bengbu 233060,China)

Abstract: Based on the basic theory of the speech coding(LP,VQ,CELP)and the A-B-S technique, combining the TMS320DM642 and the CCS6000, this paper propose the algorithm of the data delivered from DSP to ARM, And the main program of the G.729 decoder, finally, the result of the G.729 decoder has been given. Experiments show that this scheme can successfully implement speech decoding。This method has the advantages of low latency, low rate and high speech quality.

Key words:speech decoding;G.729; DSP

语音通信作为人们传递信息、交流思想的最直接有效的方式,在现代各类综合业务数字中显得尤其重要。由于语音信号数据量大,有限的频率资源变得越来越宝贵,所以总是力求在有限的信道内进行更多的信息传输。从而对语音编解码技术提出更高要求。相应的,语音编解码技术也成为国际标准化工作中最为活跃的研究领域,G.729应运而生。

1 G.729编解码原理

G.729采用的是共轭结构代数码激励线性预测法,简称CS-ACELP[1]。

G.729对输入的语音模拟信号以每秒8千次的频率采样,再以16比特进行线性PCM 量化,每80个样点为一个语音帧,对语音信号分析并提取各种参数,并编码发送。参数编码的比特分配如表1所示[2]。

表1 8kbps CS-ACELP算法比特分配(每10ms帧)

G.729的编码流程图如图1所示。其中虚线部分表明每子帧(5ms)作一次计算,实线则说明每帧(10ms)计算一次[4]。

相应地,解码时,从比特流中提取参数编码,从而获取各个参数。方法:通过自适应码矢序号从自适应码本中获取自适应码矢;通过固定码矢序号从固定码本中获取固定码矢。所有的码矢再乘以相应的增益,然后按点相加组成激励序列。用线性预测滤波器系数构成合成滤波器。用自适应码本方法实现长时域基音合成滤波,把每一子帧的激励信号通过LP合成滤波器后计算出合成语音,再用后置滤波器进一步增强音质。

解码端应当接收到的发送参数及发送顺序,表中所列参数顺序即为发送顺序。

表2 发送参数及其顺序

图2 CS-ACELP(G.729)解码端流程图[2]

2 G.729解码实现

2.1 TMS320DM642 DSP简介

TMS320DM642 DSP 是属于TMS320C6000 系列DSP 的高性能定点DSP,在TI的C64xDSP内核基础上进一步集成了完备的视频和音频输入输出接口、以太网接口、PCI-66总线等片上外设,是一款非常适合多种数字媒体应用的DSP[5]。

2.2 CCS6000集成开发环境

Code Composer Studio(CCS)是Tl公司提供的DSP系统集成开发环境,它将工程管理、代码编辑和系统调试等功能集成到一个统一的系统中。在CCS6000环境下,我们能够进行软件编辑、语言编译、系统调试、源代码性能测试及工程项目管理等所有工作[6]。

2.3 解码器的初始化

除了下表中的四个变量以外,其它所有解码器的变量应该初始化为0(编码器变量初始值相同)。

表3 解码器变量初始化值表

2.4 ARM与DSP接口

本文所用的系统开发平台结构主要由DSP、ARM以及FPGA组成,该文的主要工作是在TMS320DM642 DSP上实现G.729解码算法,解码后的数据需要传送给ARM做后续处理。DSP与ARM的接口示意图如图3所示。

图3 DSP与ARM接口示意图

ARM和DSP之间是通过主机高速并行接口(HPI)实现数据通信的,通过两端协商,约定以某些标志位来协调通信并实现数据传输。在本文所用实验平台上设置了arm_flag[0], arm_flag[1], arm_flag[2], arm_flag[3]标志信号,其初始值为0。

DSP为发送数据端,ARM为接收数据端,约定如下:

1)arm_flag[0]=1表示DSP准备好后,ARM可以接收。

2) arm_flag[2]!=2表示ARM端准备好后,数据传输开始。

3) arm_flag[2]=2 表示数据已传输完。

DSP向ARM发送数据的具体算法流程如图4所示。首先用一个循环查询判断arm_flag[0]是否为1,如果为1则表示DSP已准备就绪,可以发送数据,程序继续判断ARM端是否已经准备好;如果arm_flag[0]不为1,则代表DSP还没准备好发送数据,程序继续判断arm_flag[0]是否为1。在arm_flag[0]=1的情况下,接着判断arm_flag[2]是否为2,如果不为2,则代表数据没有传输完,发送数据正式开始,用一个while循环,只要arm_flag[2]不为2就一直传输数据;如果为2,则代表本次数据传输完了,并设置arm_flag[2]为初始值0,开始下一帧数据的传输判断。

图4 DSP给ARM传送数据算法流程

2.5 解码程序说明

G.729解码程序主要包括以下部分:

·decoder.c 里面包含main()函数。

·bits.c 里面包含收到编码参数的处理函数和解码后发送数据的函数。

·basic_op.h 定义了一些基本算术函数,解码算法里的计算过程调用了这些算术函数。

·basic_op.c 基本算术函数的函数体。

·de_acelp.c 用于固定码本序号的解码。

·dec_gain.c 用于自适应码本和固定码本增益的解码。

·dec_lag3.c 用于自适应码本序号的解码。

·lsp_dec.c 用于LSP序号的解码。

·dec_ld8k.c 用于重构激励信号和语音信号。

decoder.c里面的main函数调用解码程序用到的各个算法函数,这些算法函数主要集中在de_acelp.c、dec_gain.c、dec_lag3.c、lsp_dec.c、dec_ld8k.c里面,这些算法函数又是调用basic_op.c里面定义的基本算术函数。

2.6 解码结果

设输入信号数组为serial[SERIAL_SIZE],这里我们自己造一个输入信号数组,设它为for(i=0;i

解码结果输出如图5所示。

图5 输出结果图

需要指出的是,这里解码器为了将输出变为比特流以便更好的发送数据,进行了1bit→short int(即2字节,16bit)转换操作。

同时,因为编码器中的比特分配并不是均匀的,例如某一个参数需要用5bit来表示,但是它并不是在内存中用5bit表示,而是用了一个short int 型数据来表示的,所以解码的输入输出结果的数组值个数与G.729理论上的16:1压缩比有出入。

3 结论

本文从解码的角度介绍了G.729编码理论,给出了解码的流程图,并利用DSP产品TMS320DM642、CCS 6000以及实际系统开发平台,提出了DSP与ARM接口的设计方法,成功地实现了语音信号的解码工作。该方法具有低延迟、低速率、高语音质量的优点。

下一步工作可以做:1) 结合TMS320DM642 DSP 指令的特点对代码进行优化;2) 对G.729 C程序中某些小算法和数据存取方式进行优化。

参考文献:

[1] 张玉业,邓勇全,李玲远.语音编解码算法G.729的软件实现[J].通信技术, 2003(2).

[2] ITU-T , Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (CS-ACELP), International Telecommunication Union,1996

[3] ITU-T , Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (CS-ACELP)Annex G, International Telecommunication Union,2007

[4] 王炳锡, 语音编码[M].西安:电子科技大学出版社,2002.

[5] 吴海涛,G.729语音编解码算法研究及DSP实现[D].哈尔滨:哈尔滨理工大学,2005.

[6] 李方慧,王飞,何佩琨,TMS320C6000系列DSP原理与应用[M].2版.北京:电子工业出版社,2003.

2.4 ARM与DSP接口

本文所用的系统开发平台结构主要由DSP、ARM以及FPGA组成,该文的主要工作是在TMS320DM642 DSP上实现G.729解码算法,解码后的数据需要传送给ARM做后续处理。DSP与ARM的接口示意图如图3所示。

图3 DSP与ARM接口示意图

ARM和DSP之间是通过主机高速并行接口(HPI)实现数据通信的,通过两端协商,约定以某些标志位来协调通信并实现数据传输。在本文所用实验平台上设置了arm_flag[0], arm_flag[1], arm_flag[2], arm_flag[3]标志信号,其初始值为0。

DSP为发送数据端,ARM为接收数据端,约定如下:

1)arm_flag[0]=1表示DSP准备好后,ARM可以接收。

2) arm_flag[2]!=2表示ARM端准备好后,数据传输开始。

3) arm_flag[2]=2 表示数据已传输完。

DSP向ARM发送数据的具体算法流程如图4所示。首先用一个循环查询判断arm_flag[0]是否为1,如果为1则表示DSP已准备就绪,可以发送数据,程序继续判断ARM端是否已经准备好;如果arm_flag[0]不为1,则代表DSP还没准备好发送数据,程序继续判断arm_flag[0]是否为1。在arm_flag[0]=1的情况下,接着判断arm_flag[2]是否为2,如果不为2,则代表数据没有传输完,发送数据正式开始,用一个while循环,只要arm_flag[2]不为2就一直传输数据;如果为2,则代表本次数据传输完了,并设置arm_flag[2]为初始值0,开始下一帧数据的传输判断。

图4 DSP给ARM传送数据算法流程

2.5 解码程序说明

G.729解码程序主要包括以下部分:

·decoder.c 里面包含main()函数。

·bits.c 里面包含收到编码参数的处理函数和解码后发送数据的函数。

·basic_op.h 定义了一些基本算术函数,解码算法里的计算过程调用了这些算术函数。

·basic_op.c 基本算术函数的函数体。

·de_acelp.c 用于固定码本序号的解码。

·dec_gain.c 用于自适应码本和固定码本增益的解码。

·dec_lag3.c 用于自适应码本序号的解码。

·lsp_dec.c 用于LSP序号的解码。

·dec_ld8k.c 用于重构激励信号和语音信号。

decoder.c里面的main函数调用解码程序用到的各个算法函数,这些算法函数主要集中在de_acelp.c、dec_gain.c、dec_lag3.c、lsp_dec.c、dec_ld8k.c里面,这些算法函数又是调用basic_op.c里面定义的基本算术函数。

2.6 解码结果

设输入信号数组为serial[SERIAL_SIZE],这里我们自己造一个输入信号数组,设它为for(i=0;i

解码结果输出如图5所示。

图5 输出结果图

需要指出的是,这里解码器为了将输出变为比特流以便更好的发送数据,进行了1bit→short int(即2字节,16bit)转换操作。

同时,因为编码器中的比特分配并不是均匀的,例如某一个参数需要用5bit来表示,但是它并不是在内存中用5bit表示,而是用了一个short int 型数据来表示的,所以解码的输入输出结果的数组值个数与G.729理论上的16:1压缩比有出入。

3 结论

本文从解码的角度介绍了G.729编码理论,给出了解码的流程图,并利用DSP产品TMS320DM642、CCS 6000以及实际系统开发平台,提出了DSP与ARM接口的设计方法,成功地实现了语音信号的解码工作。该方法具有低延迟、低速率、高语音质量的优点。

下一步工作可以做:1) 结合TMS320DM642 DSP 指令的特点对代码进行优化;2) 对G.729 C程序中某些小算法和数据存取方式进行优化。

参考文献:

[1] 张玉业,邓勇全,李玲远.语音编解码算法G.729的软件实现[J].通信技术, 2003(2).

[2] ITU-T , Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (CS-ACELP), International Telecommunication Union,1996

[3] ITU-T , Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (CS-ACELP)Annex G, International Telecommunication Union,2007

[4] 王炳锡, 语音编码[M].西安:电子科技大学出版社,2002.

[5] 吴海涛,G.729语音编解码算法研究及DSP实现[D].哈尔滨:哈尔滨理工大学,2005.

[6] 李方慧,王飞,何佩琨,TMS320C6000系列DSP原理与应用[M].2版.北京:电子工业出版社,2003.

2.4 ARM与DSP接口

本文所用的系统开发平台结构主要由DSP、ARM以及FPGA组成,该文的主要工作是在TMS320DM642 DSP上实现G.729解码算法,解码后的数据需要传送给ARM做后续处理。DSP与ARM的接口示意图如图3所示。

图3 DSP与ARM接口示意图

ARM和DSP之间是通过主机高速并行接口(HPI)实现数据通信的,通过两端协商,约定以某些标志位来协调通信并实现数据传输。在本文所用实验平台上设置了arm_flag[0], arm_flag[1], arm_flag[2], arm_flag[3]标志信号,其初始值为0。

DSP为发送数据端,ARM为接收数据端,约定如下:

1)arm_flag[0]=1表示DSP准备好后,ARM可以接收。

2) arm_flag[2]!=2表示ARM端准备好后,数据传输开始。

3) arm_flag[2]=2 表示数据已传输完。

DSP向ARM发送数据的具体算法流程如图4所示。首先用一个循环查询判断arm_flag[0]是否为1,如果为1则表示DSP已准备就绪,可以发送数据,程序继续判断ARM端是否已经准备好;如果arm_flag[0]不为1,则代表DSP还没准备好发送数据,程序继续判断arm_flag[0]是否为1。在arm_flag[0]=1的情况下,接着判断arm_flag[2]是否为2,如果不为2,则代表数据没有传输完,发送数据正式开始,用一个while循环,只要arm_flag[2]不为2就一直传输数据;如果为2,则代表本次数据传输完了,并设置arm_flag[2]为初始值0,开始下一帧数据的传输判断。

图4 DSP给ARM传送数据算法流程

2.5 解码程序说明

G.729解码程序主要包括以下部分:

·decoder.c 里面包含main()函数。

·bits.c 里面包含收到编码参数的处理函数和解码后发送数据的函数。

·basic_op.h 定义了一些基本算术函数,解码算法里的计算过程调用了这些算术函数。

·basic_op.c 基本算术函数的函数体。

·de_acelp.c 用于固定码本序号的解码。

·dec_gain.c 用于自适应码本和固定码本增益的解码。

·dec_lag3.c 用于自适应码本序号的解码。

·lsp_dec.c 用于LSP序号的解码。

·dec_ld8k.c 用于重构激励信号和语音信号。

decoder.c里面的main函数调用解码程序用到的各个算法函数,这些算法函数主要集中在de_acelp.c、dec_gain.c、dec_lag3.c、lsp_dec.c、dec_ld8k.c里面,这些算法函数又是调用basic_op.c里面定义的基本算术函数。

2.6 解码结果

设输入信号数组为serial[SERIAL_SIZE],这里我们自己造一个输入信号数组,设它为for(i=0;i

解码结果输出如图5所示。

图5 输出结果图

需要指出的是,这里解码器为了将输出变为比特流以便更好的发送数据,进行了1bit→short int(即2字节,16bit)转换操作。

同时,因为编码器中的比特分配并不是均匀的,例如某一个参数需要用5bit来表示,但是它并不是在内存中用5bit表示,而是用了一个short int 型数据来表示的,所以解码的输入输出结果的数组值个数与G.729理论上的16:1压缩比有出入。

3 结论

本文从解码的角度介绍了G.729编码理论,给出了解码的流程图,并利用DSP产品TMS320DM642、CCS 6000以及实际系统开发平台,提出了DSP与ARM接口的设计方法,成功地实现了语音信号的解码工作。该方法具有低延迟、低速率、高语音质量的优点。

下一步工作可以做:1) 结合TMS320DM642 DSP 指令的特点对代码进行优化;2) 对G.729 C程序中某些小算法和数据存取方式进行优化。

参考文献:

[1] 张玉业,邓勇全,李玲远.语音编解码算法G.729的软件实现[J].通信技术, 2003(2).

[2] ITU-T , Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (CS-ACELP), International Telecommunication Union,1996

[3] ITU-T , Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (CS-ACELP)Annex G, International Telecommunication Union,2007

[4] 王炳锡, 语音编码[M].西安:电子科技大学出版社,2002.

[5] 吴海涛,G.729语音编解码算法研究及DSP实现[D].哈尔滨:哈尔滨理工大学,2005.

[6] 李方慧,王飞,何佩琨,TMS320C6000系列DSP原理与应用[M].2版.北京:电子工业出版社,2003.

猜你喜欢
码本发送数据解码
移动自组网中MAC层协议研究
Galois 环上渐近最优码本的构造
免调度NOMA系统中扩频码优化设计
《解码万吨站》
基于有限域上仿射空间构造新码本
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*