实验2-音频DSP程序编写与调试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

广州大学学生实验报告开课学院及实验室:机电学院电子楼5012018年5月11日学院机械与电气工程学院年级、专业、班电信151姓名苏伟强学号1507400051实验课程名称音频DSP技术与应用成绩实验项目名称实验二音频DSP程序编写与调试指导老师张承云一、实验目的1.掌握DSP程序的编写方法,调试方法,烧写方法。二、实验设备1.软件:VisualDSP++5.1.2和matlab2.硬件:ADSP-21489EZ-Borad开发板三、实验内容1.软件仿真a.使用VisualDSP++目录下的例程21489AD1939Block-BasedTalkthru48or96kHz,将实验文件夹exp2目录下的in.dat和sin2.dat拷贝到该工程文件夹下,并且将main.c代替为exp2中的simMain.c,在VisualDSP++打开,设置为软件仿真模式(添加新的simulation的section),编译该程序,如Fig.1所示。b.如Fig.1所示,程序编译通过,说明程序没有语法错误,但是这并不意味着程序的算法没有问题,即我们无法知道算法能不能达到预期的效果,所以我们需要进行模拟数据仿真。在程序中,数据的输入和输出都是以变量的形式表示的,所以我们需要用我们的模拟数据对这些变量进行初始化,这就需要数据流的设置了,数据流是有方向的(source-destination),可以实现数据从source到destination的传递,这也是所谓“流”的概念。点击settings\streams\add添加流,弹出addstream对话框设置流的source和destination,source和destination可以是数据文件,也可以是变量。在本实验中,我们将添加数据从文件in.dat传递到输入变量DataIn,实现输入变量的数据初始化;添加输出变量DataOut传递到文件out.dat的流实现输出变量的文件存储。如所示Fig.1编译工程Fig.2添加数据文件导入流和处理结果导出流c.在语句processData(input,output,N)添加断点,调试,在断点处停下后,在expression数据查看框查看输入数据input,使用matlab打开文件in.dat,对比数据input和in.dat中的数据,如所示,发现两个一样,证明我们之前设置的原始数据输出入流有效。(从文件in.dat传递到输入变量DataIn)Fig.3input和in.dat对比d.删除断点,执行完程序,将in.dat文件out.dat文件输入到matlab,采样频率为48kHz,绘图,如所示,现在可以知道程序的作用是将输入音频衰减一半。Fig.4matlab绘制in.dat和out.dat,采样频率48kHz2.硬件仿真a.使用usb-JTAG线连接PC与21489开发板,开发板电源线连接电源,使用手机或者其他音频输出设备通过RCA音频线(RadioCorporationofAmerican莲花插座)输入音频到开发板(底层1L,1R),使用耳机接听输出音频(中间层1L,1R)。b.使用VisualDSP++目录下的例程21489AD1939Block-BasedTalkthru48or96kHz,添加新的section硬件仿真(EZ-KITLite),取消所有断点,编译运行,用耳机听到了手机播放的音频。c.将实验材料exp2文件夹下的Multiply.c,blockProcess_audio.c拷贝到该工程文件夹中。并且在VisualDSP++项目目录中右键AddFile(s)toFolder往工程中添加前述两个文件。d.在blockProcess_audio.c文件中,找出以下代码并且去掉前面的注释符externvoidmultiply(floatinputdata,floatoutputdata);multiply(inputD,outputD);在multiply.c文件中,将以下代码的注释符去掉voidmultiply(floatinputdata,floatoutputdata){outputdata=0.5*inputdata;}编译连接程序,并且运行,发现没有声音,原因是multiply函数实际上并未将处理完后的数据赋值给outputD,只对临时变量outputD进行赋值,而临时变量outputD将在函数结束后释放内存。e.在blockProcess_audio.c文件中,找出以下代码并且去掉前面的注释符externvoidmultiply(floatinputdata,float*outputdata);multiply(inputD,&outputD);在multiply.c文件中,将以下代码的注释符去掉voidmultiply(floa*inputdata,float*outputdata){*outputdata=0.5*inputdata;}编译连接程序,并且运行,发现没有声音,原因是multiply函数将处理完后的数据赋值给outputD,这里的临时变量为指针类型,通过这个临时变量在内存中索引到变量的值并进行赋值操作,然后函数结束后释放这个指针,然而这并不影响outputD在内存中的数据已经被修改了的事实。f.在blockProcess_audio.c文件中,找出以下代码并且去掉前面的注释符externvoidmultiply(float*inputdata,float*outputdata);multiply(&inputD,&outputD);在multiply.c文件中,将以下代码的注释符去掉voidmultiply(float*inputdata,float*outputdata){*outputdata=0.5*(*inputdata);}g.编译连接程序,并且运行,发现没有声音,原因与e所述大致相同,只是其增加了指向inputdata的指针临时变量,并且通过指针访问inputdata,由于inputdata实际上并不需要修改,只用于输入的源数据,和中间处理数据,所以通过临时变量指定和通过临时指针变量指定,在函数结束后释放临时变量,也不会影响outputdata结果,因为在释放之前临时变量已经完成了参与产生outputdata的任务。3.程序烧写a.继续步骤2硬件仿真程序,在project-projectoptions中选择编译输出类型为载入文件(即loaderfile),选择硬件平台21489如Fig.5所示;在Load选项中选择启动类型(boottype)为并行端口(parallelport),如Fig.6。回到项目中,点击编译,即可在项目目录生成.ldr文件。Fig.5选择编译输出类型为ldrFig.6启动类型为并行端口b.选择tool-flashprogrammer。在driver选项卡,选择驱动文件.dxe,点击loaddriver加载驱动;在programming选项卡中选择你要烧写的.ldr文件,并且点击烧写(program),等待进度条跑完,完成烧写。c.脱机运行开发板,输入音频可以听到声音,说明程序烧写完成。四、实验分析五、实验总结与体会a.如图是该实验一个工程文件的目录,主要包含头文件,源文件,还有连接文件。头文件主要用来防止硬件声明例如AD芯片ad1939和DSP芯片21489;源文件主要用来放置头文件中函数的实现,和一些硬件初始化函数的实现,比方说端口初始化SPORT1_isr.c,1939和锁相环初始化init_PLL.c,init1939.c,还有处理函数源文件multiply.c,处理模块文件blockProcess_audio.c也有主函数Main.c,这里是程序的入口点。Fig.7工程目录b.在编写DSP程序的时候,对于初学者,可以利用现成的程序框架,比方说本实验的直通程序21489AD1939Block-BasedTalkthru48or96kHz,修改里面的multiply.c文件可以实现简单的DSP算法。需要注意的是,在进行音频处理的时候,如果将音频传入函数中进行处理并返回的话,需传入指针类型的变量,这样才能在函数中使用这个指针索引到内存并且处理其值。c.在将程序烧写到板前,往往需要对程序的可行性进行验证,这时候常常使用软件仿真的方法,通过设置数据流的途径,将模拟数据输入到程序中,并且通过数据流的形式,将处理结果输出到数据文件中,配合matlab将处理前后数据文件显示出来进行分析,确定达到算法预期结果后可以将程序烧写进开发板,进行脱机运行。d.在软件仿真section中,程序编译通过,说明程序没有语法错误,但是这并不意味着程序的算法没有问题,即我们无法知道算法能不能达到预期的效果,所以我们需要进行模拟数据仿真。e.数据流是有方向的(source-destination),可以实现数据从source到destination的传递,这也是所谓“流”的概念。点击settings\streams\add添加流,弹出addstream对话框设置流的source和destination,source和destination可以是数据文件,也可以是变量。D六、实验完成后实验器材照片Fig.8硬件连接图Fig.9实验完成后设备整理图

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功