DSP大作业-快速傅立叶变换(FFT)算法实验

合集下载

DSP实验一--FFT

DSP实验一--FFT

数字信号处理实验实验1 快速傅里叶变换FFT 算法实验一、实验目的:1、加深对离散信号的DFT 的理解和FFT 算法的运用。

2、学会用mtalab 求解信号的频谱图。

3、学会用DSP 硬件进行频谱分析。

二、实验设备计算机,ccs3.3软件,DSP CPU 挂箱,DSP 仿真器,导线三、实验原理N 点序列的DFT 和IDFT 变换定义式如下:10[][]N kn N n X k x n W-==∑, 101[][]N kn N k x n X k W N --==∑ 利用旋转因子2j nk knN N W e π-=具有周期性,可以得到快速算法(FFT )。

在MATLAB 中,可以用函数X=fft (x ,N )和x=ifft (X ,N )计算N 点序列的DFT 正、反变换。

四、实验内容:1、利用MATLAB 编程完成计算,绘出下式时域图形,并用FFT 求取其傅里叶变换画出相应的频谱图,并分析、说明实验结果。

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);采样频率fs=100Hz ,采样点数为128点。

2、运行ccs 软件,对给定的语音信号进行采集,并应用DSP 挂箱分析该信号的频谱。

相应的实验步骤(1)安装仿真器TDS510驱动(位置在f 盘根目录下).(2)仿真器参数设置打开setup ccstudio 从Familly 中查找C55xx 系列,然后选择C5509 TDS510并将其拖到到左侧窗口。

右键C5509打开属性装载仿真器的配置参数CCstudio_v3.3//cc//bin/TDS510.cgf.(3)打开ccs3.3链接仿真器与电脑点击Debug —connect ;打开已建立的项目点击project—open—fft.pjt;装载编译好的程序fft.out,file--load program—fft.out。

在k++处设置断点,观察采集到的语音信号。

快速傅立叶变换FFT实验报告

快速傅立叶变换FFT实验报告

快速傅立叶变换〔FFT〕算法试验一.试验目的1.加深对DFT 算法原理和根本性质的理解;2.生疏FFT 算法原理和FFT 子程序的应用;3.学习用FFT 对连续信号和时域信号进展谱分析的方法,了解可能消灭的分析误差及其缘由,以便在实际中正确应用FFT。

二.试验设备计算机,CCS 3.1 版软件,E300 试验箱,DSP 仿真器,导线三.根本原理1.离散傅立叶变换DFT 的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。

2.FFT 是DFT 的一种快速算法,将DFT 的N2 步运算削减为〔N/2〕logN 步,极大2的提高了运算的速度。

3.旋转因子的变化规律。

4.蝶形运算规律。

5.基2FFT 算法。

四.试验步骤1.E300 底板的开关SW4 的第1 位置ON,其余置OFF。

其余开关不用具体设置。

2.E300 板子上的SW7 开关的第1 位置OFF,其余位置ON3.阅读本试验所供给的样例子程序;4.运行CCS 软件,对样例程序进展跟踪,分析结果;记录必要的参数。

5.填写试验报告。

6.供给样例程序试验操作说明A.试验前预备用导线连接“Signal expansion Unit”中2 号孔接口“SIN”和“A/D 单元”的2 号孔接口“AD_IN0”。

〔试验承受的是外部的AD模块〕B.试验1.正确完成计算机、DSP 仿真器和试验箱的连接后,系统上电。

2.启动CCS3.1,Project/Open 翻开“algorithm\01_fft”子名目下“fft.pjt”工程文件;双击“fft.pjt”及“Source”可查看各源程序;加载“Debug\fft.out”;3.单击“Debug\Go main”进入到主程序,在主程序“flag=0;”处设置断点;4.单击“Debug \ Run”运行程序,或按F5 运行程序;程序将运行至断点处停顿;5.用View / Graph / Time/Frequency 翻开一个图形观看窗口;设置该观看图形窗口变量及参数;承受双踪观看在启始地址分别为px 和pz,长度为128,数值类型为16 位整型,p x:存放经A/D 转换后的输入信号;p z:对该信号进展FFT 变换的结果。

快速傅里叶变换(FFT)的DSP实现

快速傅里叶变换(FFT)的DSP实现

目录一、前言二、设计题目三、设计要求3.1 设计目的3.2 设计要求四、设计内容五、设计原理5.2 离散傅里叶变换DFT5.3 快速傅里叶变换FFT六、总体方案设计6.1 设计有关程序流程图6.2 在CCS环境下加载、调试源程序七、主要参数八、实验结果分析九、设计总结一、前言随着数字电子技术的发展,数字信号处理的理论和技术广泛的应用于通讯、语音处理、计算机和多媒体等领域。

快速傅里叶变换(FFT)使离散傅里叶变换的时间缩短了几个数量级。

在数字信号处理领域被广泛的应用。

FFT已经成为现代化信号处理的重要手段之一。

本次课程设计主要运用CCS这一工具。

CCS(Code Composer Studio)是一种针对TM320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具,可以帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。

CCS有两种工作模式,即软件仿真器和硬件在线编程。

软件仿真器工作模式可以脱离DSP芯片,在PC上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。

硬件在线编程可以实时运行在DSP芯片上,与硬件开发板相结合进行在线编程和调试应用程序。

二、设计题目快速傅里叶变换(FFT)的DSP实现三、设计要求3.1设计目的⑴加深对DFT算法原理和基本性质的理解;⑵熟悉FFT的算法原理和FFT子程序的算法流程和应用;⑶学习用FFT对连续信号和时域信号进行频谱分析的方法;⑷学习DSP中FFT的设计和编程思想;⑸学习使用CCS 的波形观察器观察波形和频谱情况;3.2 基本要求⑴研究FFT 原理以及利用DSP 实现的方法;⑵编写FFT 程序;⑶调试程序,观察结果。

