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

    DSP课程设计报告语音压缩、存储与回放.doc

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

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

    DSP课程设计报告语音压缩、存储与回放.doc

    DSP课程设计实 验 报 告语音压缩、存储与回放成绩:工程设计50报告20答辩30总分评语:指导教师签字: 日期:一、 实验背景与内容语音通信是现代多媒体通信中一个重要的组成部分,而语音信号是信息的重要形式, 语音信号处理有着广泛的应用领域,同时语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中已经有较成熟的发展和广泛应用。本设计要求采用DSP及其A/D、D/A转换器进行语音信号的压缩、存储和回放。语音的数字通信无论在可靠性、抗干扰能力、保密性还是价格方面都远优于模拟语音信号,但这是以信道占用宽频带宽为代价的。因此为了减少语音信号所占用的带宽或存储空间,就必须对数字语音信号进行压缩编码。一个优秀的语音压缩系统要求能够在软硬件资源占用比例低和压缩编解码时间短的同时,可以实现多通道语音实时压缩。DSP仿真器用于DSP的在线调试开发,可以通过软件在线控制DSP的运行状态,并能够查看DSP内部寄存器。PC是开发人员和DSP系统之间的交互界面,通过PC上安装的CCS集成开发环境,开发人员可以在友好的图形界面下对目标系统进行操作。本次实验采用DSP C5402实验板实现语音信号的压缩解压的。SEED-VC5402 DSK实验板上集成了SRAM,FLASH,音频输入输出接口等部件。二、 实验目的1、应用DSP算法实现对语音信号的压缩、存储和回放。2、熟悉使用C语言编写较复杂的程序; 3、熟悉C语言对外设(DSK板或示波器)的访问(软件编程、硬件连接); 4、熟练使用软件CCS5000对程序的完整调试过程。三、实验设计要求及目标1要求(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。2设计思路 语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。ITU-T G.711建议的PCM A律和µ律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。四、实验原理1、 DSK 包括:主芯片 1枚:100 MHz TMS320VC5402 DSPRAM 1枚:1个软件等待的64K×16bit的SRAM(CY7C1021V33)FLASH 1枚:256K×16bit 的 FLASH存储器(AM39VF400A)接口 2个:一个连接到PC机并口的主机端接口HPI和用于仿真的JTAG测试总线控制器 信号采集和输出端口:麦克风/耳机音频接口 Ø C5402的硬件特点:增强型哈佛结构,一个程序总线,三个独立的数据总线;40bit的算术逻辑单元ALU ;可寻址的程序空间达1Mx16bit;4Kx16bit片内ROM ;16Kx16bit双口片内RAM;片内外设:软件可编程等待状态发生器;片内锁相环时钟发生器;两个多通道缓冲串口;增强型8bit并行HPI口;两个16bit定时器;六通道DMA控制器;节电模式IDLE1,IDLE2,IDLE3做功耗控制;单周期定点指令(100MIPS)执行时间为10ns。Ø C5402硬件优点:内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。Ø C5402的软件特点:7种有效灵活的寻址方式,仅为10ns的指令执行周期。2、TMS320C5402的结构及原理 TMS320C5402采用先进的改进的哈佛结构和8条总线结构,解决了冯诺伊曼(Von-Neumann)结构中高速数据传输时的传输通道上的瓶颈现象,使处理器的性能大大提高,程序数据总线相互独立,允许同时访问程序存储器和数据存储器,实现高度并行操作。此外,还可以在数据总线与程序总线之间相互传送数据,从而使处理器具有在单个周期内同时执行算数运算、逻辑运算、移位操作、乘法/累加运算以及访问程序和数据存储器的强大功能。TMS320C5402的内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。由于C5402有7种有效灵活的寻址方式的软件特点,仅为10ns的指令执行周期,还有一些特殊的运算指令更好地满足了数字信号处理中特有的运算需要。 TMS320C5402具有高速的,全双工串行口,可用来与系统中的其他C54x器件,编码解码器,串行A/D,D/A转换器以及其他的串行器件直接接口。这两个串行口均为多通道缓冲串行口McBSP(Multi-channel Buffered Serial Port)。它支持全双工通信,双缓冲数据寄存器,允许连续的数据流。内置-律和A-律压扩硬件。 DSP结构框图3、AD50的结构与原理AD50是单片音频接口芯片(AIC)。它内部集成了16位的D/A和A/D转换器,采样速率最高可达22.05kb/s,其采样速率可通过DSP编程来设置。在DAC之前有一个插值滤波器以保证输出信号平滑和ADC之后有一个抽取滤波器以提高输入信号的信噪比。 AD50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。它的数据传输模式和采样速率都可以通过DSP对其控制寄存器的编程来实现,因此,在许多场合下,AD50都作为DSP的AIC来实现音频处理。寄存器0:空操作寄存器。 寄存器1:软件复位 软件掉电 选择16位或15位工作方式 硬件或软件二次通信请求方式的选择 寄存器2:使能ALTDATA输入端 为ADC选择16/15位方式 寄存器3:选择FS与FSD之间延迟SCLK的个数 告诉主机有几个从机被联上 寄存器4:为输入和输出放大器选择放大器增益 选择N来设置采样频率,fs=MCLK/(128*N)或MCLK/(512*N) 在MCLK输入端使能外部时钟输入并旁通内部的PLL 寄存器5,6:保留 AD50与C5402之间的数据传送采用串行方式,包括两种传输模式:16位和15+1位传输模式。15+1位模式时,其中的D0位表示二次通信。它们各自的时序如下: 4、程序存储芯片实验中,电路选用的芯片SST39VF400是一个低功耗FLASH。芯片硬件特点:A17至A0为外部地址管脚,D15至D0为1条数据线,CE#为片选控制管脚(低有效),OE#为输出控制管脚(低有效),WE#为写入控制管脚(低有效)。工作在2.7V至3.6V电压下,存储容量位256KW,其。中的数据可以保持100年以上,可重复编程次数高达10万次。5、u_LAW/a_LAW的压扩硬件处理 在电信中常常利用u律和a律对数据进行压扩处理,C5400在McBSP中提供了专门的硬件实验这一功能。压扩处理时,CPU访问到的都是16位的,他分别是利用线性的14位数据(u律)和13位(a律)数据左对齐获得的。压扩硬件结构和相应的数据如下图所示。在本实验中,我们通过软件编程来完成线性码转换成A律。语音信号通常是小信号概率大,大信号出现的概率小,为提高小信号时的量化信躁比,压缩比特速率,可为非线性量化。语音压缩是把16位的数据比特转化为8位数据比特,从而到达语音压缩的目的。在主程序中通过A/D抽样量化,可以得到16位的线性编码,再由编码表通过软件计算得到8位A律编码,其中最高位为符号位,第6位到第4位为段落码,低4位为段内码。将8位的压缩结果存储到系统RAM中进行缓存,根据抽样率、语音存储时间以及系统RAM的容量设置语音存储缓冲区的大小,待缓冲区存满后,将缓冲区内的数据进行解压缩,然后输出到SPEAKER接口输出端。若使用A/D转换器,必须首先对A/D转换器进行初始化设置,即设置A/D转换器的工作模式、输入增益以及抽样频率等。 A律压缩编码表线性输入编码压缩编码0000000wxyza000wxyz0000001wxyza001wxyz000001wxyzab010wxyz00001wxyzabc011wxyz0001wxyzabcd100wxyz001wxyzabcde101wxyz01wxyzabcdef110wxyz1wxyzabcdefg111wxyz 五、程序设计思路DSP程序设计应包括用户程序、存储器配置程序。为了实现语音信号的采集与回放,先将语音信号采集,运用a律压缩算法将信号压缩并存入存贮器中,当放音开始时运用a律解压算法将信号解压并从存储器中释放出来,实现语音的回放。1、软件设计流程开始初始化Board板成功?调用_led_display(2)使灯都闪两次初始化Codec片选FLASH为外部存储器等待接受Instance处的采样LED灯0亮开始录音采样送voice_sample压缩存储voice_sampleLED灯1熄灭放音结束读取,解压缩并送voice_sample1LED灯1亮开始放音LED灯0熄灭录音结束是否2、TMS320VC5402 mcbsp的串口的初始化首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:禁止SPI模式,但数据相,每帧一字,每字16位,帧同步脉冲低电平有效,并且帧同步信号和移位信号有外部时钟产生。 hHandset = codec_open(HANDSET_CODEC); 此语句调用了函数codec_open()对串口1进行了初步设置,设置成功返回codec的句柄放在变量 hHandset中,作为调用其他函数的实参。3、AD50的初始化:该初始化过程调用了5个函数对AD50的5项参数进行了设置,包括adc和dac的工作模式,模拟输入和输出的增益;以及AD,DA的转换速率。4、从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,讲解压后的数据将数据写入D/A转换器。程序如下:while (1) /* Wait for sample from handset */ while (!MCBSP_RRDY(HANDSET_CODEC) ;/* Read sample from and write back to handset codec */ data=*(volatile int*)DRR1_ADDR(HANDSET_CODEC); pre=int2alaw(data); /*or pre=int2ulaw(data);*/ data=alaw2int(pre); /*or data=ulaw2int(pre);*/ *(volatile int*)DXR1_ADDR(HANDSET_CODEC)=data;六、实验程序1 C语言程序/*/* 头文件 */*/#include <type.h>#include <board.h>#include <codec.h>#include <mcbsp54.h>/*/* 变量宏定义 */*/#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */#define QUANT_MASK (0xf) /* Quantization field mask. */#define NSEGS (8) /* Number of A-law segments. */#define SEG_SHIFT (4) /* Left shift for segment number. */#define SEG_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 char a_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 buffer22000;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为片外存储器 while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset处的采样 if (i=0) brd_led_toggle(BRD_LED0); /点亮二极管0,表示录音开始 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>=44000) i=0;if(j>=22000)j=0;brd_led_toggle(BRD_LED0); /熄灭数码管0 表示录音结束brd_led_toggle(BRD_LED1); /点亮二极管1 表示放音开始 /*/* 放音部分 */*/ for(k=0;k<44000;k+)if(k%2=0) temp2=(bufferl>>8)&0x0ff;elsetemp2=bufferl&0x0ff;l+;if(l>=22000)l=0;data1=alaw2data(temp2); while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /*/* 放音结束 */*/if(k=44000) brd_led_toggle(BRD_LED1); /熄灭二极管1 表示放音结束 /主程序结束/*/ /* 子函数 */ /*/*延时*/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);delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000);/*初始化codec*/void initcodec(void) /* 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); / 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) Int mask;Int seg;unsigned char aval;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)Int i;for (i = 0; i < size; i+) if (val <= *table+)return (i);return (size);/*a律解压*/int alaw2data(unsigned char a_val)Int t;Int seg;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);/*/* 结束 */*/2、存储器的分配(*.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 = 5A00h /* 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七、CCS程序调试与结果1、启动Setup CCS程序设置CCS的环境。选择浮动菜单Import configuration->Available configuration 列表中,然后选中C5402 Device Simulator (没接DSK板时)、C5402 DSK via Parallel Port Emulation (接DSK板时)。选中Import,最后选中save and quit以保存目标DSP的配置。2、运行CCS2(5000),出现CCS界面。新建一个工程,向工程中添加c语言程序文件、CMD程序、头文件和库文件。Ø C程序运行支持库: C:ti c5400cgtools rts.lib相关的头文件 C:ti c5400cgtoolsinclude*.hØ DSK板库文件: C:ti c5400dsk5402 drv5402.lib,dsk5402.lib相关的头文件 C:ti c5400dsk5402include*.h在程序中还用到其他头文件:#include <type.h>#include <board.h>#include <codec.h>#include <mcbsp54.h>C语言程序文件、CMD程序和库文件的加入可通过Project里的Add Files to

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开