DFT与FFT运算效率的比较
文章目录
- 一,运算量的比较
- 二,程序运算时间比较
一,运算量的比较
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∗log2N
复数加次数为:
C A = N ∗ M = N ∗ l o g 2 N C_A=N*M=N*log_2N CA=N∗M=N∗log2N
当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 2Nlog2NN2=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运算效率的比较相关推荐
- DSP处理FFT和DFT时需要运算的次数及计算公式
DSP处理FFT和DFT时需要运算的次数及计算公式 复数运算次数分析: DFT : 乘法复数运算=N2 加法复数运算=N(N-1) FFT : 以基2进行运算 乘法复数运算=N/2 * log2N 加 ...
- DFS、DTFT、DFT、 FFT的定义和区别
1.DFT DTFT FFT有啥区别 对于一般的周期信号可以用一系列(有限个或者无穷多了)正弦波的叠加来表示.这些正弦波的频率都是某一个特定频率的倍数如5hz.2*5hz.3*5hz--(其中的5hz ...
- FFT运算的加深理解——FFT的增益
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FFT运算的加深理解--FFT的增益 前言 FFT的增益 前言 FFT的一些概念一直迷惑了好多年,包括增益.频谱泄露.加窗.补零.栅栏 ...
- 离散傅里叶变换DFT与FFT,MATLAB的FFT函数使用(原创)——如何使用fft()绘制出真正的频谱图像
以前一直对MATLAB中fft()函数的使用一直存在疑惑,为什么要加一 些参数,并且如何确定这些参数,也查了许多资料,但很多都感觉只是 表面一说根本没有讲清其本质.但随着学习的推进,慢慢有所领悟,所 ...
- DTFT、DFS、DFT和FFT的关系 离散数字信号处理 数字角频率和模拟角频率
学信号最烦的便是数字信号处理,感觉很一大部分的人都在DTFT和DFT和FFT之间迷茫,下面我就大概谈一下我自己对它们的看法. 下面我就从第一步大概给大家介绍一下它们的变化过程. 首先是DTFT: (1 ...
- 信号处理:<三> DFT和FFT
信号处理:<一> DFT和FFT 1. DFT数学表达式 2 .WNknW_N^{kn}WNkn的理解 2 .FFT的理解 2.1 基于时间的傅里叶变化 3.编程思想 3.1 原位计算 ...
- matlab fft实现dft,matlab实现dft和fft
对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 设计要求 利用 Matlab 或者 C 语言设计 DFT 和 FFT 程序,比较两种频谱分析方法的 计算速度,并与...... DF ...
- stm32f4进行fft运算
0.前言 我是个小菜鸡,最近需要用fft,就学习使用了一下,感觉还挺好玩的,文章内容可能有描述不准确或者错误的地方,希望读者带着辩证的眼光阅读,如果方便指出错误,那就很感谢了. 本文主要关注fft实际 ...
- 基于 NXP iMX8X 测试 GPU FFT 运算
By Toradex胡珊逢 1). 简介 伴随着 4G 网络的大范围覆盖,已经即将到来的 5G 网络,边缘计算越来越多地开始进入人们的视野.相比于云计算的云端集中处理,边缘计算能够就地进行复杂数据的计 ...
最新文章
- 五大洲30国在华留学生千年古城欢度中国年
- 程序员,当你写程序写累了怎么办。
- [css] 鼠标事件css的:hover和js的mouseover有什么区别?
- 【CodeForces - 246D】Colorful Graph (暴力,图,存边,STL)
- 6-6-3:STL之map和set——multiset和multimap及set和map在oj题中的用处
- PyCharm配置django环境
- java怎样输出闰年,Java 小日历格式输出 闰年计算
- FAL风控培训|如何用一张图了解所有特征工程的套路
- LeetCode经典算法精解-字符串编辑距离
- SPEOS—光学产品设计及仿真工具
- ns3学习之初识ns3
- lisp语言画地物符号_地形图中的地物符号说明
- linux设置ipsan_linux下ipsan的配置
- 【JAVA SE基础篇】30.抽象与接口
- MacBook Pro 完美分屏
- grad-cam原理
- 外接显示器无法识别 win11
- sql server线程等待信息
- 【MySQL 数据库】MySQL 的对库的操作及其数据类型
- Module3:Alice in Wonderland
热门文章
- 【C语言】用函数实现求两个自然数的最大公约数
- 88.计算500以内最大的10个能被13或17整除的自然数之和。
- 自费访学|药企经理赴美国新常春藤名校访问交流
- 外商独资企业必须有监事吗
- 资深老师傅讲解六轴机器人机械臂的特征和优缺点!
- 【2023年Mathorcup杯数学建模竞赛C题】电商物流网络包裹应急调运与结构优化--完整作品分享
- Unity查找游戏对象
- CSS 高级属性之 text-shadow 详解
- Java时间日期格式转换Date转String和String转Date
- 每次电脑开机弹出c语言框,【xp开机弹出documents】开机跳出documents_开机弹出c documents-系统城...