四、 设计内容⑴用DSP 汇编语言及C 语言进行编程;⑵实现FFT 运算、对输入信号进行频谱分析。

五、 设计原理快速傅里叶变换FFT快速傅里叶变换(FFT )是一种高效实现离散傅里叶变换(DFT )的快速算法,是数字信号处理中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。

DSP-FFT快速傅立叶计算实验

DSP-FFT快速傅立叶计算实验

《DSP原理及应用》课程实验报告学生姓名:所在班级:电信1001指导教师:记分及评价:项目满分5分得分一、实验名称实验5:FFT快速傅立叶计算二、任务及要求【基本部分】3分把教材7-13FFT快速傅立叶计算的程序补充完整,进行仿真实验。

【发挥部分】2分把exam5-1中的sian1或sian2数据调用进来进行快速傅立叶计算。

三、实验程序(原理图)#include "fcomplex.h"void fft(complex *X, unsigned int M, complex *W, unsigned int SCALE){complex temp; /* 复变量临时存储器 */complex U; /* 旋转因子W^k */unsigned int i,j;unsigned int id; /* 蝶形运算中下位节点的序号 */unsigned int N=1<<M; /* FFT 的点数*/unsigned int L; /* FFT 的级序号 */unsigned int LE; /* L级子FFT的点数 */unsigned int LE1; /* L级子FFT蝶形运算的个数 */float scale;scale = 0.5;for (L=1; L<=M; L++){LE=1<<L;LE1=LE>>1;U.re = 1.0;U.im = 0.;for (j=0; j<LE1;j++){for(i=j; i<N; i+=LE) /* 进行蝶形计算 */{id=i+LE1;temp.re = (X[id].re* U.re - X[id].im* U.im)*scale; temp.im = (X[id].im* U.re + X[id].re* U.im)*scale;X[id].re = X[i].re*scale - temp.re;X[id].im = X[i].im*scale - temp.im;X[i].re = X[i].re*scale + temp.re;X[i].im = X[i].im*scale + temp.im;}/* 递推计算W^k */temp.re = U.re* W[L-1].re - U.im* W[L-1].im;U.im = U.re* W[L-1].im + U.im* W[L-1].re;U.re = temp.re;}}}/*fft_test.c - Example to test FFT*/#include <math.h>#include "fcomplex.h"extern void bit_rev(complex *, unsigned int); /*位反转函数声明*/ extern void fft(complex *, unsigned int, complex *, unsigned int); extern void generator(float *, unsigned int);/* fft函数声明 */#define N 128 /* FFT的数据个数 */#define M 7 /* M=log2(N) */#define PI 3.1415926complex X[N]; /* 说明输入信号数组,为复数 */complex W[M]; /* 说明旋转因子数组e^(-j2PI/N),为复数 */ complex temp; /* 说明临时复数变量 */float xin[N];float spectrum[N]; /* 说明功率谱信号数组,为实数 */float re1[N],im1[N]; /* 说明临时变量数组,为实数 */void main(){unsigned int i,L,LE,LE1;/* ------------------------------------------------------------- */ /* 产生旋转因子表 */for (L=1; L<=M; L++){LE=1<<L; /* 子FFT中的点数LE=2^L */LE1=LE>>1; /* 子FFT中的蝶形运算数目*/W[L-1].re = cos(PI/LE1);W[L-1].im = -sin(PI/LE1);}/* ------------------------------------------------------------- */ generator(xin,N);for (;;){/* --------------------------------------------------------- */for (i=0; i<N; i++){/* 构造输入信号样本 */X[i].re =xin[i];X[i].im = 0;/* 复制到参考缓冲器 */re1[i] = X[i].re;im1[i] = X[i].im;}/* 启动 FFT */bit_rev(X,M); /* 以倒位次序排列X[] */fft(X,M,W,1); /* 执行 FFT *//* 计算功率谱,验证FFT结果 */for (i=0; i<N; i++){temp.re = X[i].re*X[i].re;temp.im = X[i].im*X[i].im;spectrum[i] = (temp.re + temp.im)*4;}}}四、仿真及结果分析五、硬件验证无六、小结这次的实验使我理解FFT快速傅立叶计算,同时对傅里叶计算以及CCS应用有更加深的理解,在设计FFT快速傅立叶计算的初期我有很多问题都不太清楚,通过老师和同学的指导,最终使我明白了如何实现FFT快速傅立叶计算。

DSP实验3

DSP实验3

实验三 快速傅里叶变换 FFT一、实验目的1.理解DFT 算法,并能用MATLAB 实现DFT 。

2. 加深对FFT 的理解,体会DFT 和FFT 之间的关系。

3.熟悉应用FFT 实现两个序列的线性卷积的方法。

