ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:299.47KB ,
资源ID:5696009      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5696009.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP期末考试实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP期末考试实验报告.docx

1、DSP期末考试实验报告重庆邮电大学学 生 实 验 报 告课程名称: DSP应用与设计 专业班级: 通信与信息系统1班学生学号: 学生姓名: 所属院部: 通信工程学院 指导教师: 代少升 实验项目名称:语音信号采集、放送与FIR滤波 实验学时 4学时 实验地点: 逸夫楼315 实验开始日期: 2010-11-24 一、实验目的和要求(一)、实验目的 (1)熟悉CCS平台设计开发流程并会调试程序;(2)掌握语音信号采集与放送的原理以及FIR滤波原理;(3)掌握程序设计流程图以及用到各个模块的作用和定义;(二)、实验要求 (1)注意掌握CCS开发DSP应用程序的步骤;(2)完成语言信号的采集;(3)

2、完成语言信号噪声的加入;(4)完成FIR滤波,使语音清晰;(5)左声道输出带噪声语音效果,右声道输出FIR语音效果;(6)调试程序要记录调试过程中出现的问题及解决办法;(7)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;(8)提交实验报告,具体包括:实验内容,实验原理和程序设计流程,实验原代码,实验测试结果(附波形图)。二、实验仪器和设备计算机一台,装有ccs3.3运行环境、DSP实验箱(包括仿真器)、麦克风输入设备、耳机输出设备三、实验过程(一)设计前了解和准备:(1)此次实验主要用到了三个模块,第一个是AIC23的立体声语音解

