您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

基于TMS320VC5416的自适应变速率声码器

时间:2007-1-20栏目:电子通信论文

器的核心部分是一片TMS320VC5416DSP芯片,负责编解码和控制工作。另外,还有一片TI公司生产的TLC320AIC10芯片,负责语音的数模/模数(AD/DA)转换;一片FPGA,负责数字逻辑转换;一片2Mbit容量的8位FLASH存储器29LV020,负责存储所有程序和数据并在上电时加载到DSP的片内RAM上。声码器还有一个软件狗对系统工作状态进行实时监控,并在需要时对整个声码器进行复位。图2是声码器的原理框图。
  
  当MODEM需要声码器进行编码时,它通过PTT信号通知声码器,并同时向声码器发送模拟语音信号。声码器利用其中的AD/DA芯片将其采样量化为PCM数字信号送给DSP,DSP则根据MODEM提供的时钟信号CLK的频率选择不同速率的编码算法对输入PCM信号进行编码,然后把码流通过TXD送回给MODEM,并同时通过RTS信号通知MODEM码流有效,MODEM就可以将码流进行调制并发送。接收时,也是由MODEM解调出码流后按照CLK的频率通过RXD发给声码器,并同时通过CD信号通知声码器码流有效,声码器则对接收的码流进行解码,并利用AD/DA将解码后的PCM语音转换为模拟语音信号送回MODEM。据此就可以设计出声码器的工作流程,如图3所示。
  
  其中的帧同步捕捉指的是对接收到的码流的分帧工作,因为SELP是基于帧结构的编解码算法,所以在解码之前需要先利用帧同步算法捕捉到每帧的起始位置。这里采用的是基于计数器的帧同步捕捉算法。
  
  另外,由于声码器的码流收发都是按照CLK频率连续进行的,而基于帧结构的SELP编解码器对码流的输入输出却是每帧进行一次的,所以对于发送和接收码流都需要设置循环缓冲区并对每个缓冲区设置一读一写两个指针。这两个指针间的距离应大于一倍帧长。但由于声码器中给AD/DA提供采样时钟的晶振有一定误差,所以导致这两个指针移动速度不同。以输入码流缓冲区为例,其读指针应由SELP编码器控制,而编码器被调用的频率由本地晶振的频率决定,所以读指针的移动速度由本地晶振控制。写指针则是由码流输入部分控制,其移动速度实际上是由对方的解码速度决定的,也就是受对方声码器的晶振控制。所以在编码后和解码前都需要进行指针调整,也就是检查码流缓冲区的读写指针间距,并根据需要丢弃一帧或复制一帧。
  
  声码器设计和实现中的主要难点在于硬件接口的设计和FLASH上电加载部分,下面分别进行介绍。
  
  2硬件接口的设计
  
  TMS320VC5416片上有三个多通道缓冲串口(MCBSP),每个MCBSP都可以作为串口使用或被初始化成通用I/O口使用。其中,MCBSP0按照串口的工作方式与AD/DA相连,这部分比较简单,按照典型的连接方式即可实现。但是码流收发部分则不同,因为这部分只有一根同步时钟线CLK和输入输出两根数据线,所以很难直接利用MCBSP按串口方式实现收发。于是把MCBSP1初始化成通用I/O,将RXD与I/O口输入脚DR1相连,TXD与I/O口的输出脚DX1相连,将CLK与初始化为I/O口的输入脚FSR1相连。这样在程序中就可以很方便地随时读写这三根信号线,再将时钟中断的频率设为50kHz(远高于CLK可能出现的最高频率2.4kHz),就可以在时钟中断中实时监测CLK的变化。若发现CLK的上升沿则读取RXD的状态并存入码流接收缓冲区,若发现CLK的下降沿则从码流发送缓冲区取出1bit送至TXD

上一页  [1] [2] [3] [4] 下一页

下页更精彩:1 2 3 4 下一页