DSP语音压缩设计解读.doc

上传人:牧羊曲112 文档编号:4219580 上传时间:2023-04-10 格式:DOC 页数:13 大小:101KB
返回 下载 相关 举报
DSP语音压缩设计解读.doc_第1页
第1页 / 共13页
DSP语音压缩设计解读.doc_第2页
第2页 / 共13页
DSP语音压缩设计解读.doc_第3页
第3页 / 共13页
DSP语音压缩设计解读.doc_第4页
第4页 / 共13页
DSP语音压缩设计解读.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《DSP语音压缩设计解读.doc》由会员分享,可在线阅读,更多相关《DSP语音压缩设计解读.doc(13页珍藏版)》请在三一办公上搜索。

1、设计报告项目名称 : DSP应用系统 题 目 : 语音压缩技术研究 专业班级 : 电子信息工程 1102 学生姓名 : 学 号: 指导教师 : 2014 年 6 月 5 日 目 录一、概述1二、研究内容1三、研究方案、算法原理说明1四、程序设计、调试与结果分析5 五、总结10 参考文献 11一、概述当今的通信应该是人与人之间方便快捷、可多种手段实现信息交换的形式。其中,通过语音传递信息是人类最重要的、最有效和最方便的通信方式,因此语音通信在现代数字通信系统中占有重要的地位。随着信息社会的快速发展,通信信道资源变得非常宝贵,各种语音压缩编码技术应运而生。高速数字信号处理器的出现,使得语音编码算法

2、可以实时的实现,并且带动语音压缩技术得到了突飞猛进的发展。另外,移动通信技术飞速发展,已经越来越深入的渗透到每个人的生活当中,对讲机系统随着移动通信技术也迅速发展着,在公安、交通运输等多个领域得到广泛的应用。低速率语音编码以及在此基础上的数字对讲机技术已成为数字通信中的一个重要的研究领域。 本文首先介绍了一种多带激励语音(MBE)低速率编码算法,这种算法在很大范围内改善了解码合成后的语音质量,而算法的复杂度并没有明显增加。它不仅在低速率上能恢复出音质比传统声码器好得多的语音(可达到2.4k bps或更低的编码速率),而且具有良好的自然度和容忍环境噪声的能力,是目前较为理想的低速率语音编码方案。

3、在低速率的语音编码基础之上,本文又提出了几种窄带数据加密技术的方案,并对这几种数字对讲方案进行了分析和仿真。语音压缩技术指的是对原始数字音频信号流运用适当的数字信号处理技术,在不损失有用信息量,或所引入损失可忽略的条件下,降低(压缩)其码率,也称为压缩编码。它必须具有相应的逆变换,称为解压缩或解码。音频信号在通过一个编解码系统后可能引入大量的噪声和一定的失真。数字信号的优势是显而易见的,而它也有自身相应的缺点,即存储容量需求的增加及传输时信道容量要求的增加。本次实验采用DSP C5402实验板实现语音信号的压缩解压的。SEED-VC5402 DSK实验板上集成了SRAM,FLASH,音频输入输

