1一.设计任务书语音信号是信息的重要形式,语音信号处理有着广泛的应用领域,而语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中已经有较成熟的发展和广泛应用。本设计要求采用DSP及其A/D、D/A转换器进行语音信号的压缩、存储和回放。1.1设计要求及目标基本部分:(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。发挥部分:使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。1.2设计思路语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。ITU-TG.711建议的PCMA律和µ律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。二.设计内容(1)编写C语言程序,并在CCS集成开发环境下调试通过。(2)实现设计所要求的各项功能。(3)按要求撰写设计报告。2三.设计方案、算法原理说明3.1设计方案方框图图3-13.2算法原理3.2.1语音编码概述将模拟声音信号转换为数字声音信号需要经过抽样、量化、编码三步。其中,信号采样率就是抽样的频率,A/D转换的位数对应了量化的精度。在DSK系统中这两步是由ADC(板载Codec)来实现的。这种以信号的强度依照同样的间距分成数段,然后用二进制码记录的编码方式称为PCM(脉冲编码调制)。其存储或传输时每秒的数据量为量化位数乘以采样率计算,如对于使用SEED-DSK5402实验板以16-bit采样位数、16000Hz采样率进行数字化后的声音信号一秒钟占用的容量为32kB。为了在电话线路上传输更多的语音话路,实际应用中还需要对PCM信号进行压缩。压缩编码的方式,是建立在语音信号的特点及统计规律之上的。首先,人说话的语音信号普遍在3kHz左右,最高基本不超过3.4kHz。其次,根据对大量语音样本的统计,我们知道,在语音信号中小幅度成分出现的概率要比大幅度多得多,因而对大幅度信号采用较低的量化精度,不会对整体效果产生太大的影响,即小幅度信号量化间隔小,大幅度信号的量化间隔大,这种量化方式即非均匀量化。根据以上原理,CCITT在上世纪80年代制订了G.711A律、μ律编码标准,通常又被称为A律PCM或μ律PCM。经过G.711标准编码后语音信号采样率为8kHz,按13段(A律)或15段(μ律)进行8位非均匀量化,每秒的数据量为8-bit×8000=64kbit=8kB。根据相关测试,其8-bit非均匀量化的效果可与13-bit均语音信号MICA/DA/μ率压缩存入SRAMA/μ率解压DAC语音信号SPEAKER3匀量化的效果相当。由于相比均匀量化来说,小幅度信号的量化间隔被变小,大幅度信号的量化间隔被拉大,故这种方式又成为压缩扩展(压扩)技术。压扩技术主要分为“模拟压扩法”和“直接非均匀编解码法”,不同之处在于对信号进行非线性量化的时刻不同。在本实验中,非均匀量化由软件在15-bit均匀量化的结果上实现,属于“直接非均匀编解码法”。3.2.2A率和μ率压缩,解压缩编码原理及对应表G.711的两个标准的压缩扩展特性曲线称为A律和μ律,是CCITT提出的G.711协议PCM编码方式的一部分。国际上,北美和日本使用μ律,欧洲和我国使用A律,两种算法都使用了非线性的量化方式,把量化间隔变换成人耳能检测的线性空间。其中A律将归一化后的幅度,正负分别分为了8段。如下图所示其中第1段、第2段斜率相同,因而下图的完整版(包含中心对称的正幅值和负幅值部分)常被称为A律13折线。每一段内,再均匀等分为16个量级。因此,总共的量化级数就由原先的215变为2×8×16=28,即256级。在图中也可以直观的看到,其量化间隔在信号幅度小时较信号幅度大时密集许多。同时,G..711标准建议编码后码字要进行偶数位翻转,然后进行传输。图3-2A律限制采样值为12+1比特,将压缩后的格式码定义为PSSSQQQQ,相当于将正负值输入分成8个区段(0~7)。其中P为符号位,0代表正,1代表负;SSS表示3位高位的区段码;QQQQ表示区段内码,区分不同输入的范围值。这种编码方式使压缩、解压缩变得简洁而有效率。下表为输入值与压缩编码间的关系,其中X为压缩中舍弃的位,输入值越大,被舍弃的位数就越多,每个输入值有其对应的最高有效位。其压扩特性的数学表达式如下:4)1||1(ln1||ln1)sgn()1||0(ln1||)sgn()(xAAxAxAxAxAxxFμ率除编码位数不同外,原理与A率相似。3.2.3DSK系统基本结构:5402DSK主要包括100MHzVC5402DSP,1个软件等待周期的64K字的外部SRAM存储器,256K字的FLASH存储器,内嵌的并口仿真器,模拟输入/输出音频接口,以及扩展板接口。其结构如下图:图3-3DSK的主要硬件资源包括:DSP主芯片1枚:100MHzTMS320VC5402DSPRAM1枚:1个软件等待的64K×16bit的SRAM(CY7C1021V33)FLASH1枚:256K×16bit的FLASH存储器(AM39VF400A)接口2个:用于仿真的JTAG测试总线控制器和一个连接到PC机并口的主机端接口HPI信号采集和输出端口:麦克风/耳机音频接口下面分别介绍:(1).DSP芯片DSK支持TMS320VC5402DSP,工作频率可以高达100MHz,工作的内核电压为1.8V。I/O电压为3.3V(2).外部数据存储器DSK提供了64字SRAM。可以使用的外部数据存储器的大小取决于DROM的设置。如果DROM=0,那么0x4000~0xFFFF(48Kwords)的空间是外部存储器(FLASH或SRAM)。如果DROM=1,外部存储器只能使用0x4000~0xEFFF。是否可以访问板上或扩展板存储器取决于DMSEL控制寄存器位。如果DMSEL=0(缺省),那么可以使用板上的数据存储器。如果DMSEL=1那么可以使用扩展板存储器,并且地址开始于0x8000。数据存储器空间资源也取决于MP/MC状态。(3).外部程序存储器5DSK提供了256K字的FLASH。外部程序存储器的可用大小取决于OVLY位的设置和MP/MC#跳线的设置。如果OVLY位=0、MP/MC#=0,那么程序存储器的空间0x0000~0xEFFF(60Kwords)映射到外部存储器,是FLASH还是SRAM决定于控制寄存器的FLASHENB状态位。在上电状态,FLASHENB位置位是为了允许从FLASH引导。然后软件清除此位,使具有1个等待状态的SRAM使用这个相同的存储器空间。如果MP/MC=1并且OVLY=0,那么0x0000~0xFFFF空间是分配给外部存储器(FLASH或SRAM)。使用FLASH存储器的情况下(FLASHENB=1),总线的速率为100MHz,访问FLASH需要7个等待状态。在SRAM情况下(FLASHENB=0),总线速率为100MHz时,访问SRAM需要1个等待状态。如果MP/MC=1并且OVLY=1,则只有x4000~0xFFFF是映射到外部存储器的。(4).I/O空间存储器I/O空间由2部分组成,一部分是系统基于CPLD的控制空间,另一部分是扩展板存储器空间。DM_SEL位是外部存储器存取控制寄存器位,能够控制I/O空间的访问。如果DSP向此位写1,那么扩展板存储器的I/O空间是不能被访问的。如果向此位写0,那么扩展板存储器的I/O空间可以被访问。(5).模拟输入/输出音频接口音频接口使用了2个标准的3.5mm的连接器:一个连接麦克风(J5)的音频输入一个连接耳机(J6)的音频输出麦克风的输入信号最大允许标准是500mVp。在DSK上有10dB前置放大器增益。当接入信号源的输入时,需要使用隔直电容(0.1u)。音频输入可以编程控制,在软件的控制下,可以提供0dB、+6dB、+12dB的增益。音频输出也是可以编程控制的,在软件的控制下,可以提供0dB、-6dB、-12dB的增益。DSK板上使用了AD50CODEC作为A/D和D/A的转换设备。它是内部集成了16位的A/D和D/A转换器以及抗混叠滤波器,采样速率最高可达22.05kHz。此外,ADC之后有一个抽取滤波器以提高输入信号的信噪比,在DAC之前有一个插值滤波器以保证输出信号平滑输出。AD50与DSP芯片通过同步串行通信接口(MCBSP1)相连。3.2.4TLC320AD50C的内部结构及初始化程序TLC320AD50C是TI公司生产的一个SIGMA-DELTA型16位串行A/D、D/A转换电路。采样速率可通过DSP编程来设置,最高可达22.05kHz。内含抗混叠滤波器和重构滤波器。在DAC之前有一个插值滤波器:保证输出信号平滑,在ADC之后有一个抽取滤波器:提高输入信号的信噪比6A/D、D/A转换器的初始化编程:/*获取设置A/D和D/A的句柄*/hHandset=codec_open(HANDSET_CODEC);/*设置CODEC的工作参数*//*DAC和ADC工作在15+1bit模式*/codec_dac_mode(hHandset,CODEC_DAC_15BIT);codec_adc_mode(hHandset,CODEC_ADC_15BIT);/*ADC模拟增益设置为6dB*/codec_ain_gain(hHandset,CODEC_AIN_6dB);/*设置DAC模拟输出增益为-6dB*/codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/*设置抽样频率为8KHz*/codec_sample_rate(hHandset,SR_8000);3.2.5McBSP的结构及寄存器部分配置McBSP:多通道缓冲串行口(Multi-channelBufferedSerialPort),是串行口的一种。它既可以利用DSP提供的DMA功能实现自动缓存功能,又可以实现时分多路通信功能。TMS320C5402有两个McBSP串口,分别为McBSP0、McBSP1。McBSP由引脚、接收发送部分、时钟及祯同步信号产生、多通道选择以及CPU中断信号和DMA同步信号组成。引脚中我们用到的只有两个:DR和DX,通过这两个引脚实现DSP与外部设备的通信和数据交换。DR用来接收数据,DX完成数据的发送。这两个引脚分别对应两个寄存器DRR和DXR,如果准备就绪,从这两个寄存器中就可以读取数据了。(注:两个McBSP串口,所以两个寄存器分别用DRR1、DXR1、DRR2、DXR2表示)那么如何判断接收器和发送器是否准备就绪呢?这就采用了SPCR1、SPCR2控制位来判断。当RRDY=0时,接收器未就绪;当RRDY=1时,接受器就绪,可以从DDR1或2种读取数据。当XRDY=0时,发送器尚未就绪;当XRDY=1时,发送器就绪,可以从XDR1或2种发送数据。所以在实际实验中我们采用以下语句命令:(1).接收数据时while(!MCBSP_RRDY(HANDSET_CODEC)){};//查询、等待接收handset处的采样data=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);//从handset处读取采样7(2).发送数据时while(!MCBSP_XRDY(HANDSET_CODEC)){};*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=data1;//a律解压完成后,DSP将数据通过串行口McBSP1发送3.2.6均匀量化、非均匀量化如果采用相