FFT算法实现实验报告
- 格式:docx
- 大小:148.06 KB
- 文档页数:7
快速傅立叶变换〔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做谱分析实验报告一、引言谱分析是信号处理中一个重要的技术手段,通过分析信号的频谱特性可以得到信号的频率、幅度等信息。
傅里叶变换是一种常用的谱分析方法,通过将信号变换到频域进行分析,可以得到信号的频谱信息。
FFT(快速傅里叶变换)是一种高效的计算傅里叶变换的算法,可以大幅减少计算复杂度。
本实验旨在通过使用FFT算法实现对信号的谱分析,并进一步了解信号的频谱特性。
二、实验目的1.理解傅里叶变换的原理和谱分析的方法;2.学习使用FFT算法对信号进行谱分析;3.通过实验掌握信号的频谱特性的分析方法。
三、实验原理傅里叶变换是将信号从时域转换到频域的一种数学变换方法,可以将一个非周期性信号分解为一系列正弦和余弦函数的叠加。
FFT是一种计算傅里叶变换的快速算法,能够在较短的时间内计算出信号的频谱。
在进行FFT谱分析时,首先需要对信号进行采样,然后利用FFT算法将采样后的信号转换到频域得到信号的频谱。
频谱可以用幅度谱和相位谱表示,其中幅度谱表示信号在不同频率下的幅度,相位谱表示信号在不同频率下的相位。
四、实验装置和材料1.计算机;2.信号发生器;3.数字示波器。
五、实验步骤1.连接信号发生器和示波器,通过信号发生器产生一个周期为1s的正弦信号,并将信号输入到示波器中进行显示;2.利用示波器对信号进行采样,得到采样信号;3.利用FFT算法对采样信号进行频谱分析,得到信号的频谱图。
六、实验结果[插入频谱图]从频谱图中可以清晰地看到信号在不同频率下的幅度和相位信息。
其中,频率为2Hz的分量的幅度最大,频率为5Hz的分量的幅度次之。
七、实验分析通过对信号的频谱分析,我们可以得到信号的频率分量和其对应的幅度和相位信息。
通过分析频谱图,我们可以得到信号中各个频率分量的相对强度。
在本实验中,我们可以看到频率为2Hz的分量的幅度最大,频率为5Hz的分量的幅度次之。
这说明信号中存在2Hz和5Hz的周期性成分,且2Hz的成分更为明显。
一、实验室名称:数字信号处理实验室 二、实验项目名称: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实验报告实验报告业:计算机科学与技术级: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)。
第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算法分析实验实验报告一、实验目的快速傅里叶变换(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 算法本身的近似处理。
信号实验一离散傅里叶变换及其快速算法一、实验目的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)成功。
fft上机实验报告FFT上机实验报告引言:傅里叶变换(Fourier Transform)是一种重要的数学工具,可以将一个函数在时域中的表示转换为频域中的表示。
在信号处理、图像处理、通信等领域中,傅里叶变换被广泛应用。
本文将介绍在上机实验中所学习到的快速傅里叶变换(Fast Fourier Transform,FFT)算法及其应用。
一、实验目的本次上机实验的主要目的是通过实际操作,深入了解FFT算法的原理和应用。
具体目标包括:掌握FFT算法的基本思想和计算步骤;理解FFT算法的时间复杂度和空间复杂度;学会使用MATLAB等工具进行FFT算法的实现和应用。
二、实验过程1. 理论知识准备在进行FFT算法的实验之前,我们首先需要了解傅里叶变换的基本原理和FFT 算法的推导过程。
傅里叶变换可以将一个连续函数表示为一系列正弦和余弦函数的叠加,从而揭示了信号的频域特性。
而FFT算法则是一种高效计算离散傅里叶变换(Discrete Fourier Transform,DFT)的方法,可以大大减少计算复杂度。
2. 实验准备在实验开始之前,我们需要准备一些实验所需的工具和数据。
首先,我们需要安装MATLAB软件,并确保其正常运行。
其次,我们需要准备一些信号数据,可以是声音、图像等。
本次实验中,我们选择了一段音频作为实验数据。
3. 实验步骤(1)导入数据首先,我们需要将实验数据导入到MATLAB中。
通过使用MATLAB提供的读取音频文件的函数,我们可以将音频数据读取为一个向量。
(2)进行FFT计算接下来,我们可以使用MATLAB提供的fft函数对导入的音频数据进行FFT计算。
FFT函数将返回一个复数数组,表示输入信号在频域中的表示。
(3)频域分析得到频域表示后,我们可以对信号进行频域分析。
通过计算频谱、功率谱等参数,我们可以了解信号的频率分布、能量分布等特性。
此外,还可以进行滤波、降噪等操作,以实现对信号的处理和改变。
数字信号处理实验报告 实验二 FFT 算法的MATLAB 实现(一)实验目的:理解离散傅立叶变换时信号分析与处理的一种重要变换,特别是FFT 在数字信号处理中的高效率应用。
(二)实验原理:1、有限长序列x(n)的DFT 的概念和公式:⎪⎪⎩⎪⎪⎨⎧-≤≤=-≤≤=∑∑-=--=101010)(1)(10)()(N k kn N N n kn N N n W k x N n x N k W n x k x)/2(N j N eW π-=2、FFT 算法调用格式是 X= fft(x) 或 X=fft(x,N)对前者,若x 的长度是2的整数次幂,则按该长度实现x 的快速变换,否则,实现的是慢速的非2的整数次幂的变换;对后者,N 应为2的整数次幂,若x 的长度小于N ,则补零,若超过N ,则舍弃N 以后的数据。
Ifft 的调用格式与之相同。
(三)实验内容1、题一:若x(n)=cos(n*pi/6)是一个N=12的有限序列,利用MATLAB 计算它的DFT 并画出图形。
源程序: clc; N=12; n=0:N-1; k=0:N-1;xn=cos(n*pi/6); W=exp(-j*2*pi/N); kn=n'*kXk=xn*(W.^kn) stem(n,Xk); xlabel('k'); ylabel('Xk'); grid on ;也可用FFT 算法直接得出结果,程序如下: clc; N=12; n=0:N-1;xn=cos(n*pi/6);Xk=fft(xn,N); stem(n,Xk); xlabel('k'); ylabel('Xk'); grid on ;实验结果:24681012kX k分析实验结果:用DFT 和用FFT 对序列进行运算,最后得到的结果相同。
但用快速傅立叶变换的运算速度可以快很多。
2、题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz 和120Hz 正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz ,通过FFT 来分析其信号频率成分,用MA TLAB 实现。
一、实验目的1. 理解傅立叶变换的基本原理和数学公式;2. 掌握傅立叶变换的快速算法(FFT);3. 熟悉傅立叶变换在图像处理、信号分析等领域的应用;4. 通过实验验证傅立叶变换的原理和效果。
二、实验原理傅立叶变换是一种重要的数学工具,用于将信号分解为其组成频率成分。
对于连续信号,使用连续傅立叶变换(CFT);对于离散信号,使用离散傅立叶变换(DFT)。
快速傅立叶变换(FFT)是DFT的一种高效算法,通过分治法将DFT的运算次数从O(N^2)降低到O(NlogN)。
傅立叶变换的数学公式如下:C(n) = (1/N) ∫[f(t) e^(-jωnt)]dt (CFT)C(k) = (1/N) Σ[f(n) e^(-j2πkn/N)] (DFT)其中,f(t)为原始信号,C(n)为傅立叶变换后的频谱,ωn为n点的频率,N为采样点数。
三、实验内容1. 实验环境:MATLAB软件2. 实验步骤:(1)生成一个简单的连续信号,如正弦波、方波等;(2)对连续信号进行采样,得到离散信号;(3)对离散信号进行傅立叶变换,得到频谱;(4)观察频谱,分析信号的频率成分;(5)对频谱进行滤波,提取信号的主要频率成分;(6)对滤波后的频谱进行逆傅立叶变换,得到重构信号;(7)比较重构信号与原始信号,分析傅立叶变换的效果。
四、实验结果与分析1. 生成正弦波信号,进行傅立叶变换,观察频谱,发现频谱只有一个峰值,对应于正弦波的频率;2. 对正弦波信号进行采样,得到离散信号,进行傅立叶变换,观察频谱,发现频谱只有一个峰值,对应于正弦波的频率;3. 对频谱进行滤波,提取信号的主要频率成分,发现滤波后的频谱只有一个峰值,与原始信号的频率一致;4. 对滤波后的频谱进行逆傅立叶变换,得到重构信号,观察重构信号与原始信号,发现两者基本一致,说明傅立叶变换可以有效地对信号进行分解和重构。
五、实验总结通过本次实验,我们掌握了傅立叶变换的基本原理和数学公式,熟悉了FFT算法,了解了傅立叶变换在图像处理、信号分析等领域的应用。
fft实验分析实验报告FFT实验分析实验报告一、引言傅里叶变换(Fourier Transform)是一种重要的信号分析工具,它能够将一个信号分解成不同频率的成分。
快速傅里叶变换(Fast Fourier Transform,FFT)是一种高效的计算傅里叶变换的算法。
本实验旨在通过实际操作,探究FFT在信号分析中的应用。
二、实验设备与方法1. 实验设备:本实验使用的设备包括示波器、信号发生器和计算机。
2. 实验方法:(1)将信号发生器的输出接入示波器的输入端。
(2)调节信号发生器的参数,如频率、振幅等,产生不同的信号。
(3)通过示波器观察信号的波形,并记录相关数据。
(4)将示波器与计算机通过USB接口连接,将示波器上的数据传输到计算机上。
(5)使用计算机上的软件进行FFT分析,得到信号的频谱信息。
三、实验结果与分析1. 实验一:正弦波信号的FFT分析(1)设置信号发生器的频率为1000Hz,振幅为5V,产生一段正弦波信号。
(2)通过示波器观察信号的波形,并记录相关数据。
(3)将示波器上的数据传输到计算机上,进行FFT分析。
实验结果显示,正弦波信号的频谱图呈现出单个峰值,且峰值位于1000Hz处。
这说明FFT能够准确地分析出信号的频率成分,并将其可视化展示。
2. 实验二:方波信号的FFT分析(1)设置信号发生器的频率为500Hz,振幅为5V,产生一段方波信号。
(2)通过示波器观察信号的波形,并记录相关数据。
(3)将示波器上的数据传输到计算机上,进行FFT分析。
实验结果显示,方波信号的频谱图呈现出多个峰值,且峰值位于500Hz的倍数处。
这说明方波信号由多个频率成分叠加而成,FFT能够将其分解出来,并显示出各个频率成分的强度。
3. 实验三:复杂信号的FFT分析(1)设置信号发生器的频率为100Hz和200Hz,振幅分别为3V和5V,产生一段复杂信号。
(2)通过示波器观察信号的波形,并记录相关数据。
(3)将示波器上的数据传输到计算机上,进行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. 实验总结通过本次实验,我们成功实现了快速傅里叶变换算法,并对不同信号进行了频谱分析。
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) end2.选择实验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变换后绘制频域序列,如下:由以上结果可知,自己编写的算法运行结果与系统自带算法一致,且可以对信号进行截断或补零后再做变换。
一.实验内容用C++实现快速傅立叶变换FFT二.实验目的:更好的了解快速傅立叶变换的实质,用代码进行实现增强自己的编程能力。
三.实现思想在实现过程中采用一行一行的处理进行傅立叶变化,在处理的过程中采用W记号,由于计算机没有虚数这个基本的数据类型,所以用2个函数double CWvltDoc::W_image(int a, int b, int c)和double CWvltDoc::W_real(int a, int b ,int c)来返回W的虚部和实部,用2个数组*transient_real和*transient_image 来记录再频域化的过程中一行中的原始数据频域化后的实部和与虚部和。
在计算完一行像素值后,用该像素点的对应能量=transient_real[]2+transient_image[]2来修改原始数据的蓝色灰度值(后面用蓝色灰度值进行灰度化)。
这样处理完一行中所有的像素点之后用可视化算子进行可视化lpData[y*biAlign+3*i]=255*log10(1+fabs(lpData[y*biAlign+3 *i]))/log10(1+max);四.具体代码voidCWvltDoc::OnFft(){LPBITMAPINFOHEADER lpBitmapInfoHeader =(LPBITMAPINFOHEADER)(m_pBitmap+14);LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;unsigned long biHeight = lpBitmapInfoHeader->biHeight;unsigned long biWidth = lpBitmapInfoHeader->biWidth;unsigned long biAlign = ( biWidth*3+3) /4 *4;unsigned long bmSize = biHeight * biAlign;if (m_pTransfered == NULL)m_pTransfered = (unsigned char*)malloc(bmSize);if (m_pTransfered == NULL)return ;// TODO: Add your command handler code hereint x, y, cur;for (y = 0; y < (int)biHeight; y++) //处理第y行{double *transient_real=new double[biWidth];double *transient_image=new double[biWidth];for(x=0;x<(int)biWidth; x++) //第y行第x个数{double real=0;double image=0;for(inti=0;i<(int)biWidth;i++){real+=W_real(x,i,(int)biWidth)*double(lpData[y*biAlign+3*i]);image+=W_image(x,i,(int)biWidth)*double(lpData[y*biAlign+3*i]);}transient_real[x]=real;transient_image[x]=image;}for(inti=0;i<(int)biWidth; i++) //修改第y行的值lpData[y*biAlign+3*i]=sqrt(pow(transient_real[i],2)+pow(transient_i mage[i],2));delete []transient_real; //释放内存delete []transient_image;}for (y = 0; y < (int)biHeight; y++) //可视化算法{int max=0;for (x = 0; x < (int)biWidth; x++) //找到该行最大的像素值{cur = y*biAlign+3*x;if(fabs(lpData[cur])>max) max=fabs(lpData[cur]);}for(inti=0;i<(int)biWidth;i++)lpData[y*biAlign+3*i]=255*log10(1+fabs(lpData[y*biAlign+3*i]))/log 10(1+max);//可视化算子}for (y = 0; y < (int)biHeight; y++) //进行灰度化{for (x = 0; x < (int)biWidth; x++){cur = y*biAlign+3*x; //current pixelm_pTransfered[cur] = lpData[cur];m_pTransfered[cur+1] = lpData[cur];m_pTransfered[cur+2] = lpData[cur];}}UpdateAllViews(NULL);}doubleCWvltDoc::W_real(int a, int b ,int c){return cos((-2*3.1415*a*b)/c);}doubleCWvltDoc::W_image(int a, int b, int c){return sin((-2*3.1415*a*b)/c);}五.实验过程中遇到的问题及解决办法在具体实现时,开始没有想到灰度化,最后出来的结果还是彩色的图像,并且有的像素点的能量值可能大于255单可视化后一直是白色的点,解决办法是用可视化算子进行可视化,在实现的过程中一直修改的都是像素点的第一个灰度值即蓝色的灰度值,在用可视化算子可视化之后,再用蓝色的分量值进行灰度化即让其他的红色绿色灰度值都等于蓝色灰度值。
fft实验报告傅里叶变换(Fast Fourier Transform, FFT)是一种重要的数学工具,广泛应用于信号处理、图像处理、通信系统等领域。
本文将从理论和实验两个方面,介绍FFT的原理、应用以及实验结果。
一、FFT的原理FFT是一种将时域信号转换为频域信号的算法,它基于傅里叶级数展开的思想。
傅里叶级数展开可以将一个周期信号表示为一系列正弦和余弦函数的叠加,而FFT则能够将非周期信号分解成一系列频率成分。
FFT的核心思想是将一个N点的离散信号变换为N/2个频率分量,其中前一半为正频率分量,后一半为负频率分量。
通过分别计算正频率和负频率的离散傅里叶变换(DFT),再利用对称性质进行合并,最终得到频域信号。
二、FFT的应用1. 信号处理:FFT在信号处理中有广泛应用,例如音频信号的频谱分析、滤波、降噪等。
通过将信号转换到频域,可以方便地分析信号的频率成分,从而实现各种信号处理算法。
2. 图像处理:FFT在图像处理中也有重要应用。
通过对图像进行二维FFT变换,可以将图像转换为频域表示,从而实现图像增强、去噪、压缩等操作。
例如,图像的频域滤波可以有效地去除图像中的噪声,提高图像的质量。
3. 通信系统:FFT在通信系统中也扮演着重要角色。
例如,在OFDM(正交频分复用)系统中,FFT用于将多个子载波的频域信号转换为时域信号进行传输。
这种技术能够提高信号的传输效率和抗干扰能力。
三、FFT实验结果为了验证FFT算法的正确性和效果,我们进行了一系列实验。
首先,我们使用MATLAB编程实现了FFT算法,并将其应用于音频信号处理。
通过对一段音频信号进行FFT变换,我们成功地获得了该信号的频谱图,并观察到不同频率成分的存在。
接下来,我们将FFT算法应用于图像处理。
我们选择了一张包含噪声的图像,并对其进行FFT变换。
通过对频域图像进行滤波操作,我们成功去除了图像中的噪声,并获得了清晰的图像。
最后,我们将FFT算法应用于通信系统中的OFDM技术。
实验报告一实验目的(1)掌握用DSP芯片对信号进行频谱分析的操作方法。
(2)了解DSP进行FFT运算的算法及程序。
二实验原理试验箱上的信源可以产生两个不同频率的正弦信号的叠加信号,将该信号用ADC进行采样,并将采集结果送入DSP芯片进行FFT运算,将结果以图的形式显示在电脑上,可分析出输入信号中有哪些频率分量。
实际试验前可运用Matlab进行理论分析,便于与分析实验结果。
从FFT结果图中计算信号的频率分量:N点FFT的结果是N个复数,假设采样频率为Fs(程序中为16000Hz),采样点数为N(程序中为128),做FFT之后,某一点n(n从0开始)表示的频率为:Fn=n*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N)。
程序运行后,第48个点附近FFT的模值不为0,对应频率为48*16000/128=6000,用该模值除以128/2,即64,约为1,就是叠加信号中该频率成份的幅值。
Matlab程序代码:close all;Adc = 0; % 直流分量幅度A1 = 1; %频率F1信号的幅度A2 = 1; % 频率F2信号的幅度F1 = 100; % 信号1频率(Hz)F2 = 6000; % 信号2频率(Hz)P1 = 0; % 信号1相位(度)P2 = 0; % 信号2相位(度)Fs = 16000; % 采样频率(Hz)N = 128; %采样点数t = [ 0 : 1/Fs : N/Fs ]; %采样时刻%原始叠加信号S = Adc + A1*sin(2*pi*F1*t + pi*P1/180) + A2*sin(2*pi*F2*t + pi*P2/180);%显示原始信号plot(S);title('原始信号');figure;Y = fft( S, N ); %做FFT变换A yy = ( abs( Y ) ); %取模plot( A yy(1:N) ); %显示原始的FFT模值结果title( 'FFT 模值' );figure;A yy = A yy/(N/2); %换算成实际的幅度A yy(1)=A yy(1)/2; % 直流分量的幅值单独处理F=([1:N]-1)*Fs/N; %换算成实际的频率值plot(F(1:N/2),A yy(1:N/2)); %显示换算后的FFT模值结果title('幅度-频率曲线图');三实验结果及分析利用示波器观察信源信号调整为:信号1频率500Hz,信号2频率5010Hz,峰峰值均为5V。
实验三用FFT对信号作频谱分析_实验报告一、实验目的1.理解离散傅里叶变换(FFT)的原理和应用;2.学会使用FFT对信号进行频谱分析;3.掌握频谱分析的基本方法和实验操作。
二、实验原理离散傅里叶变换(FFT)是一种用来将时域信号转换为频域信号的数学工具。
其基本原理是将连续时间信号进行离散化,然后通过对离散信号进行傅里叶变换得到离散频域信号。
傅里叶变换(Fourier Transform)是一种将时域信号转换为频域信号的方法。
在信号处理中,经常需要对信号的频谱进行分析,以获取信号的频率分量信息。
傅里叶变换提供了一种数学方法,可以将时域信号转换为频域信号,实现频谱分析。
在频谱分析中,我们常常使用快速傅里叶变换(Fast Fourier Transform,FFT)算法进行离散信号的频谱计算。
FFT算法可以高效地计算出离散信号的频谱,由于计算复杂度低,广泛应用于信号处理和频谱分析的领域。
频谱分析的流程一般如下:1.采集或生成待分析的信号;2.对信号进行采样;3.对采样得到的信号进行窗函数处理,以改善频谱的分辨率和抑制信号泄漏;4.使用FFT算法对窗函数处理得到的信号进行傅里叶变换;5.对傅里叶变换得到的频谱进行幅度谱和相位谱分析;6.对频谱进行解释和分析。
三、实验内容实验所需材料和软件及设备:1.信号发生器或任意波形发生器;2.数字示波器;3.计算机。
实验步骤:1.连接信号发生器(或任意波形发生器)和示波器,通过信号发生器发送一个稳定的正弦波信号;2.调节信号频率、幅度和偏置,得到不同的信号;3.使用数字示波器对信号进行采样,得到离散时间信号;4.对采样得到的信号进行窗函数处理;5.对窗函数处理得到的信号进行FFT计算,得到频谱;6.使用软件将频谱进行幅度谱和相位谱的分析和显示。
四、实验结果与分析1.信号频谱分析结果如下图所示:(插入实验结果图)从频谱图中可以看出,信号主要集中在一些频率上,其他频率基本没有,表明信号主要由该频率成分组成。
fft实验分析实验报告
实验报告主要包括实验目的、实验原理、实验步骤、实验结果分析和结论等内容。
以下是一个关于FFT实验分析的实验报告示例:
实验报告
实验目的:
1. 了解傅里叶变换(FFT)的基本原理和应用;
2. 学会使用FFT算法对信号进行频谱分析。
实验设备和材料:
1. 计算机;
2. 音频文件或实时采集的音频信号。
实验原理:
傅里叶变换是一种将时域信号转换为频域信号的数学变换方法,可以将信号表示为不同频率的复指数函数的叠加。
而FFT(快速傅里叶变换)是一种高效的傅里叶变换算法,可以快速计算信号的频谱。
实验步骤:
1. 准备音频文件或实时采集的音频信号;
2. 将音频信号输入计算机中的FFT算法进行处理,得到信号的频谱;
3. 对频谱进行可视化表示,如绘制频谱图;
4. 根据频谱图分析信号的频率分布和能量分布等特征。
实验结果分析:
通过实验,我们得到了音频信号的频谱图。
根据频谱图可以得到信号的频率分布情况,即哪些频率的分量相对强,哪些频率的分量相对弱。
频谱图还可以展示信号的能量分
布情况,能量较高的频率分量对应着声音的主要特征。
结论:
通过本次实验,我们学习了傅里叶变换(FFT)的基本原理和应用,并掌握了使用FFT 算法进行信号频谱分析的方法。
频谱分析是一种常用的信号处理方法,可以帮助我们
了解信号的频率特征和能量分布情况,对于音频、图像等领域的信号处理具有重要的
应用价值。
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。