二、实验原理N 点序列x(n) 的DFT 和IDFT 定义:若将DFT 变换的定义写成矩阵形式,则得到X=A ﹒x ,其中DFT 变换矩阵A 为⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧=---2)1(111...1...............11...11N N N N N N N W W W W A 可以用函数U=fft(u,N)和u=ifft(U,N)计算N 点序列的DFT 正、反变换。

三、实验内容(一)离散傅里叶变换(DFT )1.用MATLAB 求N=16的有限序列)4/sin()8/sin()(ππn n n x +=的DFT 结果,并画出结果图。

参考程序如下:N=16;n=0:1:N-1; %时域采样xn=sin(n*pi/8)+sin(n*pi/4);k=0:1:N-1; %频域采样WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;subplot(2,1,1)stem(n,xn);subplot(2,1,2)stem(k,abs(Xk));2.矩形序列x(n)=R(n),求N分别取8,32时的DFT,最后绘出结果图形。

5参考程序如下:function[Xk]=dft(xn,N)n=[0:1:N-1]; %n的行向量k=[0:1:N-1]; %k的行向量WN=exp(-j*2*pi/N); %旋转因子nk=n'*k; %产生一个含nk值的N乘N维矩阵WNnk=WN.^nk; %DFT矩阵Xk=xn*WNnk; %DFT系数的行向量调用上面函数解题。

N=8;x=[ones(1,5),zeros(1,N-5)];n=0:N-1;X=dft(x,N); %N=8点离散傅立叶变换magX=abs(X);phaX=angle(X)*180/pi;k=(0:length(magX)'-1)*N/length(magX);subplot(2,2,1);stem(n,x);ylabel('x(n)');subplot(2,2,2);stem(k,magX);axis([0,10,0,5]);ylabel('|X(k)|');N=32;x=[ones(1,5),zeros(1,N-5)];n=0:N-1;X=dft(x,N); %N=32点离散傅立叶变换magX=abs(X);phaX=angle(X)*180/pi;k=(0:length(magX)'-1)*N/length(magX);subplot(2,2,3);stem(n,x);ylabel('x(n)');subplot(2,2,4);stem(k,magX);axis([0,32,0,5]);ylabel('|x(k)|');(二)快速傅里叶变换(FFT)1.已知一个8点的时域非周期离散阶跃信号,n1=0,n2=7,在n0=4前为0,n0以后为1。

(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

快速傅立叶变换(FFT )的实现一、实验目的1.了解FFT 的原理及算法;2.了解DSP 中FFT 的设计及编程方法;3.熟悉FFT 的调试方法;二、实验原理FFT 是一种高效实现离散付立叶变换的算法,把信号从时域变换到频域,在频域分析处理信息。

对于长度为N 的有限长序列x (n ),它的离散傅里叶变换为:(2/)j N nk N W e π-=,称为旋转因子,或蝶形因子。

在x (n )为复数序列的情况下,计算X (k ):对某个k 值,需要N 次复数乘法、(N -1)次复数加法;对所有N 个k 值,需要2N 次复数乘法和N (N -1)次复数加法。

对于N 相当大时(如1024)来说,直接计算它的DFT 所作的计算量是很大的,FFT 的基本思想在于: 利用2()j nk N N W e π-=的周期性即:k N k N N W W +=对称性:/2k k N N N W W +=-将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。

按时间抽取的FFT ——DIT FFT 信号流图如图5.1所示:图5.1 时间抽取的FFT —DIT FFT 信号流图FFT 算法主要分为以下四步。

第一步 输入数据的组合和位倒序∑=-=10)()(N n nk N W n x k X把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。

第二步 实现N 点复数FFT第一级蝶形运算;第二级蝶形运算;第三级至log2N 级蝶形运算;FFT 运算中的旋转因子N W 是一个复数,可表示:为了实现旋转因子N W 的运算,在存储空间分别建立正弦表和余弦表,每个表对应从0度到180度,采用循环寻址来对正弦表和余弦表进行寻址。

第三步 功率谱的计算X (k )是由实部()R X k 和虚部()I X k 组成的复数:()()()R I X k X k jX k =+;计算功率谱时只需将FFT 变换好的数据,按照实部()R X k 和虚部()I X k 求它们的平方和,然后对平方和进行开平方运算。

快速傅里叶变换(含详细实验过程分析)

快速傅里叶变换(含详细实验过程分析)

快速傅⾥叶变换(含详细实验过程分析)[实验2] 快速傅⾥叶变换 (FFT) 实现⼀、实验⽬的1、掌握FFT 算法和卷积运算的基本原理;2、掌握⽤C 语⾔编写DSP 程序的⽅法;3、了解利⽤FFT 算法在数字信号处理中的应⽤。

⼆、实验设备 1. ⼀台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410主控板; 3. DSP 硬件仿真器。

三、实验原理(⼀)快速傅⾥叶变换傅⾥叶变换是⼀种将信号从时域变换到频域的变换形式,是信号处理的重要分析⼯具。

离散傅⾥叶变换(DFT )是傅⾥叶变换在离散系统中的表⽰形式。

但是DFT 的计算量⾮常⼤, FFT 就是DFT 的⼀种快速算法, FFT 将DFT 的N 2步运算减少⾄ ( N/2 )log 2N 步。

离散信号x(n)的傅⾥叶变换可以表⽰为∑=-=10][)(N N nk N W n x k X , Nj N e W /2π-=式中的W N 称为蝶形因⼦,利⽤它的对称性和周期性可以减少运算量。

⼀般⽽⾔,FFT 算法分为时间抽取(DIT )和频率抽取(DIF )两⼤类。

两者的区别是蝶形因⼦出现的位置不同,前者中蝶形因⼦出现在输⼊端,后者中出现在输出端。

本实验以时间抽取⽅法为例。

时间抽取FFT 是将N 点输⼊序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。

偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。

这样x(n) 的N 点DFT 可写成:()()∑++∑=-=+-=12/0)12(12/02122)(N n kn NN n nkNW n x Wn x k X考虑到W N 的性质,即2/)2//(22/)2(2][N N j N j N W e e W ===--ππ因此有:()()∑++∑=-=-=12/02/12/02/122)(N n nkN k NN n nkN W n x WWn x k X或者写成:()()12()kN X k X k W X k =+由于X 1(k) 与X 2(k) 的周期为N/2,并且利⽤W N 的对称性和周期性,即:kNNkNWW-=+2/可得:()()12(/2)kNX k N X k W X k+=-对X1(k) 与X2(k)继续以同样的⽅式分解下去,就可以使⼀个N点的DFT最终⽤⼀组2点的DFT来计算。

快速傅里叶变换(FFT)实验说明概要

快速傅里叶变换(FFT)实验说明概要

算法验证原理:为了验证该 FFT 的频谱分析能力,故对一段合成信号进行 FFT 。

方波的傅里叶级数展开公式如下:根据以上公式各次谐波与基波之间的谐波频率与谐波幅度的关系, 我们可以使用 sin 函数合成任意次的方波。

这里,我们选取三次谐波合成方波。

以下是例程中的合成三次谐波信号:Input[i]=sin(2*pi*5*i/(NL-1+sin(2*pi*i*5*3/(NL-1/3+sin(2*pi*i*5*5/(NL-1/5;基波角频率 =2*pi*5, NL 为将连续信号离散化的点数,在2π的周期上均匀分割为 NL 个离散点。

这一步代替了 AD 采样的功能。

离散点存放在数组 Input[i]里面,长度为 NL 。

例程里面 NL=256。

加载程序并运行,点击 view->Graph->Time/Frequency,设置如下:点击 OK ,出现如下图所示的波形:这是合成信号的时域波形, 根据吉布斯效应,如果谐次增加, 高电平两个尖峰之间的震荡幅度将会减小变密,但是两边的尖峰不会削减。

接着我们设置如下:点击 OK ,我们将看到如下波形:上图为对该合成信号的 256点 FFT 频谱图,在三个频率分量处有幅度分布。

由于 FFT 是在2π上的分析, 而且将复数进行了取模运算, 所以频谱图是关于π(采样值为点 127的对称图形。

将鼠标点击到尖峰处,分别得到点数与幅度的值为:第一尖峰:(5, 0.99 第二尖峰:(15, 0.32 , 第三尖峰:(25, 0.19 。

采样点数关系为 5,15,25,满足 1:3:5的频率关系;量化的幅度关系为 0.99:0.32:0.19,满足 1:1/3:1/5的谐波幅度关系。

因此,该 FFT 算法能够准确的对信号进行频谱计算。

DSP实验5

DSP实验5

实验五:快速傅里叶变换(FFT)实验目的:快速傅立叶变换并不是一种新的变换方法,它是计算DFT的一种有效算法。

它是信号谱分析的有力工具,通过本次实验,学习使用FFT分析信号的方法,加深对FFT的理解。

实验任务:1.通过实际例子学习使用FFT 分析信号的方法。

2.通过采样点数的不同,了解对信号幅度谱的影响。

3.编程实现某一序列的FFT。

例1:模拟信号x(t)=2 sin(4πt)+5cos(8πt),t=0.01n(n=0:N-1)进行取样,求N点DFT的幅值谱。

N分别为(1)N=15;(2)N=25;(3)N=35;(4)N=55 解MATLAB程序为exam51.m:% Example%figure(1)subplot (2,2,1)N=15;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y))title('FFT N=15')%subplot(2,2,2);N=25;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y));title('FFT N=25');%subplot (2,2,3)N=35;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y))title('FFT N=35')%subplot (2,2,4)N=55;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs (y))title('FFT N=55')执行后可得如图所示的信号谱。

FFT算法分析实验实验报告

FFT算法分析实验实验报告

FFT算法分析实验实验报告一、实验目的快速傅里叶变换(Fast Fourier Transform,FFT)是数字信号处理中一种非常重要的算法。

本次实验的目的在于深入理解 FFT 算法的基本原理、性能特点,并通过实际编程实现和实验数据分析,掌握 FFT 算法在频谱分析中的应用。

二、实验原理FFT 算法是离散傅里叶变换(Discrete Fourier Transform,DFT)的快速计算方法。

DFT 的定义为:对于长度为 N 的序列 x(n),其 DFT 为X(k) =∑n=0 到 N-1 x(n) e^(j 2π k n / N) ,其中 j 为虚数单位。

FFT 算法基于分治法的思想,将 N 点 DFT 分解为多个较小规模的DFT,从而大大减少了计算量。

常见的 FFT 算法有基 2 算法、基 4 算法等。

三、实验环境本次实验使用的编程语言为 Python,主要依赖 numpy 库来实现 FFT 计算和相关的数据处理。

四、实验步骤1、生成测试信号首先,生成一个包含不同频率成分的正弦波叠加信号,例如100Hz、200Hz 和 300Hz 的正弦波。

设定采样频率为 1000Hz,采样时间为 1 秒,以获取足够的采样点进行分析。

2、进行 FFT 计算使用 numpy 库中的 fft 函数对生成的测试信号进行 FFT 变换。

3、频谱分析计算 FFT 结果的幅度谱和相位谱。

通过幅度谱确定信号中各个频率成分的强度。

4、误差分析与理论上的频率成分进行对比,计算误差。

五、实验结果与分析1、幅度谱分析观察到在 100Hz、200Hz 和 300Hz 附近出现明显的峰值,对应于生成信号中的频率成分。

峰值的大小反映了相应频率成分的强度。

2、相位谱分析相位谱显示了各个频率成分的相位信息。

3、误差分析计算得到的频率与理论值相比,存在一定的误差,但在可接受范围内。

误差主要来源于采样过程中的量化误差以及 FFT 算法本身的近似处理。

快速傅立叶变换(FFT)的实现(DSP实验报告)

快速傅立叶变换(FFT)的实现(DSP实验报告)

快速傅立叶变换(FFT )的实现一、实验目的在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运算能力的一个考核因素。

FFT 是一种高效实现离散付氏变换的算法。

离散付氏变换的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆变换到时域。

本实验的目的在于学习FFT 算法,及其在TMS320C54X 上的实现,并通过编程掌握C54X 的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS 的探针和图形工具。

另外在BIOS 子目录下是一个使用DSP/BIOS 工具实现FFT 的程序。

通过该程序,你可以使用DSP/BIOS 提供的分析工具评估FFT 代码执行情况。

二、实验原理1)基 2 按时间抽取FFT 算法对于有限长离散数字信号{x[n]} ,0 ≤n ≤-1 N,其离散谱{x[k]} 可以由离散付氏变换(DFT)求得。

DFT 的定义为:X(k) x[n]e N k 0,1,...,N 1 n0可以方便的把它改写为如下形式:N1nkX(k) x[n]W n N k k 0,1,..., N 1n0不难看出,WN 是周期性的,且周期为N,即( n mN )(k lN ) nkm,l 0, 1, 2...W N W NWN 的周期性是DFT 的关键性质之一。

为了强调起见,常用表达式WN 取代W 以便明确其周期是N。

2) 实数FFT 运算对于离散傅立叶变换( DFT)的数字计算,FFT 是一种有效的方法。

一般假定输入序列是复数。

当实际输入是实数时,利用对称性质可以使计算DFT 非常有效。

一个优化的实数FFT 算法是一个组合以后的算法。

原始的2N 个点的实输入序列组合成一个N 点的复序列,之后对复序列进行N 点的FFT 运算,最后再由N 点的复数输出拆散成2N 点的复数序列,这2N点的复数序列与原始的2N点的实数输入序列的DFT 输出一致。

DSP实验手册 实验九 快速傅立叶变换(FFT)

DSP实验手册 实验九 快速傅立叶变换(FFT)

实验九快速傅立叶变换(FFT)一. 实验目的:1.熟悉CCS集成开发环境2.熟悉SEED-DTK5416实验环境3.加深对DFT算法原理和基本性质的理解4.熟悉FFT的算法原理和FFT子程序的算法流程和应用5.学习用FFT对连续信号和时域信号进行频谱分析的方法6.了解DSP处理FFT算法的特殊寻址方式二. 实验内容:1. DSP初始化;2. A/D采样;3. FFT的位倒序程序;4. FFT的蝶形运算程序;5.求功率谱的程序;6.串口发送与接收。

三. 实验背景知识:1. DFT算法的原理2. FFT快速算法的基本原理3. FFT位倒序的实现四. 实验程序功能与结构说明:在数字滤波器实验中,主要包含以下文件:1. Dtk-fft.c:这是实验的主程序,包含了系统的初始化,主要是异步串口的初始化、MCBSP的初始化、以及系统时钟的设置;完成与SEED-MMI5402系统的异步通讯、信号的采集与FFT的运算及功率谱的计算程序。

2. dec5416.c:对SEED-DEC5416各项资源的操作的函数集,主要包含了对UART 的操作的各个函数,对CODEC的各个控制函数。

以及对系统各项的初始化函数。

3. rfft1024.asm:1024点的FFT函数。

4. rftt512.asm:512点的FFT函数。

5. rfft256.asm:256点的FFT函数。

6. cbrev.asm:位倒序函数。

7. sqrt.asm:开方函数。

8. iircas5.asm:IIR滤波器函数。

9. fltoq15.asm:浮点数到Q15定点数的转换;10.b oot.asm:C环境的引导程序。

11.m emory.asm:包含了对FLASH的各项操作、程序空间MEMORY。

12.s ysreg.asm:包含了对DSP的各项控制,像中断的设置、系统时钟设置,及13.对各寄存器的操作。

14.u art.asm:对异步串口的寄存器的读与写。

快速傅里叶变换FFT实验

快速傅里叶变换FFT实验

1.快速傅里叶变换FFT实验.1)快速傅里叶变换FFT源程序:#include"iostream.h"#include"math.h"//using namespace std#define pi 3.1415926536 //定义pai void swap(double &a,double &b) //定义交换函数swap{double t=a;a=b;b=t;}void fft(double A[],double B[],int M) //定义fft快速傅里叶函数{ long int J,I,L,LE,LE1,P,Q,R;double N,K,Wr,Wi,W1r,W1i,WTr,WTi,theta,Tr,Ti;J=0;N=pow(2,M);//雷达算法码位倒置程序for(I=0;I<N-1;I++){if(J>I){swap(A[I],A[J]);swap(B[I],B[J]);}K=N/2;//向低位进位while(K>=2&&J>=K){J-=K;K=K/2;}J+=K;}//蝶形运算程序//最外层循环由蝶形图的级数确定for(L=1;L<=M;L++){LE=pow(2,L); //各级群间隔LE1=LE/2; //输入间隔Wr=1.0; //Wn的实部Wi=0.0; //Wn的虚部theta=(-1)*pi/LE1;W1r=cos(theta);W1i=sin(theta);//中层循环由Wn的个数确定for(R=0;R<LE1;R++){//内层循环由每一级群的个数确定for(P=R;P<N-1;P+=LE){Q=P+LE1;Tr=Wr*A[Q]-Wi*B[Q];Ti=Wr*B[Q]+Wi*A[Q];A[Q]=A[P]-Tr;B[Q]=B[P]-Ti;A[P]+=Tr;B[P]+=Ti;}//计算每一级的Wn的值WTr=Wr;WTi=Wi;Wr=WTr*W1r-WTi*W1i;Wi=WTr*W1i+WTi*W1r;}}}void main(){int M;double N;cout<<"实验人的信息:姓名:张超华学号:200801000728 专业班级:电力电子0801"<<endl;cout<<"输入序列的个数N(N必须为2^M),N=";cin>>N;//判断输入N的个数是否符合2^M个while(1){double b=log10(N)/log10(2);int a=b/1;if(a-b==0){M=a;break;}else{cout<<"输入序列的个数须为2^M个,重新输入N=";cin>>N;}}double *A=new double[N]; //为序列的实部分配动态空间double *B=new double[N]; //为序列的虚部分配动态空间for(int i=0;i<N;i++){A[i]=0.0;B[i]=0.0;}// 输入序列cout<<"请在下方输入序列的实部:"<<endl;for(int j=0;j<N;j++){cin>>A[j];}cout<<"请在下方输入序列的虚部:"<<endl;for(j=0;j<N;j++){cin>>B[j];}fft(A,B,M); //调用fft函数 cout<<"经快速傅里叶变换后得到的结果为:"<<endl; //输出变换结果 for(int m=0;m<N;m++){cout<<" "<<A[m]<<"+j("<<B[m]<<")"<<endl;}//释放内存空间delete [] A;delete [] B;}2)FFT程序运行结果:(参考课本160页的‘例6-3’运行程序。

数字信号处理_快速傅里叶变换FFT实验报告

数字信号处理_快速傅里叶变换FFT实验报告

数字信号处理_快速傅里叶变换FFT实验报告快速傅里叶变换(FFT)实验报告1. 引言数字信号处理是一门研究如何对数字信号进行处理、分析和提取信息的学科。

傅里叶变换是数字信号处理中常用的一种方法,可以将信号从时域转换到频域。

而快速傅里叶变换(FFT)是一种高效的计算傅里叶变换的算法,广泛应用于信号处理、图象处理、通信等领域。

2. 实验目的本实验旨在通过编写程序实现快速傅里叶变换算法,并对不同信号进行频谱分析。

3. 实验原理快速傅里叶变换是一种基于分治策略的算法,通过将一个N点离散傅里叶变换(DFT)分解为多个较小规模的DFT,从而实现高效的计算。

具体步骤如下: - 如果N=1,直接计算DFT;- 如果N>1,将输入序列分为偶数和奇数两部份,分别计算两部份的DFT;- 将两部份的DFT合并为整体的DFT。

4. 实验步骤此处以C语言为例,给出实验的具体步骤:(1) 定义输入信号数组和输出频谱数组;(2) 实现快速傅里叶变换算法的函数,输入参数为输入信号数组和输出频谱数组;(3) 在主函数中调用快速傅里叶变换函数,得到输出频谱数组;(4) 对输出频谱数组进行可视化处理,如绘制频谱图。

5. 实验结果与分析为了验证快速傅里叶变换算法的正确性和有效性,我们设计了以下实验:(1) 生成一个正弦信号,频率为100Hz,采样频率为1000Hz,时长为1秒;(2) 对生成的正弦信号进行快速傅里叶变换,并绘制频谱图;(3) 生成一个方波信号,频率为200Hz,采样频率为1000Hz,时长为1秒;(4) 对生成的方波信号进行快速傅里叶变换,并绘制频谱图。

实验结果显示,对于正弦信号,频谱图中存在一个峰值,位于100Hz处,且幅度较大;对于方波信号,频谱图中存在多个峰值,分别位于200Hz的奇数倍处,且幅度较小。

这与我们的预期相符,说明快速傅里叶变换算法能够正确地提取信号的频谱信息。

6. 实验总结通过本次实验,我们成功实现了快速傅里叶变换算法,并对不同信号进行了频谱分析。

快速傅里叶变换(含详细实验过程分析)

快速傅里叶变换(含详细实验过程分析)

[实验2] 快速傅里叶变换 (FFT) 实现一、实验目的1、掌握FFT 算法和卷积运算的基本原理;2、掌握用C 语言编写DSP 程序的方法;3、了解利用FFT 算法在数字信号处理中的应用。

二、实验设备 1. 一台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410主控板; 3. DSP 硬件仿真器。

三、实验原理 (一)快速傅里叶变换傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。

离散傅里叶变换(DFT )是傅里叶变换在离散系统中的表示形式。

但是DFT 的计算量非常大, FFT 就是DFT 的一种快速算法, FFT 将DFT 的N 2步运算减少至 ( N/2 )log 2N 步。

离散信号x(n)的傅里叶变换可以表示为∑=-=10][)(N N nk N W n x k X , Nj N e W /2π-=式中的W N 称为蝶形因子,利用它的对称性和周期性可以减少运算量。

一般而言,FFT 算法分为时间抽取(DIT )和频率抽取(DIF )两大类。

两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。

本实验以时间抽取方法为例。

时间抽取FFT 是将N 点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。

偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。

这样x(n) 的N 点DFT 可写成:()()∑++∑=-=+-=12/0)12(12/02122)(N n kn NN n nkNW n x Wn x k X考虑到W N 的性质,即2/)2//(22/)2(2][N N j N j N W e e W ===--ππ因此有:()()∑++∑=-=-=12/02/12/02/122)(N n nkN k NN n nkN W n x WWn x k X或者写成:()()12()kN X k X k W X k =+由于X 1(k) 与X 2(k) 的周期为N/2,并且利用W N 的对称性和周期性,即:kNNkNWW-=+2/可得:()()12(/2)kNX k N X k W X k+=-对X1(k) 与X2(k)继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。

