DSP实验报告2.docx

上传人:b****8 文档编号:9818424 上传时间:2023-02-06 格式:DOCX 页数:25 大小:1.54MB
下载 相关 举报
DSP实验报告2.docx_第1页
第1页 / 共25页
DSP实验报告2.docx_第2页
第2页 / 共25页
DSP实验报告2.docx_第3页
第3页 / 共25页
DSP实验报告2.docx_第4页
第4页 / 共25页
DSP实验报告2.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

DSP实验报告2.docx

《DSP实验报告2.docx》由会员分享,可在线阅读,更多相关《DSP实验报告2.docx(25页珍藏版)》请在冰豆网上搜索。

DSP实验报告2.docx

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[]数组中的波形数据如下:

 

七、实验心得

在这门课程学习中,我的最大体会是要学会强迫自己动手,整合思路,查找资料,为己所用。

平时所学的理论知识只是基础,真正应用软件做设计的时候才能知道自己的局限性。

一味停留在老师的教学中自己能做的实在是少之又少。

老师只是在较高的层次上为自己的学习指明道路,为整体概念指出思路。

所以就应该学会利用资料,首先就是互联网,然后是图书馆。

由于时间限制,最合理的资料应该是互联网,快速,方便。

搜集到资料以后不能照抄,应该仔细阅读,读懂,然后根据自己的要求改变参数。

总之,只有知道怎么自己学习,才能知道怎么自己动手,实在收获颇丰。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

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

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