文章目录

  • 一,运算量的比较
  • 二,程序运算时间比较

一,运算量的比较

N点DFT共需要N^ 2次复数乘法和N(N-1)次复数加法,当N很大时,计算量很大。
N点FFT, N = 2 M N=2^M N=2M,进行M次分解,构成了从x(n)到X(k)的M级迭代计算,每级由N/2个蝶形运算组成,完成一个蝶形计算需一次乘法和两次复数加法。
M级运算总的复数乘次数为:
C M = N / 2 ∗ M = N / 2 ∗ l o g 2 N C_M=N/2*M=N/2*log_2N CM​=N/2∗M=N/2∗log2​N
复数加次数为:
C A = N ∗ M = N ∗ l o g 2 N C_A=N*M=N*log_2N CA​=N∗M=N∗log2​N
当N远大于1时,FFT的运算量远小于DFT。
例如当 N = 2 10 N=2^{10} N=210=1024时
N 2 N 2 l o g 2 N = 1048576 5120 = 204.8 \frac{N^2}{\frac{N}{2}log_2N}=\frac{1048576}{5120}=204.8 2N​log2​NN2​=51201048576​=204.8
这样就使运算效率提高200多倍。

二,程序运算时间比较

首先计算进行DFT所需时间,程序如下:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<time.h>#define pi 3.1415926535int N;
typedef struct
{double real,imag;
} complex;//复数结构体,定义实部,虚部complex dft_out[9000];//用于存储dft计算结果
complex dft_mid[9000];//用于存储实部和虚部计算的值
double Amplitude[9000];//幅值
int main(int argc, char *argv[])
{N = atoi(argv[1]);  //命令行参数argv[1]为输入的N值,可以通过输入,控制N的值int n,k;double f;double time_start,time_end;time_start=clock();   //开始计时for(k=0; k<N; k++){for(n=0; n<N; n++){f=0.6*sin(2*pi*500*n)+0.6*sin(2*pi*50*n);//输入函数dft_mid[n].real=f*cos(2*pi*n*k/N);//实部dft_mid[n].imag=f*sin(2*pi*n*k/N);//虚部dft_out[k].real+=dft_mid[n].real;//对每一个点的实部求和dft_out[k].imag+=dft_mid[n].imag;//对每一个点的虚部求和}Amplitude[k]=sqrt(dft_out[k].real*dft_out[k].real+dft_out[k].imag*dft_out[k].imag);//计算幅值printf("%d  %f\n",k,Amplitude[k]);//打印计算结果}time_end=clock();    //计时结束printf("进行DFT运算时间为:%f ms\n",time_end-time_start);  //输出所需时间}

运行结果:

FFT计算时间,代码如下:

#include <stdio.h>
#include <math.h>
#include <E:\tcc\daima\fft\kfft.c>
#include<time.h>#define PI 3.1415926535 //定义宏变量PIint main()
{ int i,j;double time_start,time_end;//定义计时的变量double pr[64],pi[64],fr[64],fi[64],t[64];//pr表示采样数据的实部,pi表示采样数据的虚部,fr表示离散傅里叶变换结果的实部,fi表示离散傅里叶变换结果的虚部。for (i=0; i<=63; i++)  //生成输入信号{ pr[i]=0.6*sin(2*PI*500*i)+0.6*sin(2*PI*50*i); pi[i]=0.0; //依次将值赋值给pr,pi赋值为0}time_start=clock();   //开始计时kfft(pr,pi,64,6,fr,fi,0,1);  //调用FFT函数time_end=clock();    //计时结束for (i=0; i<64; i++){ printf("%d\t%lf\n",i,pr[i]); //输出结果}printf("进行FFT运算时间为:%.10f ms\n",time_end-time_start);  //输出所需时间
}

运行结果:

由结果可知,进行DFT运算时间远大于进行FFT所需时间,FFT运算效率明显高于DFT。

DFT与FFT运算效率的比较相关推荐

  1. DSP处理FFT和DFT时需要运算的次数及计算公式

    DSP处理FFT和DFT时需要运算的次数及计算公式 复数运算次数分析: DFT : 乘法复数运算=N2 加法复数运算=N(N-1) FFT : 以基2进行运算 乘法复数运算=N/2 * log2N 加 ...

  2. DFS、DTFT、DFT、 FFT的定义和区别

    1.DFT DTFT FFT有啥区别 对于一般的周期信号可以用一系列(有限个或者无穷多了)正弦波的叠加来表示.这些正弦波的频率都是某一个特定频率的倍数如5hz.2*5hz.3*5hz--(其中的5hz ...

  3. FFT运算的加深理解——FFT的增益

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FFT运算的加深理解--FFT的增益 前言 FFT的增益 前言 FFT的一些概念一直迷惑了好多年,包括增益.频谱泄露.加窗.补零.栅栏 ...

  4. 离散傅里叶变换DFT与FFT,MATLAB的FFT函数使用(原创)——如何使用fft()绘制出真正的频谱图像

    以前一直对MATLAB中fft()函数的使用一直存在疑惑,为什么要加一 些参数,并且如何确定这些参数,也查了许多资料,但很多都感觉只是 表面一说根本没有讲清其本质.但随着学习的推进,慢慢有所领悟,所 ...

  5. DTFT、DFS、DFT和FFT的关系 离散数字信号处理 数字角频率和模拟角频率

    学信号最烦的便是数字信号处理,感觉很一大部分的人都在DTFT和DFT和FFT之间迷茫,下面我就大概谈一下我自己对它们的看法. 下面我就从第一步大概给大家介绍一下它们的变化过程. 首先是DTFT: (1 ...

  6. 信号处理:<三> DFT和FFT

    信号处理:<一> DFT和FFT 1. DFT数学表达式 2 .WNknW_N^{kn}WNkn​的理解 2 .FFT的理解 2.1 基于时间的傅里叶变化 3.编程思想 3.1 原位计算 ...

  7. matlab fft实现dft,matlab实现dft和fft

    对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 设计要求 利用 Matlab 或者 C 语言设计 DFT 和 FFT 程序,比较两种频谱分析方法的 计算速度,并与...... DF ...

  8. stm32f4进行fft运算

    0.前言 我是个小菜鸡,最近需要用fft,就学习使用了一下,感觉还挺好玩的,文章内容可能有描述不准确或者错误的地方,希望读者带着辩证的眼光阅读,如果方便指出错误,那就很感谢了. 本文主要关注fft实际 ...

  9. 基于 NXP iMX8X 测试 GPU FFT 运算

    By Toradex胡珊逢 1). 简介 伴随着 4G 网络的大范围覆盖,已经即将到来的 5G 网络,边缘计算越来越多地开始进入人们的视野.相比于云计算的云端集中处理,边缘计算能够就地进行复杂数据的计 ...

最新文章

  1. 五大洲30国在华留学生千年古城欢度中国年
  2. 程序员,当你写程序写累了怎么办。
  3. [css] 鼠标事件css的:hover和js的mouseover有什么区别?
  4. 【CodeForces - 246D】Colorful Graph (暴力,图,存边,STL)
  5. 6-6-3:STL之map和set——multiset和multimap及set和map在oj题中的用处
  6. PyCharm配置django环境
  7. java怎样输出闰年,Java 小日历格式输出 闰年计算
  8. FAL风控培训|如何用一张图了解所有特征工程的套路
  9. LeetCode经典算法精解-字符串编辑距离
  10. SPEOS—光学产品设计及仿真工具
  11. ns3学习之初识ns3
  12. lisp语言画地物符号_地形图中的地物符号说明
  13. linux设置ipsan_linux下ipsan的配置
  14. 【JAVA SE基础篇】30.抽象与接口
  15. MacBook Pro 完美分屏
  16. grad-cam原理
  17. 外接显示器无法识别 win11
  18. sql server线程等待信息
  19. 【MySQL 数据库】MySQL 的对库的操作及其数据类型
  20. Module3:Alice in Wonderland

热门文章

  1. 【C语言】用函数实现求两个自然数的最大公约数
  2. 88.计算500以内最大的10个能被13或17整除的自然数之和。
  3. 自费访学|药企经理赴美国新常春藤名校访问交流
  4. 外商独资企业必须有监事吗
  5. 资深老师傅讲解六轴机器人机械臂的特征和优缺点!
  6. 【2023年Mathorcup杯数学建模竞赛C题】电商物流网络包裹应急调运与结构优化--完整作品分享
  7. Unity查找游戏对象
  8. CSS 高级属性之 text-shadow 详解
  9. Java时间日期格式转换Date转String和String转Date
  10. 每次电脑开机弹出c语言框,【xp开机弹出documents】开机跳出documents_开机弹出c documents-系统城...