新闻中心

EEPW首页>消费电子>设计应用> 多制式语音编码及其DSP实现

多制式语音编码及其DSP实现

作者: 时间:2009-02-09 来源:网络 收藏
如图3所示,串行数据流在McBSP的DR管脚接收,DX管脚发送。数据收发由帧同步信号触发。帧同步由CPLD提供,位时钟由外部晶振提供。

本文引用地址://m.amcfsurvey.com/article/167071.htm

  串口与存储区之间的数据交换由CPU或DMA控制器完成。接收寄存器DRR满(发送寄存器DXR空)时,串口向DMA发出同步事件(REVT/XEVT)或向CPU发出中断请求(RINT/XINT),通知DMA或CPU数据传输已准备好。

  对PCM和G.729码流,串口(McBSP0/McBSP1)的数据读写为DMA方式。

  由于G.729采用分帧,一次编解码待处理的数据量较大。为了避免DMA读取数据过程中连续码流溢出,设计缓冲区为双倍大小。这2块缓冲区以乒乓方式工作,即DMA传递其中一块缓冲区数据时,另一块缓冲区接收来自串口或CPU的下一组数据。由于VC5409的DMA支持缓冲区全满或半满都产生中断的方式,所以只要将这2块缓冲区设计成连续的,就可以方便地乒乓工作,而不产生数据溢出。

  对ADPCM/CVSD码流,由于每次处理的码流长度较短(32bit),故在中断服务例程中由CPU直接读写串口(McBSP2),而不采取DMA方式。

3 软件系统

  (1)CVSD算法的修正

  CVSD是每样点1bit的方式,所以32kbps和16kbps的CVSD输出信号分别由32kHz和16kHz采样的PCM信号得到。而实际CVSD编码器的输入总是8kHz的采样信号,为了满足算法要求,对输入PCM码流进行插值滤波。

  根据插值定理,可以选择低通滤波器无失真地恢复原始信号。为了取得信号质量和运算量的折中,设计了5阶的椭圆型IIR滤波器。

  1:2插值 (16kbps)

  分子多项式系数:

  [1.02295e-01, 1.14533e-01, 2.41943e-01,

  2.41943e-01, 1.45325e-01, 1.02295e-01]

  分母多项式系数:

  [1.00000e+00, -1.26125e+00, 1.91846e+00, -1.21680e+00, 6.79321e+01, -1.54358e+01]

  1:4插值 (32kbps)

  分子多项式系数:

  [4.48200e+02, -6.9309e+02, 4.68041e+02,

  [4.68041e+02, -6.9309e+02, 4.48200e+02]

  分母多项式系数:

  [1.00000e+00, -3.56926e+00, 5.66631e+00, -4.83285e+00, 2.20789e+00, -4.2822e+01]

  另外,在对编解码后的信号进行频谱测试时,发现在3kHz处,信号的幅度超出要求3db左右。为此在编码端加入了谱调整的模块,使3kHz处频谱下降3db,作为补偿。

  (2) G.729算法的回声抵消模块

  G.729算法编码延时为15ms,回声现象比较明显,必须引入回声抵消算法加以抑制。

  自适应回声抵消器的一般算法中,所需运算量最大的是更新参数部分。阶数越大,运算量越大。考虑到的性能和算法的运算量要求,采用128阶的自适应滤波器进行回声抵消。

  回声抵消模块的输入是当前一帧输入信号与以前解码器输出的一段合成。回声抵消器利用解码器输出的合成信号对一帧输入信号进行回声抵消,然后将抵消掉回声的一帧输入语音信号提供给编码器作为输入信号。

  (3)存储区的优化[4]

  ①由于使用DP寻址,变量名仅指示偏移量;而4路信号分时处理,各路所用变量与程序代码相同,所以可以使用不同页上的同名变量,在不混淆各路信号数据存储区的前提下,简化程序存储区大小。

  对于ADPCM程序,的有状态变量各占25字,都使用的变量占14字。鉴于DP一页有128字,所以可以考虑前两路变量共用一页存储区;后两路编解码器变量共用一页存储区。这样,2路编解码器的存储量有25×2×2+14=114字128字,可以存储在同一页上。

  为了区分同一页上的2路变量以及同一路的编解码器变量,它们的名称应有不同。因此,编解码的程序模块各需要2个版本,即总的程序存储量=单路程序量×2。

  ②对CVSD和ADPCM算法,由于输入输出信号不分帧(逐样点处理),而码流格式又取得了一致,所以可以共享输入输出存储单元。

  (4)代码的优化[3]

  TMS320C54xx提供了强大的硬件结构和指令体系以支持基本的数据处理操作。对汇编语言,充分挖掘指令集的潜力,能大幅度降低程序的复杂度,提高运行速度。如:使用乘累加指令MAC、MAS等,在一个时钟周期内1次乘法和1次加(减)法;使用DELAY指令,在一个周期内变量更新,简化了滤波器的实现;使用循环寻址,对FIR和IIR滤波器只要在主程序中设置一次基地址,降低了开销;使用RPT+MVDD指令,进行块搬移,减少频繁内存读写的开销;使用双字运算指令DADD、DADSUB等指令对32位的变量进行操作;使用EXP+NORM指令快速计算定点数的指数和尾数;使用RPT+DSUBT指令高效实现定点数除法;使用RPT+FIRS指令高效实现FIR滤波计算。

4 实现结果

  各算法的复杂度和存储量如表4所示,实现所用资源。

  因此,一片VC5409上的硬件资源可以满足算法要求。实际系统的各算法性能也通过了相关的标准测试。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