欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载
     

    语音压缩与回放DSP课程设计.docx

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

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

    语音压缩与回放DSP课程设计.docx

    DSP课程设计实 验 报 告语音压缩,存储和回放院(系): 电子信息工程学院成绩:工程设计50报告20答辩30总分评语:指导教师签字: 日期:目 录一、设计任务书1二、设计内容2三、设计方案、算法原理说明2四、程序设计、调试与结果分析8 五、设计(安装)与调试的体会26 六、参考文献26二、【设计内容】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比特,达到语音压缩的目的。3 要求完成的任务(1)编写C语言程序,并在CCS集成开发环境下调试通过。(2)实现设计所要求的各项功能。(3)按要求撰写设计报告。三、【设计方案、算法原理说明】1语音编码(1)概念: 语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。 PCM编码即脉冲编码调制。 波形编码的最简单形式就是脉冲编码调制(Pulse code modulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅度进行编码,所以叫做脉冲编码调制。脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。 (2)量化: 脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方 式。但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降 。 国际上有两种非均匀量化的方法:A律和u律,u律是最常用的一种。在美国,7位u律是长途电话质量的标准。而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。 2.压缩算法介绍(1)、律压扩律压扩的数学解析式:   其中:x为输入信号的归一化值;y为压扩后的信号。对话音信号编码,常采用=255,这样适量化信噪比改善约24dB。(2)、A律压扩其特性可表示为:       很明显,小信号时为线性特性,大信号时近似为对数特性。这种压扩特性常把压缩、量化和编码合为一体。A律可用13段折线逼近(相当于A=87.6),便于用数字电路实现。13段折线的压缩特性如下图。过程为:第一步:把x(x>0 部分)划分为不均匀的8段。第一分点取在V/2处,然后每段都是剩下部分的1/2。;依次取第八段为VV/2,第七段为V/2V/4;第一段为V/1280。第二步:把每段均匀划分为16等份,每一份表示一个量化级,显然8段共16x8=128= 个量化级,需要二进制7位编码表示。可以看出每个量化级是不均匀的。在小信号的量化台阶很小,使小信号时量化噪声减小。如果按均匀量化计算,以最小台阶 为单位,最大信号需用L=128X16=2048= 个量化级表示,既需要11位编码。这样非均匀编码使小信号量化台阶缩小了16倍,相当于小信号信噪比改善了20dB。第三步:把y轴均匀划分为8段,每段均匀分为16分。这样y也分为128个量化级,与x轴的128个量化级对应。因此,压扩特性各段的斜率 是不同的。第一段斜率 其他段为:  。以上分段为x取正值时的情况。而x取负值时,压扩特性与x取正值成奇对称。在正8段和负8段中,正1,2段和负1,2段斜率相同,合为一段。所以原来的16段折线变为13段折线。A律压缩示意图:A律压缩编码表:压缩前的码字丢弃的比特数压缩后的码字输入值段值,量化值比特: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 a b c d x 10 0 0 a b c d 0 0 0 0 0 0 1 a b c d x1 0 0 1 a b c d 0 0 0 0 0 1 a b c d x x2 0 1 0 a b c d 0 0 0 0 1 a b c d x x x 3 0 1 1 a b c d 0 0 0 1 a b c d x x x x 5 1 0 0 a b c d 0 0 1 a b c d x x x x x6 1 0 1 a b c d 0 1 a b c d x x x x x x 7 1 1 0 a b c d 1 a b c d x x x x x x x 8 1 1 1 a b c d 件实现数据压缩解压的简单流程,DSP将传输来的压缩后的数据进行解压成16位或者32位,然后对解压后的数据进行分析、处理,最后将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其他设备读取。下图是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DSP通用数据格式,其中高13位为解压后的数据,低3位补0。这是因为6711的A律压缩只能对13位数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中,只要运行发送指令,缓冲串口就会将数据发送出去。缓冲串口对接收数据的解压过程和压缩过程完全相反。DSP内部的缓冲串口(McBSPs)带有硬件实现的律A律压缩解压,用户只需要在相应寄存器中进行设置就可以了。在进行A律压缩时,采样后的12位数据,默认其最高位为符号位,压缩时要保持最高位即符号位不变,原数据的后11位要压缩成7位。这7位码由3位段落码和4位段内码组成。具体的压缩变换后的数据根据后11位数据大小决定。   A律数据压缩表:除对串行口数据实现压扩处理外,这套硬件在McBSP不使用时还可以当作一个特殊的处理单元对内部数据实现压扩处理,他有两种实现方法。法一:当串行口的发送和接受部分都处于复位状态时,DRR1和DXR1内部通过压扩逻辑连接在一起,数据从DXR1写入并根据XCOMPAND处理,然后根据RCOMPAND再处理,在4个CPU时钟后从DRR1中读出数据。该处理比软件实现快,不利之处在于处理完后没有同步信息通知CPU和DMA。法二:在数据环回模式下,McBSP也实现了一种内连。数据处理与第一种方法相同,但它可以提供中断信号(或同步事件)给CPU(或DMA)。这里数据处理的时间是根据串行口的比特律确定的。另外,在通常情况下McBSP先传输信号的高位后传输低位,但是在字长为8比特的数据传输时,McBSP提供了比特倒序的功能,即可以先传输低位后传输高位。语音信号通常是小信号概率大,大信号出现的概率小,为提高小信号时的量化信躁比,压缩比特速率,可为非线性量化。语音压缩是把16位的数据比特转化为8位数据比特,从而到达语音压缩的目的。在主程序中通过A/D抽样量化,可以得到16位的线性编码,再由编码表通过软件计算得到8位A律编码,其中最高位为符号位,第6位到第4位为段落码,低4位为段内码。将8位的压缩结果存储到系统RAM中进行缓存,根据抽样率、语音存储时间以及系统RAM的容量设置语音存储缓冲区的大小,待缓冲区存满后,将缓冲区内的数据进行解压缩,然后输出到SPEAKER接口输出端。若使用A/D转换器,必须首先对A/D转换器进行初始化设置,即设置A/D转换器的工作模式、输入增益以及抽样频率等。3. 硬件特点(1)、BJTU-DSP5502实验系统介绍BJTU-DSP5502实验系统是北京交通大学电信学院电工电子教学基地自行开发的一套DSP信号处理硬件实验系统,实验箱内包括BJTU-DSP5502实验板和SEED-XDS510PLUS仿真器以及相关配件。实验板主要包括DSP芯片1枚、SDRAM1枚、FLASH1枚、CPLD1枚、通信接口3个、信号采集和输出口以及扩展板接口等等。本实验用到的信号采集和输出口有3个:立体音输入接口line-in(J5,直接接电脑的语音输出端口)/麦克风输入接口(J7)/耳机音频输出接口(J6)。(通过AIC23B(A/D、D/A转换器)来提供立体音输入/麦克风输入/耳机音频输出。AIC23B与DSP的McBSP1相连接。)BJTU-DSP5502板功能框图信号输出端口AIC23输出To DSP McBSP1From DSP McBSP1信号源信号输入输出电路图(2)、存储空间分配Flash最大512K×16bit,需占VC5502的半个空间(本板x=1);SDRAM最大2M×32bit,需占VC5502的2个连续的空间(本板x=2);状态/控制寄存器 5×8bit,需占VC5502某一的5个存储单元,这些寄存器BJTU-5502DSP板的CPLD中实现,通过EMIF的异步接口进行读写操作(本板x=1);UARTB 8×8bit,需占VC5502 某一的8个存储单元(本板x=1);USB 8×16bit,需占VC5502 某一的8个存储单元(本板x=1);扩展总线:最大4×1M×32bit,分配为扩展总线的4 个。 扩展存储空间需占VC5502的多个空间。TMS320VC5502的程序数据存储空间采用统一编址,整个寻址空间大小为16M 字节(bytes),其中片内DARAM 占64K 字节,ROM 占32K 字节,其余存储空间被映射到片外4 个 片选的子空间。(3)、McBSP介绍McBSP:多通道缓冲串行口(Multi-channel Buffered Serial Port),是串行口的一种。VC5502有3个缓冲多通道串行口:McBSP0(本板与外扩接口相连)、McBSP1(本板和Codec相连,用于数字音频输入输出)和McBSP2(本板和UART复用)。其特点有:1、全双工同步串行口;2、可直接与系统中的其它C55x器件、编码解码器、串行A/D、D/A转换器以及其它的串行器件直接相连;3、内置-律和A-律压扩硬件;4、支持传输的数据字长有8、12、16、20、24或32bit。C5502存储空间分配 存储空间分配(联机状态下为后者)AIC23B的介绍 (1)、TLV320AIC23B是一枚音频Codec 器件,它具有48KHz 带宽、96KHz 采样率,双声道立体声A/D、D/A。音频输入可以使用麦克风输入(提供麦克风偏置输出和前置放大器)和立体声输入(提供可编程放大器),音频立体声输出可提供耳机功率放大器,能提供30mW输出功率,驱动32 负载。(2)、TLV320AIC23B 与微处理器的接口有二个,一个是控制口,用于设置TLV320AIC23B的工作参数, 另一个是数据口, 用于传输TLV320AIC23B 的A/D、D/A 数据。四、【程序设计、调试与结果分析】1、程序流程图:开始初始化DSP及串行口初始化A/D转换器D/A转换器语音经A/D转换器输入数据压缩数据存储解压缩经D/A转换器回放结束2、程序代码:(1)、cmd文件:MEMORY MMR : origin = 0000000h, length = 00000c0h SPRAM : origin = 00000c0h, length = 0000040 VECS : origin = 0000100h, length = 0000100h DARAM0 : origin = 0000200h, length = 0007E00h DARAM1 : origin = 0008000h, length = 0008000h CE0 : origin = 0010000h, length = 03f0000h /* 对应ZBTRAM空间 */ FLASH : origin = 0400000h, length = 0100000h/* Flash 空间 */* FLASH : origin = 0410000h, length = 00f0000h*/ EXTEND: origin = 0500000h, length = 0300000h/* 状态控制寄存器、UARTA、UARTB、USB、和扩展总线所对应的空间 */ SDRAM : origin = 0800000h, length = 03FFFFCh/* SDRAM 空间*/ CE3 : origin = 0c00000h, length = 03f8000h/* SDRAM 空间*/ PDROM : origin = 0ff8000h, length = 07f00h RESET_VECS : origin = 0ffff00h, length = 000ffh /* reset vector */ SECTIONS .vectors : > VECS /* interrupt vector table */ .cinit : > DARAM1 .text : > DARAM1 .Audio_in_data1: > SDRAM .Audio_in_data2: > SDRAM .Audio_in_data3: > SDRAM .Audio_a_data1: > SDRAM .Audio_b_data1: > SDRAM .stack : > DARAM0 .sysstack: > DARAM0 .sysmem : > DARAM0 .cio : > DARAM1 .data : > DARAM1 .bss : > DARAM1 .const : > DARAM1 .csldata: > DARAM0 .dmaMem: > DARAM0 (2)A律和u律主程序:#include <csl.h>#include <csl_chip.h>#include <csl_i2c.h>#include <csl_pll.h>#include <csl_mcbsp.h>#include <csl_emif.h>#include <csl_emifBhal.h>#include <stdio.h>#include "5502_FLASH.h"#include "E2PROM_Function.h"#include "CODEC.h"#undef CODEC_ADDR#define CODEC_ADDR 0x1A#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. */#define GPIODATA (*(volatile ioport Uint16*)(0x3401)/*static short seg_end8=0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF;*/static short seg_end8=0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF,0x1FFF;*/Uint32 SourData165536=0;Uint32 SourData265536=0;Uint32 SourData365536=0;Int16 aData165536=0;Int16 bData165536=0;#pragma DATA_SECTION (SourData1,".Audio_in_data1");#pragma DATA_SECTION (SourData2,".Audio_in_data2");#pragma DATA_SECTION (SourData3,".Audio_in_data3");#pragma DATA_SECTION (aData1,".Audio_a_data1");#pragma DATA_SECTION (bData1,".Audio_b_data1");#define AUDIOTRY 0xAA0A/音频试听#define AUDIOCOPY 0xAA07/音频存贮并回放#define TESTCOMMAND 2 /操作命令选择 / 定义McBSP的句柄MCBSP_Handle hMcbsp;/函数声明void delay();void blink();void blink_D5();unsigned char data2alaw(Int16 pcm_val);int alaw2data(unsigned chara_val);static int search(int val,short*table,int size);/*-*/ FUNCTION: MAIN/*-*/ void main(void) Uint16 DataTempLeft = 0;/ 暂存采样数据 Uint16 DataTempRight = 0; Int16 TempData; Uint16 i,temp1,temp2;Uint32 n; Uint16 TestCommand =0; / Initialize CSL library - This is REQUIRED ! CSL_init();#if TESTCOMMAND=1TestCommand =AUDIOTRY;/试听#endif#if TESTCOMMAND=2TestCommand =AUDIOCOPY;/录音并回放#endif/ The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); /EMIF初始化 Emif_Config(); / Open McBSP port 1 and get a McBSP type handlehMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by use previously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1)switch(TestCommand)/*音频试听*/case AUDIOTRY: /* 左通路数据 */while(!MCBSP_rrdy(hMcbsp);DataTempLeft = MCBSP_read16(hMcbsp); /* 左声道耳机输出 */while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp,DataTempLeft); /* 右通路数据 */ while(!MCBSP_rrdy(hMcbsp); DataTempRight = MCBSP_read16(hMcbsp);/* 右声道耳机输出 */while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp,DataTempRight); break;/*音频存贮并回放*/case AUDIOCOPY: blink();/闪烁指示开始录音 for(i=0;i<65535;i+)n=1;while(n<5) while(!MCBSP_rrdy(hMcbsp);/SourDatai = MCBSP_read16(hMcbsp);aData1i=TempData;TempData=MCBSP_read16(hMcbsp);temp1=data2alaw(TempData);/switch(n%4)case 1:SourData1i=(temp1<<=24);break;case 2:SourData1i=(SourData1i|(temp1<<=16);break;case 3:SourData1i=(SourData1i|(temp1<<=8);break;case 0:SourData1i=(SourData1i|temp1);break;default: break;n+; for(i=0;i<65535;i+)n=1;while(n<5) while(!MCBSP_rrdy(hMcbsp);/SourDatai = MCBSP_read16(hMcbsp);TempData=MCBSP_read16(hMcbsp);temp1=data2alaw(TempData);/switch(n%4)case 1:SourData2i=(temp1<<=24);break;case 2:SourData2i=(SourData2i|(temp1<<=16);break;case 3:SourData2i=(SourData2i|(temp1<<=8);break;case 0:SourData2i=(SourData2i|temp1);break;default: break;n+; for(i=0;i<65535;i+)n=1;while(n<5) while(!MCBSP_rrdy(hMcbsp);/SourDatai = MCBSP_read16(hMcbsp);TempData=MCBSP_read16(hMcbsp);temp1=data2alaw(TempData);/switch(n%4)case 1:SourData3i=(temp1<<=24);break;case 2:SourData3i=(SourData3i|(temp1<<=16);break;case 3:SourData3i=(SourData3i|(temp1<<=8);break;case 0:SourData3i=(SourData3i|temp1);break;default: break;n+; /放音blink();for(i=0;i<65535;i+)n=1;while(n<5) /while(!MCBSP_rrdy(hMcbsp);/SourDatai = MCBSP_read16(hMcbsp);switch(n%4)case 1:temp2=(SourData1i>>24)&0x0ff;case 2:temp2=(SourData1i>>16)&0x0ff;case 3:temp2=(SourData1i>>8)&0x0ff;case 4:temp2=SourData1i&0x0ff;while(!MCBSP_xrdy(hMcbsp) ;TempData=alaw2data(temp2);bData1i=TempData;MCBSP_write16(hMcbsp,TempData);n+; for(i=0;i<65535;i+)n=1;while(n<5) /while(!MCBSP_rrdy(hMcbsp);/SourDatai = MCBSP_read16(hMcbsp);switch(n%4)case 1:temp2=(SourData2i>>24)&0x0ff;case 2:temp2=(SourData2i>>16)&0x0ff;case 3:temp2=(SourData2i>>8)&0x0ff;case 4:temp2=SourData2i&0x0ff;while(!MCBSP_xrdy(hMcbsp) ;TempData=alaw2data(temp2);MCBSP_write16(hMcbsp,TempData);n+; for(i=0;i<65535;i+)n=1;while(n<5) /while(!MCBSP_rrdy(hMcbsp);/SourDatai = MCBSP_read16(hMcbsp);switch(n%4)case 1:temp2=(SourData3i>>24)&0x0ff;case 2:temp2=(SourData3i>>16)&0x0ff;case 3:temp2=(SourData3i>>8)&0x0ff;case 4:temp2=SourData3i&0x0ff;while(!MCBSP_xrdy(hMcbsp) ;TempData=alaw2data(temp2);MCBSP_write16(hMcbsp,TempData);n+; break;default:break;void delay(int period) int i, j; for(i=0; i<period; i+) for(j=0; j<period>>1; j+); /*unsigned char data2alaw(Int16 pcm_val) intmask;intseg;unsigned charaval;if (pcm_val >= 0) mask = 0xD5; / 标记 (7th) bit = 1 else mask = 0x55; /标记 (7th) 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) & QU

    注意事项

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

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开