多制式语音编码及其DSP实现
信号,因此定义字长为8位;McBSP1收发G.729的码流。G.729分帧编码,帧长10ms,每帧80bit。为了数据能够方便、有效地收,定义串口的字长为16bit,这样,每5个帧同步收全一个G.729帧,共16×5×4(路)=80×4bit。
为了取得数据格式的一致性,方便串口收发码流,对ADPCM和CVSD定义了相同的码流格式,并由McBSP2收发。如图2所示。
32kbpsADPCM每样点用4bit编码,规定其码流为每样点的码字重复2次,即占8bit。4路信号其32bit;16kbps和32kbps的CVSD是每样点2bit和4bit编码,故规定其码流为每比特编码码字分别重复4次和2次,即均占8bit。4路信号也是32bit。
(4)数据流的传输(串口与存储区)
VC5409提供了6个DMA通道,用户可以设置每个DMA通道的源地址、目的地址、一次传输的数据量、同步事件和中断方式等。
表3是本项目中各DMA通道的配置情况。
表3DMA配置
通道比特流源地址目的地址缓冲区(字)中断方式(缓冲区)DMA2G.729a(收)DRR11DM4×5×2全满/半满DMA3G.729a(发)DMDXR114×5×2全满/半满DMA4PCM(收)*1DRR10DM4×1全满*2DRR10DM4×80×2全满/半满DMA5PCM(发)*1DMDXR104×1全满*2DMDXR104×80×2全满/半满
DM:数据存储区
*1:对ADPCM/CVBSD编码
*2:对G.729a编码
(5)数据传输的控制
如图3所示,串行数据流在McBSP的DR管脚接收,DX管脚发送。数据收发由帧同步信号触发。帧同步由CPLD提供,位时钟由外部晶振提供。
串口与存储区之间的数据交换由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数据流的收发和传输
3软件系统
(1)CVSD算法的修正
CVSD是每样点1bit的编码方式,所以32kbps和16kbps的CVSD输出信号分别由32kHz和16kHz采样的PCU信号编码得到。而实际CVSD编码器的输入总是8kHz的采样信号,为了满足算法要求。对输入PCM码流进行插值滤 《多制式语音编码及其DSP实现(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/174716.html
为了取得数据格式的一致性,方便串口收发码流,对ADPCM和CVSD定义了相同的码流格式,并由McBSP2收发。如图2所示。
32kbpsADPCM每样点用4bit编码,规定其码流为每样点的码字重复2次,即占8bit。4路信号其32bit;16kbps和32kbps的CVSD是每样点2bit和4bit编码,故规定其码流为每比特编码码字分别重复4次和2次,即均占8bit。4路信号也是32bit。
(4)数据流的传输(串口与存储区)
VC5409提供了6个DMA通道,用户可以设置每个DMA通道的源地址、目的地址、一次传输的数据量、同步事件和中断方式等。
表3是本项目中各DMA通道的配置情况。
表3DMA配置
通道比特流源地址目的地址缓冲区(字)中断方式(缓冲区)DMA2G.729a(收)DRR11DM4×5×2全满/半满DMA3G.729a(发)DMDXR114×5×2全满/半满DMA4PCM(收)*1DRR10DM4×1全满*2DRR10DM4×80×2全满/半满DMA5PCM(发)*1DMDXR104×1全满*2DMDXR104×80×2全满/半满
DM:数据存储区
*1:对ADPCM/CVBSD编码
*2:对G.729a编码
(5)数据传输的控制
如图3所示,串行数据流在McBSP的DR管脚接收,DX管脚发送。数据收发由帧同步信号触发。帧同步由CPLD提供,位时钟由外部晶振提供。
串口与存储区之间的数据交换由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数据流的收发和传输
3软件系统
(1)CVSD算法的修正
CVSD是每样点1bit的编码方式,所以32kbps和16kbps的CVSD输出信号分别由32kHz和16kHz采样的PCU信号编码得到。而实际CVSD编码器的输入总是8kHz的采样信号,为了满足算法要求。对输入PCM码流进行插值滤 《多制式语音编码及其DSP实现(第3页)》