DSP课程设计语音压缩存储回放

上传人:无*** 文档编号:51279825 上传时间:2022-01-25 格式:DOCX 页数:14 大小:154.33KB
收藏 版权申诉 举报 下载
DSP课程设计语音压缩存储回放_第1页
第1页 / 共14页
DSP课程设计语音压缩存储回放_第2页
第2页 / 共14页
DSP课程设计语音压缩存储回放_第3页
第3页 / 共14页
资源描述:

《DSP课程设计语音压缩存储回放》由会员分享,可在线阅读,更多相关《DSP课程设计语音压缩存储回放(14页珍藏版)》请在装配图网上搜索。

1、DSP课程设计实验报告语音压缩、存储与回放 小组成员: 自动化0801 宋晓美 08212012 自动化0801 王 丹 08212014指导教师: 高海林2011年1月概述 数字信号处理(DSP)课程设计是信息与通信、自动化和电子科学技术专业本科生进行综合能力培养的实践课程,是培养学生DSP系统的软硬件工程设计能力的重要实践教学环节,对于全面、系统、深入地理解与掌握信号处理知识与设计方法具有重要的教学意义。作为通信专业的毕业生,理应牢固掌握数字信号处理的相关知识,了解集成开发环境的使用和调试方法,内化信号处理的基本理论知识。 本次实验采用DSP C5402实验板实现语音信号的压缩与解压的。

2、语音信号是信息的重要形式, 语音信号处理有着广泛的应用领域,而语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中以及有较成熟的发展并且已经广泛应用。 实验主要分为语音信号接收、压缩、解压和输出几部分。 信号的接收和输出采用DMA方式,DMA是C5400 DSP系统中非常重要的片上外设,其控制器可以在不影响CPU的情况下完成数据的传输,因此数据传输速度快,其数据的源和目的可以是片内存储器片上外设和片外设备。C5402的DMA拥有6个独立的可编程通道,允许6个不同的DMA操作。另外DMA控制器还相应HPI的服务请求。SEED-VC5402 DSK实验板上集成了SRAM,FLAS

3、H,音频输入输出接口等部件。这些外设为我们提供了极大的方便。 语音信号模数、数模转换采用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的片内和片

4、外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4) 使用指示灯对语音存储和回放过程进行指示。2、设计思路 语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。ITU-T G.711建议的PCM A律和律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。3、 设计任务(1)编写C语言程序,并在CCS集成开发环境下调试通过。(2)实现设计所要求的各项功能。(3)按要求撰写设

