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实现信号频谱分析

0
2
4
6
4
2
0
-2
-4
-6
-4
-20246四、试验环节
4. 试验内容2旳程序运营成果如下图所示:
60
30
40
20
20
10
0
0
-10 -5
0
5
10
-40 -20
0
20 40
30
80
60 20
40 10
20
0
-40 -20
0
20 40
0
-40 -20
0
20 40
四、试验环节
|X(k)| x(n)
5. 试验内容 3旳程序运营成果如下图所示:
fft 计算迅速离散傅立叶变换
fftshift
ifft
调整fft函数旳输出顺序,将零频 位置移到频谱旳中心
计算离散傅立叶反变换
fft函数:调用方式如下
y=fft(x):计算信号x旳迅速傅立叶变换y。当x旳长度为 2旳幂时,用基2算法,不然采用较慢旳分裂基算法。
y=fft(x,n):计算n点FFT。当length(x)>n时,截断x,不 然补零。
【例2-11】产生一种正弦信号频率为60Hz,并用fft函数 计算并绘出其幅度谱。
fftshift函数:调用方式如下 y=fftshift(x):假如x为向量,fftshift(x)直接将x旳左右两 部分互换;假如x为矩阵(多通道信号),将x旳左上、右 下和右上、左下四个部分两两互换。 【例2-12】产生一种正弦信号频率为60Hz,采样率为1000Hz, 用fftshift将其零频位置搬到频谱中心。
以上就是按时间抽取旳迅速傅立叶变换
实验二用FFT做谱分析实验报告

实验二用FFT做谱分析实验报告一、引言谱分析是信号处理中一个重要的技术手段,通过分析信号的频谱特性可以得到信号的频率、幅度等信息。
傅里叶变换是一种常用的谱分析方法,通过将信号变换到频域进行分析,可以得到信号的频谱信息。
FFT(快速傅里叶变换)是一种高效的计算傅里叶变换的算法,可以大幅减少计算复杂度。
本实验旨在通过使用FFT算法实现对信号的谱分析,并进一步了解信号的频谱特性。
二、实验目的1.理解傅里叶变换的原理和谱分析的方法;2.学习使用FFT算法对信号进行谱分析;3.通过实验掌握信号的频谱特性的分析方法。
三、实验原理傅里叶变换是将信号从时域转换到频域的一种数学变换方法,可以将一个非周期性信号分解为一系列正弦和余弦函数的叠加。
FFT是一种计算傅里叶变换的快速算法,能够在较短的时间内计算出信号的频谱。
在进行FFT谱分析时,首先需要对信号进行采样,然后利用FFT算法将采样后的信号转换到频域得到信号的频谱。
频谱可以用幅度谱和相位谱表示,其中幅度谱表示信号在不同频率下的幅度,相位谱表示信号在不同频率下的相位。
四、实验装置和材料1.计算机;2.信号发生器;3.数字示波器。
五、实验步骤1.连接信号发生器和示波器,通过信号发生器产生一个周期为1s的正弦信号,并将信号输入到示波器中进行显示;2.利用示波器对信号进行采样,得到采样信号;3.利用FFT算法对采样信号进行频谱分析,得到信号的频谱图。
六、实验结果[插入频谱图]从频谱图中可以清晰地看到信号在不同频率下的幅度和相位信息。
其中,频率为2Hz的分量的幅度最大,频率为5Hz的分量的幅度次之。
七、实验分析通过对信号的频谱分析,我们可以得到信号的频率分量和其对应的幅度和相位信息。
通过分析频谱图,我们可以得到信号中各个频率分量的相对强度。
在本实验中,我们可以看到频率为2Hz的分量的幅度最大,频率为5Hz的分量的幅度次之。
这说明信号中存在2Hz和5Hz的周期性成分,且2Hz的成分更为明显。
实验2-FFT的实现