3、码芯片,第二个是 MCBSP0的多通道缓冲串口,第三个是I2C总线模块。另外还用到了DSP的FIR滤波实现。 (2) 三个模块的基本介绍和FIR基础知识: AIC23芯片: AIC23是可编程芯片,内部有11个16位寄存器,编程设置这些寄存器可得到所需的采样频率、输入输出增益和传输数据格式等。 该控制接口有SPI和I2C两种工作模式,由芯片上的MODE引脚进行选择:MODE=0为I2C模式,MODE1为SPI模式。 AIC23的I2C接口地址由 引脚的状态决定, 0时地址为0011010, 1时地址为0011011。 (注意:在该开发板上我们已经直接将MODE接口接地,即低电平0,此时则只运行

4、于I2C模式。)MCBSP模块: MCBSP为多通道缓冲串口,用于实现DSP芯片与AIC23芯片之间的数据传输,在实验中我们用到了MCBSP0的模块进行数据接收和发送。 I2C模块:I2C总线定义:I2C(InterIntegrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备I2C总线特点:I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本,I2C要求从器件有一个地址。FIR滤波:FIR:有限脉冲响应滤波器。特点:线性相位,非递归结构。既具

5、有严格的线性相位(就是不同频率分量的信号经过fir滤波器后他们的时间差不变)。图像处理以及数据传输,都要求信道具有线性相位特性。FIR滤波器的单位抽样响应是有限长的,因而滤波器性能稳定。(3) 程序需要配置的模块:初始化DSP的时钟和寄存器。MCBSP寄存器配置。I2C寄存器配置。AIC23寄存器配置。实现程序代码,包括FIR滤波实现。初始化配置:DSP 通过I 2C 总线将配置命令发送到AIC23,配置完成后AIC23 开始工作。(4) 大致实验原理和步骤:第一步:通过麦克风利用芯片AIC23进行带噪声的语音信号采集,由于AIC本身自带A/D转化,采集得到的数据传输保存于MCBSP数据接收寄

6、存器DDR。第二步:DSP对MCBSP中的数据进行FIR滤波,并送给MCBSP中的数据发送寄存器DXR。第三步:DXR中数据回传给AIC23,并利用它带的D/A转换进行输出,从而能听到滤波后的信号。(二)实验流程图设计:设计流程图如下:(三)三大模块初始化代码:(1)AIC23的初始化代码(附注解):/ AIC23 的11个控制寄存器各基地址定义#define AIC23_LT_LINE_CTL 0x00 / 0 #define AIC23_RT_LINE_CTL 0x02 / 1#define AIC23_LT_HP_CTL 0x04 / 2#define AIC23_RT_HP_CTL 0

7、x06 / 3#define AIC23_ANALOG_AUDIO_CTL 0x08 / 4#define AIC23_DIGITAL_AUDIO_CTL 0x0A / 5#define AIC23_POWER_DOWN_CTL 0x0C / 6#define AIC23_DIGITAL_IF_FORMAT 0x0E / 7#define AIC23_SAMPLE_RATE_CTL 0x10 / 8#define AIC23_DIG_IF_ACTIVATE 0x12 / 9#define AIC23_RESET_REG 0x1E / F 让寄存器复位/部分控制寄存器各个位的初值设置/数字音频控

8、制接口寄存器各位定义#define DIGIF_FMT_MS 0x40#define DIGIF_FMT_LRSWAP 0x20#define DIGIF_FMT_LRP 0x10#define DIGIF_FMT_IWL 0x0c#define DIGIF_FMT_FOR 0x03#define DIGIF_FMT_IWL_16 0x00#define DIGIF_FMT_IWL_20 0x04#define DIGIF_FMT_IWL_24 0x08#define DIGIF_FMT_IWL_32 0xc0#define DIGIF_FMT_FOR_MSBRIGHT 0x00#define

9、 DIGIF_FMT_FOR_MSLEFT 0x01#define DIGIF_FMT_FOR_I2S 0x02#define DIGIF_FMT_FOR_DSP 0x03 /电源控制寄存器各位定义#define POWER_DEV 0x80#define POWER_CLK 0x40#define POWER_OSC 0x20#define POWER_OUT 0x10#define POWER_DAC 0x08#define POWER_ADC 0x04#define POWER_MIC 0x02#define POWER_LINE 0x01 /采样率控制寄存器各位定义#define SR

10、C_CLKOUT 0x80#define SRC_CLKIN 0x40#define SRC_SR 0x3c#define SRC_BOSR 0x02#define SRC_MO 0x01#define SRC_SR_44 0x20#define SRC_SR_32 0x18 /模拟音频通道控制寄存器 各位定义#define ANAPCTL_STA 0xc0#define ANAPCTL_STE 0x20#define ANAPCTL_DAC 0x10#define ANAPCTL_BYP 0x08#define ANAPCTL_INSEL 0x04#define ANAPCTL_MICM 0

11、x02#define ANAPCTL_MICB 0x01 /数字音频通道控制寄存器各位定义 #define DIGPCTL_DACM 0x08#define DIGPCTL_DEEMP 0x06#define DIGPCTL_ADCHP 0x01#define DIGPCTL_DEEMP_DIS 0x00#define DIGPCTL_DEEMP_32 0x02#define DIGPCTL_DEEMP_44 0x04#define DIGPCRL_DEEMP_48 0x06#define DIGIFACT_ACT 0x01 /数字接口激活寄存器初始化#define LT_HP_CTL_LZC

12、 0x80 /耳机左通路音频控制寄存器#define RT_HP_CTL_RZC 0x80 /耳机右通路音频控制寄存器void AIC23_Init() /音频芯片AIC23初始化模块 I2C_Init();/调用I2C初始化程序用来打开AIC23 /初始化AIC23并打开各个模块 AIC23_Write(AIC23_RESET_REG, 0);/AIC23寄存器复位 AIC23_Write(AIC23_POWER_DOWN_CTL, 0);/*节电模式设置,所有部分都为工作状态 */ AIC23_Write(AIC23_ANALOG_AUDIO_CTL, ANAPCTL_DAC | ANAP

13、CTL_INSEL); /模拟音频通道控制,打开 DAC,ADC输入选择方式为麦克风输入方式 AIC23_Write(AIC23_DIGITAL_AUDIO_CTL, 0); /数字音频通道控制 / line输入的音频方式调节 AIC23_Write(AIC23_LT_LINE_CTL,0x000); /左通路音频方式调节 AIC23_Write(AIC23_RT_LINE_CTL,0x000); /右通路音频方式调节 AIC23_Write(AIC23_DIGITAL_IF_FORMAT, DIGIF_FMT_MS | DIGIF_FMT_IWL_16 | DIGIF_FMT_FOR_DSP

14、);/*选定AIC23为主模式, 数据长为16bit,DSP格式*/ AIC23_Write(AIC23_SAMPLE_RATE_CTL, SRC_SR_44 | SRC_BOSR | SRC_MO);/选定USB模式采样率为44.1KHZ, / 打开耳机通路调节 AIC23_Write(AIC23_LT_HP_CTL, 0x07f); /耳机左通路控制调节音量增益为+6db AIC23_Write(AIC23_RT_HP_CTL, 0x07f); /耳机右通路控制调节音量增益为+6db AIC23_Write(AIC23_DIG_IF_ACTIVATE, DIGIFACT_ACT); /数字

