用SPCE061A设计的嵌入式语音通信平台

[09-12 16:30:16]   来源:http://www.88dzw.com  单片机学习   阅读:8774

文章摘要: ADPCM的具体数学推导可见参考文献[2]和[3]。 3 嵌入式语音通信平台的实现3.1 语音编解码实现策略 这里的编解码都在嵌入式系统上实现。为了提高语音编码的速度,所有的编解码运算全部用汇编语言实现:伹由对ADPCM的原理介绍可知,在编码过程中,计算量化间隔涉及到小数乘法。这在定点微处理器中实现起来是比较复杂的:需要判断差值的大小,再进行相应的小数变整数、乘除、整数变小数等一系列变换才能得到当前量化间隔的值,算法复杂度比较高。针对这一情况,本文采用二级检索的方法求量化间隔。具体算法如下: ①根据Jayant算法建立量化间隔表StepSizeTable[45]和量化间隔索

用SPCE061A设计的嵌入式语音通信平台,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
    ADPCM的具体数学推导可见参考文献[2]和[3]。


3 嵌入式语音通信平台的实现
3.1 语音编解码实现策略

    这里的编解码都在嵌入式系统上实现。为了提高语音编码的速度,所有的编解码运算全部用汇编语言实现:伹由对ADPCM的原理介绍可知,在编码过程中,计算量化间隔涉及到小数乘法。这在定点微处理器中实现起来是比较复杂的:需要判断差值的大小,再进行相应的小数变整数、乘除、整数变小数等一系列变换才能得到当前量化间隔的值,算法复杂度比较高。针对这一情况,本文采用二级检索的方法求量化间隔。具体算法如下:
    ①根据Jayant算法建立量化间隔表StepSizeTable[45]和量化间隔索引变化表IndexVariaty[8];
    ②设索引初值Index=0;
    ③利用当前差值的量化绝对值Differ,查IndexVaria-tyTable[],得到索引的当前变化量IndexVariaty;
    ④用Index+lndexVanaty更新Index;
    ⑤再利用Index,查StepSizeTable[],最终得到当前的量化间隔。
    之后的编码求量化间隔就是③、④、⑤的循环。采用二级检索方法的好处在于,在建立StepSizeTable表时就可以把乘法运算、小数变整数等步骤预处理了,从而降低了编解码过程的算法复杂度,减少了终端的处理延迟。
3.2 实时通信的系统策略
    为了保证在发送端采样和发送、接收端播放和接收的实时配合,本文利用凌阳丰富的时钟中断,采用了前后台思想。前台由计数器TlmerA中断和异步通信UART中断程序组成.TimerA定时为每l25μs中断一次驱动A/D或D/A进行音频的采样、播放,而UART中断则处理通信的发送和接收工作。由于传输波特率远高于采样率,因此采样的紧迫性要高于传输的紧迫性,这样就要设置TimerA中断优先级远高于UART,以保证在发送端的采样、接收端的播放不被打断。后台则主要是编解码程序的执行、键盘控制命令的响应处理。在语音编解码算法时间复杂度足够低的情况下,如已经实现的ADPCM、CVSD(连续可变斜率增量调制)以及凌阳集成的软模块SACM_DVR(子带编码)等.这种系统可以得到很好的语音交互效果。
3.3 实时缓存实现策略
    基于实时通信思想,在接收端要做到一边接收一边播音就需要依赖于实时处理机制和缓存策略。
    在缓存方面,单片机SPCE061A中SRAM仅有2KB,这对于有线连接115kb/s波特率和播放数据率32Kb/s之间的差距而言是远远不够的。因此,采用乒乓制双体缓存策略,即将缓存分为两个区,每个区大小刚好为1帧数据量大小(114字节),通过两个区的交替,很好地解決了数据率的匹配问题。首先设置一个应答信号,服务器以此为发送数据信号,且1次只发送l帧。在PC机端的串口事件响应代码为:
    UINT stdcall Tlaread OnCommMscornml(PVOID pvParam){
    if(m etrlComm,GetCommEvent()==2){ //事件值为2,表示接收缓冲区内有字符
    iffiRunState=State_Receive) //若为接收态,就接收数据
    else if(iRuIiState==State_Send) //偌为发送态就表明收到应答信号
    if(HaveSendedDataLen〈DataReadedLen)//缓冲区至少还有1帧数据
    SendOnePage(); //发送1帧数据
    }
  }

    在嵌入式终端的具体实现如图3所示。

    这样仅开了288字节的缓冲区,就很好地解决了高速和低速的匹配问题。


结语

    本文构建的平台不仅可以应用在ADPCM算法的语音通信中,基于凌阳微处理器的处理能力,还有较好的可扩展性。如增量编码、子带编码、参数编码等都可以进一步移植,无论在应用还是在研究中都具有较好的借鉴价值。在应用中,可以基于这种思想建立一个具有集中控制、处理能力的星型语音通信网络;而在研究中,可以在此平台上对多种语音处理算法进行直观分析(波形、听觉)或频谱分析。在嵌入式终端所做的低复杂度算法(如各类波形编码)可以将码流或语音流传送到PC机,通过平台提供的分析工具分析波形和频谱变化,以对比各种算法对语音原始信号造成的损失程度;而在PC机上所做的高复杂度算法(如参数编码),也可以将处理后的语音信号传送到嵌入式系统,听到算法的效果。文中设计为进一步对语音数字信号处理的研究和开发工作奠定了基础。


上一页  [1] [2] 


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习

《用SPCE061A设计的嵌入式语音通信平台》相关文章

分类导航
最新更新
热门排行