1、dsp数字信号处理课程设计报告淮阴工学院DSP技术与应用课程设计报告选题名称: 语音压缩与回放 系(院): 计算机工程学院 专 业:计算机科学与技术(嵌入式系统软件设计)班 级: 计算机1073 姓 名: 魏庭九 学 号: 1071306123 指导教师: 马岱,常波 学年学期: 2009 2010 学年 第 2 学期 2010 年 6 月 11 日摘要: 数字化语音存储与回放系统的基本原理是对语音的录音与放音的数字化控制。其中,关键技术在于,为了增加语音存储时间,提高存储器的利用率,采用了非失真压缩算法对语音信号进行压缩后再存储,而在回放时再进行解压缩,同时,对输入语音信号进行数字滤波以抑制
2、杂音和干扰,从而确保了语音回放的可靠质量。随着超大规模集成电路 (VLSI)工艺的进步,高速数字信号处理器 (DSP)技术的飞速发展以及先进开发工具的完备 ,使得复杂的语音编解码算法在以高性 能微处理器为核心的硬件系统上实时实现成为可能 。本文介绍了一种基于目前性能价格比较高的16位定点 DSP芯片TMS320VC54X的语音压缩处理系统 , 可以直接作为会议电视、可视电话、IP 网络多媒体通信、远程医疗系统终端设备中声音信源编码解码器系统。关键词:语音;压缩;编码;DSP目 录1课题综述 11.1 课题来源 11.2 预期目标 11.3 前置知识 12 系统设计及分析 22.1 基础知识 2
3、2.2 实验方案 32.3 程序流程图 43 原理图 54 程序代码 54.1 主函数 54.2 a律压缩子函数 104.3 a律解压缩子函数 114.4 延时子函数 124.5 5402.cmd文件 124 程序运行与调试 154.1 实验结果 15总 结 17参考文献 181课题综述1.1 课题来源 语音信号是信息的重要形式, 语音信号处理有着广泛的应用领域,而语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中已经有较成熟的发展和广泛应用。本设计要求采用DSP及其A/D、D/A转换器进行语音信号的压缩、存储和回放。在通信应用领域中, 压缩语音信号的传输带宽或降低电话信道
4、的传输码率, 一直是设计人员追求的目标。语音编码在实现这一目标的过程中担当着重要的角色, 语音编码是压缩语音信号的数字表示, 而且是这些信号所需比特数最小的算法。可以说, 语音压缩技术的发展和人类信息技术的发展息息相关。因此, 对语音压缩技术的研究具有重要的现实意义。1.2 预期目标 (1)使用DSP实现语音的压缩和解压缩,算法自行定义。(2)将从MIC输入口实时采集的语音信号,通过A/D转换器进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示
5、。(5)利用多种算法进行语音压缩存储等,比较各算法的特点。1.3 前置知识基于TMS320VC54X为核心的语音压缩与回放需要掌握和了解如下几个知识:语音的采集与编码、量化、DPCM&ADPCM、采集与输出模块、a律压缩、A/D、D/A,以及DSP芯片选择等。2 系统设计及分析2.1 基础知识2.1.1 语音编码语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。波形编码的最简单形式就是脉冲编码调制(Pulse code modulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅 度进行编码,所以叫做脉冲编码调制。
6、脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。2.1.2 量化脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方 式。但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降 。 国际上有两种非均匀量化的方法:A律和u律,u律是最常用的一种。在美国,7位u律是长途电话质量的标准。 而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。 2.1.3 DPCM&ADPCM 降低传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。相邻的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得到压缩。因为差分信号
7、比原语音信号的动态范围和平均能量都小。这种编码叫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律压缩算法。美国采用
8、mu律算法进行脉冲编码。 令量化器过载电压为1,相当于把输入信号进行归一化,那么A律对数压缩定义为: 当0 = x = 1/A时,f(x)=(Ax)/(1+lnA) 当1/A = x 0;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); /
9、* 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); /* 6d
10、B 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);/关闭led
11、2 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
12、; 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_d
13、isable(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)语音
14、信号采集与回放程序/判断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) 数据存储
15、与处理i=i+1; if(i%2=1) bufferj=(temp18)&0x0ff; else temp2=bufferl&0x0ff; l+; 4.2 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,负数 =0 for (i=0;i16;i+) /确定temp中出现1的最高位 output=temp&0x
16、8000; if(output) break; /temp 左移i位后最高位为1 temp=1; achord=11-i; /段值 if (achord1)&0x0F;/段值为0,将absol左移1位得到量化值 else astep=(absolachord)&0x0F; /段值不为0,将absol左移 achord4095) /超过最大值4095,输出最大值0x7f output=0x7F; if(sign) return output=0xFF; /返回含有符号信息的输出值 else return output=0x7F;4.3 a律解压缩子函数/*a律解压缩*/int alaw2data
17、(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位后加1 data=astep+1; else data=astep+33; /扩展后数值中的6位非零值 data=achord-1;
18、if(sign) return -data; /有符号的扩展值 else return data;4.4 延时子函数/延时void delay(int period) int i, j; for(i=0; iperiod; i+) for(j=0; j1; j+); 4.5 5402.cmd文件 实验中还需要添加5402.cmd文件,5402.cmd文件及其解释:MEMORY PAGE 0: VECS: origin = 0080h, length = 0080h /*内部程序RAM */ PRAM: origin = 0100h, length = 0FFFh /* 内部程序 RAM */
19、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
20、, 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 m
21、atprg 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
22、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 /
23、* 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 */ costab EXRAM PAGE 1 /* table for cosine */ V23 INRAM PAGE 1 FSK INRAM PAGE 1 hpibuff0 HPRAM0 PAGE 1 hpibuff1 HPRAM1 PAGE 1 hpibuff2 HPRAM2 PAGE 1 dma_buff DMARAM
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1