15、接口激活McBSP0_InitSlave();/设置McBSP0用来控制发送来的数据/AIC23控制口写入,利用I2C激活AIC23void AIC23_Write(unsigned short regaddr, unsigned short data) unsigned char buf2; buf0 = regaddr; buf1 = data; I2C_Write(I2C_AIC23, 2, buf);/用I2C激活AIC23(2)MCBSP0的初始化代码(附注解):void McBSP0_InitSlave() /MCBSP初始化模块 PC55XX_MCSP pMCBSP0 = (PC

16、55XX_MCSP)C55XX_MSP0_ADDR; /*使用库函PC55XX_MCSP*/ /初始化MCBSP0的SPCR1和SPCR2这两个控制寄存器 Write(pMCBSP0 - spcr1, 0); Write(pMCBSP0 - spcr2, 0); / 设置接收和传输的大小,并设置接收和传输时不需要延迟 Write(pMCBSP0 - xcr1, XWDLEN1_32); /*设置输出控制寄存器xcr1来传输字节长度*/ Write(pMCBSP0 - xcr2, XPHASE_SINGLE | XDATDLY_0); /*设置输出控制寄存器cxcr1在传输数据时,不需要延迟一个

17、时钟输出*/ Write(pMCBSP0 - rcr1, RWDLEN1_32); /*设置输入控制寄存器rcr1的读入字节长度*/ Write(pMCBSP0 - rcr2, RPHASE_SINGLE | RDATDLY_0); /*设置输入控制寄存器rcr1在接收数据时,不需要延迟一个时钟接收*/ /*设置PCR时钟信号控制寄存器,确定时钟信号的极性, 当CLKXP为 0的时候为正极性,时钟以上升沿开始;反之,时钟以下降沿开始*/ Write(pMCBSP0 - pcr, PCR_CLKXP); / 对发送和接收进行复位 SetMask(pMCBSP0 - spcr2, SPCR2_XR

18、ST);/复位 SPCR2中的XRST寄存器 SetMask(pMCBSP0 - spcr1, SPCR1_RRST); /复位 SPCR1中RRST寄存器 (3)I2C的初始化代码(附注解):I2C_Init() /I2C的初始化模块 PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR; /*利用到库文件中的PC55XX_I2C*/ ClearMask(pI2C - icmdr, ICMDR_IRS); /*重置I2C寄存器ICMDR,发送一个信号激活I2C总线*/ pI2C - icpsc = dspclk.pllmult; /*配置I2C总线的时钟信

19、号, AIC23使用的是晶振输入,所以I2C时钟寄存器ICPSC直接用时钟信号dspclk.pllmult*/ / 配置I2C信号的时钟信号(SCL)频率 Write(pI2C - icclkl, 10); Write(pI2C - icclkh, 10); WriteMask(pI2C - icoar, ICOAR_OADDR, ICOAR_MASK_7); /设置I2C主从地址。 SetMask(pI2C - icmdr, ICMDR_IRS | ICMDR_MST); /*第二次对ICMDR赋值,表示I2C寄存器配置完成,I2C总线准备工作;*/I2C_Disable()/I2C关闭模块

20、 PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR; / 让I2C控制寄存器重启(如果没重启寄存器的情况下时钟改变了) ClearMask(pI2C - icmdr, ICMDR_IRS); /I2C的写模块void I2C_Write(unsigned short int device, int count, unsigned char *bytedata) PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR; /调用库函数PC55XX_I2C int I; / 设置I2C的控制寄存器用来写大小为count的数据

