DSP语音压缩设计解读_第1页
DSP语音压缩设计解读_第2页
DSP语音压缩设计解读_第3页
DSP语音压缩设计解读_第4页
DSP语音压缩设计解读_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

5、3) 存储器存满之后,使用 DSPS行实时解压缩,并从 SPEAKE输出口进行回放输出。(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位并行接口的 闪存,并行接口有利于提高代码效率和满足实时性要求在语音数据的压缩和回放过程中Q6571和flash之间的数据吞吐均通过上位机进行.上位机采用89C52.系统还有64X 64的

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

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

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

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

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

14、码字符号放在比特7,为了简化未写出。U律二进制编码表压缩前的码字丢弃的比特数压缩后的码字输入值段值,量化值比特:12 11 10 9 8 7 6 5 4 3 2 1 0比特:6 5 4 3 2 1 00 0 0 0 0 0 0 1 a b c d x10 0 0 a b c d0 0 0 0 0 0 1 a b c d x x20 0 1 a b c d0 0 0 0 0 1 a b c d x x x30 1 0 a b c d0 0 0 0 1 a b c d x x x x40 1 1 a b c d0 0 0 1 a b c d x x x x x51 0 0 a b c d0 0 1

15、 a b c d x x x x x x61 0 1 a b c d0 1 a b c d x x x x x x x71 1 0 a b c d1 a b c d x x x x x x x x81 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 00 0 0 a b c d0 0 0 0 0 0 0 1 a b c d 10 0 1 a b c d0 0

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

17、回放,先将语音信号采集,运用 a律压缩算法将信号压缩并存入存贮器中,当放音开始时运用 律解压算法将信号解压并从存储器中释放出来,实现语音的回放。8、四、程序设计、调试与结果分析1、程序设计(1)用2812dsp实现语音的A率压缩解压有两种方法:a、使用多通道缓冲串口( McBSP的缩展器在多缓冲通道串口( McBSP内部装置了硬件电路,支持A律格式缩展器,对数据进行压缩与扩展,A律缩展器允许14比特的动态范围。首先描述一下McBSF硬件如何能够同时处理 A律,如图显示的是McBSP缩展器硬件工作 流程。在接受端,McBSF接收压缩的、非线性的数据然后扩展为线性数据写道CPU或 DMA在发送端,

18、从CPU或DMA得到的线性数据在发送前必须按着 A律压缩。RSRRBRRJUST DRR接收移位 寄存器J-!接收缓冲寄 存器扩展器数据接收寄存器至U CPU或 DMA调整模式控制位DLB模式非DSB模式b、用软件实现主程序的功能是从 McBSP的接收通道读取 A/D转换的值,然后经过压缩解压后将其发送 到McBSP的发送通道,构成 AD50 CODE(模拟输入和输出通道的自环,是否能接收到A/D转换的数据是通过查询串口1的接收标志RRDY来进行的,程序为:while while (!MCBSP_RRDY(HANDSET_CODEC) ;data=*(volatile in t*)DRR1_A

19、DDR(HANDSET_CODEC);temp仁data2alaw(data);data=alaw2data(temp2);*(volatile in t*)DXR1_ADDR(HANDSET_CODEC)=data;(2)实验程序及相关功能解释如下/*头文件*/#in clude <type.h>#in clude <board.h>#in elude <codec.h>#in elude <mcbsp54.h>/*声明函数*/void delay(s16 period);un sig ned char data2alaw(i nt );int

20、 alaw2data( un sig ned char );/*定义变量*/HANDLE hHan dset;int dataO;int data1;long i,j=0;long k,l=0;un sig ned int temp1;un sig ned char temp2;un sig ned int m;unsigned int buffer50000;/*主程序*/void mai n()s16 cnt1=2; s16 cnt2=10;初始化DSK板,失败退出指示灯依次先亮后灭if (brdn it(100)/return;while ( cnt1- )/brded_toggle(B

21、RD_LED0); delay(1000);brded_toggle(BRD_LED1);delay(1000);brded_toggle(BRD_LED2); delay(1000);/* AD50 的初始化*/hHa ndset= codec_ope n(HANDSET_CODEC);codec的句柄放在变量hHandset中codec_dac_mode(hHa ndset, CODEC_DAC_15BIT);codec_adc_mode(hHa ndset, CODEC_ADC_15BIT); codec_ain_gai n( hHa ndset, CODEC_AIN_6dB);/初始化

22、串口/15bit D/A/15bit A/Dcodec_aout_gai n(hHa ndset, CODEC_AOUT_MINUS_12dB); codec_sample_rate(hHa ndset,SR_8000);while (1)brd_l ed_disable(BRD_LED1);brd_l ed_disable(BRD_LED2);brd_l ed_toggle(BRD_LED0);/8K/1,设置成功返回转换转换输入6dB增益输出-12dB增益采样率关闭led1关闭led2录音指示灯亮while (!MCBSP_RRDY(HANDSET_CODEC) ;/dataO = *(v

23、olatile u16*)DRR1_ADDR(HANDSET_CODEC);temp仁data2alaw(data0);/A/*存储压缩后的数据*/i=i+1 ;if(i%2=1)bufferj=(temp1<<=8);elsebufferj=(bufferj|temp1); j+;if(i>=100000)i=0;if(j>=50000)j=0;brd_l ed_disable(BRD_LEDO);brd_l ed_disable(BRD_LED2);while ( cnt2- )/brd_l ed_toggle(BRD_LED1);/* brd_delay_msec

24、(1000); */ delay(2000);cn t2=10;brded_disable(BRD_LEDO);/brd_l ed_disable(BRD_LED1);brd_l ed_toggle(BRD_LED2);/*取出压缩数据*/for(k=0;k<100000;k+)if(k%2=0) temp2=(bufferl>>8) &OxOff;elsetemp2=bufferl&OxOff; l+;if(l>=50000)米集语音信号律压缩灯闪烁放音指示灯亮l=0;data仁alaw2data(temp2);/解压缩数据while (!MCBSP_

25、XRDY(HANDSET_CODEC) ;/ 输出解压后的数据*(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1*4; delay(2000);for (m=0;m<50000;m+) bufferm=0;/buffer 清零/*A律压缩子程序*/un sig ned char data2alaw(i nt data)un sig ned char i,sig n,achord,astep; un sig ned int output,absol,temp; temp=absol=abs(data);sig n=(data>=0)?1:

26、0;/for (i=0;i<16;i+)/output=temp&0x8000;if(output) break;/temptemp<<=1;achord=11-i;/if (achord<=0)achord=0;astep=(absol>>1)&0x0F;/elseastep=(absol>>achord) &0x0F;/achord<<=4;/achordoutput=achord+astep;/if(absol>4095)/output=0x7F;if(sig n)return outputA=0x

27、FF;/elseretur n outputA=0x7F;/*A律解压子程序*/int alaw2data( un sig ned char in put)判定符号:正数=1,负数=0 确定temp中出现1的最高位左移i位后最高位为1求出段值段值为0,将absol右移1位得到量化值段值不为0,将absol右移位得量化值输出值的绝对值超过最大值4095,输出最大值0x7f返回含有符号信息的输出值8un sig ned char sig n, achord,astep; un sig ned int temp;#int data;temp = in puLOxFF;/sign = (temp&am

28、p;0 x80)>>7;/achord = (temp&0x70)>>4;/astep = temp&0x0F;/astep <<= 1;if(!achord)/data=astep+1;elsedata=astep+33;/data<<=achord-1;if(sig n)return -data;/elsereturn data;2、实验现象及波形输出得到含有符号信息的压缩值得到符号位得到段值得到量化值段值为0,输出值为量化值左移1位后加1扩展后数值中的6位非零值有符号的扩展值9连接好SEED- VC5402DS试验板和计算机

29、的通信, 通电后首先进行复位, 然后启动CCS编 译、下载。运行编写的程序会看到 号了。当第一个灯亮时,开始在 烁5次,第三个灯亮时J6端耳机开始放音, 后,第熄灭之后就开始进行采集语音信 第二个灯亮闪 放完音DSK板上的3个指示灯依次点亮,J5端采集音频信号,采集完后,第一个灯灭就会听到刚才储存的8秒左右的音频信号个灯右开始亮,程序进入下一轮录音、压缩、存储、解压、放音循环。压缩前后以及解压后输出波形 /*u率压缩子程序*/un sig ned char data2ulaw(i nt data)un sig ned char i,sig n,achord,astep; un sig ned

30、int output,absol,temp; temp=absol=abs(data);sig n=(data>=0)?1:0;/for (i=0;i<16;i+)/output=temp&0x8000;if(output) break;/temptemp<<=1;achord=10-i;/if (achord<=0)判定符号:正数=1,负数=0确定temp中出现1的最高位左移i位后最高位为1求出段值achord=0;#astep=(absol>>1)&0 xOF;/段值为0,将absol右移1位得到量化值elseachord+;astep=(absol»achord) &0x0F; / achord<<=4;/achordoutput=achord+astep;/if(absol>8191)/output=0x7F;if(sig n)return outputA=0xFF;/elseretur n outputA=0x7F;段值不为0,将absol右移位得量化值输出值的绝对值超过最大值8191,输出最大值0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论