




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳理工大学dsp技术课程设计报告各专业全套优秀毕业论文图纸目 录 1设计原理及内容 .11.1语音编码原理11.2设计内容1 1.2.1 基本部分. 1 1.2.2 扩展部分. 1 2 设计资源介绍2 2.1 多通道缓冲串行口mcbsp.2 2.1.1 工作原理 .2 2.1.2 相关头文件 . 2 2.2 tlc320ad50 codec编码译码器 . 2 2.3 存储器 . 3 2.4压扩硬件 . 4 2.5 麦克风和耳机接口 . 53 设计思想 5 3.1实验方案 . 54 .程序设计. 6 4.1 程序流程图 . 6 4.2各个分块程序设计 . 75.程序清单 . 96 操作步骤和结果 . 197 参考文献 . 20- i -1. 设计原理与实验内容1.1语音编码原理:(1)概念:语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。pcm编码即脉冲编码调制。波形编码的最简单形式就是脉冲编码调制(pulse code modulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅 度进行编码,所以叫做脉冲编码调制。 脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。 (2)量化:脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。但是均匀量化有缺点,在信号动态范围较大而方差较 国际上有两种非均匀量化的方法:a律和律,律是最常用的一种。在美国,7位律是长途电话质量的标准。 而我国采用的是a律压缩,而且有标准的(3)dpcm&adpcm: 降低传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。相邻的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得到压缩。因为差分信号比原语音信号的动态范围和平均能量都小。这种编码叫differential pcm,简称dpcm,即差分脉冲编码调制。 1.2 设计内容:1.2.1基本部分:(1)使用dsp实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用g.711、g.729等语音压缩算法。(2)采用a/d转换器从mic输入口实时采集语音信号,进行压缩后存储到dsp的片内和片外ram存储器中,存储时间不小于10秒。(3)存储器存满之后,使用dsp进行实时解压缩,并从speaker输出口进行回放输出。(4)使用指示灯对语音存储和回放过程进行指示。1.2.2发挥部分:使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。2. 设计资源介绍2.1多通道缓冲串行口mcbsp2.1.1工作原理c5402 具有2 个高速的全双工同步串行口,可用来与系统中的其它c54x 器件、编码解码器、串行a/d、d/a 转换器以及其它的串行器件直接接口。这两个串行口均为多通道缓冲串行口mcbsp(multi-channel buffered serial port)。它支持全双工通信,双缓冲数据寄存器,允许连续的数据流,可以与工业标准的编/解码器、aics 接口。支持多种方式的传输接口,如t1/e1 帧协议、mvip 帧方式、h.100 帧方式、scsa 帧方式、iis 兼容设备等。可与多达128 个通道进行收发。支持传输的数据字长可以是8bit、12bit、16bit、20bit、24bit 或32bit。内置-律和a-律压扩硬件。其硬件结构图如左图1所示。 mcbsp接口提供了以下7个引脚信号用于与其他设备的通讯:dr: 串行数据接收引脚,输入dx: 串行数据发送引脚,输出clkx:发送时钟,输入或输出,可编程clkr:接收时钟,输入或输出,可编程 图1fsx: 发送帧同步信号,输入或输出,可编程fsr: 接收帧同步信号,输入或输出,可编程 clks:外部时钟,输入2.1.2 相关头文件 在ccs 集成开发环境中,与mcbsp相关的头文件有:regs54xx.h、mcbsp54.h。在这两个头文件中,定义了mcbsp串口的寄存器资源以及使用方法。在reg54xx.h 头文件中,定义了mcbsp 中寄存器的地址和基本访问方式,以及寄存器的各个比特域和访问方法。在mcbsp54.h 头文件中,定义了与mcbsp 相关的宏函数(macro functions)和函数。regs54xx.h、mcbsp54.h 这两个头文件是c 语言下对mcbsp 编程的基础,我们不仅可以用在5402 dsk 板的编程上,而且可以用在其它的c54x 的dsp 硬件编程上。2.2 tlc320ad50 codec 编码译码器ad50是一款sigma-delta型单片音频接口芯片。它内部集成了16位的d/a和a/d转换器,采样速率最高可达22.05kb/s,其采样速率可通过dsp编程来设置。在dac之前有一个插值滤波器以保证输出信号平滑和adc之后有一个抽取滤波器以提高输入信号的信噪比。 (1)内部结构及工作原理ad50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。 寄存器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:保留 (2)与ad50有关的相关头文件在ccs 集成开发环境中,与tlc320ad50 codec 编译码器相关的头文件是codec.h。它位于c:tic5400dsk5402include 目录下。在这个头文件中,定义了与ad50 codec 相关的枚举变量和库函数。除了可以调用codec.h 中提供的库函数之外,我们还可以利用这些枚举变量重新编写自己的codec 函数,使用枚举变量相或产生所需要的ad50 寄存器的初始化值。codec.h 中的库函数位于函数库dsk5402.lib 和 drv5402.lib 中。函数库dsk5402.lib 和 drv5402.lib 是作为两个单独的文件,连同include 文件和头文件一起提供给用户的,如果你的应用程序中用到了其中的库函数,就需要与这两个函数库进行链接(link)dsk5402.lib 是一个主要的函数库,其内部使用了drv5402.lib 的头文件。2.3 存储器(1)外部数据存储器sramtms320c5402tlc320ad50tlc2272模拟输入flash romlm386模拟输出dsk提供了64k*16位的sram,sram工作在+3v的电源电压。可以使用的外部数据存储器的大小取决于drom的设置。如果drom=0,那么0x40000xfff(48k字)的空间是外部存储器(flash或sram)。如果drom=1,外部存储器只能使用0x40000xefff.dmsel控制寄存器位决定访问板上或扩展板的存储器。如果dmsel=0(缺省),使用板上的数据存储器;如果dmsel=1,使用扩展板存储器,并且地址开始于0x8000(块的大小取决于drom位)。数据存储器空间资源也取决于mp/mc状态。(2)i/o空间存储器io 空间是由2 部分组成,一个是系统基于cpld 控制空间,另一个是扩展板存储器空间。dm_sel 位能够控制io 空间的访问。如果dsp 向此位写1,那么扩展板存储器的io 空间是不能被访问的。如果向此位写0,那么扩展板存储器的io 空间是可以被访问的。2.4压扩硬件 在通信中常常利用u律和a律对数据进行压扩处理,tms320c54x在mcbsp中提供了专门的硬件实验这一功能。压扩处理时,cpu访问到的都是16位的,他分别是利用线性的14位数据(u律)和13位(a律)数据左对齐获得的。压扩处理有两种实现方法:方法一:当串行口的发送和接受部分都处于复位状态时,drr1和dxr1内部通过压扩逻辑连接在一起,数据从dxr1写入并根据xcompand处理,然后根据rcompand再处理,在4个cpu时钟后从drr1中读出数据。该处理比软件实现快,不利之处在于处理完后没有同步信息通知cpu和dma。方法二:在数据环回模式下,mcbsp也实现了一种内连。数据处理与第一种方法相同,但它可以提供中断信号(或同步事件)给cpu(或dma)。这里数据处理的时间是根据串行口的比特律确定的。2.5 麦克风和耳机接口音频接口使用了2 个工业标准的3.5mm 的连接器:一个连接麦克风的音频输入;一个连接耳机的音频输出。(1)音频输入是交流偶合的并且包括:1 个固定增益为10db 的放大器;实现单端到差分的转换(在此之前,连接到dsp 的mcbsp1 上的tlc320ad50对其进行数字化);电压偏置(支持电池电源和驻极体麦克风);被动滤波(在dsk 的音频插口和codec 之间)用来增强性能,为驻极体麦克风设计的麦克风的输入它需要一个电压偏置。如果使用电容来隔离偏置电压,就能够使用动态的麦克风。麦克风的输入信号最大允许标准是500mv(350mvrms)。在dsk上有10db前置放大器增益。(2)音频输出是可以编程控制的,在软件的控制下,可以在6db增幅的范围内,增加增益+0+2db。音频输入可以编程控制的,在6db增幅范围内,提供+0+12db的增益。3 .设计思想3.1实验方案:用板内的ad/da转换器ad50将由mic输入的模拟信号转换为16位数字信号送入dsp板中进行压缩处理,压缩处理后的数据经过解压后再送至da转换器转换为模拟信号,由speaker口输出,压缩和解压缩用a律格式,从而实现语音信号的采集压缩与回放。 统计表明对于每一个讲话者来说,语音中小幅度成分出现的概率要比大幅度多得多,为了在语音信号的整个动态范围内都可以接受低电平信号,量化电平必须照顾到语音的低电平信号,极低电平的量化间隔要小,高电平的量化间隔要大。a律的压缩可以按照下列公式进行定义:式中,a是压缩参数(在欧洲,a=87.6)x是需要压缩的归一化整数。从线性到a律的压缩转换如下表所示:压缩后的码字组成:比特0-3表矢量化值,比特4-6表示段值,压缩后的码字符号放在比特7,为了简化未写出.压缩前的码字丢弃的比特数压缩后的码字输入值段值,量化值比特: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 a律的扩展可定义为:从a律到线性扩展的转换如下表:压缩过的码字 偏值的输入 段值,量化值比特: 6 5 4 3 2 1 0比特: 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 a b c d 0 0 0 0 0 0 0 a b c d 1 0 0 1 a b c d 0 0 0 0 0 0 1 a b c d 1 0 1 0 a b c d 0 0 0 0 0 1 a b c d 1 0 0 1 1 a b c d 0 0 0 0 1 a b c d 1 0 0 1 0 0 a b c d 0 0 0 1 a b c d 1 0 0 0 1 0 1 a b c d 0 0 1 a b c d 1 0 0 0 0 1 1 0 a b c d 0 1 a b c d 1 0 0 0 0 0 1 1 1 a b c d 1 a b c d 1 0 0 0 0 0 0 4. 程序设计4.1程序流程图4.2各个分块程序设计(1)初始化dsk程序段:if (brd_init(100) return;程序分析:brd_init()函数原型为:s16 brd_init(unsigned int cpufreq)参数cpufreq表示cpu的工作频率,单位为mhz。提供的频率必须是10倍数,最小为20mhz,最大为100 mhz。20,30,40,50,60,70都可以。brd_init()返回参数为0则表示初始化成功,如果返回1,则表示初始化失败,执行return,继续执行初始化。(2)初始化a/d50c程序程序段:void initcodec(void)/*获取设置dac的句柄 */ hhandset = codec_open(handset_codec); / acquire handle to codec /*设置dac的工作参数*/ 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_12db); / 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_16000); / 16khz sampling rate (3)flash存储器的初始化void flashenable(void)cpld_ctrl2_reg|=0x0010;cpld_dmctrl_reg|=0x0040;(4)语音信号采集存储与回放程序while(1) /判断mcbsp是否做好接收准备 while (!mcbsp_rrdy(handset_codec) ) ; /从a/d读取转换数据 din = *(volatile u16*)drr1_addr(handset_codec);din=amp*din; dacdatai=din;/ 将数据写入d/a转换器*(volatile u16*)dxr1_addr(handset_codec) =dacdatai;i=i+1; 程序分析:1. while (!mcbsp_rrdy(handset_codec) ) ; 获取mcbsp是否做好接受的准备信息2. *(volatile u16*)drr1_addr(handset_codec) 定义数据接收寄存器1的地址3. din=amp*din;dacdatai=din; 对输入信号进行语音处理(5)闪灯程序程序段:/*闪灯*/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);程序分析:此函数用了一个while循环语句实现cnt次灯闪,通过调用delay子函数控制灯闪灭时间,其中brd_led_toggle()表示切换用户led,改变用户控制led02的状态。五 程序清单#include #include #include #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 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 buffer15000;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;i0xefff;i+) reg_write(i,*(volatile u16*)drr1_addr(handset_codec); delay(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处的采样 data = *(volatile u16*)drr1_addr(handset_codec); /从handset处读取采样 temp1=data2alaw(data); /对采样进行a律压缩 /*/ /* 把低地址数据放在高八位 高地址数据放在低八位 */*/ i=i+1; if(i%2=1) bufferj=(temp1=30000) i=0; if(j=15000) j=0; brd_led_toggle(brd_led1); /点亮二极管1 delay(1000); /延时1000 brd_led_toggle(brd_led1); /熄灭二极管1 表示放音开始 /*/* 放音部分 */*/ for(k=0;k8)&0x0ff; else temp2=bufferl&0x0ff; l+; if(l=15000) l=0; data1=alaw2data(temp2); while (!mcbsp_xrdy(handset_codec) ; *(volatile u16*)dxr1_addr(handset_codec) = data1; /*/ /* 放音结束 */*/ if(k=29999) brd_led_toggle(brd_led0); /点亮二极管0 delay(1000); /延时1000 brd_led_toggle(brd_led0); /熄灭二极管0 表示录音开始 /主程序结束/*/* 子函数 */*/*延时*/void delay(s16 period) int i, j; for(i=0; iperiod; i+) for(j=0; j1; 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) 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 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) seg_shift;if(seg=0) t += 8; t=(t3);if(seg0) t +=0x108; t=(t(4-seg);if(seg3)t+=0x108;t=(t 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 */
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公园劳务服务合同标准文本
- 产品网销合同标准文本
- 供货定金合同样本
- 中宁滴灌带采购合同标准文本
- 入股购买机械合同样本
- 公司签订业务合作合同样本
- 2025《试用合同范本》
- 公司委托管理合同样本
- 事务代理合同标准文本
- 中餐预订合同标准文本
- 软测量方法原理及实际应用-课件
- 车床教学讲解课件
- 政策目标确立和方案制定概述课件
- 六年级下册英语课件-Unit 4 Lesson 23 Good-bye-冀教版(共19张PPT)
- 硬笔书法全册教案共20课时
- 张波-超高温陶瓷课件
- 特洛伊战争(英文版)
- DBJ04-T 410-2021城市停车场(库)设施配置标准
- 车站主体结构模板支架专项施工方案--终稿(专家意见修改的)-副本
- 保洁岗位培训
- 丽声北极星自然拼读绘本第二级 Pad, Pad, Pad! 课件
评论
0/150
提交评论