DSP实验报告2.docx
- 文档编号:9818424
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:25
- 大小:1.54MB
DSP实验报告2.docx
《DSP实验报告2.docx》由会员分享,可在线阅读,更多相关《DSP实验报告2.docx(25页珍藏版)》请在冰豆网上搜索。
DSP实验报告2
D
S
P
实
验
报
告
班级:
姓名:
学号:
实验一快速傅立叶变换(FFT)的实现
一、实验目的
在数字信号处理系统中,FFT作为一个非常重要的工具经常使用,甚至成为DSP运算能力的一个考核因素。
FFT是一种高效实现离散付氏变换的算法。
离散付氏变换的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆变换到时域。
本实验的目的在于学习FFT算法,及其在TMS320C54X上的实现,并通过编程掌握C54X的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS的探针和图形工具。
另外在BIOS子目录下是一个使用DSP/BIOS工具实现FFT的程序。
通过该程序,你可以使用DSP/BIOS提供的分析工具评估FFT代码执行情况。
二、实验原理
1)基2按时间抽取FFT算法
对于有限长离散数字信号{x[n]},0≤n≤N-1,其离散谱{x[k]}可以由离散付氏变换(DFT)求得。
DFT的定义为:
可以方便的把它改写为如下形式:
不难看出,WN是周期性的,且周期为N,即
WN的周期性是DFT的关键性质之一。
为了强调起见,常用表达式WN取代W以便明确其周期是N。
2)实数FFT运算
对于离散傅立叶变换(DFT)的数字计算,FFT是一种有效的方法。
一般假定输入序列是复数。
当实际输入是实数时,利用对称性质可以使计算DFT非常有效。
一个优化的实数FFT算法是一个组合以后的算法。
原始的2N个点的实输入序列组合成一个N点的复序列,之后对复序列进行N点的FFT运算,最后再由N点的复数输出拆散成2N点的复数序列,这2N点的复数序列与原始的2N点的实数输入序列的DFT输出一致。
使用这种方法,在组合输入和拆散输出的操作中,FFT运算量减半。
这样利用实数FFT算法来计算实输入序列的DFT的速度几乎是一般复FFT算法的两倍。
本实验就用这种方法实现了一个256点实数FFT(2N=256)运算。
a.实数FFT运算序列的存储分配
如何利用有限的DSP系统资源,合理的安排好算法使用的存储器是一个比较
要的问题。
3)计算所求信号的功率
由于最后所得的FFT数据是一个复数,为了能够方便的在虚拟频谱仪上观察该
信号的特征,我们通常对所得的FFT数据进行处理——取其实部和虚部的平方和,
即求得该信号的功率。
三、实验内容
1)启动CCS,在Project菜单相项中打开FFT目录下的fft.pjt文件。
2)用鼠标展开左面项目栏,打开fft.asm源程序。
3)使用Bulid命令完成编译、连接,并使用LoadProgram将生成的fft.out装入5402片内存储器。
4)将光标移动到“callget_input”行,并设置一个探针点。
将光标移动到下一行“nop”语句,使用工具设置一个断点。
5)在File菜单中打开选项“FileI/O”,使用“AddFile”在FFT目录下打开数据文件fft.dat,然后修改“Address”参数为0x2300,修改“Length”参数为256。
这表示程序执行到探针点时,将从fft.dat文件中读出256个数据,并将数据放入0x2300开始的存储器中。
你可以选择“WrapAround”,循环使用该数据文件。
6)选择“AddProbePoint”,将探针点与数据文件连接起来。
选择探针点,然后在“Connect”选项中选择需要使用的数据文件名,再选择“Replace”,按确定键完成。
这时将返回图7所示的对话框。
你可以看到“Probe”项被自动修改为“Connected”,表示探针已经与数据文件成功相连。
7)完成探针设置后,可以使用F5或“Run”命令启动程序运行。
程序执行到探针点时自动从数据文件读出256个点的数据放入输入缓冲0x2300。
8)在“View”菜单项下选择“Graph->Time/Frequency”,打开一个图形工具以便显示输入数据波形。
将“StartAddress”改为0x2300,将“AcquisitionBufferSize”改为128,将“DSPDataType”改为“16-bitsignedinteger”,这样即可显示128个输入点波形。
9)调整窗口显示大小,将光标移动到源程序的“b_c_int00”这行,使用Debug中的“RuntoCursor”项,程序将执行到这行并停下。
这时FFT程序已经计算完成。
再打开一个波形显示窗口,这次仅仅将“StartAddress”改为0x2200,便可以显示计算完成后的谱波形。
10)选择“Debug”下的“Animate”运行程序,这时程序将循环运行,不断从数据文件fft.dat中读出数据,并计算其频谱。
这时你可以看到连续的输入/输出波形。
11)选择原始数据波形窗口,单击鼠标右键,进入“Properties”属性对话框。
你可以将“DisplayType”改为“FFTMagnitude”,这时输入数据将显示其频谱,对比两个图形,看看谱线的位置一样吗?
12)清除所有断点、探针点,关闭CCS的源程序窗口和上面的工程文件fft.pjt,然后在Project菜单下打开BIOS目录下fft.pjt文件。
这时一个使用DSP/BIOS工具实现FFT的例子。
为了使用DSP/BIOS的工具分析工具,我们将FFT的源程序做了一点修改。
将FFT子程序做为一个中断函数,并在DSP/BIOS的周期模块中调用。
所以在DSP/BIOS的配置文件中增加一个周期模块PRD0,并且设置每1ms执行一次,即每1ms执行一次FFT子程序。
。
这时的主程序仅仅完成一次数据输入,然后返回DSP/BIOS。
以后DSP/BIOS将每隔1ms启动一次周期函数,完成一次FFT。
13)在File菜单中用LoadProgram装入BIOS目录下的demo5402.out文件。
参照前面的函数中的“callwait_input”设置一个探针点,并建立数据文件连接。
这时应该将输入数据读到0x2900开始的存储器中。
在FFT子程序process中设置一个断点,启动程序运行。
14)程序将在第一次进入周期函数执行FFT子程序时停下来。
使用图形工具观察输入信号波形(启始地址0x2900)。
将FFT子程序执行完,然后再使用图形工具观察FFT后的波形(启始地址0x2800)。
15)清除所有断点,以便程序连续运行。
使用Tools菜单下的DSP/BIOS选项打开“RTAControlPanel”窗口,再打开“ExecutionGraph”窗口。
在“RTAControlPanel”控制窗口中选择“enableSWIlogging”、“enablePRDlogging”和“gobalhostenable”。
恢复程序运行,观察FFT程序执行情况。
18)在Tools->DSP/BIOS->CPULoadGraph窗口,观察CPU占用情况。
修改周期函数的周期,重新编译、连接、装入程序并运行,看看CPU占用比有何变化?
实验二FIR数字滤波器
一、实验目的
数字滤波的作用是滤除信号中某一部分频率分量。
信号经过滤波处理,就相当于信号频谱与滤波器的频率响应相乘的结果。
从时域来看,就是输入信号与滤波器的冲激响应作卷积和。
数字滤波器在各种领域由广泛的应用,例如数字音响、音乐和语音合成、躁声消除、数据压缩、频率合成、谐波消除、过载检测、相关检测等。
本实验主要学习数字滤波器的DSP实现原理和C54X编程技巧,并通过CCS的图形显示工具观察输入/输出信号波形以及频谱的变化。
该实验应该安排在串口和定时器操作实验之后进行。
二、实验原理
1)FIR滤波器的实现
如果FIR滤波器的冲激响应为h(0),h
(1),...,h(N-1)。
X(n)表示滤波器在n时刻的输入,则n时刻的输出为:
y(n)=h(0)x(n)+h
(1)x(n-1)+...+h(N-1)x[n-(N-1)]
使用MAC或FIRS指令可以方便地实现上面的计算。
使用带MAC指令的循环寻址模式实现FIR滤波器,程序片段如下:
(输入数据在AL中,滤波结果在AH中)
STM#1,AR0;AR0=1
STM#N,BK;BK=N,循环寻址BUFFER大小为N
STLA,*FIR_DATA_P+%;更新滤波窗口中的采样数据
RPTZA,#(N-1);重复MAC指令N次,先将A清零
MAC*FIR_DATA_P+0%,*FIR_COFF_P+0%,A;完成滤波计算。
注意FIR滤波系数存放在数据存储区
2)AC01的初始化
DSE320PP-U使用AC01作为模拟信号接口。
AC01提供一个14bit的D/A和一个14bit的A/D通道。
AC01与VC5402通过串口0连接。
DSP通过串口可以控制AC01的采样频率、增益、低通/高通滤波器的截止频率等参数。
这一步是通过读写AC01的寄存器来实现的。
3)1KHz方波信号的产生
利用AC01的D/A通道产生一个1KHz的方波,作为FIR滤波器的输入信号。
由于串口发送中断将每0.04ms(25KHz)产生一次,所以我们将一个周期的方波信号分25次送出,这样经D/A变化后便可得到1KHz的方波。
4)串口的初始化和串口中断服务程序
本实验通过DSP的串口0输入/输出数据。
在串口通讯中,数据时钟和帧同步信号都由AC01产生,所以VC5402将使用外部时钟和帧同步信号
三、实验内容
本实验需要使用‘C54X汇编语言实现FIR滤波器,并通过CCS的图形显示工具观
察输入/输出信号波形以及频谱的变化。
实验分以下几步完成:
1)短接JP12,使得DES320PP-U的模拟信号输出通道与模拟信号输入通道相连。
2)启动CCS,在Project选项中打开fir5402.pjt文件。
3)使用Build选项完成编译、连接,然后使用File菜单中的LoadProgram将OUT文件装入。
按F5键启动程序运行,若有示波器,可以观察DSE320PP-U板上的JP12的引脚输出的1KHz的方波。
4)请使用Debug->Halt暂停程序的执行。
在Project管理栏中打开fir5402.asm文件,并在ccs_show(在fir子程序中)行后的nop语句处上增加一个断点。
添加断点的方法是先用鼠标单击某行,将光标移动到需要增加断点的行上,然后选择工具栏的手状图标。
当该行被设置了一个断点后,可以看到红色的圆点。
5)选择View->Graph->Time/Frequency菜单打开一个图形显示窗口。
将“StartAddress”项改为地址0x1800,将“DisplayDataSize”项设置为128,将“DSPDataType”改为“16-bitsignedinteger”。
这样,将在图形显示窗口中显示从0x1800(信号输入缓冲)开始的128个点的16位有符号整数。
再打开一个图形窗口,显示从地址0x1020(滤波信号输出缓冲)开始的128点的16位有符号整数。
6)选择Debug->Animate项运行程序。
Animate运行和Run运行基本一致,只是使用Run运行时,若遇到断点,将停下来,直到用户再次使用Run命令才恢复运行。
而使用Animate运行时,若遇到断点,CCS刷新所有的显示窗口,如寄存器、CPU、MEM、图形显示等,然后自动恢复运行。
所以,你能看到连续更新的滤波输出。
四、实验心得
在学习过程中,我学习到了很多关于信号处理的实践方法,让我对DSP有了更深一步的认识,这些都是在书本学习中无法理解的。
但是,这次学习仅仅提供了简单的实验,不是现实生活中的真正使用,带有的理想成分太大,得到的结果也是非常的“理想”。
虽然离实际应用还有一段距离,但是让我对“DSP”这门课的知识融汇连接在一起,印象深刻。
实验一快速傅立叶变换(FFT)算法实验
一.实验目的
1.加深对DFT算法原理和基本性质的理解;
2.熟悉FFT算法原理和FFT子程序的应用;
3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二.实验设备
计算机,CCS2.0版软件,实验箱,DSP仿真器,导线
三.基本原理
1.离散傅立叶变换DFT的定义:
将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
2.FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大的提高了运算的速度。
3.旋转因子的变化规律、蝶形运算规律及基2FFT算法。
四.实验步骤
1.底板的开关SW4的第1位置ON,其余置OFF。
其余开关不用具体设置。
2.板子上的SW7开关的第1位置OFF,其余位置ON
3.正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。
4.启动CCS2.0,Project/Open打开“algorithm\01_fft”子目录下“fft.pjt”工程文件;双击“fft.pjt”及“Source”可查看各源程序;加载“Debug\fft.out”;
5.单击“Debug\Gomain”进入到主程序,在主程序“flag=0;”处设置断点;
6.单击“Debug\Run”运行程序,或按F5运行程序;程序将运行至断点处停止;
7.用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为px和pz,长度为128,数值类型为16位整型,px:
存放经A/D转换后的输入信号;pz:
对该信号进行FFT变换的结果;
8.单击“Debug\Animate”运行程序,或按F10运行;观察窗口并观察输入信号波形及其FFT变换结果;
9.单击“Debug\Halt”暂停程序运行,关闭窗口,本实验结束。
五、子程序流程图:
六、实验结果
在CCS2.0环境,同步观察输入信号波形及其FFT变换结果(下图观察窗口中px波形在上面,pz波形在下面)
五、实验心得
机器和软件能告诉我们怎么去做,这是前人帮我们建立的基础,而我们可以通过设置参数,需要告诉机器怎么去做。
适当修改cmd文件和源程序,能更改程序和数据的大小和位置,然后再通过观察机器自动生成的map文件可以了解DSP代码的确切信息,从而了解到程序的大小和位置,,这也是工程上的需要。
通过学习DSP这门课程,我认识到动手能力的重要,让我收获很大。
实验一快速傅立叶变换(FFT)算法实验
一.实验目的
1.加深对DFT算法原理和基本性质的理解;
2.熟悉FFT算法原理和FFT子程序的应用;
3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二.实验设备
计算机,CCS2.0版软件,实验箱,DSP仿真器,导线
三.基本原理
1.离散傅立叶变换DFT的定义:
将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
2.FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大的提高了运算的速度。
3.旋转因子的变化规律、蝶形运算规律及基2FFT算法。
四.实验步骤
1.底板的开关SW4的第1位置ON,其余置OFF。
其余开关不用具体设置。
2.板子上的SW7开关的第1位置OFF,其余位置ON
3.正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。
4.启动CCS2.0,Project/Open打开“algorithm\01_fft”子目录下“fft.pjt”工程文件;双击“fft.pjt”及“Source”可查看各源程序;加载“Debug\fft.out”;
5.单击“Debug\Gomain”进入到主程序,在主程序“flag=0;”处设置断点;
6.单击“Debug\Run”运行程序,或按F5运行程序;程序将运行至断点处停止;
7.用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为px和pz,长度为128,数值类型为16位整型,px:
存放经A/D转换后的输入信号;pz:
对该信号进行FFT变换的结果;
8.单击“Debug\Animate”运行程序,或按F10运行;观察窗口并观察输入信号波形及其FFT变换结果;
9.单击“Debug\Halt”暂停程序运行,关闭窗口,本实验结束。
五、子程序流程图:
六、实验结果
在CCS2.0环境,同步观察输入信号波形及其FFT变换结果(下图观察窗口中px波形在上面,pz波形在下面)
五、实验心得
机器和软件能告诉我们怎么去做,这是前人帮我们建立的基础,而我们可以通过设置参数,需要告诉机器怎么去做。
适当修改cmd文件和源程序,能更改程序和数据的大小和位置,然后再通过观察机器自动生成的map文件可以了解DSP代码的确切信息,从而了解到程序的大小和位置,,这也是工程上的需要。
通过学习DSP这门课程,我认识到动手能力的重要,让我收获很大。
实验一快速傅立叶变换(FFT)算法实验
一.实验目的
1.加深对DFT算法原理和基本性质的理解;
2.熟悉FFT算法原理和FFT子程序的应用;
3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二.实验设备
计算机,CCS2.0版软件,实验箱,DSP仿真器,导线
三.基本原理
1.离散傅立叶变换DFT的定义:
将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
2.FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大的提高了运算的速度。
3.旋转因子的变化规律、蝶形运算规律及基2FFT算法。
四.实验步骤
1.底板的开关SW4的第1位置ON,其余置OFF。
其余开关不用具体设置。
2.板子上的SW7开关的第1位置OFF,其余位置ON
3.正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。
4.启动CCS2.0,Project/Open打开“algorithm\01_fft”子目录下“fft.pjt”工程文件;双击“fft.pjt”及“Source”可查看各源程序;加载“Debug\fft.out”;
5.单击“Debug\Gomain”进入到主程序,在主程序“flag=0;”处设置断点;
6.单击“Debug\Run”运行程序,或按F5运行程序;程序将运行至断点处停止;
7.用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为px和pz,长度为128,数值类型为16位整型,px:
存放经A/D转换后的输入信号;pz:
对该信号进行FFT变换的结果;
8.单击“Debug\Animate”运行程序,或按F10运行;观察窗口并观察输入信号波形及其FFT变换结果;
9.单击“Debug\Halt”暂停程序运行,关闭窗口,本实验结束。
五、子程序流程图:
六、实验结果
在CCS2.0环境,同步观察输入信号波形及其FFT变换结果(下图观察窗口中px波形在上面,pz波形在下面)
实验二卷积(Convolve)算法实验
一、实验目的
1.了解卷积算法的原理;
2.掌握TMS320’C54X程序的编译和调试方法;
3.掌握在CCS环境下,编写和调试程序的方法。
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,E300实验箱,信号输入线
三、实验原理
卷积的基本原理。
四、实验步骤
1.底板的开关SW4的第1位置ON,其余置OFF。
其余开关不用具体设置;
2.板子上的SW7开关的第1位置OFF,其余置ON;
3.正确完成计算机、DSP仿真器和实验箱连接;启动CCS3.1,用Project/Open打开“04_convolve\convolve.pjt”工程文件;双击“convolve.pjt”及“Source”可查看源程序;并加载“convolve.out”;
4.在”Convolve.c”文件中最后的“flag=0”处,设置断点;单击“Debug\Run”运行程序,程序运行到断点处停止;
5.用View/Graph/Time/Frequency打开图形观察窗口;设置观察图形窗口变量及参数;采用双踪观察两路输入变量Input及Impulse的波形,波形长度为512,数值类型为32位浮点型;
6.打开一个图形观察窗口,以观察卷积结果波形;该观察窗口的参数设置为:
变量为Output,长度为1024,数据类型为32位浮点数;
7.调整观察窗口,观察两路输入波形和卷积结果波形;
8.关闭“convolve.pjt”工程文件,关闭各窗口,实验结束。
五、子程序流程图
六、实验结果
设置好CCS的环境,打开本工程,编译、下载、运行。
用图形观察窗口观察y[]数组中的波形数据如下:
七、实验心得
在这门课程学习中,我的最大体会是要学会强迫自己动手,整合思路,查找资料,为己所用。
平时所学的理论知识只是基础,真正应用软件做设计的时候才能知道自己的局限性。
一味停留在老师的教学中自己能做的实在是少之又少。
老师只是在较高的层次上为自己的学习指明道路,为整体概念指出思路。
所以就应该学会利用资料,首先就是互联网,然后是图书馆。
由于时间限制,最合理的资料应该是互联网,快速,方便。
搜集到资料以后不能照抄,应该仔细阅读,读懂,然后根据自己的要求改变参数。
总之,只有知道怎么自己学习,才能知道怎么自己动手,实在收获颇丰。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 报告