您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > DSP语音压缩、存储和回放(DOC)
DSP课程设计实验报告语音压缩、存储、回放院(系):电子信息工程学院设计人员:电子0703王永刚学号:07214073电子0703向书武(外班)学号:07214074成绩:工程设计50报告20答辩30总分评语:指导教师签字:日期:2010/1/202目录一、实验背景与内容……………………………………………………3二、设计内容……………………………………………………………3三、设计方案、算法原理说明…………………………………………4四、程序设计、调试与结果分析………………………………………5五、设计(安装)与调试的体会………………………………………16六、参考文献……………………………………………………………163一、实验背景与内容目前语音信号压缩技术发展十分迅速,出现了很多高效率的语音压缩编码方法。以语音信号压缩的国际标准G.729为例,它可将经过采样的64kb/s语音信号高保真地压缩到8kb/s,但其模型编码算法的运算量很大。同时又要求对语音信号进行实时采样实时压缩处理,这样对数据采集和处理系统提出了更高的要求。本实验是使用通用数字信号处理器(DSP)强大的数据处理能力,由于DSP采用内部多总线结构,使数据的存储和指令的执行更加快捷。最重要的一点是,DSP具有快速的指令周期,如TMS320系列己经从第一代的200ns降低到5ns(1600MIPS)以下,如此高的运算速度使其可以满足许多实时处理的需要。语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。ITU-TG.711建议的PCMA律和µ律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。pcm是原始数据原封不动地量化编码(这种量化的位宽大),A律pcm是经过压扩后的非均匀量化(小信号细量化大信号粗量化),U律pcm是经过压扩后的均匀量化(A/U律量化的位宽小)。所以本实验采用A律的效果应该比较理想。但是也采用了U律进行了对比。二、设计内容实验目的①、应用DSP算法实现对语音信号的压缩、存储和回放。②、熟悉使用C语言编写较复杂的程序;③、熟悉C语言对外设(DSK板或示波器)的访问(软件编程、硬件连接);④、熟练使用软件CCS5000对程序的完整调试过程。实验设计要求①使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。②采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。③存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。④使用指示灯对语音存储和回放过程进行指示。4三、设计方案、算法原理说明语音信号的编码方式一般为PCM(PulCodeModulation)编码。由于需要采集、存储、传输和处理的音频数据量极大,只有进行压缩后才能正常进行传输和存储。目前,用于语音压缩编码的算法有ADPCM,CELP,RPE-LTP,等。其中最常用的是u/A律压缩解压。u/A律压缩解压编码是国际电报电话协会(CCIT)最早推出的G711语音压缩解压编码的一种格式的主要内容。其中欧洲和中国等国家采用A律压缩解压编码,美国和日本采用u律压缩解压编码。两个算法使用了非线性,把量化间隔变换成人耳能检测的线性空间。A律限制采样值为12+1比特,将压缩后的格式码定义为PSSSQQQQ,相当于将正负值输入分成8个区段(0~7)。其中P为符号位,0代表正,1代表负;SSS表示3位高位的区段码;QQQQ表示区段内小格码,区分不同输入的范围值。这种编码方式使压缩、解压缩变得简洁而有效率。表1为输入值与压缩编码间的关系,其中X为压缩中舍弃的位,输入值越大,被舍弃的位数就越多,每个输入值有其对应的最高有效位。A律对数PCM,就是压缩器的压缩特性具有如下关系的压缩率:1||1ln1||ln1)sgn(1||0ln1||)sgn()(xAAxAxAxAxAxxF式中:F(x)为归一化的压缩器输出电压;x为归一化的压缩器输入电压;A为压扩参数,表示压缩的程度(在欧洲,A=87.6)。A律13折线由表1可见,输入值与压缩后的编码值之间的关系如下:a)输入值的12位即为符号位P;b)将输入值右移6位后,求得此时最高有效位的值加1,即为其对应压缩码的区段码SSS;c)最高有效位后紧邻的4位即为其对应压缩码的小格码QQQQ。5四、程序设计、调试与结果分析①流程图开始初始化Board板成功?调用_led_display(2)使灯都闪两次初始化Codec片选FLASH为外部存储器等待接受Instance处的采样LED灯0亮开始录音采样送voice_sample压缩存储voice_sampleLED灯1熄灭放音结束读取,解压缩并送voice_sample1LED灯1亮开始放音LED灯0熄灭录音结束是否6②TMS320VC5402mcbsp的串口的初始化首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:禁止SPI模式,但数据相,每帧一字,每字16位,帧同步脉冲低电平有效,并且帧同步信号和移位信号有外部时钟产生。hHandset=codec_open(HANDSET_CODEC);此语句调用了函数codec_open()对串口1进行了初步设置,设置成功返回codec的句柄放在变量hHandset中,作为调用其他函数的实参。③AD50的初始化:该初始化过程调用了5个函数对AD50的5项参数进行了设置,包括adc和dac的工作模式,模拟输入和输出的增益;以及AD,DA的转换速率。codec_dac_mode(hHandset,CODEC_DAC_15BIT);/*DACin15-bitmode*/codec_adc_mode(hHandset,CODEC_ADC_15BIT);/*ADCin15-bitmode*/codec_ain_gain(hHandset,CODEC_AIN_6dB);/*6dBgainonanaloginputtoADC*/codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/*-6dBgainonanalogoutputfromDAC*/codec_sample_rate(hHandset,SR_16000);/*16KHzsamplingrate*/④从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,讲解压后的数据将数据写入D/A转换器。程序如下:while(1){/*Waitforsamplefromhandset*/while(!MCBSP_RRDY(HANDSET_CODEC)){};/*Readsamplefromandwritebacktohandsetcodec*/data=*(volatileint*)DRR1_ADDR(HANDSET_CODEC);pre=int2alaw(data);/*orpre=int2ulaw(data);*/data=alaw2int(pre);/*ordata=ulaw2int(pre);*/*(volatileint*)DXR1_ADDR(HANDSET_CODEC)=data;7实验程序C程序/******************************************************************//*头文件*//*******************************************************************/#includetype.h#includeboard.h#includecodec.h#includemcbsp54.h/*******************************************************************//*变量宏定义*//*******************************************************************/#defineSIGN_BIT(0x80)/*SignbitforaA-lawbyte.*/#defineQUANT_MASK(0xf)/*Quantizationfieldmask.*/#defineNSEGS(8)/*NumberofA-lawsegments.*/#defineSEG_SHIFT(4)/*Leftshiftforsegmentnumber.*/#defineSEG_MASK(0x70)/*Segmentfieldmask.*//******************************************************************//*函数声明*//*******************************************************************/voiddelay(s16period);voidled(s16cnt);voidinitcodec(void);voidflashenable(void);unsignedchardata2alaw(s16pcm_val);intalaw2data(unsignedchara_val);staticintsearch(intval,short*table,intsize);/*******************************************************************//*全局变量*//*******************************************************************/HANDLEhHandset;s16data;s16data1;u16i=0;u16temp1;u16j=0;u16k,l=0;u8temp2;u16buffer[22000];staticshortseg_end[8]={0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF};8/*******************************************************************//*主函数*//*******************************************************************/voidmain(){if(brd_init(100))return;led(2);//闪灯两次initcodec();//初始化codecflashenable();//选择片外FLASH为片外存储器while(1){while(!MCBSP_RRDY(HANDSET_CODEC)){};//等待接收handset处的采样if(i==0)brd_led_toggle(BRD_LED0);//点亮二极管0,表示录音开始data=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);//从handset处读取采样temp1=data2alaw(data);//对采样进行a律压缩/*****************************************************************//*把低地址数据放在高八位高地址数据放在低八位*//*******************************************************************/i=i+1;if(i%2==1){buffer[j]=(temp1=8);/*奇数数据左移8位temp1=abcdefgh000
本文标题:DSP语音压缩、存储和回放(DOC)
链接地址:https://www.777doc.com/doc-5048556 .html