技术及应用实习报告.doc_第1页
技术及应用实习报告.doc_第2页
技术及应用实习报告.doc_第3页
技术及应用实习报告.doc_第4页
技术及应用实习报告.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DSP实习报告课程实习报告DSP技术及应用图像处理实习报告实习项目:语音信号的数字滤波器设计 班 级: 信息11-2 姓 名: 龙启金 学 号: 20111605010226指导教师: 刘柏生 实验日期: 2014.06.032014.05.13 北华大学电气信息工程学院 目录一实习题目.2二实习目的.2三实习要求.2四系统原理描述.2五方案论证及系统设计.3六硬件电路设计图.7七实习体会.7八参考文献.8一. 实习题目:语音信号采集、分析与处理系统设计二. 实习目的:1、熟练掌握数字信号处理的典型设计方法与技术手段;2、熟悉电子CAD制图与PCB板的制作方法;3、掌握常用电子仪器设备的使用方法;4、亲自动手完成一个DSP系统的设计与实现。三. 实习步骤与要求:1. 选择设计题目(第一天);1.1验收实习任务的预习情况。1.2熟悉实习硬件设备、软件环境平台。1.3组织学生选题与分组,每组最多不超过4人。2完成所设计电子系统的方案论证、原理论述与算法仿真(第2天);3. 选择恰当的系统开发平台,绘制设计图样(第35天);4. 编制系统程序,完成程序在线调试与仿真(第67天);5. 验收设计成果(第8、9天);6. 整理设计资料,撰写实习报告,(第10天)。四. 系统原理描述1.DSP简介TI DSP系列中文手册:TMS320C55x系列DSP指令系统、开发工具与编程指南主要内容:TMS320C55x DSP是美国德州仪器(TI)公司C5000 16位定点DSP系列里最新的一代产品。其拥有的资源与性能较目前使用最为广泛的C54x系列DSP有成数倍的提升,并进一步弘扬了低功耗、低成本、高速度的特征,是当前数字信号处理领域和各种便携式应用场合最具潜力的可选高性能DSP之一。TI DSP系列中文手册:TMS320C55x系列DSP指令系统、开发工具与编程指南以C55x DSP为对象,介绍其指令系统、开发工具和编程指南。全书共分为5章,其巾第1章介绍CCS DSP的基本结构和编程的基本过程;第2章详细介绍C55x的汇编语言指令系统;第3章介绍C55x的汇编语言开发工具;第4章则对C55x的软件开发工具及C/C+语言进行详细阐述;第5章详细介绍C55x的C/C+代码和汇编语言代码的优化。全书涉及几乎所有在C5000的硬件平台上开发一个完整的软件程序所必需的知识,由于其中的实例全部取自C55x,因此对开发C55x的本科生、研究生和丁程师具有更加重要的参考价值。数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。德州仪器、Freescale等半导体厂商在这一领域拥有很强的实力。2.CCS简介英文全称:Code Composer Studio 中文译名:代码调试器,代码设计套件。 CCS的全称是Code Composer Studio,它是美国德州仪器公司(Texas Instrument,TI)出品的代码开发和调试套件。TI公司的产品线中有一大块业务是数字信号处理器(DSP)和微处理器(MCU),CCS便是供用户开发和调试DSP和MCU程序的集成开发软件。 经典的版本号是CCS 3.1、CCS 3.3,最新版本号已经更新到了4.x。4.x不仅界面上与3.x迥异,内核也大为不同,用户体验并不出色,故迁移至4.x的用户仍很少。 Code Composer Studio IDE 提供强健、成熟的核心功能与简便易用的配置和图形可视化工具,使系统设计更快。开发周期中的功能:应用设计 - 包括 DSP BIOS、参考框架和更新顾问编码与编译 - 包括 C/C+ 和汇编语言以及 CodeWright 集成编辑器 调试 - RTDX 快速模拟和连接/断开连接分析与调优 - 包括实时分析、编译器分析和回卷。图像处理,是对 图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外,基于光学理论的处理方法依然占有重要的地位。五. 方案论证及系统设计音频滤波实验有限冲击响应数字滤波器(FIR)的基础理论FIR数字滤波器是一种非递归系统,其冲激响应h(n)是有限长序列,其差分方程表达式为: N为FIR滤波器的阶数。在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。为了使滤波器满足线性相位条件,要求其单位脉冲响应h(n)为实序列,且满足偶对称或奇对称条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n)。这样,当N为偶数时,偶对称线性相位FIR滤波器的差分方程表达式为 由上可见,FIR滤波器不断地对输入样本x(n)延时后,再做乘法累加算法,将滤波器结果y(n)输出。因此,FIR实际上是一种乘法累加运算。而对于线性相位FIR而言,利用线性相位FIR滤波器系数的对称特性,可以采用结构精简的FIR结构将乘法器数目减少一半。音频滤波实验,包含文件:1. DEC5502_Filter.c:这是实验的主程序,包含了系统初始化,系统时钟设置,初始化DSP的外部EMIF。2. AIC.c:实现CODEC控制寄存器配置及AIC23设置功能;3. E2PROM_Function.c:实现E2PROM读写操作;4. I2C.c:进行I2C初始化;5. mcbsp.c:配置mcbsp;6. SEED_DEC5502.cmd:声明了系统的存储器配置与程序各段的连接关系。程序流程图 CSL初始化系统时钟设置初始化DSP的外部EMIFI2C初始化设置并启动AIC23音频信号采集数据采集音频信号输出FIR滤波实验准备首先将光盘下03. Examples of Program 实验程序目录下的AudioPCM的文件夹拷贝到D:盘根目录下。1. 将DSP仿真器与计算机连接好;2. 将DSP仿真器的JTAG插头与SEED-DEC5502单元的J1相连接;3. 在测试之前,必须对SEED-DEC5502模板上的JP8、JP9进行配置。如果用跳线将JP8、JP9的1、2插针相连,则选择立体声音频输出(音响);若用跳线将JP8、JP9的2、3插针相连,则选择耳机音频输出;4. 打开SEED-DEC5502的电源。观察SEED-DEC-MBoard单元的5V,3.3V,15V,15V的电源指示灯以及SEED_DEC5502的电源指示灯D2、D4是否均亮;若有不亮的,请断开电源,检查电源。5. 将耳麦接口插入J6,音频线连接计算机的音频输出接口与SEED-DEC5502单元的J5接口。实验步骤1. 打开CCS,进入CCS的操作环境;2. 装入DEC5502_Filter.pjt工程文件,添加SEED_DEC5502.gel文件;3. 装载程序DEC5502_Filter.out,进行调试;4. 如果选择Line in输入,在AIC.c程序第38行处,将AAPC_INSEL(x)设为AAPC_INSEL(1);然后只要将音频头插入SEED-DEC5502的J7口即可,本实验默认是Linin输入;5. DSP程序运行之前,应在PC机上播放一段音乐作为Codec的输入;6. 运行程序。观看DataRig频域和时域下的波形: 观察滤波后的DDataBuffer,其频域和时域下的波形为: 注:本实验只对右声道的声音进行了滤波处理,用户可通过耳机对比左右声道的声音。系统主程序:/*/* Copyright 2004 by SEED Electronic Technology LTD. */* All rights reserved. SEED Electronic Technology LTD. */* Restricted rights to use, duplicate or disclose this code are */* granted through contract. */* */* MODULE NAME. IIC and Mcbsp */* FILENAME. 5502_CODEC.c */* DESCRIPTION: */* This is an audio signal sample and play example for CODEC of C5502 */* This example is that the codec is controled by the IIC and Mcbsp */* */*/#include #include #include #include #include #include #include #include E2PROM_Function.h#include CODEC.h#undef CODEC_ADDR#define CODEC_ADDR 0x1Ashort DataRig1280=0;short DataLef1280=0;short DDataBuffer1280=0;short R_in1024;short temp;#define SAMPLELONG 3Uint16 SampleLong;/ 定义McBSP的句柄MCBSP_Handle hMcbsp;short fir_filter (short); /*-*/ FUNCTION: MAIN/*-*/ void main(void) Uint16 num=0; / Initialize CSL library - This is REQUIRED ! CSL_init(); /为保证数据采集准确,多采集256个值#if SAMPLELONG=1SampleLong =256+256;#endif#if SAMPLELONG=2SampleLong =512+256;#endif#if SAMPLELONG=3SampleLong =1024+256;#endif/ The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); / Initialize I2C, Using parameters in I2C_Setup structureI2c_Setup();/ 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);/ Start McBSP1 MCBSP_start(hMcbsp, MCBSP_RCV_START | MCBSP_XMIT_START, 0); inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1)while(!MCBSP_rrdy(hMcbsp);DataLef0 = MCBSP_read16(hMcbsp);while(!MCBSP_rrdy(hMcbsp); temp = MCBSP_read16(hMcbsp); if(numSampleLong) DataRignum=temp; temp=fir_filter(DataRignum);/* 左声道耳机输出 */while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp,DataLef0);/* 右声道耳机输出 */while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp,temp); if(numSampleLong) DDataBuffernum = temp; else num=0;num+;short fir_filter (short input)short h52=0x003F,0x0045,0x0051,0x0064,0x007E,0x00A0,0x00CA,0x00FB,0x0133,0x0171, 0x01B5,0x01FE,0x024A,0x0299,0x02E9,0x0338,0x0386,0x03D0,0x0415,0x0454, 0x048C,0x04BB,0x04E1,0x04FD,0x050E,0x0513,0x050E,0x04FD,0x04E1,0x04BB, 0x04BC,0x0454,0x0415,0x03D0,0x0386,0x0338,0x02E9,0x0299,0x024A,0x01FE, 0x01B5,0x0171,0x0133,0x00FB,0x00CA,0x00A0,0x007E,0x0064,0x0051,0x0045, 0x003F,0x0000;Int32 i;Int32 acc=0;Int32 prod;Int32 y;short output=0;R_in0 = input;for(i=0;i6;acc = acc + prod;y = (acc16);for(i=51;i0;i-)R_ini=R_ini-1;return output; 其他程序:E2PROM_Function.c:/*/*/*Filename:E2PROM_Function.c*/* Function:Realize E2PROMs writing and reading operation*/*/*/#include /*/* MODULE.NAME. I2C*/* FUNCTIONNAME. I2C_Write()*/* DATE CREATED. Sun 08/20/2004 */*/void MyI2C_setup(I2C_Setup *Init) int old_intm; Uint16 IPSC_calc; old_intm = IRQ_globalDisable(); /* 将下面的IRS域作了修改,让IIC模块处于复位状态,然后进行时钟的配置 */ I2C_RSET(I2CMDR,I2C_I2CMDR_RMK(Init-free,0,0,0,1,1,Init-addrmode,0,Init-dlb,0,0,0,Init-bitbyte); /* set own address */ I2C_RSET(I2COAR,Init-ownaddr); /* if slave, need to specify own address */ /* calculating the IPSC value */ IPSC_calc = (Init-sysinclock)/12; /* must correct rounding issue */ I2C_RSET(I2CPSC,IPSC_calc); /* calculating the ICCLKL and ICCLKH register values */ I2C_RSET(I2CCLKL,15); I2C_RSET(I2CCLKH,15); /* 使能IIC模块 */ I2C_FSET(I2CMDR,IRS,1); IRQ_globalRestore(old_intm); /* end of init */int MyI2C_Write(Uint16 *data,int length,int master,Uint16 slaveaddress,int transfermode,int timeout) int i,j,k,l,m; int old_intm; Uint16 temp=1; /old_intm = IRQ_globalDisable(); /* set in transmit mode */ I2C_FSET(I2CMDR,TRX,1); /* set the count register */ I2C_RSET(I2CCNT,length); if (master=1) I2C_RSET(I2CSAR,slaveaddress); /* specify slave address */ I2C_FSET(I2CMDR,MST,1); /* turn master mode on */ /* setting the transfer mode */ if (transfermode=1) /* S-A-D.(n).D-P mode */ I2C_FSET(I2CMDR,RM,0); I2C_FSET(I2CMDR,STP,1); else if (transfermode=2) /* S-A-D.(n).D mode (repeat n times)*/ I2C_FSET(I2CMDR,RM,0); I2C_FSET(I2CMDR,STP,0); else if (transfermode=3) /* S-A-D-D-D . (repeat continuous) mode */ I2C_FSET(I2CMDR,RM,1); I2C_FSET(I2CMDR,STP,0); else /* if user specifies something else, go to idle mode */ I2C_FSET(I2CMDR,RM,0); I2C_FSET(I2CMDR,STP,0); /* end if master */ else I2C_FSET(I2CMDR,MST,0); /* if not master, set to slave */ /* end set up */ old_intm = IRQ_globalDisable(); for (i=0;i=timeout) /* bus busy timeout error */ /IRQ_globalRestore(old_intm); return 1; for (m=0;m=timeout) /IRQ_globalRestore(old_intm); return 2; /* time out for transmit DXR ready */ I2C_RSET(I2CDXR,*data+); /* put first data value in DXR */ I2C_FSET(I2CMDR,STT,1);/* generate start condition */ for (k=1;klength;k+) /* enter main loop for transmitting data */ for (i=0;i2000;i+) for(j=0;j1000;j+)/* delay loop */ asm ( NOP); for (l=0;l=timeout) /IRQ_globalRestore(old_intm); return 3; /* No acknowledge bit is set, NACK error */ for (m=0;m=timeout) /IRQ_globalRestore(old_intm); return 4; /* time out for transmit DXR ready */ I2C_RSET(I2CDXR,*data+); /* put next data value in DXR */ /* end of for loop */ for (j=0;j10;j+) /* last delay loop for last data transferred*/ for (i=0;i32000;i+) asm ( NOP); for (l=0;l=timeout) /IRQ_globalRestore(old_intm); return 5; /* No acknowledge bit is set, NACK error */ /IRQ_globalRestore(old_intm); return 0; /* end of I2C_Write */int MyI2C_WriteAD(Uint16 *data,Uint16 rate,int length,int master,Uint16 slaveaddress,int transfermode,int timeout) int i,j,k,l,m; int old_intm; Uint16 temp=1; /old_intm = IRQ_globalDisable(); /* set in transmit mode */ I2C_FSET(I2CMDR,TRX,1); /* set the count register */ I2C_RSET(I2CCNT,length); if (master=1) I2C_RSET(I2CSAR,slaveaddress); /* specify slave address */ I2C_FSET(I2CMDR,MST,1); /* turn master mode on */ /* setting the transfer mode */ if (transfermode=1) /* S-A-D.(n).D-P mode */ I2C_FSET(I2CMDR,RM,0); I2C_FSET(I2CMDR,STP,1); else if (transfermode=2) /* S-A-D.(n).D mode (repeat n times)*/ I2C_FSET(I2CMDR,RM,0); I2C_FSET(I2CMDR,STP,0); else if (transfermode=3) /* S-A-D-D-D . (repeat continuous) mode */ I2C_FSET(I2CMDR,RM,1); I2C_FSET(I2CMDR,STP,0); else /* if user specifies something else, go to idle mode */ I2C_FSET(I2CMDR,RM,0); I2C_FSET(I2CMDR,STP,0); /* end if master */ else I2C_FSET(I2CMDR,MST,0); /* if not master, set to slave */ /* end set up */ old_intm = IRQ_globalDisable(); for (i=0;i=timeout) /* bus busy timeout error */ /IRQ_globalRestore(old_intm); return 1; for (m=0;m=timeout) /IRQ_globalRestore(old_intm); return 2; /* time out for transmit DXR ready */ I2C_RSET(I2CDXR,*data+); /* put first data value in DXR */ I2C_FSET(I2CMDR,STT,1);/* generate start condition */ for (k=1;klength;k+) /* enter main loop for transmitting data */ for (i=0;i2000;i+) for(j=0;j1000;j+)/* delay loop */ asm ( NOP); for (l=0;l=timeout) /IRQ_globalRestore(old_intm); return 3; /* No acknowledge bit is set, NACK error */ for (m=0;m=timeout) /IRQ_globalRestore(old_intm); return 4; /* time out for transmit DXR ready */ I2C_RSET(I2CDXR,rate); /* put next data value in DXR */ /* end of for loop */ for (j=0;j10;j+) /* last delay loop for last data transferred*/ for (i=0;i32000;i+) asm ( NOP); for (l=0;l=timeout) /IRQ_globalRestore(old_intm); return 5; /* No acknowledge bit is set, NACK error */ /IRQ_globalRestore(old_intm); return 0; /* end of I2C_Write */*/* MODULE.NAME. I2C*/* FUNCTIONNAME. I2C_Read()*/* DATE CREATED. Sun 08/20/2004 */*/int MyI2C_Read(Uint16 *data,int length,int master,Uint16 slaveaddress,int transfermode,int timeout, int checkbus) int i,j,k,m; int old_intm; Uint16 temp; /old_intm = IRQ_globalDisable(); /* set in receive mode */ I2C_FSET(I2CMDR,TRX,0); if (master=1) I2C_RSET(I2CSAR,slaveaddress); /* specify slave address */ I2C_FSET(I2CMDR,MST,1); /* turn master mode on */ /* setting the transfer mode */ if (transfermode=

温馨提示

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

评论

0/150

提交评论