4、出接口等部件。这些外设为我们提供了极大的方便。语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。ITU-T G.711建议的PCM A律和律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。二、研究内容1、 设计要求及目标基本部分:(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储

5、时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。三、研究方案、算法原理说明(1)语音算法与芯片特点在本项目中,我们选择了DSP集团的语音压缩最新算法Triple Rate Coder,其压缩比达到了46:1,且音质良好,MOS指标达到了3.98.该算法的基本思想是:首先将语音分为若干小段,由于语音信号的谱变化是一个缓变量,因此在每一小段内信号是平稳变化的.然后用一个数字滤波器和一个激励函数来表示这一段时域波形的离散采样序列.在实际

6、算法中是采用了一个十阶的线性预测滤波器,计算时还将每一帧分为4个子帧,每一子帧的滤波器系数矢量由上一帧和本帧数据计算得到,而最后一子帧的滤波器系数矢量则由矢量分解预测法得到;激励函数采用的是伪随机多脉冲激励函数,由最大似然算法得到.对每一帧计算得到滤波器系数矢量和函数生成元后,将这些系数再压缩打包就得到了最后的语音压缩数据.当对语音压缩数据进行解压时,首先将打包的数据展开,然后建立起线性预测滤波器,将重新生成的伪随机多脉冲激励函数输入滤波器,这样在滤波器的输出端就可得到被恢复的语音信号序列了.该算法的实时运算需要22MIPS以上的运算速度,为此DSP集团将DSP内核和算法代码集成在D6571系

7、列芯片内,以满足除PC用户以外的更广泛应用.D6571原理框图如图1所示,其本身可直接外挂并管理4兆位的flash,8K采样速率时在2.8KB的数据率下可提供25分钟的回放时间.该芯片具备工业标准的编解码器接口,可直接与串行PCM接口的音频编解码芯片相连,如美国国家半导体的TP3054或韩国三星半导体的KS8620.D6571可外接两片音频编解码芯片,上电后可用设置命令对外接音频编解码芯片的工作模式进行设置.例如:设置外接芯片的时钟是外同步还是自同步;设置外接芯片处于输出方式还是输入方式等.根据实际开发经验,我们认为D6571芯片与其它公司所提供的某些DSP内核芯片相比,其最大的优点是几乎不需

8、要任何开发工具或软件就可使用.因为该芯片的数据是双向的,既可由上位机将压缩后的语音数据通过它解压转变成语音,也可输入语音通过它进行实时压缩后传送给上位机.这就大大方便了长回放时间语音开发用户的使用.更何况目前许多语音压缩芯片对语音数据的管理是不公开的,例如:某些数字录音电话的语音压缩芯片.(2)系统构成与语音处理有关的系统构成如图2所示.语音数据存放在一片32兆位的flash中,采用三星的K29W3200,这是一种8位并行接口的闪存,并行接口有利于提高代码效率和满足实时性要求.在语音数据的压缩和回放过程中,D6571和flash之间的数据吞吐均通过上位机进行.上位机采用89C52.系统还有64

9、64的点阵液晶模块ACM6464等外围设备.所有的设备均使用一条公共的8位数据总线,即CPU的P0口;P2口的六根口线用于键盘管理;P3口的两根口线作为两条串口线;这样用于外设管理的口线还剩余16根可用.系统实际使用了其中的14根线:与flash管理有关的使用6根,与D6571有关的使用4根,还有4根用于液晶显示管理.音频编解码接口芯片采用一片TP3054,TP3054工作所需的同步脉冲、采样时钟、数据信号等只需要与D6571的四根控制线相连即可得到.(3)系统开发本系统的语音开发分为上载、数据合成及下载三个过程.上载是指获得语音压缩数据;数据合成是指将全系统的数据按一定的结构组织成一个文件;

10、下载是指仪器装配出厂时将文件烧录到flash中.这三个过程均通过PC机进行.由于系统板上MCU的串行信号直接输出的是TTL电平,因此,本系统的语音开发唯一需要另外制作的硬件就是使用一片MAX232来完成与PC机之间的电平转换.D6571具有16位宽度的总线,但也允许以分时方式使用8位总线,这时上位机须用HL信号表示送上总线的是高8位还是低8位;而当D6571主动将数据送上总线时,会发出ACK信号通知上位机读取数据.HRD和HWR则是读和写的控制线.由于Triple Rate Coder算法是按30毫秒分帧采样,然后再进行分析压缩的,因此无论是读取压缩数据还是回送压缩数据,均必须在一帧之内完成,

11、否则D6571会自行进入休眠状态.向D6571输送语音数据的过程如下:首先送出解压控制命令,然后接收一个回送状态字,状态字中包含了当前帧所需要的字节数,上位机就连续送出规定数目的数据,待一帧处理完毕后,D6571会继续送出状态字.如此循环就可连续回放出语音了.而利用D6571进行语音压缩的数据处理过程正好相反,状态字中包含的是当前帧压缩所得到的字节数,上位机就应连续接收规定数目的数据.上载时,首先要得到的是各个语音段的压缩数据.作为准备工作,先用PC机的录音机工具将我们所需的语音录制成WAV文件.然后对MCU和PC机分别编写共同配合工作的两段程序来完成以下功能:PC机通过声卡播放声音给D657

12、1;89C52控制D6571进行语音压缩并读回压缩数据,然后通过串口线回送给PC机,PC机则将每段的压缩数据存盘.由于每段语音播放时均要有一定的中文点阵字符显示,数据合成的任务就是要将每段数据加上索引和字符点阵数据后再合成为一个完整的近32兆位的二进制文件.文件形成时为了使数据定位和读出编程方便,数据块以flash的页为单位,一页为528字节.下载工作则较简单,在设备出厂前直接使用系统89C52的串口将数据合成形成的文件下载到闪存中即可.D6571的压缩率极高,使用和开发也比较方便.因此尽管本系统的语音容量长达200分钟,但系统整体设计十分简洁、经济,几乎不需调试.主要开发工作是MCU和PC机

13、的一些程序开发使用C51和VB编程,开发速度也比较快.由于D6571的控制命令很丰富,系统用户界面的软件是很容易编写的.例如,由于该芯片具有30阶的音量控制命令,我们未添任何硬件就为设备增加了数字音量控制功能.D6571的控制命令还包含自动增益控制、变速回放、数字滤波器等更加高级的命令,因此,它几乎可应用于任何语音场合.(4)语音的u律压缩与解压原理u率限制采样模值为13比特,u律的压缩可定义为: 从线性到u律的压缩转换如下表所说明。压缩后的码字组成:比特0-3表示量化值,比特4-6表示段值,压缩后的码字符号放在比特7,为了简化未写出。U律二进制编码表压缩前的码字丢弃的比特数压缩后的码字输入值

14、段值,量化值比特:12 11 10 9 8 7 6 5 4 3 2 1 0比特:6 5 4 3 2 1 0 0 0 0 0 0 0 0 1 a b c d x 10 0 0 a b c d 0 0 0 0 0 0 1 a b c d x x2 0 0 1 a b c d 0 0 0 0 0 1 a b c d x x x3 0 1 0 a b c d 0 0 0 0 1 a b c d x x x x4 0 1 1 a b c d 0 0 0 1 a b c d x x x x x5 1 0 0 a b c d 0 0 1 a b c d x x x x x x6 1 0 1 a b c d

15、0 1 a b c d x x x x x x x7 1 1 0 a b c d 1 a b c d x x x x x x x x8 1 1 1 a b c d 在扩展前,u 律码字再次反转。低位的有效比特原是丢弃的,但是为了减少精度损失,用中间值近似。为了简化,扩展后的码字符号左溢。U 率二进制解码表压缩过的码字偏值的输入段值,量化值比特: 6 5 4 3 2 1 0比特: 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 a b c d 0 0 0 0 0 0 0 1 a b c d 1 0 0 1 a b c d 0 0 0 0 0 0 1 a b c d 1 0

16、0 1 0 a b c d 0 0 0 0 0 1 a b c d 1 0 0 0 1 1 a b c d 0 0 0 0 1 a b c d 1 0 0 0 1 0 0 a b c d 0 0 0 1 a b c d 1 0 0 0 0 1 0 1 a b c d 0 0 1 a b c d 1 0 0 0 0 0 1 1 0 a b c d 0 1 a b c d 1 0 0 0 0 0 0 1 1 1 a b c d1 a b c d 1 0 0 0 0 0 0 05、程序设计思路及流程图思路:DSP程序设计应包括用户程序、存储器配置程序。为了实现语音信号的采集与回放,先将语音信号采集,

17、运用a律压缩算法将信号压缩并存入存贮器中,当放音开始时运用a律解压算法将信号解压并从存储器中释放出来,实现语音的回放。流程图:开始初始化DSP及串行口2、初始化A/D转换器D/A转换器3、4、5、语音经A/D转换器输入6、数据压缩7、数据存储8、解压缩经D/A转换器回放9、结束10、11、四、程序设计、调试与结果分析1、程序设计(1)用2812dsp实现语音的A率压缩解压有两种方法:a、使用多通道缓冲串口(McBSP)的缩展器在多缓冲通道串口(McBSP)内部装置了硬件电路,支持A律格式缩展器,对数据进行压缩与扩展,A律缩展器允许14比特的动态范围。 首先描述一下McBSP硬件如何能够同时处理

18、A律,如图显示的是McBSP缩展器硬件工作流程。在接受端,McBSP接收压缩的、非线性的数据然后扩展为线性数据写道CPU或DMA,在发送端,从CPU或DMA得到的线性数据在发送前必须按着A律压缩。 RSR RBR RJUST DRR接收移位寄存器接收缓冲寄存器扩展器发送移位寄存器压缩器数据发送寄存器从CPU/DMA输入数据接收寄存器调整模式控制位到CPU或DMA DLB模式非DSB模式b、用软件实现主程序的功能是从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,构成AD50 CODEC模拟输入和输出通道的自环,是否能接收到A/D转换的数据是通过查询串口

19、1的接收标志RRDY来进行的,程序为:while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; data=*(volatile int*)DRR1_ADDR(HANDSET_CODEC); temp1=data2alaw(data); data=alaw2data(temp2); *(volatile int*)DXR1_ADDR(HANDSET_CODEC)=data;(2)实验程序及相关功能解释如下/*头文件*/#include #include #include #include /*声明函数*/void delay(s16 period);unsign

20、ed char data2alaw(int );int alaw2data(unsigned char);/*定义变量*/HANDLE hHandset;int data0;int data1;long i,j=0;long k,l=0;unsigned int temp1;unsigned char temp2;unsigned int m;unsigned int buffer50000;/*主程序*/void main() s16 cnt1=2; s16 cnt2=10; if (brd_init(100) /初始化DSK板,失败退出 return;while ( cnt1- ) /指示

21、灯依次先亮后灭brd_led_toggle(BRD_LED0);delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000); /* AD50的初始化*/ hHandset = codec_open(HANDSET_CODEC); / 初始化串口1,设置成功返回codec的句柄放在变量hHandset中 codec_dac_mode(hHandset, CODEC_DAC_15BIT); /15bit D/A转换 codec_adc_mode(hHandset, CODEC_ADC_1

22、5BIT); /15bit A/D转换 codec_ain_gain(hHandset, CODEC_AIN_6dB); /输入6dB增益 codec_aout_gain(hHandset, CODEC_AOUT_MINUS_12dB); /输出-12dB增益 codec_sample_rate(hHandset,SR_8000); /8K采样率 while (1) brd_led_disable(BRD_LED1); /关闭led1 brd_led_disable(BRD_LED2); /关闭led2 brd_led_toggle(BRD_LED0); /录音指示灯亮 while (!MCB

23、SP_RRDY(HANDSET_CODEC) ; /采集语音信号 data0 = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); temp1=data2alaw(data0); /A律压缩 /*存储压缩后的数据 */ i=i+1 ; if(i%2=1) bufferj=(temp1=100000) i=0; if(j=50000) j=0;brd_led_disable(BRD_LED0); brd_led_disable(BRD_LED2); while ( cnt2- ) /灯闪烁 brd_led_toggle(BRD_LED1); /* brd_del

24、ay_msec(1000); */ delay(2000); cnt2=10; brd_led_disable(BRD_LED0); /放音指示灯亮 brd_led_disable(BRD_LED1); brd_led_toggle(BRD_LED2); /*取出压缩数据*/ for(k=0;k8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l=50000) l=0; data1=alaw2data(temp2); /解压缩数据 while (!MCBSP_XRDY(HANDSET_CODEC) ; /输出解压后的数据 *(volatile u16*)DX

25、R1_ADDR(HANDSET_CODEC) = data1*4; delay(2000); for (m=0;m=0)?1:0; /判定符号:正数 =1,负数 =0for (i=0;i16;i+) /确定temp中出现1的最高位 output=temp&0x8000; if(output) break; /temp 左移i位后最高位为1 temp=1; achord=11-i; /求出段值 if (achord1)&0x0F; /段值为0,将absol右移1位得到量化值 elseastep=(absolachord)&0x0F; /段值不为0,将absol右移achord4095) /超过最

26、大值4095,输出最大值0x7foutput=0x7F; if(sign) return output=0xFF; /返回含有符号信息的输出值 else return output=0x7F; /*A律解压子程序*/int alaw2data(unsigned char input) unsigned char sign,achord,astep;unsigned int temp;int data;temp = input0xFF; /得到含有符号信息的压缩值sign = (temp&0x80)7; /得到符号位achord = (temp&0x70)4; /得到段值astep = temp

27、&0x0F; /得到量化值astep = 1;if(!achord) /段值为0,输出值为量化值左移1位后加1data=astep+1;else data=astep+33; /扩展后数值中的6位非零值 data=0)?1:0; /判定符号:正数 =1,负数 =0for (i=0;i16;i+) /确定temp中出现1的最高位 output=temp&0x8000; if(output) break; /temp 左移i位后最高位为1 temp=1; achord=10-i; /求出段值 if (achord1)&0x0F; /段值为0,将absol右移1位得到量化值 else achord+

