实验二 离散傅里叶变换(DFT)实验
- 格式:docx
- 大小:543.19 KB
- 文档页数:10
实验二 离散傅里叶变换(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