DSP课程设计实验报告语音压缩、存储与回放小组成员:自动化0801宋晓美08212012自动化0801王丹08212014指导教师:高海林2011年1月概述数字信号处理(DSP)课程设计是信息与通信、自动化和电子科学技术专业本科生进行综合能力培养的实践课程,是培养学生DSP系统的软硬件工程设计能力的重要实践教学环节,对于全面、系统、深入地理解与掌握信号处理知识与设计方法具有重要的教学意义。作为通信专业的毕业生,理应牢固掌握数字信号处理的相关知识,了解集成开发环境的使用和调试方法,内化信号处理的基本理论知识。本次实验采用DSPC5402实验板实现语音信号的压缩与解压的。语音信号是信息的重要形式,语音信号处理有着广泛的应用领域,而语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中以及有较成熟的发展并且已经广泛应用。实验主要分为语音信号接收、压缩、解压和输出几部分。信号的接收和输出采用DMA方式,DMA是C5400DSP系统中非常重要的片上外设,其控制器可以在不影响CPU的情况下完成数据的传输,因此数据传输速度快,其数据的源和目的可以是片内存储器片上外设和片外设备。C5402的DMA拥有6个独立的可编程通道,允许6个不同的DMA操作。另外DMA控制器还相应HPI的服务请求。SEED-VC5402DSK实验板上集成了SRAM,FLASH,音频输入输出接口等部件。这些外设为我们提供了极大的方便。语音信号模数、数模转换采用AD50,这是一款SIGMA-DELTA型单片音频接口芯片(AIC)。它内部集成了16位的D/A和A/D转换器,采样速率最高可达22.05kb/s,其采样速率可通过DSP编程来设置。在DAC之前有一个插值滤波器以保证输出信号平滑和ADC之后有一个抽取滤波器以提高输入信号的信噪比。一、设计任务书1、设计要求及目标(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。2、设计思路语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。ITU-TG.711建议的PCMA律和µ律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。3、设计任务(1)编写C语言程序,并在CCS集成开发环境下调试通过。(2)实现设计所要求的各项功能。(3)按要求撰写设计报告。二、实验原理1.语音编码(1)概念:语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。PCM编码即脉冲编码调制。波形编码的最简单形式就是脉冲编码调制(Pulsecodemodulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅度进行编码,所以叫做脉冲编码调制。脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。(2)量化:脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降。国际上有两种非均匀量化的方法:A律和μ律,μ律是最常用的一种。在美国,7位μ律是长途电话质量的标准。而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。2.压缩、解压原理由于语音信号是模拟信号,要对语音信号进行压缩、存储就必须对语音信号进行模/数转换,把转换后的语音数字信号输入DSP系统,由DSP系统对语音数字信号进行处理。把处理后的数字信号进行数/模转换,转变成原来的模拟语音信号,然后通过耳机或其他音频输出设备把语音进行回放。语音的采集和回放的基本结构图如图3所示。模拟信号源A/D转换电路数字逻辑电路DSPD/A转换电路模拟信号输出图3语音的采集和回放的基本结构图数据压缩技术是信息系统的重要技术。为了实现对模拟信号的高效处理,往往在模/数转换的过程中就须要压缩主要程序。目前通信系统中最常用的就是A律和u律两种压缩编码技术。u律/A律压缩解压编码是CCITT国际电报电话协会最早推出的G.711语音压缩解压编码的一种格式的主要内容。其中欧洲和中国等国家采用A律压缩解压编码,美国和日本等国家采用u律压缩解压编码。A律算法:本实验所用的A律压缩解压编码,通过DSP将传输来的压缩后的数据进行行解压成16位,然后对解压后的数据进行分析、处理。然后将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其它设备读取。A律算法公式:下图是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DSP通用数据格式。其中高13位为解压后的数据,低3位补0。这是因为G.711的A律压缩只能对13位的数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中。只要运行发送指令缓冲串口就会将数据发送出去。图4数据压缩解压流程图DSP的内部缓冲串口带有硬件实现的u律和A律压缩解压,用户只需在相应寄存器中设置就可以了。TMS320C5402硬件支持μ律和A律压缩算法无需重新设置,直接编程调用查找表即可,在进行A律压缩时,对于采样到的12(应改为13)位数据,默认其最高位为符号位,压缩时要保证最高位即符号位不变,原数据后11(应改为12)位要压缩成7位。这7位码由3位段落码和4位段内码组成。压缩后数据的最高位(第7位)表示符号,量价分别为1、1、2、4、8、16、32、64,由压缩后数据的第6位到第4位决定,第三位到第0位是段内码。压缩后的数据有一定的失真,数据压缩前后的对照表如表1所示。12位码(十进制)量价符号位段落码(二进制)段内码(二进制)0~15100000000~111116~31100010000~111132~63200100000~111164~127400110000~1111128~255801000000~1111256~5111601010000~1111512~10233201100000~11111024~20476401110000~1111表1A律数据压缩表μ律算法:采用μ律算法对采集的语音数据进行处理,μ律编码是一种针对语音信号进行对数压缩非均匀量化的方案。采用μ律对信号进行对数形式的压缩,以便在不提高数据量的前提下提高信噪比,尽管量化的位数保持不变,但动态范围增加了。μ律压缩的语音信号一般用8比特抽样数据表示,携带小信号信息量比大信号信息量多。从统计意义上讲,有用信号更可能在小信号区间而非大信号区间。因此,在小信号区间需要更多的量化点数。μ律算法公式:其中Xmax是信号x(n)的最大幅度,u是控制压缩程序的参数,u越大压缩就越厉害μ律查找表内共有256个数,分别用来获得0—7段量化电压,其由16×16组数组成。由下表看大信号多数由第7段表示,三个指数位用来表示第0-7段,4个尾数位用于表示后4个有效位,还有一位符号位没有给出。16比特输入数据是由线性数据变换成8比特μ律数据(模拟传输),然后再从μ律转成16比特的线性数据(模拟接收),再输出到编解码器。压缩前码字丢弃的比特数压缩后的码字偏置的输入(模值,无符号位)量化后的值(无符号位)比特:14131211109876543210比特:654321000000001abcd1╳╳3000abcd0000001abcd1╳╳╳4001abcd000001abcd1╳╳╳╳5010abcd00001abcd1╳╳╳╳╳6011abcd0001abcd1╳╳╳╳╳╳7100abcd001abcd1╳╳╳╳╳╳╳8101abcd01abcd1╳╳╳╳9110abcd╳╳╳╳1abcd1╳╳╳╳╳╳╳╳╳10111abcd表2线性到U律转换表(压缩表)上表为压缩表:其中压缩后的数据为8位,符号位未写出。其解压表与之相反:由8位U律变换到线性16位。上图给出了按律压扩算法的输入输出特性曲线,为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比。由图可见,值越大,压缩量越大。由于律压扩的输入和输出关系是对数函数关系,所以这种编码又称为对数PCM。A律压扩与律压扩相比,则压缩的动态范围略小些,小信号振幅时质量要比律稍差。无论是A律还是律算法,它们的特性在输入信号振幅小时都呈线性,在输入信号振幅大时呈对数压缩特性。对于采样频率为8kHz,样本精度为16位的输入信号,使用A律压扩或律压扩编码,经过PCM编码器之后每个样本的精度为8位,输出的数据率为64kb/s。这个数据就是CCITT,(国际电话与电报顾问委员会)推荐的G.711标准:话音频率脉冲编码调制。3.存储和回放通过定义适当大的缓冲区,将压缩后的8位或4位数据经过相应的整合,存储到16位的RAM中,这种操作目的主要是充分利用存储器中的资源,以保证能够录入足够多的语音数据。利用缓冲区的目的是进行音效的实时处理.系统中各模块是同时进行处理的,一部分信号正在ADC中进行转换,而另一部分信号则在DSP处理器中同时进行算法处理,即整个系统是以流水线的方式进行工作的。通过解压缩,将8位或4位数据还原成相应的语音数据,在经过AD50C将数字信号还原成语音信号(即模拟信号)通过多通道缓冲串口输出,达到放音的目的。三、软件设计程序流程图:1.DSK板的初始化:首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:禁止SPI模式,但数据相,每帧一字,每字16位,帧同步脉冲低电平有效,并且帧同步信号和移位信号有外部时钟产生。DSP给AD50编程用查询方式,A/D转换数据的接收和D/A转换的数据发送采用查询方式。此语句调用了函数codec_open()对串口1进行了初步设置,设置成功返回codec的句柄放在变量hHandset中,作为调用其他函数的实参。2.AD50(即CODEC)的初始化:hHandset=codec_open(HANDSET_CODEC);codec_dac_mode(hHandset,CODEC_DAC_15BIT);/*DAC15bit模式*/codec_adc_mode(hHandset,CODEC_ADC_15BIT);/*ADC15bit模式*/开始实验板初始化CODEC与McBSP初始化与工作方式设置输入语音信号语音压缩、存储解压、回放是否结束?YN结束定时器延时codec_ain_gain(hHandset,CODEC_AIN_6dB);/*输入6dB增益*/codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/*输出-6dB增益*/codec_sample_rate(hHandset,SR_16000);/*16KHz采样率*/该初始化过程调用了5个函数对AD50的5项参数进行了设置,包括ADC和DAC的工作模式,模拟输入和输出的增益;以及AD/DA的转换速率。1)用TMS320VC5402实现语音的A率压缩解压有两种方法:(1)使用多通道缓冲串口(McBSP)的缩展器在多缓冲通道串口(McBSP)内部装置了硬件电路,支持A律格式缩展器,对数据进行压缩与扩展,A律缩展器允许14比特的动态范围。(2)用软件实现主程序的功能是从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,构成AD50CODEC模拟输入和输出通道的自环,是否能接收到A/D转换的数据是通过查询串口1的接收标志RRDY来进行的。四、程序设计:主程序:#includetype.h/*头文件*/#includeboard.h#includecodec.h#includemcbsp54.h/*宏定义*/#