一、实验室名称:数字信号处理实验室 二、实验项目名称:FFT 的实现 三、实验原理:一.FFT 算法思想:1.DFT 的定义:对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT )求得。
DFT 的定义为:21[][]N jnk Nn X k x n eπ--==∑,k=0,1,…N-1通常令2jNN eW π-=,称为旋转因子。
2.直接计算DFT 的问题及FFT 的基本思想:由DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需要(N-1)2次复数乘法和N (N-1)次加法。
因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。
FFT 的基本思想在于,将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。
例如,若N 为偶数,将原有的N 点序列分成两个(N/2)点序列,那么计算N 点DFT 将只需要约[(N/2)2 ·2]=N 2/2次复数乘法。
即比直接计算少作一半乘法。
因子(N/2)2表示直接计算(N/2)点DFT 所需要的乘法次数,而乘数2代表必须完成两个DFT 。
上述处理方法可以反复使用,即(N/2)点的DFT 计算也可以化成两个(N/4)点的DFT (假定N/2为偶数),从而又少作一半的乘法。
这样一级一级的划分下去一直到最后就划分成两点的FFT 运算的情况。
3.基2按时间抽取(DIT )的FFT 算法思想:设序列长度为2L N =,L 为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。
将长度为2L N =的序列[](0,1,...,1)x n n N =-,先按n 的奇偶分成两组:12[2][][21][]x r x r x r x r =+=,r=0,1,…,N/2-1DFT 化为:1/21/212(21)0/21/21221200/21/211/22/2[]{[]}[][2][21][][][][]N N N nk rk r kNNNn r r N N rk k rk NNN r r N N rk k rk N NN r r X k DFT x n x n Wx r Wx r W x r W Wx r W x r WWx r W ---+===--==--=====++=+=+∑∑∑∑∑∑∑上式中利用了旋转因子的可约性,即:2/2rkrk NN W W =。
FFT实验报告

