DSP系统设计与实现实验二报告.docx
《DSP系统设计与实现实验二报告.docx》由会员分享,可在线阅读,更多相关《DSP系统设计与实现实验二报告.docx(21页珍藏版)》请在冰点文库上搜索。
![DSP系统设计与实现实验二报告.docx](https://file1.bingdoc.com/fileroot1/2023-7/17/67da85e1-e874-4744-86ae-e43c57e25c4f/67da85e1-e874-4744-86ae-e43c57e25c4f1.gif)
DSP系统设计与实现实验二报告
实验二应用程序开发实验
一.实验目的
本实验通过五个练习来了解如何利用ADSP-21161实现基本的信号处理方法,这些常用算法包括:
时域卷积运算、DFT运算、时域相关运算、利用相关函数计算信号的功率谱和利用SIMD模式实现DFT运算。
二.实验内容
实验二包括以下五个基本练习:
练习一:
时域卷积运算;
练习二:
DFT运算;
练习三:
时域相关运算;
练习四:
利用相关函数计算信号的功率谱;
练习五:
利用SIMD模式实现DFT运算。
三.实验步骤
练习一:
时域卷积运算
1.实验步骤
1)调入程序
启动运行VisualDSP++,运行菜单命令\Project\New来新建一个工程,工程名称自定义,正确设置工程的各个选项,将DSP_exp\unit_2\Conv目录下的源文件(conv.ASM和conv.ldf)加入到工程中,同时也将备用的数据文件pulse1.dat、pulse4.dat、square1.dat、square2.dat、sin64.dat、trig64.dat以及初始化文件zeros.dat加入工程中。
2)选择输入数据文件
编译程序前,在下述程序行中将输入数据文件改为pulse1.dat和sin64.dat:
.VARinputx[LENGTH_X]="pulse1.dat";
.VARinputy[LENGTH_Y]="sin64.dat";
其中pulse1.dat为单个冲击脉冲信号,sin64.dat为正弦信号。
3)编译程序
分析、理解源程序,在此基础上再编译运行程序。
可通过点击按钮命令或选择菜单命令\Project\BuildProject来完成编译。
本程序的sessions为ADSP-21161ADSP-2116xSimulator。
4)观察结果
按F5运行程序,然后执行菜单命令\View\DebugWindows\Plot命令,分别作出输入数据inputx[]和inputy[]与输出数据output[]的图形。
执行菜单命令\Debug\StepInto单步运行程序,打开RegisterFile和对应的存储区,观察寄存器和存储器的变化。
5)改变数据再运行
数组inputx保持为pulse1.dat,将数组inputy分别改变为数据文件square1.dat(方波)、trig64.dat(三角波)重复3),4),来考察程序的执行结果。
数组inputx改变为pulse2.dat(4个冲击脉冲),将数组inputy分别改变为数据文件sin64.dat,square1.dat(方波)、trig64.dat(三角波)重复3),4),来考察程序的执行结果。
数组inputx改变为square1.dat,将数组inputy改变为数据文件square2.dat(方波),
重复3),4),来考察程序的执行结果。
2.实验结果
Inputx为64个点的脉冲序列,Inputy为64个点的正弦序列
输入波形inputx为:
图1输入序列inputx(四个冲击脉冲的序列)
输入波形Inputy为
图2输入序列inputy(正弦序列)
脉冲序列与正弦序列的卷积结果为:
图3卷积结果
3.结果分析:
本次实验中分别进行了单个冲击脉冲与方波,三角波的卷积,四个冲击脉冲组成的序列与正弦序列,方波,三角波的卷积以及两个不同形状的方波的卷积。
任何信号与冲激函数的卷积相当于以冲击脉冲所在的位置为中心对原信号进行移位,原信号形状保持不变,而四个冲击脉冲组成的序列与其他函数的卷积的效果就是将与其卷积的函数进行移位,然后再进行相加,最后形成输出叠加的波形。
方波序列的卷积会形成梯形波,实验的结果与理论推出结果是一致的。
下面讨论一下关于卷积的长度问题:
设输入序列X的长度为M,Y的长度为N,则程序按照因果系统计算卷积:
程序中一个输入序列X指定到数组inputx中,另一个输入序列Y指定到数组inputy中,卷积的输出指定到数组output中。
根据卷积原理,两个输入序列长度为M=N=64,输出序列长度为M+N-1=127。
练习二:
DFT运算
通过本练习加深对各种基本波形的DFT的理解,加深对数字信号处理理论的理解。
本练习采用64点离散傅里叶变换。
1.实验步骤
1)调入程序
启动运行VisualDSP++,建立新工程,将位于将DSP_exp\unit_2\DFT_MOD目录下的源文件(dft_mod.asm和dft_mod.ldf)添加到工程中,同时也将备用的数据文件square64.dat、sin64.dat、trig64.dat、noise64.dat以及初始化文件zeros64.dat加入工程中。
2)选择输入数据文件
编译程序前,在下述程序行中将输入数据文件改为square64.dat:
.VARinput[N]="square64.dat";其中square64.dat为方波信号。
3)编译程序
分析、理解源程序,在此基础上再编译运行程序。
可通过点击按钮命令或选择菜单命令\Project\BuildProject来完成编译。
本程序的sessions为ADSP-21162ADSP-2116xSimulator。
4)观察结果
程序调试时,可在程序中设置多个断点,来观察输入数据x、输出数据的实部real、输出数据的虚部imag和求模后的数据mudul的值;
打开Memory\TwoColumn窗口,在窗口中用鼠标右键点击,在弹出的菜单中选择用浮点数(FloatingPoint32bit)格式显示数据。
单步执行时,就可看到寄存器和内存单元中动态的数据变化。
5)改变数据再运行
数组input分别改变为数据文件trig64.dat(三角波)、niose64.dat(高斯白噪声),重复3),4),来考察程序的执行结果。
2.实验结果(以square64的DFT输入和输出数据及其波形为例)
输入为64点的方波,进行DFT变换,输入方波图形为:
图4输入的方波序列
DFT后输出的实部为:
图5DFT变化后的结果的实部
DFT后输出的虚部为:
图6DFT变化后的结果的虚部
求模后的modul的波形:
图7求模的结果
输入为64点的白高斯噪声:
图8输入的白高斯噪声序列
图9DFT后的结果的实部
图10DFT后的结果的虚部
图11求模的结果
3.结果分析:
本实验中分别对方波信号,三角波信号和高斯白噪声的DFT变换并观察其
频谱。
从上面的结果图中可以看的出来,方波和三角波等周期信号的频谱都是集中在几个频点上,而在其他的频点上分量都比较小。
另外由于只是64点的DFT变换,因此在有些频点上可能还有一些小的分量,但是还是可以反映出周期信号的频谱特性。
而高斯白噪声的频谱就比较分散,所含的频率分量比较多。
练习三:
时域相关计算
1.实验步骤:
1)调入程序
启动运行VisualDSP++,运行菜单命令\Project\New来新建一个工程,工程名称自定义,正确设置工程的各个选项,将DSP_exp\unit_2\Corr目录下的源文件加入到工程中,同时也将备用的数据文件square64.dat、noise64.dat、sin64.dat、trig64.dat加入到工程中。
2)选择输入数据文件
编译程序前,在下述程序行中将输入数据文件改为squre64.dat:
.VARinputx[LENGTH_X]="squre64.dat";
.VARinputy[LENGTH_Y]="squre64.dat";
其中square64.dat为方波信号。
3)编译程序
分析、理解源程序,在此基础上再编译运行程序。
可通过点击按钮命令或选择菜单命令
\Project\BuildProject来完成编译。
本程序的sessions为ADSP-21161ADSP-2116xSimulator。
4)观察结果
按F5运行程序,然后执行菜单命令\View\DebugWindows\Plot命令,分别作出输入数据inputx[]和inputy[]与输出数据output[]的图形。
执行菜单命令\Debug\StepInto单步运行程序,打开RegisterFile和对应的存储区,观察寄存器和存储器的变化。
5)改变数据再运行
将数组inputx和数组inputy同时改变为数据文件sin64.dat(正弦波)、trig64.dat(三角波)noise64.dat(高斯白噪声),重复3),4),来考察序列的自相关结果。
数组inputx保持不变squre64.dat(方波),将数组inputy分别改变为数据文件
sin64.dat、trig64.dat(三角波)重复3),4),来考察序列的互相关结果。
2.实验结果
trig64的原始波形为:
图12输入三角波序列
trig64的自相关的结果:
图13三角波自相关后的结果
trig64与sin64的互相关输入和输出数据及其波形、
输入的trig64的波形:
图14输入三角波序列
输入的sin64的波形:
图15输入正弦序列
互相关之后的结果如下图:
图16三角波序列与正弦序列互相关的结果
3.结果分析
本实验中对64点的三角波进行了自相关运算以及其与64点的正弦进行了胡相关运算。
从图中可以看出,自相关函数都是偶函数,在零点位置会有一个峰值。
互相关则不具备自相关的那种对称特性。
设输入数据X的长度为M,Y的长度为N,输出序列长度为M+N-1。
由上图可以看到两个输入序列长度为M=N=64,输出序列长度为M+N-1=127。
练习四:
利用相关函数计算功率谱
1.实验步骤
1)调入程序
启动运行VisualDSP++,运行菜单命令\Project\New来新建一个工程,工程名称自定义,正确设置工程的各个选项,将DSP_exp\unit_2\psd目录下的源文件加入到工程中,同时加入数据文件squre32.dat、trig32.dat、noise32.dat,及初始化文件zeros64.dat。
2)选择输入数据文件
编译程序前,在下述程序行中将输入数据文件改为squre64.dat:
.VARinputx[M]="trig32.dat";
.VARinputy[M]="trig32.dat";
3)编译程序
分析、理解源程序,在此基础上再编译运行程序。
可通过点击按钮命令或选择菜单命令\Project\BuildProject来完成编译。
本程序的sessions为ADSP-21161ADSP-2116xSimulator。
4)观察结果
按F5运行程序,然后执行菜单命令\View\DebugWindows\Plot命令,分别作出输入数据与输出数据real[]、imag[]和modul[]的图形。
执行菜单命令\Debug\StepInto单步运行程序,打开RegisterFile和对应的存储区,观察寄存器和存储器的变化。
5)改变数据再运行
将数组inputx和数组inputy同时改变为数据文件square32.dat(方波)、noise32.dat(高斯白噪声),重复3),4),来考察序列的功率谱。
数组inputx保持不变trig32.dat,将数组inputy分别改变为数据文件square32.dat、noise32.dat.dat(三角波)重复3),4),来考察序列的互相关功率谱。
2.典型结果
(1)输入的square32的波形:
图17输入的方波序列
square32的自相关谱:
图18方波自相关谱的实部
图19方波自相关谱的虚部
取模值后得到的功率谱:
图20方波自相关谱的求模输出结果
(2)输入的square32的波形
图21输入方波序列
输入的trig32的波形:
图22输入三角波序列
square32与trig32的互相关谱:
图23方波与三角波的互相关谱结果
3.结果分析
本实验分别进行方波和白高斯噪声的自相关谱的运算,以及三角波与方波,白高斯噪声的互相关谱的运算。
本报告中仅展示了方波的自相关谱和三角波与方波的互相关谱。
从图中可以看出,方波和三角波的自相关谱比较集中,而白高斯噪声的自相关谱就比较分散,这是由白高斯噪声自身的特性决定的。
对于三角波和方波的互相关谱,在三角波和方波的自相关功率谱集中的频点位置,其互相关功率谱在该处的值也较大,而其他的频谱点处互相关功率谱较小。
其和高斯白噪声的互相关功率谱在其自相关谱集中的频点处的功率也较大,但是其频谱分量相对自相关功率谱要更加丰富。
练习五使用SIMD模式实现DFT运算
1.实验步骤
1.调入程序
启动运行VisualDSP++,建立新工程,将位于DSP_exp\unit_2\SIMD_DFT目录下的源文件(simd_dft.asm和simd_dft.ldf)添加到工程中,同时也将备用的数据文件cos_sin_64.dat、cos_sin_256.dat、sin64.dat、sin256.dat以及初始化文件SIMD64_Result.dat加入到工程中。
2.选择输入数据文件
编译程序前,在下述程序行中将输入数据文件改为test64.dat:
.VARinput[N]="test64.dat";
其中test64.dat为测试信号。
3.编译程序
分析、理解源程序,在此基础上再编译运行程序。
可通过点击按钮命令或选择菜单命令\Project\BuildProject来完成编译。
本程序的sessions为ADSP-21161
ADSP-2116xSimulator。
4.观察结果
程序调试时,可在程序中设置多个断点,来观察输入数据input、输出数据result的值,如下图所示:
图24输入数据
图25输出数据
2.问题回答
a)什么是SIMD模式?
SIMD模式是SingleInstructionMultipleData,即一条指令可以同时完成对多个(独立)数据集的相同的操作。
b)与SISD模式相比,哪种模式的效率高?
如何使用SIMD模式?
SIMD模式效率更高,一条指令可以同时完成对多个(独立)数据集的相同的操作。
实现SIMD有两种方法:
分开执行单元的和锁步中多执行单元的操作。
3.结果分析
图26SIMD模式下的性能分析
图27SISD模式下的性能分析
第一张图为SIMD下的DFT的linearprofiling性能评估,第二张图为SISD下的DFT的linearprofiling性能评估。
从对比图中可以看出SISD模式下需要9019个样本点才可以得到DFT的结果,而SIMD模式下只需要4512个样本点就可以得到,明显SIMD的效率比SISD要高。
四.实验心得
通过本次实验对VisualDSP++有了进一步的熟悉,掌握了许多更有效的分析方法,学会了如何对所需数据的绘图,如何查看数据寄存器,,如何设置断点来实时观察各种所需的数据等。
另外,通过本次实验,对于数字信号处理中的卷积,相关,DFT,功率谱分析等知识有了更深更形象的认识。
使得理论和实践得到了很好的联系,既加深了对于所学知识的理解,又从实际操作得到了印证。