dsp数字信号处理课程设计报告语音压缩与回放.doc_第1页
dsp数字信号处理课程设计报告语音压缩与回放.doc_第2页
dsp数字信号处理课程设计报告语音压缩与回放.doc_第3页
dsp数字信号处理课程设计报告语音压缩与回放.doc_第4页
dsp数字信号处理课程设计报告语音压缩与回放.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

DSP技术与应用课程设计报告选题名称: 语音压缩与回放 系(院): 计算机工程学院专 业:计算机科学与技术(嵌入式系统软件设计)班 级: 计算机1073 姓 名: 学 号: 1 指导教师: 学年学期: 2009 2010 学年 第 2 学期2010年 6 月 11 日摘要: 如何在实际系统中实现语音压缩, 这是一个重要的研究领域。目前, PC上的实时语音压缩技术已经较为成熟,而嵌入式系统领域的语音压缩技术还有待发展和完善。由于大多数高质量、低码 率的语音压缩算法有较为复杂的数据运算, 所以传统的单片机已经不能胜任, 必须采用更高性能的处理器, 而专门为数字信号处理设计的数字信号处理器 (DSP)为语音压缩的实现提供了一个很好的平台。随着超大规模集成电路 (VL S I)工艺的进步 ,高速数字信号处理器 (DSP)技术的飞速发展以及先进开发工具的完备 ,使得复杂的语音编解码算法在以高性 能微处理器为核心的硬件系统上实时实现成为可 能 。本文介绍了一种基于目前性能价格比较高的16位定点 DSP芯片 TMS320VC54X的语音压缩处理系统 , 可以直接作为会议电视 、PSTN 可视电话、IP 网络多媒体通信、远程医疗系统终端设备中声音信源编码解码器系统。关键词:语音压缩;语音编码;DSP目录1课题综述11.1 课题来源11.2 预期目标11.3 面对的问题12 系统设计及分析22.1 涉及的基础知识22.2 实验方案42.3 程序流程图53 程序代码63.1 头文件定义63.2 主函数73.3 a律压缩子函数123.4 a律解压缩子函数133.5 延时子函数143.6 5402.cmd文件144 程序运行与调试174.1 实验结果17总 结19参考文献201课题综述1.1 课题来源 数字化语音存储与回放系统,以微处理芯片为核心,具有语音可控、 回放灵活、无磨损、可靠简单等特点。因而在各类公共设施、智能仪表、家用电子产品等领域有着广泛的应用。该系统目前有多种方案可以实现,其中采集成语音芯片是一种较简单通用的方案,但该方案智能性较差,如音量不能放大、录音时间固定等。在通信应用领域中, 压缩语音信号的传输带宽或降低电话信道的传输码率, 一直是设计人员追求的目标。语音编码在实现这一目标的过程中担当着重要的角色, 语音编码是压缩语音信号的数字表示, 而且是这些信号所需比特数最小的算法。可以说, 语音压缩技术的发展和人类信息技术的发展息息相关。因此, 对语音压缩技术的研究具有重要的现实意义。1.2 预期目标 (1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。发挥部分:使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。1.3 面对的问题基于TMS320C54X为核心的语音压缩与回放需要掌握和了解如下几个知识:语音编码原理、量化、DPCM&ADPCM、语音采集与输出模块、a律压缩、A/D、D/A及存储芯片的选择、数据存储器的选择等等。2 系统设计及分析2.1 涉及的基础知识2.1.1 语音编码语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。PCM编码即脉冲编码调制。波形编码的最简单形式就是脉冲编码调制(Pulse code modulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅 度进行编码,所以叫做脉冲编码调制。脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。2.1.2 量化脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方 式。但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降 。 国际上有两种非均匀量化的方法:A律和u律,u律是最常用的一种。在美国,7位u律是长途电话质量的标准。 而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。 2.1.3 DPCM&ADPCM 降低传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。相邻的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得到压缩。因为差分信号比原语音信号的动态范围和平均能量都小。这种编码叫Differential PCM,简称DPCM,即差分脉冲编码调制。 ADPCM即自适应差分脉冲编码调制,是包括短时预测的编码系统。CCITT(国际电报电话咨询委员会)在1984年提出的32 kbit/s的编码器建议就是采用ADPCM作为长途传输中的国际通用语音编码方案。这种ADPCM编码方案达到64 kbit/s PCM的语音传输质量,并具有很好的抗误码性能。2.1.4 a律压缩 A律编码(A-law )是ITU-T(国际电联电信标准局)CCITT G.712定义的关于脉冲编码的一种压缩/解压缩算法。 世界上大部分国家采用A律压缩算法。美国采用mu律算法进行脉冲编码。 令量化器过载电压为1,相当于把输入信号进行归一化,那么A律对数压缩定义为: 当0 = x = 1/A时,f(x)=(Ax)/(1+lnA) 当1/A = x = 1时,f(x)=(1+lnAx)/(1+lnA)在现行的国际标准中A=87.6,此时信号很小时(即小信号时),从上式可以看到信号被放大了16倍,这相当于与无压缩特性比较,对于小信号的情况,量化间隔比均匀量化时减小了16倍,因此,量化误差大大降低;而对于大信号的情况例如x=1,量化间隔比均匀量化时增大了5.47倍,量化误差增大了。这样实际上就实现了“压大补小”的效果。按上式得到的A律压扩特性是连续曲线,A的取值不同其压扩特性亦不相同,而在电路上实现这样的函数规律是相当复杂的。为此,人们提出了数字压扩技术,其基本思想是这样的:利用大量数字电路形成若干根折线,并用这些折线来近似对数的压扩特性,从而达到压扩的目的。下图2-1为a律压缩的示意图图2-1 a律压缩示意图从图2-1中可以看到,先把轴的01分为8个不均匀段,其分法是:将01之间一分为二,其中点为1/2,取1/21之间作为第八段;剩余的01/2再一分为二,中点为1/4,取1/41/2之间作为第七段,再把剩余的01/4一分为二,中点为1/8,取1/81/4之间作为第六段,依此分下去,直至剩余的最小一段为01/128作为第一段。而轴的01均匀地分为八段,它们与轴的八段一一对应。从第一段到第八段分别为,01/8,1/82/8,7/81。这样,便可以作出由八段直线构成的一条折线。该折线与式(6-22)表示的压缩特性近似。压缩后的码字组成:比特0-3表矢量化值,比特4-6表示段值,压缩后的码字符号放在比特7,为了简化未写出。表2-1 a律压缩表压缩前的码字丢弃的比特数压缩后的码字输入值段值,量化值比特: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 a b c d x 10 0 0 a b c d 0 0 0 0 0 0 1 a b c d x1 0 0 1 a b c d 0 0 0 0 0 1 a b c d x x2 0 1 0 a b c d 0 0 0 0 1 a b c d x x x 3 0 1 1 a b c d 0 0 0 1 a b c d x x x x 5 1 0 0 a b c d 0 0 1 a b c d x x x x x6 1 0 1 a b c d 0 1 a b c d x x x x x x 7 1 1 0 a b c d 1 a b c d x x x x x x x 8 1 1 1 a b c d 从A律到线性扩展的转换如下表:表2-2 a律解压缩转换表压缩过的码字 偏值的输入 段值,量化值比特: 6 5 4 3 2 1 0比特: 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 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 1 0 a b c d 0 0 0 0 0 1 a b c d 1 0 0 1 1 a b c d 0 0 0 0 1 a b c d 1 0 0 1 0 0 a b c d 0 0 0 1 a b c d 1 0 0 0 1 0 1 a b c d 0 0 1 a b c d 1 0 0 0 0 1 1 0 a b c d 0 1 a b c d 1 0 0 0 0 0 1 1 1 a b c d 1 a b c d 1 0 0 0 0 0 0 2.2 实验方案用板内的AD/DA转换器AD50将由MIC输入的模拟信号转换为16位数字信号送入DSP板中进行压缩处理,压缩处理后的数据经过解压后再送至DA转换器转换为模拟信号,由SPEAKER口输出,压缩和解压缩用A律格式,从而实现语音信号的采集压缩与回放。图2-2 总体框架图2.3 程序流程图 基于TMS320C54X的语音压缩与回放程序流程图如下所示。开始初始化DSP及串行口初始化A/D转换器D/A转换器语音经A/D转换器输入及量化数据压缩数据存储解压缩经D/A转换器回放结束是否存满空间?数据处理NoYes图2-4 程序流程图3 程序代码我主要完成a律解压缩的代码编写,因此对主程序和a律压缩不做详细的解释。3.1 头文件定义/*/#include #include #include #include /*/* Function Prototypes */*/void delay(s16 period);unsigned char data2alaw(int pcm_val);int alaw2data(unsigned chara_val); /*/* Global Variables */*/HANDLE hHandset; /*句柄变量*/int data;int data1;long i,j=0;long k,l=0;unsigned int temp1;unsigned char temp2;unsigned int m;unsigned int buffer36000;3.2 主函数/*/* MAIN */*/void main() if (brd_init(100)/初始化DSK板,失败退出 return; /* blink the leds a couple times */for(m=6;m0;m-)brd_led_toggle(BRD_LED0);/* brd_delay_msec(1000); */delay(1000);brd_led_toggle(BRD_LED1);/* brd_delay_msec(1000); */delay(1000);brd_led_toggle(BRD_LED2);/* brd_delay_msec(1000); */delay(1000); /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec */ /* Set codec parameters */ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit mode */codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB gain on analog input to ADC */codec_aout_gain(hHandset, CODEC_AOUT_MINUS_12dB); /* -12dB gain on analog output from DAC */ codec_sample_rate(hHandset,SR_16000); /* 16KHz sampling rate */ /* Polling and digital loopback */ while (1) brd_led_disable(BRD_LED1);/关闭led1 brd_led_disable(BRD_LED2);/关闭led2 brd_led_toggle(BRD_LED0);/开启led0 /* Wait for sample from handset */ while (!MCBSP_RRDY(HANDSET_CODEC) data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /采集语音信号 temp1=data2alaw(data); /temp1=data2ulaw(data); /保存压缩后的数据 把低地址数据放在高八位 高地址数据放在第八位 i=i+1; if(i%2=1) bufferj=(temp1=72000) i=0; if(j=36000) j=0; brd_led_disable(BRD_LED0); /放音 brd_led_disable(BRD_LED2); brd_led_toggle(BRD_LED1); for(k=0;k8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l=36000) l=0; data1=alaw2data(temp2); while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1*4; brd_led_disable(BRD_LED0); brd_led_disable(BRD_LED1); brd_led_toggle(BRD_LED2); /放音结束 for (m=0;m3;m+) delay(1000); for (m=0;m0;m-)brd_led_toggle(BRD_LED0);/* brd_delay_msec(1000); */delay(1000);brd_led_toggle(BRD_LED1);/* brd_delay_msec(1000); */delay(1000);brd_led_toggle(BRD_LED2);/* brd_delay_msec(1000); */delay(1000);4)语音信号采集与回放程序/判断MCBSP是否做好接收准备 while (!MCBSP_RRDY(HANDSET_CODEC) ) ; /从A/D读取转换数据data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);temp1=data2alaw(data); /temp1=data2ulaw(data);/ 将数据写入D/A转换器data1=alaw2data(temp2); while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1*4;5) 数据存储与处理i=i+1; if(i%2=1) bufferj=(temp18)&0x0ff; else temp2=bufferl&0x0ff; l+; 3.3 a律压缩子函数/*/*a率压缩 */*/unsigned char data2alaw(int data) unsigned char i,sign,achord,astep; unsigned int output,absol,temp; temp=absol=abs(data); sign=(data=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) /超过最大值4095,输出最大值0x7foutput=0x7F; if(sign) return output=0xFF; /返回含有符号信息的输出值else return output=0x7F;3.4 a律解压缩子函数/*/*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&0x0F; /量化值astep = 1;if(!achord) /段值为0,输出值为量化值左移1位后加1data=astep+1;else data=astep+33; /扩展后数值中的6位非零值 data=achord-1; if(sign) return -data; /有符号的扩展值 else return data;3.5 延时子函数/延时void delay(int period) int i, j; for(i=0; iperiod; i+) for(j=0; j1; j+); 3.6 5402.cmd文件 实验中还需要添加5402.cmd文件,5402.cmd文件及其解释:MEMORY PAGE 0: VECS: origin = 0080h, length = 0080h /*内部程序RAM */ PRAM: origin = 0100h, length = 0FFFh /* 内部程序 RAM */ PAGE 1: SCRATCH: origin = 1000h, length = 0020h /* Scratch Pad Data RAM */ DMARAM: origin = 1020h, length = 0300h /* DMA缓存*/ DATA: origin = 1320h, length = 0080h /*内部数据RAM */ STACK: origin = 1400h, length = 0500h /* 堆栈内存空间 */ INRAM: origin = 1900h, length = 0100h /*内部数据 RAM */ HPRAM0: origin = 1A00h, length = 0002h /* HPI */ HPRAM1: origin = 1A02h, length = 0280h /* HPI */ HPRAM2: origin = 1C82h, length = 0280h /* HPI */ EXRAM: origin = 1F10h, length = 0EA00h /* 外部内存*/SECTIONS .cinit PRAM PAGE 0 .text PRAM PAGE 0 .vectors VECS PAGE 0 init_var PRAM PAGE 0 detect PRAM PAGE 0 vrcprg PRAM PAGE 0 matprg PRAM PAGE 0 .stack STACK PAGE 1 .trap SCRATCH PAGE 1 .const EXRAM PAGE 1 .data EXRAM PAGE 1 .bss EXRAM PAGE 1 .cio EXRAM PAGE 1 .switch EXRAM PAGE 1 tables EXRAM PAGE 1 var EXRAM PAGE 1 svctab EXRAM PAGE 1 /* SS_V LSP table */ vctab EXRAM PAGE 1 /* V LSP table */ uvctab EXRAM PAGE 1 /* UV LSP table */ cuvtab EXRAM PAGE 1 /* Stochastic codebook */ cdbktab EXRAM PAGE 1 /* various codebook tables*/ logtab EXRAM PAGE 1 /* table for log2 */ powtab EXRAM PAGE 1 /* table for pow2 */ hamtab EXRAM PAGE 1 /* table for hamming */ lgwtab EXRAM PAGE 1 /* table for lag window */ acostab EXRAM PAGE 1 /* table for arccos */ sqrtab EXRAM PAGE 1 /* table for square root */ acbtab EXRAM PAGE 1 /* table for thresholds in acb */ pm03tab EXRAM PAGE 1 /* table for x(-0.3) computation

温馨提示

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

评论

0/150

提交评论