版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 CODEC语音实验实验报告 姓名: 赵广元 学号: 1428403058 学院: 电子信息学院 班级: 电子信息工程实验五 CODEC语音实验一实验目的1. 掌握利用CODEC进行AD/DA转换2. 熟悉基于DSP片级支持库CSL的McBSP的配置与应用3. 学习语音信号处理方法二、实验环境1. 集成开发环境Code Composer Studio(简称CCS)2. TMS320C5416 DSK 实验板3. 实验程序mcbsp.c,mcbsp.cmd三、实验步骤1. 将耳机和麦克风的插头插入DSK 实验班的PCM3002 部分的MICIN 和SPEAK OUT 的J1 和J4 插孔,然后用
2、USB 线连接PC 机和DSK 实验板。2. 为DSK 实验板接通电源。3. 启动CCS,建立工程,建立语音处理源程序文件和CMD 文件,并将两个文件加入到当前工程。启动ccs建立工程之后新建源程序文件和CMD 文件,并右键单击工程名选择add files to project将文件添加到工程中。4. 通过选择Build Option 命令设置编译链接选项本实验中使用到片级支持库csl5416x.lib和运行时rts_ext.lib,因此在build option 选项的Linker 页的Libraries 项的Include libraries(-l)中输入“csl5416x.lib;rts
3、_ext.lib”,注意使用分号分隔。由于使用的是扩展库,需要在compiler 选项页的andvance 项中,勾选“use far calls(-mf)”。5. 编译工程文件并装载程序,运行程序。编译时会出现no chip defined的编译错误,此时要修改编译选项options,在build option 选项的compiler 选项页进行修改,注意使用分号分隔。6. 对照麦克说话,听耳机中的声音是否是语音的回放。连接好麦克风和耳机之后,耳机中的声音出现回放。7. 启用Watch 窗口,可以利用Watch 窗口设置Flag_working 的值为0 可以停止回放功能。Watch 窗口设
4、置Flag_working 的值为0 时,耳机中不再对语音进行回放。若想再一次实现回放功能,需要设置Flag_working 的值为1,并重新编译下载运行程序。四、实验结果分析1. 实时运行库实时运行库提供了标准C 中的大部分函数,帮助建立C 语言的环境,同时也提供一些基本的调试手段,如printf( )等。2. 片级支持库可利用片级支持库对片内外设如McBSP、DMA 等进行配置和访问。3. Codec利用Codec 可以对音频进行采集和回放4. 语音处理实验程序实现语音回放功能,可以修改程序,对采集的语音信号进行数字信号处理,再输出处理后的语音信号。注意,使用MCBSP_read32 和M
5、CBSP_write32 函数时,高16bit和低16bit 分别对应立体声的左声道和右声道数据,滤波时要分开处理。五、思考与进阶1. 学习汇编编程实现语音回放实验实验过程中使用C语言实现语音回放,通过codec(多媒体信号编码解码器)对经过AD变换后的音频数字信号传输进行编码,压缩,在接收端对信号进行解码。通过McBSP(多通道缓冲串行口),再由DMA(直接存储器访问)在存储器和外部设备之间直接进行数据传送;(即音频信号经CODEC采集后通过McBSP再由DMA通道送往数据区缓冲区)。实验程序为老师提供的C语言程序,不再单独贴出。2. 试用DMA 实现语音的采集和回放实验3. 修改实验程序的
6、语音采样频率为8KHz1)原理见附在本实验后边的“汇编编程实现语音回放实验”的实验结果和提示的3,或者是Audio 实验的原理.ppt.pdf 文档。. Step1:置CODEC_CLK 的CLK_STOP 为1; CODEC_CLK = CODEC_CLK | 0x04. Step2:修改CODEC_CLK 的CLK_DIV1,0; CODEC_CLK = (CODEC_CLK & 0x03) | (USER_CLK_DIV1 | USER_CLK_DIV0). Step3:清除CODEC_CLK 的CLK_STOP 位; CODEC_CLK = CODEC_CLK & (0x04). St
7、ep4:置CODEC_CLK 的DIV_SEL 位为1。 CODEC_CLK = CODEC_CLK | 0x082) 利用IOPORT 关键字定义访问IO 口的地址“ioport Uint16 port7;”在源程序文件中定义如下:/* Create data buffers for transfer */Uint16 xmt_L,xmt_R, rcv_L,rcv_R; Uint16 Flag_working;ioport Uint16 port7;ioport int port0;int keyvalue,oldkeyvalue;3)在DSP_int 函数中,采用以下步骤,设置采样频率为8
8、kHz在源程序文件中添加如下: taskFunc();/* Initial DSP */void DSP_init(void) Uint16 Temp ; Temp = port7 ; Temp = Temp | 0x4 ; port7 = Temp; Temp = (Temp & 0x03)| 0x02 ; port7 = Temp ; Temp = Temp & (0x04) ; port7 = Temp; Temp = Temp | 0x08 ; port7 = Temp ; /*initialize PMST and set IPTR,mc/mp,ovly and DROM*/ asm
9、( STM #0xA8, PMST); /* Open MCBSP Port 2, this will return a MCBSP handle that will */ /* be used in calls to other CSl functions. */ mhMcbsp = MCBSP_open(MCBSP_PORT2, MCBSP_OPEN_RESET); /* Write configuration structure values to MCBSP control */ /* registers */ MCBSP_config(mhMcbsp, &ConfigLoopBack
10、16); 4. 进阶(1) 利用板卡上的DIP 开关控制程序是否进入回放模式,利用LED 灯的亮灭显示当前程序运行的状态。(参照实验2,3 中LED 等的控制方法,利用IO 空间访问DIP 开关和LED 灯)。在源程序在添加如下:keyvalue=port0&0x10;/定义并监测按键状态变化if(keyvalue) oldkeyvalue=keyvalue;/按键状态未变化时 Flag_working=0;/停止语音回放 port0=0x0;/LED第四位的第一位灭 else oldkeyvalue=keyvalue;/按键状态变化时 Flag_working=1;/启动语音回放 port0
11、=0x1;/LED第四位的第一位亮 while(1)/实现对按键状态的循环扫描 keyvalue=port0&0x10;if(oldkeyvalue!=keyvalue) if(keyvalue) oldkeyvalue=keyvalue; Flag_working=0; port0=0x0; else oldkeyvalue=keyvalue; Flag_working=1; port0=0x1; while(Flag_working)/采集按键状态信息 /* Wait for RRDY signal to read data from DRR */ while (!MCBSP_rrdy(m
12、hMcbsp) ; /* Read 16 bit value from DRR */ rcv_L = MCBSP_read16(mhMcbsp); /* Wait for RRDY signal to read data from DRR */ while (!MCBSP_rrdy(mhMcbsp) ; /* Read 16 bit value from DRR */ rcv_R = MCBSP_read16(mhMcbsp); /* Loopback . The sampled received can be processed by digital signal processing, a
13、nd outputed to DXR*/ xmt_L = rcv_L; xmt_R = rcv_R; /* Wait for XRDY signal before writing data to DXR */ while (!MCBSP_xrdy(mhMcbsp) ; /* write 16 bit value to DXR */ MCBSP_write16(mhMcbsp,xmt_L);/* Wait for XRDY signal before writing data to DXR */ while (!MCBSP_xrdy(mhMcbsp) ; /* write 16 bit valu
14、e to DXR */ MCBSP_write16(mhMcbsp,xmt_R); keyvalue=port0&0x10;/采集完信息后需要再一次判断按键状态,通过按键状态变化实现源程序要实现的是否进行语音回放以及LED灯亮灭状态,监测到按键按下时停止语音回放,监测到按键未按下时启动语音回放 if(keyvalue) Flag_working=0; /* We are done with MCBSP, so close it */ MCBSP_close(mhMcbsp);(2) 当语音采样率为8KHz 时,设计一个数字滤波器,滤除低于600Hz 的信号。可以考虑采用DIP 开关控制是否启用
15、滤波器,观察滤波后的语音回放效果。(滤波器系数设计与滤波算法参考实验4)滤波实验由于时间问题本次实验课未完成 下次实验继续完成附录:改变语音频率以及通过开关控制是否启动语音回放和LED灯亮灭的源程序如下(暂未实现滤波功能):/* Copyright (c) 2015 SoochowUniversity DSP Tech. Center. All Rights Reserved.* History:*DateAuthorsChanges* 2015/12/30 HL CaoCreated.*/#include #include #include #include /*-*/#define N 2
16、0 /* In this example, the MCBSP is configured in digital loopback */* mode, with 2-16 bit data transfer, */* MCBSP setup is performed in a TSK function that executes on */* exit from main */* Create a MCBSP configuration structure */ static MCBSP_Config ConfigLoopBack16= MCBSP_SPCR1_RMK( MCBSP_SPCR1
17、_DLB_OFF, /* DLB = 0 */ MCBSP_SPCR1_RJUST_RZF, /* RJUST = 0 */ MCBSP_SPCR1_CLKSTP_DISABLE, /* CLKSTP = 0 */ MCBSP_SPCR1_DXENA_NA, /* DXENA = 0 */ MCBSP_SPCR1_ABIS_DEFAULT, /* ABIS = 0 */ MCBSP_SPCR1_RINTM_RRDY, /* RINTM = 0 */ MCBSP_SPCR1_RRST_DISABLE /* RRST = 0 */ ), MCBSP_SPCR2_RMK( MCBSP_SPCR2_F
18、REE_NO, /* FREE = 0 */ MCBSP_SPCR2_SOFT_NO, /* SOFT = 0 */ MCBSP_SPCR2_FRST_RESET, /* FRST = 0 */ MCBSP_SPCR2_GRST_RESET, /* GRST =0 */ MCBSP_SPCR2_XINTM_XRDY, /* XINTM = 0 */ MCBSP_SPCR2_XRST_DISABLE /* XRST = 0 */ ), MCBSP_RCR1_RMK( MCBSP_RCR1_RFRLEN1_OF(1), /* RFRLEN1 = 1 */ MCBSP_RCR1_RWDLEN1_16
19、BIT /* RWDLEN1 = 010b */ ), MCBSP_RCR2_RMK( MCBSP_RCR2_RPHASE_SINGLE, /* RPHASE = 0 */ MCBSP_RCR2_RFRLEN2_OF(0), /* RFRLEN2 = 0 */ MCBSP_RCR2_RWDLEN2_DEFAULT, /* RWDLEN2 = 0 */ MCBSP_RCR2_RCOMPAND_MSB, /* RCOMPAND = 0 */ MCBSP_RCR2_RFIG_YES, /* RFIG = 0 */ MCBSP_RCR2_RDATDLY_0BIT /* RDATDLY = 0 */ )
20、, MCBSP_XCR1_RMK( MCBSP_XCR1_XFRLEN1_OF(1), /* XFRLEN1 = 1 */ MCBSP_XCR1_XWDLEN1_16BIT /* XWDLEN1 = 2 */ ), MCBSP_XCR2_RMK( MCBSP_XCR2_XPHASE_SINGLE, /* XPHASE = 0 */ MCBSP_XCR2_XFRLEN2_OF(0), /* XFRLEN2 = 0 */ MCBSP_XCR2_XWDLEN2_DEFAULT, /* XWDLEN2 = 0 */ MCBSP_XCR2_XCOMPAND_MSB, /* XCOMPAND = 0 */
21、 MCBSP_XCR2_XFIG_YES, /* XFIG = 0 */ MCBSP_XCR2_XDATDLY_0BIT /* XDATDLY = 0 */ ), MCBSP_SRGR1_RMK( MCBSP_SRGR1_FWID_OF(0), /* FWID = 0 */ MCBSP_SRGR1_CLKGDV_OF(0) /* CLKGDV = 0 */ ), MCBSP_SRGR2_RMK( MCBSP_SRGR2_GSYNC_DEFAULT, /* FREE = 0 */ MCBSP_SRGR2_CLKSP_RISING, /* CLKSP = 0 */ MCBSP_SRGR2_CLKS
22、M_DEFAULT, /* CLKSM = 0 */ MCBSP_SRGR2_FSGM_DXR2XSR, /* FSGM = 0 */ MCBSP_SRGR2_FPER_OF(0) /* FPER = 0 */ ), MCBSP_MCR1_RMCM_ELDISABLE, /* MCR12 = 1*/ MCBSP_MCR2_XMCM_DISXP , /* MCR12 = 1*/ MCBSP_PCR_RMK( MCBSP_PCR_XIOEN_SP, /* XIOEN = 0 */ MCBSP_PCR_RIOEN_SP, /* RIOEN = 0 */ MCBSP_PCR_FSXM_EXTERNAL
23、, /* FSXM = 0 */ MCBSP_PCR_FSRM_EXTERNAL, /* FSRM = 0 */ MCBSP_PCR_SCLKME_NO, /* SCLKME = 0 */ MCBSP_PCR_CLKXM_INPUT, /* CLKXM = 1 */ MCBSP_PCR_CLKRM_INPUT, /* CLKRM = 0 */ MCBSP_PCR_FSXP_ACTIVEHIGH, /* FSXP = 0 */ MCBSP_PCR_FSRP_ACTIVEHIGH, /* FSRP = 0 */ MCBSP_PCR_CLKXP_FALLING, /* CLKXP = 1 */ MC
24、BSP_PCR_CLKRP_RISING /* CLKRP = 1 */ ), 0x0005u, /* RCERA */ 0x0000u, /* RCERB */ 0x0000u, /* RCERC */ 0x0000u, /* RCERD */ 0x0000u, /* RCERE */ 0x0000u, /* RCERF */ 0x0000u, /* RCERG */ 0x0000u, /* RCERH */ 0x000au, /* XCERA */ 0x0000u, /* XCERB */ 0x0000u, /* XCERC */ 0x0000u, /* XCERD */ 0x0000u,
25、 /* XCERE */ 0x0000u, /* XCERF */ 0x0000u, /* XCERG */ 0x0000u /* XCERH */; /* Create data buffers for transfer */Uint16 xmt_L,xmt_R, rcv_L,rcv_R; Uint16 Flag_working;ioport Uint16 port7;ioport int port0;int keyvalue,oldkeyvalue;MCBSP_Handle mhMcbsp;void DSP_init(void);void taskFunc(void);/*-*/void
26、main() /* Initialize CSL library, this step is required */ CSL_init(); /* Initialize DSP*/ DSP_init(); /* initial xmt_L, xml_R, rcv_L, rcv_R*/ xmt_L=0; xmt_R=0; rcv_L=0; rcv_R=0; /* Call example function to perform task */ taskFunc();/* Initial DSP */void DSP_init(void) Uint16 Temp ; Temp = port7 ;
27、Temp = Temp | 0x4 ; port7 = Temp; Temp = (Temp & 0x03)| 0x02 ; port7 = Temp ; Temp = Temp & (0x04) ; port7 = Temp; Temp = Temp | 0x08 ; port7 = Temp ; /*initialize PMST and set IPTR,mc/mp,ovly and DROM*/ asm( STM #0xA8, PMST); /* Open MCBSP Port 2, this will return a MCBSP handle that will */ /* be
28、used in calls to other CSl functions. */ mhMcbsp = MCBSP_open(MCBSP_PORT2, MCBSP_OPEN_RESET); /* Write configuration structure values to MCBSP control */ /* registers */ MCBSP_config(mhMcbsp, &ConfigLoopBack16); /*-audio processing-*/void taskFunc(void) Uint16 err = 0; printf(n); /* Take MCBSP recei
29、ve and transmit out of reset */ MCBSP_start(mhMcbsp, MCBSP_RCV_START | MCBSP_XMIT_START, 0); keyvalue=port0&0x10;if(keyvalue) oldkeyvalue=keyvalue; Flag_working=0; port0=0x0;else oldkeyvalue=keyvalue; Flag_working=1; port0=0x1; while(1) keyvalue=port0&0x10;if(oldkeyvalue!=keyvalue) if(keyvalue) oldkeyvalue=keyvalue; Flag_working=0; port0=0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖州南浔区总工会公开招聘工会社会工作者3人备考题库及完整答案详解一套
- 山东传媒职业学院《高级汉语听说(二)》2025-2026学年第一学期期末试卷
- 金华市卫生健康委员会所属事业单位招聘考试真题2024
- 山南市公费师范生招聘真题2025
- 幼教面试实战幼儿园招生策略与技巧
- 市场分析行业调研与竞争策略
- 影视制作公司人才选拔面试策略
- 南康公共服务项目运作流程与管理
- 教育行业教师招聘面试技巧与经验
- 厦门音乐行业面试技巧实战分享
- 2025马克思主义理论考研原理真题及答案
- 云南交投考试试题及答案
- 2025年马工程管理学试卷题库及答案
- 2026年出租汽车驾驶员(区域科目)自测试题及答案
- 管道防腐考试试题及答案
- 球队战术讲解课件
- 放射科安全防护培训课件
- 2025年6月四级真题
- 2026年锦州师范高等专科学校单招职业适应性测试题库必考题
- 食品质量管理人员培训体系
- 2025版眩晕常见症状及护理原则
评论
0/150
提交评论