欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    DSP技术与应用课程设计报告基于DSP的语音处理系统设计.doc

    • 资源ID:4146385       资源大小:406.50KB        全文页数:27页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    DSP技术与应用课程设计报告基于DSP的语音处理系统设计.doc

    淮阴工学院DSP技术及应用课程设计报告选题名称: 基于DSP的语音处理系统设计 系(院): 计算机工程学院专 业: 计算机科学与技术(嵌入式软件设计) 班 级: 计算机1073班 姓 名: 学 号: 指导教师: 学年学期: 2009 2010 学年 第 2 学期2010年 5 月 30 日摘要:提出一个基于DSP的音频信号采集,存储,回放的处理系统。介绍了该系统的总体方案和硬软件设计。讨论了模/数(A/D)和数/模(D/A)转换电路的设计方法以及如何采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。使用DSP实现语音压缩和解压缩的基本算法实现对语音信号的压缩,存储,回放。实验证明:所设计的基于DSP的硬件和软件系统是一个很好的音频信号采集与处理系统。关键词:语音处理;音频信号;DSP;音频压缩回放目录1 绪论31课程设计要求与目标32课程设计目的32系统详细设计42.1语音采集与输出模块42.2语音编码42.3 DPCM&ADPCM:52.4 a律压缩53程序设计93.1程序流程图93.2 代码编写104 调试过程215 运行结果22总 结25参考文献261 绪论1课程设计要求与目标(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。发挥部分:使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。2课程设计目的1、通过本实验掌握5402DSP片上外设多通道缓冲串行口mcbsp。2、学习掌握tlc320ad50CODEC编译码器的内部结构、工作原理。3、学习A律语音压缩以及C语言下的编程方法。2系统详细设计2.1语音采集与输出模块语音采集与输出模块采用的是TI公司推出的一款高性能的立体声音频Codec芯片TLC320AD50C,内置耳机输出放大器,支持MIC和LINE IN两种输入方式(二选一),且对输入和输出都具有可编程增益调节。AD50的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigmadelta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。与此同时,AD50还具有很低的能耗,回放模式下功率仅为23mW,省电模式下更是小于15uW。由于具有上述优点,使得AD50是一款非常理想的音频模拟I/O器件,可以很好的应用在随声听(如CD,MP3)、录音机等数字音频领域2。由TLC320AD50C组成的语音输入与输出模块不仅采样率高最高可达96K,且外围电路简单,性价比高。2.2语音编码(1)概念: 语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。 PCM编码即脉冲编码调制。 波形编码的最简单形式就是脉冲编码调制(Pulse code modulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅 度进行编码,所以叫做脉冲编码调制。 脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。 (2)量化: 脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方 式。但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降 。 国际上有两种非均匀量化的方法:A律和u律,u律是最常用的一种。在美国,7位u律是长途电话质量的标准。 而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。 2.3 DPCM&ADPCM: 降低传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。相邻的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得到压缩。因为差分信号比原语音信号的动态范围和平均能量都小。这种编码叫Differential PCM,简称DPCM,即差分脉冲编码调制。 ADPCM即自适应差分脉冲编码调制,是包括短时预测的编码系统。CCITT(国际电报电话咨询委员会)在1984年提出的32 kbit/s的编码器建议就是采用ADPCM作为长途传输中的国际通用语音编码方案。这种ADPCM编码方案达到64 kbit/s PCM的语音传输质量,并具有很好的抗误码性能。2.4 a律压缩a律压缩示意图图2-4-1 a律压缩示意图A律压缩编码表线性输入编码压缩编码0000000wxyza000wxyz0000001wxyza001wxyz000001wxyzab010wxyz00001wxyzabc011wxyz0001wxyzabcd100wxyz001wxyzabcde101wxyz01wxyzabcdef110wxyz1wxyzabcdefg111wxyz表2-4-1 A律压缩编码表采用DSP可以直接对PCM编码后的语音信号进行律和A律压缩。图1是DSP硬件实现数据压缩解压的简单流程,DSP将传输来的压缩后的数据进行解压成16位或者32位,然后对解压后的数据进行分析、处理,最后将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其他设备读取。图2-4-2 数据压缩解压流程图2是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DSP通用数据格式,其中高13位为解压后的数据,低3位补0。这是因为6711的A律压缩只能对13位数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中,只要运行发送指令,缓冲串口就会将数据发送出去。缓冲串口对接收数据的解压过程和压缩过程完全相反。图3是律数据解压的示意图。图2-4-3 A律数据解压图2-4-4 律数据解压DSP内部的缓冲串口(McBSPs)带有硬件实现的律A律压缩解压,用户只需要在相应寄存器中进行设置就可以了。在进行A律压缩时,采样后的12位数据,默认其最高位为符号位,压缩时要保持最高位即符号位不变,原数据的后11位要压缩成7位。这7位码由3位段落码和4位段内码组成。具体的压缩变换后的数据根据后11位数据大小决定。表2-4-2    A律数据压缩表除对串行口数据实现压扩处理外,这套硬件在McBSP不使用时还可以当作一个特殊的处理单元对内部数据实现压扩处理,他有两种实现方法。法一:当串行口的发送和接受部分都处于复位状态时,DRR1和DXR1内部通过压扩逻辑连接在一起,数据从DXR1写入并根据XCOMPAND处理,然后根据RCOMPAND再处理,在4个CPU时钟后从DRR1中读出数据。该处理比软件实现快,不利之处在于处理完后没有同步信息通知CPU和DMA。法二:在数据环回模式下,McBSP也实现了一种内连。数据处理与第一种方法相同,但它可以提供中断信号(或同步事件)给CPU(或DMA)。这里数据处理的时间是根据串行口的比特律确定的。另外,在通常情况下McBSP先传输信号的高位后传输低位,但是在字长为8比特的数据传输时,McBSP提供了比特倒序的功能,即可以先传输低位后传输高位。在本实验中,我们通过软件编程来完成线性码转换成A律。语音信号通常是小信号概率大,大信号出现的概率小,为提高小信号时的量化信躁比,压缩比特速率,可为非线性量化。语音压缩是把16位的数据比特转化为8位数据比特,从而到达语音压缩的目的。在主程序中通过A/D抽样量化,可以得到16位的线性编码,再由编码表通过软件计算得到8位A律编码,其中最高位为符号位,第6位到第4位为段落码,低4位为段内码。将8位的压缩结果存储到系统RAM中进行缓存,根据抽样率、语音存储时间以及系统RAM的容量设置语音存储缓冲区的大小,待缓冲区存满后,将缓冲区内的数据进行解压缩,然后输出到SPEAKER接口输出端。若使用A/D转换器,必须首先对A/D转换器进行初始化设置,即设置A/D转换器的工作模式、输入增益以及抽样频率等。 3程序设计3.1程序流程图图3-1 程序流程图3.2 代码编写存储器的分配(5402.cmd)MEMORY PAGE 0: VECS: origin = 0080h, length = 0080h /* Internal Program RAM */ PRAM: origin = 7600h, length = 8000h /* Internal Program RAM */ PAGE 1: SCRATCH: origin = 0060h, length = 0020h /* Scratch Pad Data RAM */ DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */ DATA: origin = 1100h, length = 0080h /* Internal Data RAM */ STACK: origin = 1180h, length = 0560h /* Stack Memory Space */ INRAM: origin = 1900h, length = 0100h /* Internal Data RAM */ HPRAM0: origin = 1A00h, length = 0002h /* HPI memory accessible by Host and DSP */ HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */ HPRAM2: origin = 1C82h, length = 0280h /* HPI memory accessible by Host and DSP */ EXRAM: origin = 1F10h, length = 9000h /* External Data RAM */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 */ 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 PAGE 1/*主程序设计*/*语音采集及回放程序*/*用A律进行压缩及解压*/*采用AD50进行A/D,D/A转换 */ /*灯循环闪烁程序开始*/*L0:录音*/*L1:放音*/#include <type.h> /* 头文件*/#include <board.h>#include <codec.h>#include <mcbsp54.h>/* 宏定义 */#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 period);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 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;i<0xefff;i+) REG_WRITE(i,*(volatile u16*)DRR1_ADDR(HANDSET_CODEC); delay(20); brd_led_toggle(BRD_LED1); delay(200); for(i=0x9000;i<0xefff;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); /从handset处读取采样 temp1=data2alaw(data); /对采样进行a律压缩 /* 把低地址数据放在高八位 高地址数据放在低八位 */ i=i+1; if(i%2=1) bufferj=(temp1<<=8); /*奇数数据左移8位 temp1=abcdefgh00000000bufferj=temp1*/ else bufferj=(bufferj|temp1); /*偶数数据与temp1取或 组成新的数据 bufferj=abcdefghiabcdefghi*/ j+; /j加1 if(i>=40000) i=0; if(j>=20000) j=0; brd_led_disable(BRD_LED0); brd_led_toggle(BRD_LED1); /点亮二极管1 表示放音开始 /* 放音部分 */ for(k=0;k<40000;k+) if(k%2=0) temp2=(bufferl>>8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l>=20000) l=0; data1=alaw2data(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; i<period; i+) for(j=0; j<period>>1; j+); /*闪灯*/void led(s16 cnt)while ( 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 */ 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_6dB); / -6dB gain on analog output from DAC codec_sample_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_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 < 2)aval |= (pcm_val >> 1) & QUANT_MASK;elseaval |= (pcm_val >>seg) & QUANT_MASK;return (aval mask);/*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) << 4;seg = (unsigned)a_val & SEG_MASK) >> SEG_SHIFT;if(seg=0) t += 8; t=(t>>3);if(seg<4)&&(seg>0) t +=0x108; t=(t>>(4-seg);if(seg>3)t+=0x108;t=(t<<=(seg-4);return (a_val & SIGN_BIT) ? t : -t);/* 结束 */ 4 调试过程1将工程文件夹放入C盘要求目录下。2. 打开CCS,Project open,打开工程文件。3进行编译,连接。4根据错误提示,对build option进行正确的设置,修改头文件路径。5再编译,连接,显示没有错误。6load program-run,此时三盏灯循环亮,之后程序开始,第一盏灯亮开始录音,一段时间后第二盏灯亮开始放音,然后又开始录音。依次循环。5 运行结果1.观察数据结果Viewwatch window我们输入buffer,显示此数组的值,如图D所示。2观察数据图形ViewGraphTime Frequency可以加入断点,然后按Animate 动态显示。分别观察语音输入(存放在变量data中)波形,压缩后波形(temp1),解压后输出波形(data1),图形分别为A,B,C。3观察存储器中数据ViewMemory经过多次调试,使录音时间在保持音质的前提下达到5-6秒。A输入波形(data)图5-1 输入波形B压缩后波形(temp1)图5-2压缩后波形C解压缩后输出波形(data1)图5-3 解压缩后输出波形Dwatch window中的值图5-4 watch window中的值总 结经历了这次实验,我想我们充分认识到了压力带给人的巨大动力。确定做语音压缩,存储与回放实验后,查了大量A律,u律压缩方法的资料,并学习了CCS环境下的操作、调试与运行。由于之前对DSP很不了解,这方面学习我们去实验室操作了不少时间,终于熟悉了它的操作步骤与简单调试方法。这次课程设计基本上涵盖了DSP课程学习到的很多知识点,课程题目不仅要求对课本知识有较深刻的了解,同时要求我们有较强的思维和动手能力。在这次课程设计中,我遇到了非常多的困难,但在困难的解决使我学会了很多,不仅仅是关于数据库知识的方面,还有设计理念以及设计所需的坚持精神。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次做课程设计使我明白了自己原来知识还很欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次做课程设计,我才明白学习是一个长期积累的过程,以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。虽然课程设计过程中遇到了很多麻烦,但通过不断查阅资料和老师同学的指导帮助,最终完成了课程设计要求的各部分内容。这次课程设计提高了我的思维能力和协作能力,锻炼了我的动手能力!本文是在指导教师马岱老师的悉心指导下完成的,在课程设计的过程中庄老师给了我很大的帮助。在设计中遇到的问题老师都帮我细心解答,这次课程设计能成功与老师的努力是分不开的。课程设计的每一步无不倾注了老师的心血和汗水。有这样的机会、这样的成功,得益于学校的大力支持和老师对我们的不倦指导。十分感谢教务处组织这样的活动,让我们有了锻炼的机会。在我的学习过程中,不管是指导老师还是同学都给了我耐心的指导和帮助。我在此对各位老师和同学表示诚挚的感谢!参考文献1丁玉美编.数字信号处理.西安:西安电子科技大学出版社,2001.2丁玉美、高西全编著.数字信号处理学习指导.西安:西安电子科技大学出版社,2001.3郑君里等编.信号与系统.北京:高等教育出版社,2000.4关华等,Techniques and Applications of DSP Chips,济南出版社,2006,105王念旭等,DSP基础与应用系统设计,北京航空航天大学出版社.6李哲英,DSP基础理论与应用技术,北京航空航天大学出版社.7关华,DSP原理与应用实验指导书,山东建筑大学.8 Lawrence Rabiner,语音识别基本原理,清华大学出版社9易克初,语音信号处理,国防工业出版社10关华,Digital Speech Processing,黄河出版社.指导教师评语学号1071306115姓名刘 涛班级计算机1073选题名称基于DSP的语音处理系统设计序号评价内容权重(%)得分1考勤记录、学习态度、工作作风与表现。52自学情况:上网检索机时数、文献阅读情况(笔记)。103论文选题是否先进,是否具有前沿性或前瞻性。54成果验收:是否完成设计任务;能否运行、可操作性如何等。205报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。306文献引用是否合理、充分、真实。57答辩情况: 自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。25合计指导教师(签章): 年 月 日

    注意事项

    本文(DSP技术与应用课程设计报告基于DSP的语音处理系统设计.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开