28、;astep=(absolachord)&0x0F; /段值不为0,将absol右移achord8191) /超过最大值8191,输出最大值0x7foutput=0x7F; if(sign) return output=0xFF; /返回含有符号信息的输出值 else return output=0x7F;/*u率解压子程序*/ int ulaw2data(unsigned char input)unsigned char sign,achord,astep;unsigned int temp;int data;temp = input0xFF; /得到含有符号信息的压缩值sign = (te

29、mp&0x80)7; /符号位achord = (temp&0x70)4; /段值astep = temp&0x0F; /量化值astep = 1;if(!achord) /段值为0,输出值为量化值左移1位后加1data=astep+33;else data=astep+33; /扩展后数值中的6位非零值 data=achord; if(sign) return -data; /有符号的扩展值 else return data;五、总结 近几年来,芯片、应用软件和系统的发展非常迅速,每年增长速度高达。其市场驱动力主要是因特网、无线通信、硬盘驱动器、可视电话和会议电视以及其它消费类电子产品。也就

30、是说,产业的发展依赖于通信技术和通信市场。随着新的通信体制、传输方式和多媒体智能终端的迅速发展,其算法、标准和规程都需要在实践中不断发展、改进和优化。编程的灵活性和不断增强的运算能力,同时又将使通信技术向更高层次迈进。这对通信领域的广大科技人员是一个机遇。抓住这个机遇,我们将大有作为。通过这几次实验,我初步的对dsp有了一定了解。虽然是在老师们的指导下完成实验要求的,但是我想我还是收获蛮多的。希望在以后的学习生活中能对dsp有更多的学习和研究。 通过这个学期对DSP的学习,我熟悉了CCS开发环境以及设计运行调试过程,认识到AIC23语音芯片和I2C协议以及MCBSP模块的各个工作原理以及三者之间的关系,学会对模块的初始化怎么定义和编写的流程。使我对DSP产生了浓厚的兴趣,激发了我学习DSP的积极性,从这次研究成果上来说,清晰的结果使我对书本上的知识应用到了实验中,很满足。参考文献1 DSP技术及其应用.高海林,钱满义编 北京交通大学出版社2 DSP基础理论与应用技术.李哲英,骆丽编 北京航空航天大学出版社3TMs320C54x DSP 结构、原理及应用.戴明桢,周建江编 北京航空航天出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号