5、计报告。二、实验原理1.语音编码(1)概念:语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。PCM编码即脉冲编码调制。波形编码的最简单形式就是脉冲编码调制(Pulse code modulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅 度进行编码,所以叫做脉冲编码调制。 脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。 (2)量化:脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降 。 国际上有两种非均

6、匀量化的方法:A律和律,律是最常用的一种。在美国,7位律是长途电话质量的标准。 而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。 2.压缩、解压原理 由于语音信号是模拟信号,要对语音信号进行压缩、存储就必须对语音信号进行模/数转换,把转换后的语音数字信号输入DSP系统,由DSP系统对语音数字信号进行处理。把处理后的数字信号进行数/模转换,转变成原来的模拟语音信号,然后通过耳机或其他音频输出设备把语音进行回放。语音的采集和回放的基本结构图如图3所示。模拟信号源A/D转换电路数字逻辑电路DSPD/A转换电路模拟信号输出 图3 语音的采集和回放的基本结构图数据压缩技术是信息系统的重要技术。为

7、了实现对模拟信号的高效处理,往往在模/数转换的过程中就须要压缩主要程序。目前通信系统中最常用的就是A律和u律两种压缩编码技术。u律/A律压缩解压编码是CCITT国际电报电话协会最早推出的G.711语音压缩解压编码的一种格式的主要内容。其中欧洲和中国等国家采用A律压缩解压编码,美国和日本等国家采用u律压缩解压编码。A律算法:本实验所用的A律压缩解压编码,通过DSP将传输来的压缩后的数据进行行解压成16位,然后对解压后的数据进行分析、处理。然后将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其它设备读取。A律算法公式:下图是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DS

8、P通用数据格式。其中高13位为解压后的数据,低3位补0。这是因为G.711的A律压缩只能对13位的数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中。只要运行发送指令缓冲串口就会将数据发送出去。图4 数据压缩解压流程图DSP的内部缓冲串口带有硬件实现的u律和A律压缩解压,用户只需在相应寄存器中设置就可以了。TMS320C5402硬件支持律和A律压缩算法无需重新设置,直接编程调用查找表即可,在进行A律压缩时,对于采样到的12(应改为13)位数据,默认其最高位为符号位,压缩时要保证最高位即符号位不变,原数据后11(应改为12)位要压缩成7位。这7位码由3位段落码和4位段内码组成。压缩后数据的

9、最高位(第7位)表示符号,量价分别为1、1、2、4、8、16、32、64,由压缩后数据的第6位到第4位决定,第三位到第0位是段内码。压缩后的数据有一定的失真,数据压缩前后的对照表如表1所示。12位码(十进制)量价符号位段落码(二进制)段内码(二进制)015100000000111116311000100001111326320010000011116412740011000011111282558010000001111256511160101000011115121023320110000011111024204764011100001111表1 A律数据压缩表律算法:采用律算法对采集的语音

10、数据进行处理,律编码是一种针对语音信号进行对数压缩非均匀量化的方案。采用律对信号进行对数形式的压缩,以便在不提高数据量的前提下提高信噪比,尽管量化的位数保持不变,但动态范围增加了。律压缩的语音信号一般用8比特抽样数据表示,携带小信号信息量比大信号信息量多。从统计意义上讲,有用信号更可能在小信号区间而非大信号区间。因此,在小信号区间需要更多的量化点数。 律算法公式:其中Xmax是信号x(n)的最大幅度,u是控制压缩程序的参数,u越大压缩就越厉害律查找表内共有256个数,分别用来获得07段量化电压,其由1616组数组成。 由下表看大信号多数由第7段表示,三个指数位用来表示第0-7段,4个尾数位用于

11、表示后4个有效位,还有一位符号位没有给出。16比特输入数据是由线性数据变换成8比特律数据(模拟传输),然后再从律转成16比特的线性数据(模拟接收),再输出到编解码器。压缩前码字丢弃的比特数压缩后的码字偏置的输入(模值,无符号位)量化后的值(无符号位)比特:14 13 12 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 1 a b c d 1 3 0 0 0 a b c d 0 0 0 0 0 0 1 a b c d 1 4 0 0 1 a b c d 0 0 0 0 0 1 a b c d 1 5 0 1 0 a b c d

12、 0 0 0 0 1 a b c d 1 6 0 1 1 a b c d 0 0 0 1 a b c d 1 7 1 0 0 a b c d 0 0 1 a b c d 1 8 1 0 1 a b c d 0 1 a b c d 1 9 1 1 0 a b c d 1 a b c d 1 10 1 1 1 a b c d 表2 线性到U律转换表(压缩表)上表为压缩表:其中压缩后的数据为8位,符号位未写出。其解压表与之相反:由8位U律变换到线性16位。 上图给出了按m律压扩算法的输入输出特性曲线,m为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比。由图可见,m值越大,压缩量越大。由于m

13、律压扩的输入和输出关系是对数函数关系,所以这种编码又称为对数PCM。 A律压扩与m律压扩相比,则压缩的动态范围略小些,小信号振幅时质量要比m律稍差。无论是A律还是m律算法,它们的特性在输入信号振幅小时都呈线性,在输入信号振幅大时呈对数压缩特性。 对于采样频率为8kHz,样本精度为16位的输入信号,使用A律压扩或m律压扩编码,经过PCM编码器之后每个样本的精度为8位,输出的数据率为64kb/s。这个数据就是CCITT ,(国际电话与电报顾问委员会)推荐的G.711标准:话音频率脉冲编码调制。3.存储和回放 通过定义适当大的缓冲区,将压缩后的8位或4位数据经过相应的整合,存储到16位的RAM中,这

14、种操作目的主要是充分利用存储器中的资源,以保证能够录入足够多的语音数据。利用缓冲区的目的是进行音效的实时处理系统中各模块是同时进行处理的,一部分信号正在ADC中进行转换,而另一部分信号则在DSP处理器中同时进行算法处理,即整个系统是以流水线的方式进行工作的。 通过解压缩,将8位或4位数据还原成相应的语音数据,在经过AD50C将数字信号还原成语音信号(即模拟信号)通过多通道缓冲串口输出,达到放音的目的。三、软件设计程序流程图:开始实验板初始化CODEC与McBSP初始化与工作方式设置输入语音信号语音压缩、存储解压、回放是否结束?YN结束定时器延时1.DSK板的初始化:首先将DSP的串口1复位,再

15、对串口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);

16、/* DAC15bit模式 */ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC15bit模式 */ 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的工作模式,模拟输入和输出的增

