DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1701|回复: 1
打印 上一主题 下一主题

[待整理] 用SPCE061A设计的嵌入式语音通信平台

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-5 10:46:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用SPCE061A设计的嵌入式语音通信平台

引言
    随着数字信号处理技术的发展,语音交互的嵌入式和网络化发展已日趋成熟。但由于嵌入式系统具有存储空间小、显示能力不足的特点,要进行广泛而深入的嵌入式语音压缩、语音通信方面的研究和分析,有一个与PC机相连的台理而完善的语音通信平台。本文基于台湾凌阳公司的SPCE061A型号微控制器和ADPCM(自适应差分脉冲编码调制)的原理,阐述实现嵌入式语音通信平台的方法,并提出有针对性的设计策略。


1平台构架
    图1为平台功能模块,本文实现的语音网络为星型网络拓扑结构,PC机服务器与多个语音终端通过MAX232串口相连,承担着通信中介和实验数据分析的任务。


    在终端功能模块中,中心控制和处理选用凌阳公司的SPCE061A。它的CPU内核是凌阳最新推出的μ′SP 16位微处理器芯片,因而具有多功能微控制器和高速率微处理器的双重特色。在音频处理方面,它具有单通道声音模/数转换器,并内置有具备自动增益控制(AGC)的麦克风放大器,从而简化了语音处理系统的硬件组成。器件详细资料见参考文献。音频输入输出模块包括话筒输入和耳机输出两个部分。话筒输入到A/D采样口之间月LM324N运算放大器构建一个两级防混叠低通滤波器。在D/A口到耳机输出之间使用SPY0030功率放大器,可提供最大500mW的输出功率。电源管理模块采用了SPY0029,可以提供3.14V的低功耗电压标准。RS232通信接口主要负责与PC机的通信。这里采用MAX232芯片,可同时提供两个通道的RS2.32通信连接。
    在PC机上软件的功能模块图中,全部模块由Visual C++实现,具有友好的人机交互界面。其中通信模块实现所有的通信任务,语音算法模块集成有各类语音压缩、数字滤波、静音检测以及短时分析等算法;分析模块可以提供图形界面,显示语音的波形图和频谱特征;语音算法模块和分析模块仅为研究数字语音算法提供方便。


2 ADPCM编解码原理
    ADPCM是语音压缩编码中复杂度较低的一种方法。它利用语音信号的非平稳特点,使用自适应预测和自适应量化,能在32kb/s数码率上达到64kb/s数码率的语音质量(MOS分为4.1),从而符合进入公用网的要求。由于ADPCM具有这样的优越性能,目前它在电信长途传输系统中和各类音频传输或处理系统中已得到了广泛的应ADPCM编码原理如图2所示。


    ADPCM的核心思想是:①利用自适应的思想改变量化阶的大小,即使用小的量化阶(step-size)去编码小的差值,使用大的量化阶去编码大的差值;②使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。
    这里采用了后向自适应量化和预测。其主要原理是,根据前一时刻量化器的输出数字码来确定量化器的量化间隔,并根据前一时刻的逆量化值来确定这一时刻预测器的输出。
    量化算法符合Jayant算法,即△(k+1)=△(k)M(|I(k)|)其中,△(k+1)和△(k)分别为这一时刻和前一时刻的量化间隔,I(k)为前一时刻输出的码字,而M指以码字为自变量的关系函数,取值如下:
    |I(k)|值为1,2,3,4,5,6,7,8;
    M(|I(k)|)值为0.9,0.9,0.9,0.9,1.2,1.6,2.0,2,4。
    预测算法采用参数修正算法, 即Pred(k+1)=Pred(k)+D(k)+α△(k)其中,△(k)为前一时刻量化间隔,Pred(k)和Pred(k+1)分别为前一时刻和这一时刻的预测值,D(k)为前一时刻的差值,α是修正参数。
    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机上所做的高复杂度算法(如参数编码),也可以将处理后的语音信号传送到嵌入式系统,听到算法的效果。文中设计为进一步对语音数字信号处理的研究和开发工作奠定了基础。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-23 12:30 , 耗时 0.086587 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表