多制式语音编码及其DSP实现.docx
《多制式语音编码及其DSP实现.docx》由会员分享,可在线阅读,更多相关《多制式语音编码及其DSP实现.docx(9页珍藏版)》请在冰豆网上搜索。
多制式语音编码及其DSP实现
多制式语音编码及其DSP实现
摘要介绍了一种多制式语音编解码器,在单片3205409上完成4路语音的全双工通信,并实现729、、算法之间的编码转换,给出了算法的软硬件实现、算法的运算量及所占用的硬件资源。
关键词多制式语音编解码3205409729
在各种通信设备中,实时的语音压缩通常在上实现。
单一编码算法,由于码率和算法固定,系统的灵活性较差。
越来越多的通信服务要求能实现多种、多路编码算法,提供一定范围内的编码速率和编码算法的多种选择,例如软件无线电、电话、多媒体终端等。
729是制定的一种高质量的中速率语音编码标准,编码速率为8,目前已在许多通信系统中得到了应用。
1632的是一种抗信道误码非常好的语音编码算法,在军事通信、宇航通信中得到了广泛的应用。
32的是一种算法较简单的波形编码,具有良好的话音质量和抗噪性能,在卫星通信、数字话路倍增系统中得到了广泛应用。
综合了这三种算法的编码系统,在8~32码率具有较高的灵活性。
由于语音压缩的运算量、存储量和精度要求都不太高,在考虑价格因素的基础上,定点足以胜任语音编解码的要求。
本文采用了公司的3205409定点实现了上述三种语音编解码算法。
算法的实现通过了有关测试。
其中729和采用有关建议提供的测试序列进行了测试,按照我国有关标准进行了测试。
本文对以上三种语音编码和3205409做简单介绍后,对算法的软件和硬件实现进行介绍,并给出算法所需运算量以及所占用的硬件资源。
1芯片和语音编码算法
13205409简介
3205409是公司生产的一种性价比较高的定点芯片,运算速度为80100。
它拥有改进的喻佛结构、一个、片上存储区32的和64的、片上外设以及专用的指令结构。
它具有以下主优点
·1条程序总线和3条数据总线。
配合存储区的双操作数读取能力,可以支持单周期,三操作数指令,提高了程序的运行和通用性;
·先进的针对应用设计的硬件逻辑提高了芯片的性能;
·高度专用的指令结构提供了更快的算法实现和更方便的优化;
·片上外设包括3个多通道缓冲串口、一个6通道的控制器、8口及锁相环时钟发生器;
·模块化结构方便了快速的后续发展;
·先进的处理技术实现了高性能和低功耗,5静态技术进一步降低了功耗。
2729算法
729是在8速率上的标准,采用共轭结构代数码来激励线性预测编码方案-算法。
这种算法综合了波形编码和参数编码的优点,以线性预测编码技术为基础,采用了矢量量化、分析合成和感觉加权等技术。
729只在729的基础上减少了一些运算量,保持了兼容性,质量也基本没
有下降。
332算法
726是制定的自适应差分脉冲编码算法标准,有4种速率。
在此项目中,使用32的速率。
算法是一种波形编码,它在编码的基础上引入了预测和差分的概念,仅对实际值民预测值之间的差值进行编码。
在编码过程,用过去样点的值对当产点进行预测,并自适应地调整预测系数数,使预测误差很小,从而在降低码率的同时,保持了很高编码质量。
43216算法
连续可变分辩率增量调制,是一种1的差分波形编码方式。
自适用的量阶随信号统计特性的变化而变化,在信号很大动态范围内,可获得最大信噪比。
并且易于实现,电路结构简单。
主要技术三连0三连1检测,即若检测到码流中有三连0或三连1,则表示信号在骤升或骤降,调整量阶以适应信号变化。
2硬件系统
1硬件板介绍
在发端,模拟信号通过前端处理电路和采样,转换成8-信号。
对数信号在3205409中转换线性码,并进行压缩编码。
输出的729编流在信道上传输。
接收端接收到的压缩码流在中被解码成对数信号,再经过变换和用户电路,最终得到模拟话音。
其中用来产生8的帧同步信号,使各硬件芯片之间协同工作。
、部分采用单片14557芯片。
单路信号的硬件系统框图如图1所示。
2算法的硬件选择
程序定义了两个标志变理1、2。
利用5409提供的可屏蔽中断0~3,在中断服务例程中对2个标志位进行设置,从而控制主程序的跳转。
系统加电后,0~3其中一个管脚给出中断请求信号,程序执行中检测到哪个中断,就执行该中断对应的编码算法。
接着,主程序对寄存器置位以屏蔽这些中断,直至下次系统复位。
其中0中断在测试中是无编码转换的跳转,但在应用中用于选择32的算法。
表1是算法选择的硬件中断与标志位设置。
表1算法选择的硬件中断与标志位设置
0直通,无编码转换2=01=017292=01=12162=11=03322=11=1
3数据流输入和输出
5409提供了3个,并在其中集成了硬件对数编解码器。
串口的双缓冲区发送、三缓冲区接收能保证数据的连续性。
收发的数据流字长可以是8、12、16、20、24、32,每帧最多可以有128个字。
表2是本项目采用的串口配置。
表2串口配置
串口数据流字长帧长读写控制同步事件中断084×11729164
×123224×8
对每种算法,4路编解码器都要求全双工工作,因此,对3个都进行了配置。
其中,0负责码流的收发。
码流是4路8的-信号,因此定义字长为8位;1收发729的码流。
729分帧编码,帧长10,每帧80。
为了数据能够方便、有效地收,定义串口的字长为16,这样,每5个帧同步收全一个729帧,共16×5×4路=80×4。
为了取得数据格式的一致性,方便串口收发码流,对和定义了相同的码流格式,并由2收发。
如图2所示。
32每样点用4编码,规定其码流为每样点的码字重复2次,即占8。
4路信号其32;16和32的是每样点2和4编码,故规定其码流为每比特编码码字分别重复4次和2次,即均占8。
4路信号也是32。
4数据流的传输串口与存储区
5409提供了6个通道,用户可以设置每个通道的源地址、目的地址、一次传输的数据量、同步事件和中断方式等。
表3是本项目中各通道的配置情况。
表3配置
通道比特流源地址目的地址缓冲区字中断方式缓冲区2729收114×5×2全满半满3729发114×5×2全满半满4收*1104×1全满*2104×80×2全满半满5发*1104×1全满*2104×80×2全满半满
数据存储区
*1对编码
*2对729编码
5数据传输的控制
如图3所示,串行数据流在的管脚接收,管脚发送。
数据收发由帧同步信号触发。
帧同步由提供,位时钟由外部晶振提供。
串口与存储区之间的数据交换由或控制器完成。
接收寄存器满发送寄存器空时,串口向发出同步事件或向发出中断请求,智能或数据传输已准备好。
对和729码流,串口01的数据读写为方式。
由于729采用分帧编码,一次编解码待处理的数据量较大。
为了避免读取数据过程中连续码流溢出,设计缓冲区为双倍大小。
这2块缓冲区以乒乓方式工作,即传递其中块缓冲区数据时,另一块缓冲区接收来自串口或的下一组数据。
由于5409的支持缓冲区全满或半满都产生中断的方式,所以只要将这2块缓冲区设计成连续,就可以方便地实现乒乓工作,而不产生数据溢出。
对码流,由于每次处理的码流长度较短32,故在中断服务例程中由直接读写串口2,而不
采取方式。
图3数据流的收发和传输
3软件系统
1算法的修正
是每样点1的编码方式,所以32和16的输出信号分别由32和16采样的信号编码得到。
而实际编码器的输入总是8的采样信号,为了满足算法要求。
对输入码流进行插值滤波。
根据插值这理,可以选择低通滤波器无失真地恢复原始信号。
为了取得信号质量和运算量的折中,设计了5阶的椭圆型滤波器。
12插值16
分子多项式系数
[102295-01,114533-01,241943-01,
241943-01,145325-01,102295-01]
每母多项式系数
[100000+00,-126125+00,191846+00,-121680+00,679321+01,-154358+01]
14插值32
分子多项式系数
[448200+02,-69309+02,468041+02,46041+02,-69309+02,448200+02]
分母多项式系数
[100000+00,-356926+00,566631+00,-483285+00,220789+00,-42822+01]
另外,在对编解码后的信号进行频谱测试时,发现在3处,信号的幅度超出要求3左右。
为此在编码端加入了谱调整的模块,使3处频谱下降3,作为补偿。
2729算法的回声抵消模块
729算法编码延时为15,回声现象比较明显,必须引入加声抵消算法加以抑制。
自适应回声抵消器的一般算法中,所需运算量最大的是更新参数部分。
阶数越大,运算量越大。
考虑到的性能和算法的运算量要求,采用128阶的自适应滤波器进行回声抵消。
回声抵消模块的输入是当前一帧输入语音信号与以前解码器输出的一阶合成语音。
回声抵消器利用解码器输出的合成语音信号对一帧输入信号进行回声抵消,然后将抵消掉回声的一帧输入语音信号提供给编码器作为输入信号。
3存储区的优化
①由于使用寻址,变量名仅指示偏移量;而4路信号分时处理,各路所用变量与程序代码相同,所以可以使用不同页上同名变量,在不混淆各路信号数据存储区的前提下,简化程序存储区大小。
对于程序,编解码器的有状态变量各占25字,编解码器都使用的变量占14字。
鉴于一页有128字,所以可以考虑前两路编解码器变量共用一页存储区;后两路编解码器变量共用一页存储区。
这样,2路编解码器的存储量有25×2×2+14=114字
为了区分同一页上的2路变量以及同一路的编解码器变量,它们的名称应有不同。
因此,编解码的程序模块各需要2个版本,即总的程序存储量=单路程序量×2。
②对和算法,由于输入输出信号不分帧逐样点处理,而码流格式又取得了一致,所以可以共享输入输出存储单元。
4代码的优化
32054提供了强大的硬件结构和指令体系以支持基本的数据处理操作。
对汇编语言,充分挖掘指令集的潜力,能大幅度降低程序的复杂度,提高运行速度。
如使用乘累加指令、等,在一个时钟周期内实现1次乘法和1次加减法;使用指令,在一个周期内实现变量更新,简化了滤波器的实现;使用循环寻址,对和滤波器只要在主程序中设置一次基地址,降低了开销;使用+指令,进行块搬移,减少频繁内存读定的开销;使用双字运算指令、等指令对32位的变进行操作;使用+指令快速计算定点数的指数和尾数;使用+指令高效实现定点数除法;使用+指令高效实现滤波计算。
4实现结果
各算法的复杂度和存储量如表4所示,实现所用资源。
表4各算法的复杂度和存储量
算法复杂度存储量千字729608321853121540521552048028
总的复杂度=60,12,40=60;
总的存储量=832+1853+154+052+2048+028=3124千字;
因此,一片5409上的硬件资源可以满足算法要求。
实际系统的各算法性能也通过了相关的标准测试