实验二 离散傅里叶变换(DFT)实验

  • 格式:docx
  • 大小:543.19 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 离散傅里叶变换(DFT )实验

【实验目的】

1.进一步熟悉CCS 集成开发环境的软硬件调试方法

2.学习DFT 的基本原理

3.掌握如何在DSP 中实现DFT 算法

【实验内容】

1. 了解DFT 的基本原理。

2.了解命令文件中伪指令MEMORY 和SECTIONS 的作用。

2. CCS 中的软硬件开发环境的熟悉。

3. 常用信号(包括正弦波,方波,三角波,锯齿波)的DFT 。

【实验器材】

1.DSP 开发板

2.DSP 仿真器

3 .PC 机(软件:CCS ,全称:Code composer studio )

三 实验原理

。傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。离散傅里叶变换(DFT )是傅里叶变换在离散系统中的表示形式。

本实验是在学生首先产生一信号后,对该信号进行DFT ,并在CCS 中利用其自带的观察窗口或Memory 菜单来查看变换前后的波形或频谱值,从而完成了一个简易频谱分析仪。让学生更加直观形象地体会DFT 的整个过程

假设信号为x (0),x(1),……,x (N),那么其离散傅立叶变换后的实部和虚部以及频谱幅度分别为:

2()0

()()()()

N j k n N r i n X k x n e

X k jX k π-===+∑ 0

(0)()

(0)0N r i i X x i X =∴==∑ 0

02 ()()cos(())2()()sin(())(0)

N

r n N i i X k x n k n N X k x n k n k N ππ===⨯⨯⨯=-⨯⨯⨯>∑∑

()A k =

具体的实现过程的时候需要根据硬件的特性来实现。比如cos和sin的值都可事先通过软件计算出结果,保存在两个数组中,直接对其进行查表操作。

若缓存数量为128,即N=128。对于cos和sin的系数,根据需要可以首先计算出128点的sin值,而cos的值则可以通过sin表整体后移N/4点,也就是整体后移32点后得到。换句话说,加入sin的表为sin(0)、sin(1)、

sin(2)、……、sin(127),则cos的表就为sin(32)、sin(33)、sin(34)、……、sin(127)、sin(0)、sin(1)、……、sin(31),这样就相当于在DSP中节省了128B 的存储空间供其它程序使用。

四实验步骤

1.打开CCS软件直接打开lab2里的工程

2.修改hello工程下的源文件代码(产生一信号,并做DFT)。

3.对代码修改完毕后,编译代码。

4.编译通过后,下载代码到DSP。

5.首先点击CCS软件中的菜单View\Graph\Time/Frequency…,会弹出一个设置

图选择CCS图形观察窗口

对话框,对下图所相应的设置后,点击【OK】即可。

图设置图形观察窗口的属性

6.打开工程下面的源文件,在程序尾部位置设置断点。7.全部设置好后,点击CCS软件左侧全速运行按钮,即。8.待程序运行后,观察CCS的图形观察窗口显示的波形。

图4.9.4 断点设置位置

图4.9.5 三角波及其频谱

图4.9.6 正弦波及其频谱

图4.9.6 方波及其频谱

图4.9.6 锯齿波及其频谱【实验要求】

1.学会使用CCS仿真调试出正弦或余弦波的波形及其对应的频谱图

原始程序如下:

/*

* Copyright 2002 by Texas Instruments Incorporated.

* All rights reserved. Property of Texas Instruments Incorporated.

* Restricted rights to use, duplicate or disclose this code are

* granted through contract.

*

*/

/* "@(#) DSP/BIOS 4.80.208 12-06-02 (barracuda-l19)" */

/******************************************************************** *******/

/* */

/* H E L L O . C */

/* */

/* Basic LOG event operation from main. */

/* */

/******************************************************************** *******/

#include

#include

#include

#include

#include

#include

#include "hello.h"

float in_data[Length],out_data[Length];

//==== main =====

Void main()

{

int i,k;

puts("hello world!");

for(i=0;i

{

in_data[i]=cos(pi*i/16); //生成一个N个样点的余弦函数}

// Triangle_wave();

// Square_wave();

// Sawtooth_wave();

for( k=0;k

{

float real=0;

float image=0;

for(i=0;i