17、益;以及AD/DA的转换速率。1) 用TMS320VC5402实现语音的A率压缩解压有两种方法:(1)使用多通道缓冲串口(McBSP)的缩展器在多缓冲通道串口(McBSP)内部装置了硬件电路,支持A律格式缩展器,对数据进行压缩与扩展,A律缩展器允许14比特的动态范围。(2)用软件实现主程序的功能是从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,构成AD50 CODEC模拟输入和输出通道的自环,是否能接收到A/D转换的数据是通过查询串口1的接收标志RRDY来进行的。四、程序设计:主程序:#include /* 头文件*/#include #includ

18、e #include /* 宏定义 */#defineSIGN_BIT(0x80)/* Sign bit for a A-law byte. */#defineQUANT_MASK(0xf)/* Quantization field mask. */#defineNSEGS(8) /* Number of A-law segments. */#defineSEG_SHIFT(4) /* Left shift for segment number. */#defineSEG_MASK(0x70)/* Segment field mask. */* 函数声明 */void delay(s16 pe

19、riod);void led(s16 cnt);void initcodec(void);void flashenable(void);unsigned char data2alaw(s16 pcm_val);int alaw2data(unsigned chara_val);static int search(int val,short*table,int size);/* 全局变量 */HANDLE hHandset;s16 data;s16 data1;u16 i=0;u16 temp1;u16 j=0;u16 k,l=0;u8 temp2;u16 buffer20000;static

20、short seg_end8=0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF;/* 主函数 */void main() if (brd_init(100) return; led(2); /闪灯两次 initcodec(); /初始化codec flashenable(); /选择片外FLASH为片外存储器 /* delay(100); brd_led_toggle(BRD_LED0); for(i=0x9000;i0xefff;i+) REG_WRITE(i,*(volatile u16*)DRR1_ADDR(HANDSET_CODEC); delay

21、(20); brd_led_toggle(BRD_LED1); delay(200); for(i=0x9000;i0xefff;i+) *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=REG_READ(i); delay(20); brd_led_toggle(BRD_LED2); */ while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset处的采样 brd_led_toggle(BRD_LED0); data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);

22、 /从handset处读取采样 temp1=data2alaw(data); /对采样进行a律压缩 /* 把低地址数据放在高八位 高地址数据放在低八位 */ i=i+1; if(i%2=1) bufferj=(temp1=40000) i=0; if(j=20000) j=0; brd_led_disable(BRD_LED0); brd_led_toggle(BRD_LED1); /点亮二极管1 表示放音开始 /* 放音部分 */ for(k=0;k8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l=20000) l=0; data1=alaw2data

23、(temp2); / a律解压 while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /将数据写入D/A转换器 /* 放音结束 */ brd_led_toggle(BRD_LED0); brd_led_toggle(BRD_LED1); /主程序结束 /* 子函数 */ /*延时*/void delay(s16 period) int i, j; for(i=0; iperiod; i+) for(j=0; j1; j+); /*闪灯*/void led(s16 cnt)whi

24、le ( cnt- )brd_led_toggle(BRD_LED0); /切换LED指示灯0的显示状态delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000);/*初始化codec*/void initcodec(void) /* Open Handset Codec 获取设置codec的句柄*/ hHandset = codec_open(HANDSET_CODEC); / Acquire handle to codec /* Set codec parameters */ c

25、odec_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_6dB); / -6dB gain on analog output from DAC codec_sampl

26、e_rate(hHandset,SR_8000); / 8KHz sampling rate /*设置flash*/void flashenable(void)CPLD_CTRL2_REG|=0x0010;CPLD_DMCTRL_REG|=0x0040;/*a律压缩*/unsigned char data2alaw(s16 pcm_val) intmask;intseg;unsigned charaval;if (pcm_val = 0) mask = 0xD5; / 标记 (7th) bit = 1 else mask = 0x55; / 标记 bit = 0 pcm_val = -pcm_

27、val;/ Convert the scaled magnitude to segment number. seg = search(pcm_val, seg_end, 8); / Combine the sign, segment, and quantization bits. if (seg = 8) / out of range, 返回最大数. return (0x7F mask);else aval = seg SEG_SHIFT;if (seg 1) & QUANT_MASK;elseaval |= (pcm_val seg) & QUANT_MASK;return (aval ma

28、sk);/*alaw的子程序*/static int search(int val,short*table,int size)inti;for (i = 0; i size; i+) if (val = *table+)return (i);return (size);/*a律解压*/int alaw2data(unsigned chara_val)intt;intseg;a_val = 0x55; t = (a_val & QUANT_MASK) SEG_SHIFT;if(seg=0) t += 8; t=(t3);if(seg0) t +=0x108; t=(t(4-seg);if(seg3)t+=0x108;t=(t=(seg-4);return (a_val & SIGN_BIT) ? t : -t);/* 结束 */

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!