21、Write(pI2C - iccnt, count); /*设置需要通过I2C来传输的数据大小,大小为count */ WriteMask(pI2C - icsar, device, ICSAR_MASK_7); /*设置DSP想要读写的从地址*/ /激活ICMDR模式寄存器中的相应位,从而定义控制方式 WriteMask(pI2C - icmdr, ICMDR_STT | ICMDR_STP | ICMDR_TRX, ICMDR_STT | ICMDR_STP | ICMDR_TRX); /STT代表的开始位,STP代表的结束位,TRX代表的传输模式 / 传输数据 for (i = 0; i

22、 icdxr, bytedatai); /*DSP通过ICDXR这个寄存器发送数据bytedatai*/ while(!(pI2C - icstr & ICSTR_ICXRDY); /*检测DSP发送寄存器ICSTR是否发送完毕*/ /I2C的读模块void I2C_Read(unsigned short int device, int count, unsigned char *bytedata) PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR; /使用库函数PC55XX_I2C int i; / 设置I2C的控制寄存器用来读大小为count的数据

23、Write(pI2C - iccnt, count); /*设置需要通过I2C来传输的数据大小,大小为count*/ WriteMask(pI2C - icsar, device, ICSAR_MASK_7); /*设置DSP想要读写的从地址*/ /激活ICMDR模式寄存器中的相应位,从而定义控制方式 WriteMask(pI2C - icmdr, ICMDR_STT | ICMDR_STP, /这里的ICMDR_TRX没写即代表为默认1,读模式 ICMDR_STT | ICMDR_STP | ICMDR_TRX); /接收count大小的数据 for (i = 0; i icstr & IC

24、STR_ICRRDY); /*检测DSP接收寄存器ICRRX是否接收完毕*/ bytedatai = pI2C - icdrr; /拷贝数据到bytedatai数组进行保存。 (四)主函数和关键程序代码:(1)main()函数代码(附注释):void main() SDRAM_init();/初始化EMIF外部扩展接口 EnableAPLL();/打开时钟锁相环 PLL_Init(40);/初始化时钟 AIC23_Init();/调用AIC23初始化模块 PLL_Init(120);/初始化时钟 for(;) AIC23_Mixer();/调用关键实现程序 (2)关键实现函数AIC23_Mix

25、er()代码(附注释): #define AUTIODATALEFT 0x0d000#define AUTIODATARIGHT 0x17000int *pAudioLeft,*pAudioRight;void AIC23_Mixer() PC55XX_MCSP pMCBSP0 = (PC55XX_MCSP)C55XX_MSP0_ADDR; int left, right;/定义左右声道变量 int *pl,*pr,nAudioCount; int i; pAudioLeft=pl=(int *)AUTIODATALEFT; pAudioRight=pr=(int *)AUTIODATARIG

26、HT; nAudioCount=0; for ( i=0;iNX;i+) xi=0; for ( i=0;i spcr2, SPCR2_XRDY);/ 等待数据传输完成 (*pl)=left = Read(pMCBSP0 - ddr1); / 读入左声道数据 right = Read(pMCBSP0 - ddr2); / 读入右声道数据 xNX-1=left/16; / 防止滤波时数据溢出 fir2(x, h, r, db, NX, NH); / 调用滤波程序计算当前输出 (*pr)=rNX-1; / 数组r的最后一个单元为当前输出 Write(pMCBSP0 - dxr1,left); /

27、将原来数据送左声道输出 Write(pMCBSP0 - dxr2, rNX-1); / 将滤波后的数据送右声道输出 nAudioCount+; pl+; pr+; / 循环使用缓冲区 if ( nAudioCount=1024 ) nAudioCount=0; / 断点位置 pl=pAudioLeft; pr=pAudioRight; for ( i=0;iNX-1;i+ ) / 重新调整输入序列(供fir2使用) xi=xi+1; 注意:其中这些定义中还包含了很多头文件以及系统库函数的引用,这些大部分为CCS软件提供,具体的设置略,以上仅为核心模块初始化以及主程序实现部分代码。四、实验运行结

28、果实验运行结果: 在设置断点处设置断点,下载进实验板后点一直运行,麦克风输入声音, 由于原来数据保存于AUTIODATALEFT,滤波后数据保存于AUTIODATARIGHT,所以可以在CCS软件中打开图形观察窗口监视动态变化,开两个窗口,观察基地址分别对应AUTIODATALEFT(0x0d000),AUTIODATARIGHT(0x17000),取一个输入点停止运行截得各个部分的频域图和时域图分别如下:图1 带噪声声波时域图图2 滤波后声波时域图 图3 带噪声声波频域图图4 滤波后声波频域图 五、实验心得 虽然本科是学习过这门课程但是由于一些原因学的很粗糙,这学期通过学习DSP这门课程,让我加深了对DSP的了解,让我进一步熟悉了CCS开发环境以及设计运行调试过程,认识到AIC23语音芯片和I2C协议以及MCBSP模块的各个工作原理以及三者之间的关系,学会对模块的初始化怎么定义和编写的流程。使我对DSP产生了浓厚的兴趣,激发了我学习DSP的积极性,从这次实验结果上来说,清晰的结果使我对书本上的知识应用到了实验中,很满足。该实验通过FIR滤波器滤波后把噪声滤除掉了,从时域图来看,原来的带有毛刺的音频波形滤波后变得平滑,从频域图来看,噪声所在的频域段基本上被滤除掉。实验的成功离不开老师、师兄、师姐的耐心指导!在这里谢谢老师、师兄、师姐的教导!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1