快速傅立叶变换(FFT)算法-DSP实验

快速傅立叶变换(FFT)算法-DSP实验

快速傅立叶变换(FFT)算法实验摘要:FFT(Fast Fourier Transformation),即为快速傅里叶变换,是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

这种算法大大减少了变换中的运算量,使得其在数字信号处理中有了广泛的运用。

本实验主要要求掌握在CCS环境下用窗函数法设计FFT快速傅里叶的原理和方法;并且熟悉FFT快速傅里叶特性;以及通过本次试验了解各种窗函数对快速傅里叶特性的影响等。

引言:快速傅里叶变换FFT是离散傅里叶变换DFT的一种快速算法。

起初DFT的计算在数字信号处理中就非常有用,但由于计算量太大,即使采用计算机也很难对问题进行实时处理,所以并没有得到真正的运用。

1965年J.W.库利和T.W.图基提出快速傅里叶变换,采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

从此,对快速傅里叶变换(FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。

根据对序列分解与选取方法的不同而产生了FFT的多种算法,基本算法是基2DIT和基2DIF。

FFT 的出现,使信号分析从时域分析向频域分析成为可能,极大地推动了信号分析在各领域的实际应用。

FFT在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。

一、 实验原理:FFT 并不是一种新的变换,它是离散傅立叶变换(DFT )的一种快速算法。

由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。

每运算一个X (k )需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。

所以整个DFT 运算总共需要4N^2次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。

如此一来,计算时乘法次数和加法次数都是和N^2成正比的,当N 很大时,运算量是可观的,因而需要改进对DFT 的算法减少运算速度。

DSP大作业-快速傅立叶变换(FFT)算法实验

DSP大作业-快速傅立叶变换(FFT)算法实验

《DSP原理及应用》大作业专业:电子信息工程姓名:学号:快速傅立叶变换(FFT)算法实验一、摘要基于CCS的DSP算法仿真实验设计简要介绍了CCS软件的主要功能, 利用CCS软件, 设计数字信号处理实验课程, 实现了FFT算法实验二、引言在当今的数字化时代背景下, DSP控制器以其可靠性高、扩充能力强、可维护性能好,可满足多种场合的应用需要,得到了国内外电子信息界和控制方案支持企业的青睐,被公认为控制实现技术的发展方向。

DSP已成为通信、计算机、消费类电子产品等领域的基础器件,被誉为信息社会革命的旗手。

三.实验原理1.FFT 的原理和参数生成公式:公式(1)FFT 运算公式FFT 并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。

由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。

每运算一个X(k)需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。

所以整个DFT运算总共需要4N^2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。

如此一来,计算时乘法次数和加法次数都是和N^2 成正比的,当N 很大时,运算量是可观的,因而需要改进对DFT 的算法减少运算速度。

根据傅立叶变换的对称性和周期性,我们可以将DFT 运算中有些项合并。

我们先设序列长度为N=2^L,L 为整数。

将N=2^L 的序列x(n)(n=0,1,……,N-1),按N的奇偶分成两组,也就是说我们将一个N 点的DFT 分解成两个N/2 点的DFT,他们又重新组合成一个如下式所表达的N 点DFT:一般来说,输入被假定为连续的。

当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT。

我们称这样的RFFT 优化算法是包装算法:首先2N 点实数的连续输入称为“进包”。

其次N 点的FFT 被连续运行。

最后作为结果产生的N 点的合成输出是“打开”成为最初的与DFT 相符合的2N 点输入。

实验七快速傅立叶变换(FFT)算法的DSP实现(C语言)

实验七快速傅立叶变换(FFT)算法的DSP实现(C语言)

实验七快速傅⽴叶变换(FFT)算法的DSP实现(C语⾔)实验七快速傅⽴叶变换(FFT )算法的DSP 实现(C 语⾔)⼀、实验⽬的1.掌握FFT 算法的基本思想。

2.掌握利⽤ CCS 软件中的dsplib 库进⾏fft 算法的程序设计⼆、实验环境1.奔腾IV 计算机2.Code Composer Studio (CCS)软件三、实验原理1.FFT 算法的基本思想对于序列 x[n](0≤n ≤N-1),其频谱为:X(k)=DFT[x(n)]=∑-=10)(N n kn N Wn x (0≤n ≤N-1),其中:旋转因⼦---=-N j N e W π2在x[n]为复数序列的情况下,完全可以直接运算N 点DFT 需要(N-1)2次复数乘法和N (N-1)次复数加法。

因此,对于⼀些相当⼤的N 值来说,直接计算它的DFT 所需计算量很⼤。

FFT (快速傅⽴叶变换)的基本思想为:将原来的N 点序列最终分成分成两点为⼀组序列,并将这些序列的DFT 通过蝶形运算(见下图)组合起来得到原序列的DFT 。

N 点FFT 仅需 N N 2log 2次复数乘法和N N 2log 次复数加法。

图1 8点FFT 运算流图2. ccs 软件中dsplib (信号处理库)简介TMS320C54X 系列函数库(DSPLIB )是对C 语⾔编程可调⽤优化的DSP 函数库,它含有50个通⽤⽬的的信号处理程序,全部由汇编语⾔编写,并可由C 语⾔调⽤,⽅便C 语⾔与汇编语⾔混合编程。

这些程序⽤在计算强度⼤、执⾏速度重要的实时运算中。

通过使⽤这些程序,可以取得较⽤C 语⾔编写的相关程序快的多的运⾏速度,另外通过使⽤现成的程序可以使开发速度⼤⼤加快。

DSPLIB 可进⾏的运算有:FFT 运算、滤波与卷积运算、⾃适应滤波运算、相关运算、数学函数运算、三⾓函数运算、矩阵运算等。

dsplib 位于C:\ti\c5400\dsplib其⽤户⼿册为:TMS320C54x dsp library programer's reference.pdf三、实验内容1.信号x(n)是2个频率分别为1kHz 和2kHz 余弦信号的合成,取样频率为fs=16000Hz,采⽤FFT 对该信号进⾏频域分析。

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

《DSP原理及应用》大作业专业:电子信息工程姓名:学号:快速傅立叶变换(FFT)算法实验一、摘要基于CCS的DSP算法仿真实验设计简要介绍了CCS软件的主要功能, 利用CCS软件, 设计数字信号处理实验课程, 实现了FFT算法实验二、引言在当今的数字化时代背景下, DSP控制器以其可靠性高、扩充能力强、可维护性能好,可满足多种场合的应用需要,得到了国内外电子信息界和控制方案支持企业的青睐,被公认为控制实现技术的发展方向。

DSP已成为通信、计算机、消费类电子产品等领域的基础器件,被誉为信息社会革命的旗手。

三.实验原理1.FFT 的原理和参数生成公式:公式(1)FFT 运算公式FFT 并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。

由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。

每运算一个X(k)需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。

所以整个DFT运算总共需要4N^2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。

如此一来,计算时乘法次数和加法次数都是和N^2 成正比的,当N 很大时,运算量是可观的,因而需要改进对DFT 的算法减少运算速度。

根据傅立叶变换的对称性和周期性,我们可以将DFT 运算中有些项合并。

我们先设序列长度为N=2^L,L 为整数。

将N=2^L 的序列x(n)(n=0,1,……,N-1),按N的奇偶分成两组,也就是说我们将一个N 点的DFT 分解成两个N/2 点的DFT,他们又重新组合成一个如下式所表达的N 点DFT:一般来说,输入被假定为连续的。

当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT。

我们称这样的RFFT 优化算法是包装算法:首先2N 点实数的连续输入称为“进包”。

其次N 点的FFT 被连续运行。

最后作为结果产生的N 点的合成输出是“打开”成为最初的与DFT 相符合的2N 点输入。

使用这一思想,我们可以划分FFT 的大小,它有一半花费在包装输入O(N)的操作和打开输出上。

这样的RFFT 算法和一般的FFT 算法同样迅速,计算速度几乎都达到了两次DFT的连续输入。

下列一部分将描述更多的在TMS320C55x 上算法和运行的细节。

5.程序流程图:四.实验步骤(一)第一部分1.实验准备:-设置软件仿真模式。

-启动CCS。

2.打开工程。

浏览程序,工程目录为C:\ICETEK-VC5509-EDULab\Lab0503-FFT\FFT.pjt。

3.编译并下载程序。

4.打开观察窗口选择菜单View->Graph->Time/Frequency…5.清除显示在以上打开的窗口中单击鼠标右键,选择弹出式菜单中“Clear Display”功能。

6.设置断点在程序FFT.c 中有注释“break point”的语句上设置软件断点。

7.运行并观察结果。

⑴选择“Debug”菜单的“Animate”项,或按F12 键运行程序。

⑵观察“Test Wave”窗口中时域图形;⑶在“Test Wave”窗口中点击右键,选择属性,更改图形显示为FFT。

观察频域图形。

⑷观察“FFT”窗口中的由CCS 计算出的正弦波的FFT。

8.退出CCS。

9. 实验结果10.源代码(C语言)#include "myapp.h"#include "ICETEK-VC5509-EDU.h"#include "scancode.h"#include <math.h>#define PI 3.1415926#define SAMPLENUMBER 128void InitForFFT();void MakeWave();int INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER]; float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];main(){int i;InitForFFT();MakeWave();for ( i=0;i<SAMPLENUMBER;i++ ){fWaveR[i]=INPUT[i];fWaveI[i]=0.0f;w[i]=0.0f;}FFT(fWaveR,fWaveI);for ( i=0;i<SAMPLENUMBER;i++ ){DATA[i]=w[i];}while ( 1 ); // break point}void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]){int x0,x1,x2,x3,x4,x5,x6,xx;int i,j,k,b,p,L;float TR,TI,temp;for ( i=0;i<SAMPLENUMBER;i++ ){x0=x1=x2=x3=x4=x5=x6=0;x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01; x5=(i/32)&0x01; x6=(i/64)&0x01;xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;dataI[xx]=dataR[i];}for ( i=0;i<SAMPLENUMBER;i++ ){dataR[i]=dataI[i]; dataI[i]=0;}for ( L=1;L<=7;L++ ){ /* for(1) */b=1; i=L-1;while ( i>0 ){b=b*2; i--;} /* b= 2^(L-1) */for ( j=0;j<=b-1;j++ ) /* for (2) */{p=1; i=7-L;while ( i>0 ) /* p=pow(2,7-L)*j; */{p=p*2; i--;}p=p*j;for ( k=j;k<128;k=k+2*b ) /* for (3) */{TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];} /* END for (3) */} /* END for (2) */} /* END for (1) */for ( i=0;i<SAMPLENUMBER/2;i++ ){w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);}} /* END FFT */void InitForFFT(){int i;for ( i=0;i<SAMPLENUMBER;i++ ){sin_tab[i]=sin(PI*2*i/SAMPLENUMBER);cos_tab[i]=cos(PI*2*i/SAMPLENUMBER);}}void MakeWave(){int i;for ( i=0;i<SAMPLENUMBER;i++ ){INPUT[i]=sin(PI*2*i/SAMPLENUMBER*3)*1024;}}(二)第二部分1.程序参数说明extern void InitC5402(void)extern void OpenMcBSP(void)extern void CloseMcBSP(void)extern void READAD50(void)extern void WRITEAD50(void)void kfft(pr,pi,n,k,fr,fi,l,il):基2快速傅立叶变换子程序,n为变换点数,应满足2的整数次幂,k为幂次(正整数);数组x :输入信号数组,数据存放于地址为3000H~307FH存储器中,转为浮点型后,生成x数组,长度128;数组mo:FFT变换输出数组,长度128,浮点型,整型后,写入存储器中。

2.子程序流程图:初始化输入数组排序计算第一层中间值计算层数计算对应层步长计算计算各层中间结果计算层数=0?计算结果输出NY3.启动CCS 2.0,用Project/Open打开“ExpFFT01.pjt”工程文件双击“ExpFFT01.pjt”及“Source”可查看各源程序;加载“ExpFFT01.out”;4.在主程序中,k++处设置断点5.单击“Run”运行程序或按F5运行程序;程序将运行至断点处停止;6.用View / Graph / Time/Frequency打开一个图形观察窗口;7.单击“Animate”运行程序。

或按F10运行,调整观察窗口并观察变换结果。

五.实验总结这次DSP技术的实验是在我们学习了数字信号处理、C语言程序设计的先修课程和DSP技术,以及熟悉了CCS软件之后完成的。

实验一我们首先熟悉要用的各种软硬件环境,接下来的实验二和三我们完成了有限冲击响应滤波器(FIR)算法实验和快速傅里叶变换(FFT)算法实验。

这次实验我个人认为在以下几个方面收获最大:1.首先是实验前对自己过去几个学期已学理论知识的巩固加深、综合应用以及对实验相关资料的收集能力的提高。

2.实验中各个部分的要求要理解掌握,认真对待。

实验锻炼了我们认真的态度和严谨的精神。

3.当遇到问题和困难的时候,一定要保持冷静,慢慢检查,自己多思考、多尝试,才能获得最终的成功。

4.实验中遇到问题无法解决的时候要主动向同学请教,同时也要乐于帮助同学。

我认识到,在实验的过程中要互相信任、互相帮助。

通过实验,我们加深了相互间的友情。

总之,这次实验让我得到了很多平时理论学习中不能获得的收获,加深了我们对DSP特别是FIR滤波器和FFT算法的原理的理解,并且逐步开始应用于实际。

而在个别程序和分析方面存在的不足还需要在今后的学习中慢慢进步。

相关文档
最新文档