FFT实验报告实验报告业:计算机科学与技术级:309名号:71.算法原理快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅变换的算法进行改进获得的。
它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅变换,可以说是进了一大步。
设_(n)为N项的复数序列,由DFT变换,任(m)的计算都需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出N项复数序列的_(m),即N点DFT变换大约就需要N^2次运算。
当N=1024点甚至更多的时候,需要N2=次运算.在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)^2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成N+2(N/2)^2=N+N^2/2。
继续上面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。
如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog(2)(N)次的运算,N在1024点时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是FFT的优越性。
2.问题描述乘法如果直接像手工算一样做,复杂度是O(nn)的.FFT乘法是将数看成多项式:P1(_)=a0+a1_+a2_^2+...+an_^n,如果取ak在0到9之间,且_取10,那它就表示一个十进制数,如果再用另外一个多项式P2(_)与它相乘,那结果和它所表示的数相乘是一样的数值。
多项式乘法其实质是做两个系数序列的卷积,而FFT正是对这样的卷积,做时域到频域的变化,FFT的本质也是DFT,离散傅变换,因为有卷积定理:如果h(t)=_(t)(y(t),且H(s)=DFT[h(t)],_(s)=DFT[_(t)],Y(s)=DFT[y(t)],那么有,H(s)=_(s)Y(s)3.算法及其复杂度分析h(t)=IFFT[FFT[_(t)]FFT[y(t)]]IFFT是快速傅反变换,可以转换成FFT,所以一个乘法的时间是3个FFT 加一个线性乘积运算,因此也是O(nlogn)。
傅里叶综合实验实验报告(3篇)

第1篇一、实验目的1. 深入理解傅里叶变换的基本原理及其在信号处理中的应用。
2. 掌握使用傅里叶变换分析信号的方法,包括连续时间信号和离散时间信号。
3. 通过实验验证傅里叶变换的性质,如线性、时移、频移、频谱分析等。
4. 了解傅里叶变换在光学、通信等领域的应用。
二、实验原理傅里叶变换是将一个信号分解为不同频率成分的过程。
根据信号是连续的还是离散的,傅里叶变换分为连续时间傅里叶变换(CTFT)和离散时间傅里叶变换(DTFT)。
本实验主要涉及CTFT和DTFT。
1. 连续时间傅里叶变换(CTFT):将连续时间信号f(t)分解为无限多个正弦和余弦波的和,其数学表达式为:F(ω) = ∫ f(t) e^(-jωt) dt其中,ω为角频率,F(ω)为信号的频谱。
2. 离散时间傅里叶变换(DTFT):将离散时间信号f(n)分解为有限多个正弦和余弦波的和,其数学表达式为:X(k) = Σ f(n) e^(-j2πkn/N)其中,N为离散时间信号长度,X(k)为信号的频谱。
三、实验仪器与设备1. 实验台:信号发生器、示波器、信号分析仪、信号处理软件等。
2. 光学仪器:傅里叶变换光学系统、傅里叶变换光学元件等。
四、实验内容与步骤1. 连续时间信号傅里叶变换实验:1.1 产生一个连续时间信号,如方波信号、三角波信号等。
1.2 使用信号发生器产生该信号,并通过示波器观察信号波形。
1.3 使用信号分析仪对信号进行傅里叶变换,得到信号的频谱。
1.4 分析信号的频谱,观察不同频率成分的幅度和相位。
2. 离散时间信号傅里叶变换实验:2.1 产生一个离散时间信号,如序列信号、数字信号等。
2.2 使用信号处理软件对信号进行离散化处理,得到离散时间信号。
2.3 使用信号处理软件对离散时间信号进行傅里叶变换,得到信号的频谱。
2.4 分析信号的频谱,观察不同频率成分的幅度和相位。
3. 傅里叶变换性质实验:3.1 验证傅里叶变换的线性性质,通过叠加不同信号,观察频谱的变化。
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 算法本身的近似处理。
信号实验报告( 离散傅里叶变换及其快速算法及IIR数字滤波器的设计)

信号实验一离散傅里叶变换及其快速算法一、实验目的1、掌握计算序列的离散傅里叶变换(FFT)的方法;2、掌握实现时间抽取快速傅里叶变换(FFT)编程方法;3、加深对DFT与序列的傅里叶变换和Z变换之间的关系的理解;4、复习复数序列的运算方法。
二、程序设计框图1.码位倒置程序框图2.蝶形图运算程序框图三、实验程序实验程序的源代码如下:#include"math.h"#include"stdio.h"/*------------------------------------------------------------------------------------------子函数部分------------------------------------------------------------------------------------------*/ void swap(float *a,float *b)//交换变量子函数{float T;T=*a;*a=*b;*b=T;}void fft (float A [],float B [],unsigned M)//数组A为序列的实部, 数组B为序列的虚部{unsigned long N,I,J,K,L,LE,LE1,P,Q,R;float Wr,Wi,W1r,W1i,WTr,WTi,theta,Tr,Ti;N=1<<M;J=0;for(I=0;I<N-1;I++){if(J>I){swap(&A [I],&A [J]);swap(&B [I],&B [J]);}K=N>>1;while(K>=2&&J>=K){J-=K;K>>=1;}J+=K;}for(L=1;L<=M;L++){LE=1<<L;LE1=LE/2;Wr=1.0;Wi=0.0;theta=(-1)*3.1415926536/LE1;W1r=cos (theta);W1i=sin (theta);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;}WTr=Wr;WTi=Wi;Wr=WTr*W1r-WTi*W1i;Wi=WTr*W1i+WTi*W1r;}}return;}/*------------------------------------------------------------------------------------------主函数部分------------------------------------------------------------------------------------------*/ void main(){float A[20],B[20];char t1,t2,file_name[20];int M,N,i,iiff;FILE *fp;/*************************************数据读取部分************************************/ printf("请输入文件名:");//输入数据文件名scanf("%s",file_name);printf("FFT变换还是IFFT变换?(FFT:1,IFFT:-1):");//输入变换方式, 1为FFT, -1为IFFTscanf("%d",&iiff);while(iiff!=1&&iiff!=-1)//检错: 检验上一步的输入是否有错, 有错则重新输入{printf("输入错误, 请重新输入! ");printf("FFT or IFFT?(FFT:1,IFFT:-1):");scanf("%d",&iiff);}fp=fopen(file_name,"r");//打开文件并读入数据fscanf(fp,"%d",&M);N=pow(2,M);//计算序列总数for(i=0;i<N;i++)//读取文件中的数据{fscanf(fp,"%f%c%c%f",&A[i],&t1,&t2,&B[i]);if(iiff==-1)//根据FFT或IFFT修正BB[i]=B[i]*-1;if(t2!='j')//检错: 检验读取格式是否有错{printf("输入格式错误\n");break;}if(t1=='+')//判断虚部的正负号B[i]=B[i];else if(t1=='-')B[i]=-B[i];}/****************************************变换部分****************************************/ fft(A,B,M);//FFT变换/**************************************数据输出部分**************************************/ fp=fopen("fft_result.txt","w"); //输出结果if(iiff==-1)fprintf(fp,"IFFT变换的输出结果是: \n");elsefprintf(fp,"FFT变换的输出结果是: \n");for(i=0;i<N;i++){if(iiff==-1) //根据FFT或IFFT修正B{B[i]=B[i]*-1/N;A[i]=A[i]/N;}if(B[i]>=0)//修正虚部的输出格式fprintf(fp,"%f+j%f\n",A[i],B[i]);else if(B[i]<0)fprintf(fp,"%f-j%f\n",A[i],-B[i]);else if(B[i]==0)fprintf(fp,"%f\n",A[i]);}fclose(fp);}四、程序运行结果检验(1) 1.对序列进行FFT变换输入文件fft_input.txt:21+j02+j0-1+j04+j0控制台输入:请输入文件名: fft_input.txtFFT变换还是IFFT变换?(FFT:1,IFFT:-1): 1输出文件fft_result.txt:FFT变换的输出结果是:6.00000+j0.000002.00000+j2.00000-6.00000+j0.000002.00000+j-2.00000运行结果分析:程序运行输出结果与计算结果相同, 表示傅里叶正变换(FFT)成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FFT算法实现实验报告
辛旸 PB10210006
实验目的
1、加深对快速傅里叶变换的理解。
2、掌握FFT 算法及其程序的编写。
3、掌握算法性能评测的方法。
实验内容
1.编写自己的FFT算法:
代码如下:
function [ X ] = Sampling( x,N )
%myFFT 实现FFT时域取样算法
% 输出:生成FFT序列X(k),输入:欲变换序列x(n),FFT变换长度N(可缺省)
(1) if ~exist('N','var'); %检查是否有变换长度N输入
(2) N=length(x); %若无,则令N等于序列长度
(3) end
(4) if N<length(x); %如果N小于序列长度,则对序列进行截短
(5) x=x(:,1:N);
(6) else
(7) x=[x,zeros(1,N-length(x))]; %如果N大于序列长度,对序列补零进行延长
(8) end;
(9) for i=1:1:length(x)/2+1; %判断N是2的多少次方
(10) if 2^i>=length(x); %若N不是2的整数幂
(11) N=2^i; %增大N为2的整数幂
(12) break;
(13) end
(14) end
(15) x=[x,zeros(1,N-length(x))]; %确保要变换的序列长度为2^i
(16) k1=zeros(1,N);
(17) X=zeros(1,N);
(18) w=zeros(1,N);
(19) for m=0:1:N-1; %确定反序序列k1和正序序列k的关系
(20) k=m;
(21) for n=i-1:-1:0; %从高位开始依次将各位移至反序位
(22) k1(m+1)=k1(m+1)+fix(k/(2^n))*(2^(i-1-n));
(23) k=rem(k,2^n);
(24) end;
(25) end
(26) for l=1:1:N;
(27) X(k1(l)+1)=x(l); %生成反序序列
(28) w(l)=exp(-1i*2*pi/N*(l-1)); %生成旋转因子
(29) end
(30) for l=0:1:i-1; %控制FFT运算级数
(31) for m=1:1:N; %每一级中有N/2个蝶形运算
(32) if rem((m-1),2^(l+1))<2^l; %找到蝶形运算的上半部分(33) b=X(m)+X(m+2^l)*w(2^(i-1-l)*rem((m-1),2^l)+1);
%将结果暂存至b
(34)
X(m+2^l)=a(m)-X(m+2^l)*w(2^(i-1-l)*rem((m-1),2^l)+1);
(35) X(m)=b; %实现原位运算
(36) end
(37) end
(38) end
2.选择实验1中的典型信号序列验证算法的有效性:
为方便比较两个算法,编写了myCompare函数计算两种算法的运行时间,并绘制频谱曲线
代码如下:
function [ t1,t2,e ] = myCompare( x,N )
%myCompare函数:比较自己编写的算法与系统自带算法的差异
% 输入:与变换信号序列x(n)和欲变换长度N
% 输出:自己编写的函数的执行时间t1,系统自带函数的执行时间t2,两者计算序列的差异平方和e tic;
X1=myFFT(x,N);
t1=toc;
tic;
X2=fft(x,N);
t2=toc;
subplot(1,2,1);plot(abs(X1));xlabel('k');ylabel('X(k');title('ÓÃ×Ô¼º±àдµÄº¯ÊýµÃµ½µÄ±ä»»ÐòÁÐÆµÆ×');
subplot(1,2,2);plot(abs(X2));xlabel('k');ylabel('X(k');title('ϵͳ×Ô´øFFTº¯ÊýµÃµ½µÄ±ä»»ÐòÁÐÆµÆ×');
e=sum((X1-X2).^2);
end
对理想采样信号A=444.128,α=50*2^(1/2)*π,Ω=50*2^(1/2)*π,T=1/1000,序列长度50,用自己编写的FFT算法和系统自带算法做64点FFT变换后绘制频域序列,如下:
对高斯序列,p=8,q=8,序列长度16,用自己编写的FFT算法和系统自带算法做16点FFT变换后绘制频域序列,如下:
对衰减正弦序列α=0.01,f=0.05,序列长度100,用自己编写的FFT算法和系统自带算法做128点FFT变换后绘制频域序列,如下:
由以上结果可知,自己编写的算法运行结果与系统自带算法一致,且可以对信号进行截断或补零后再做变换。
3.对所编制FFT算法进行性能评估:
与自己编写的DFT算法进行性能比较:
对N点序列进行DFT变换需要N²/2次复乘,而对N点序列做基2-FFT只需N/2*log2(N)次复乘,因此运算量减少了很多,且随着序列长度增加,运算量差异变大。
与系统自带FFT算法进行性能比较:
由于系统自带FFT函数用C语言实现,无法查看源代码,只知道效率更高,而且在计算任意点的DFT(不指定变换长度N)时,系统自带函数无需采取补零操作,而自己编写的函数会先补零再变换,改变了频域取样密度,会得到与系统自
带函数不同的结果。
比较自己编写的DFT算法、自己编写的FFT算法和系统自带算法三者运算时间,得到下表:
由此绘制曲线如图:
由比较结果可知,虽然运算时间曲线和理想曲线不完全相同,但三种算法的相对运算时间与理论预期一致。
实验总结及个人结论:
从对实验的比较结果中可知,自己编写的FFT算法有效且比自己编写的DFT算法快很多,但却始终比系统自带的算法慢,一方面是因为系统自带算法实现效率高,另一方面,在观察了自己编写的算法中各步执行时间后,发现函数用在生成反序序列的时间和实际进行FFT运算的时间相当,相当于多用了一倍的时间。
另外,对任意长序列,自己编写的FFT算法只能补零后计算,而不能像系统自带函数一样算出实际的N点DFT。