信号处理:<一> DFT和FFT

  • 1、 DFT数学表达式
  • 2 、WNknW_N^{kn}WNkn​的理解
  • 2 、FFT的理解
    • 2.1 基于时间的傅里叶变化
  • 3、编程思想
    • 3.1 原位计算
  • 4、反傅里叶变化
  • 5、 参考资料

   DFT,即离散傅里叶变化,是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样。

1、 DFT数学表达式

X[k]=∑n=0Nx[n]WNkn=∑n=0Nx[n]e−j2πknNX[k] = \sum\limits_{n = 0}^N {x[n]} W_N^{kn} = \sum\limits_{n = 0}^N {x[n]} {e^{ - j\frac{{2\pi k{\rm{n}}}}{N}}} X[k]=n=0∑N​x[n]WNkn​=n=0∑N​x[n]e−jN2πkn​
其中0≤k≤N{0 \le k \le N}0≤k≤N。
   从上式可以看出,做DFT需要N2N^2N2次复数乘法和N(N−1)N(N-1)N(N−1)次复数加法【求一个点X[k]需要NNN次复数乘法和N−1N-1N−1次复数加法】,而一次复数乘法又由4次实数乘法和2次实数加法构成,一次复数加法由2次实数加法构成,具体解释如下:
(a+jb)∙(c+jd)=[ac−bd]+j[ad+bc](a+jb)+(c+jd)=[a+c]+j[b+d]\begin{array}{l} \left( {a + jb} \right) \bullet \left( {c + jd} \right) = \left[ {ac - bd} \right] + j\left[ {ad + bc} \right]\\ \left( {a + jb} \right) + \left( {c + jd} \right) = \left[ {a + c} \right] + j[b + d] \end{array} (a+jb)∙(c+jd)=[ac−bd]+j[ad+bc](a+jb)+(c+jd)=[a+c]+j[b+d]​因此,作DFT需要4N24N^24N2次实数乘法和(2N2+2N2−2N)或[2(2N2−N](2N^2+2N^2-2N)或[2(2N^2-N](2N2+2N2−2N)或[2(2N2−N]次实数加法。为了降低复杂度,引出了FFT算法,其思想为用分解的思想将N点DFT的计算依次分解为尺寸较小的DFT计算并利用复数WNknW_N^{kn}WNkn​的周期性和对称性计算。

2 、WNknW_N^{kn}WNkn​的理解

  WNkn=e−j2πkn/N=cos(j2πkn/N)−jsin(j2πkn/N)W_N^{kn}=e ^{-j2\pi kn/N}=cos(j2 \pi kn/N)-jsin(j2 \pi kn/N)WNkn​=e−j2πkn/N=cos(j2πkn/N)−jsin(j2πkn/N),WNknW_N^{kn}WNkn​是WNW_NWN​的kn次幂,WN1=e−j2πkn/N=cos(j2π/N)−jsin(j2π/N)W_N^{1}=e ^{-j2\pi kn/N}=cos(j2 \pi /N)-jsin(j2 \pi /N)WN1​=e−j2πkn/N=cos(j2π/N)−jsin(j2π/N),WN1W_N^{1}WN1​可以理解为将单位圆360角化为NNN份,因此$W_N^{1}实际上就是一个在复平面单位圆上旋转的值。如下图所示:将单位圆对应的360划分为8份,则每一份所对应的为45度。

从图中不难得出旋转因子的性质:
a)周期性:WNa+N=WNaW_N^{a+N}=W_N^{a}WNa+N​=WNa​
b) 对称性:WNa+N/2=−WNaW_N^{a+N/2}=-W_N^{a}WNa+N/2​=−WNa​
c) 缩放性:WN2=−WN/21W_N^{2}=-W_{N/2}^{1}WN2​=−WN/21​

2 、FFT的理解

2.1 基于时间的傅里叶变化


如图所示:x(n)x(n)x(n)分解为偶数与奇数的两个序列之和,即

x1(n)x1(n)x1(n)和x2(n)x2(n)x2(n)的长度都是N/2N/2N/2,x1(n)x_1(n)x1​(n)是偶数序列,x2(n)x_2(n)x2​(n)是奇数序列,x1(n)=x(2n)x_1(n)=x(2n)x1​(n)=x(2n),x2(n)=x(2n+1)x_2(n)=x(2n+1)x2​(n)=x(2n+1),n=0,1...N/2−1n=0,1...N/2-1n=0,1...N/2−1。则
X(k)=∑n=0(n为偶数)Nx[n]WNkn+∑n=0(n为奇数)Nx[n]WNkn=∑n=0N/2−1x1[n]WN2kn+∑n=0N/2−1x[n]WNk(2n+1)X(k)= \sum\limits_{n = 0(n为偶数)}^N {x[n]} W_N^{kn}+\sum\limits_{n = 0(n为奇数)}^N {x[n]} W_N^{kn}=\sum\limits_{n = 0}^{N/2-1} {x_1[n]} W_N^{2kn}+\sum\limits_{n = 0}^{N/2-1} {x[n]} W_N^{k(2n+1)} X(k)=n=0(n为偶数)∑N​x[n]WNkn​+n=0(n为奇数)∑N​x[n]WNkn​=n=0∑N/2−1​x1​[n]WN2kn​+n=0∑N/2−1​x[n]WNk(2n+1)​
其中X1(k)X_1(k)X1​(k)和X2(k)X_2(k)X2​(k)分别为x1(n)x_1(n)x1​(n)和x2(n)x_2(n)x2​(n)的N/2点DFT。
X1[k]=∑n=0N/2−1x1[n]WN/2knX_1[k] = \sum\limits_{n = 0}^{N/2-1} {x_1[n]} W_{N/2}^{kn} X1​[k]=n=0∑N/2−1​x1​[n]WN/2kn​
X2[k]=∑n=0N/2−1x2[n]WN/2knX_2[k] = \sum\limits_{n = 0}^{N/2-1} {x_2[n]} W_{N/2}^{kn} X2​[k]=n=0∑N/2−1​x2​[n]WN/2kn​
由于X1(k)X_1(k)X1​(k)和X2(k)X_2(k)X2​(k)均以N/2为周期,且由对称性知WNk+N/2=−WNkW_N^{k+N/2}=-W_N^{k}WNk+N/2​=−WNk​,所以X(k)又可表示为:

上式的运算可以用下图表示,根据其形状称之为蝶形运算。

从上图可以看出将N点DFT分解为N/2个两点DFT,计算一个碟形运算需要1次复数乘法和2次复数加法。以最开始给的N=8为例,
计算一个NNN点的DFT需要计算两个N/2N/2N/2的DFT和N/2的蝶形运算,依次类推,可以发现,计算N点的DFT最终可以分成N/2个两个的DFT,通过归纳可以发现,N点的DFT总共可以分为log2Nlog_2^{N}log2N​级,每级有N/2N/2N/2个蝶形运算构成,因此每级总共有N/2次N/2次N/2次复乘和NNN次复加,一个NNN点的DFT总共有N/2log2NN/2log_2^{N}N/2log2N​次复数乘法和Nlog2NNlog_2^{N}Nlog2N​
  直接计算DFT和利用FFT计算DFT的运算量对比如下图所示:

3、编程思想

3.1 原位计算







4、反傅里叶变化



5、 参考资料

【1】快速傅里叶变换FFT解析
【2】快速傅里叶变换(FFT)的推导过程(DIT)
【3】快速傅里叶变换FFTppt课件.ppt
【4】1024点fft原理及fpga实现
【5】快速傅里叶变换FFT-PPT(精

信号处理:<三> DFT和FFT相关推荐

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

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

  2. 【从FT到DFT和FFT】(三)从离散傅里叶变换到快速傅里叶变换

    文章目录 推荐阅读 前言 从离散傅里叶变换到快速傅里叶变换 单位根 对DFT进行分治得到FFT 计算前半截 计算后半截 快速傅里叶逆变换(IFFT) 推荐阅读 前置阅读 [从FT到DFT和FFT](一 ...

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

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

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

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

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

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

  6. 关于矩形窗函数DFT和FFT的笔记

    一直想写这个程序,今日终于如尝所愿,非常开心! 矩形窗函数的FT是个什么样子呢? 1.先从理论上分析一下,如图所示(贼简单): 我们在二维坐标系里只能画出信号的幅度谱 |F(w)| ,那么矩形窗的幅度 ...

  7. (2)DFT和FFT原理与实现

    目录 1.图像变换 2.离散傅里叶变换(Discrete Fourier Transform) 3.DFT性质 4.DFT与数字图像处理 5.FFT-快速傅里叶变换 6.DFT与FFT的算法实现 1. ...

  8. 近代数字信号处理实验-DFT分析信号的频谱

    一.实验目的 (1)掌握利用DFT近似计算不同类型信号频谱的原理和方法. (2)理解误差产生的原因及减小误差的方法. (3)培养学生自主学习能力,以及发现问题.分析问题和解决问题的能力. 二.知识点及 ...

  9. 离散傅里叶变换-DFT(FFT基础)

    本文是从最基础的知识开始讲解,力求用最通俗易懂的文字将问题将的通俗易懂,大神勿喷,多多指教啊,虽然说是从零学习FFT,但是基本的数学知识还是要有的,sin,cos,等. FFT(快速傅里叶变换)其本质 ...

最新文章

  1. 电子科大邹权组招聘博后、科研助理和访问学生(生物信息学方向)
  2. sql中的text字段如何导入oracle
  3. 卡巴斯基发现新型恶意软件StoneDrill,或与 Shamoon有关
  4. python的pass语句_Python pass语句–通过Python
  5. 机器学习初探:Logistic选股模型实证
  6. cxf调用webservice
  7. mysql姓名三位随机_Mysql之生成随机数,随机字符串,随机姓名
  8. 【观察】西部数据:再定义分层存储架构,赋能数据中心新基建
  9. js Array 标准方法
  10. Java 操作Word书签(一):添加、删除、读取书签
  11. 算法创作|模拟商品加入购物车并结算价钱问题解决方法
  12. SpringBoot中全面接管SpringMVC
  13. Ubuntu中使用RoboMongo实现MongoDB的可视化
  14. Android Material Design 之 CardView卡片式布局
  15. [Delaunay Triangle] [图形学] Delaunay Triangles最易懂的实现方案
  16. UVA - 1225
  17. 详尽解读正则表达式:python下的re方法
  18. 香港四日,逛吃逛吃—16家地道美味全纪录+伴手礼推荐
  19. 建筑物面数据(城市+农村)shp格式,包含建筑面要素、面积、人口信息
  20. 基于SpringBoot的房屋租赁管理系统的设计与实现

热门文章

  1. idea 参数显示s: o:
  2. C语言井字棋电脑相互对战
  3. 趣米征文,木头来拉票了,噗哈哈
  4. LeetCode题解 - 动态规划-股票买卖
  5. sw转cad映射文件_SW转CAD完美无乱码教程 附JPG PDF SW CAD格式转换工具
  6. mysql SQLSTATE[HY000] [1045] Access denied for user
  7. 中国科学计算机品牌,第一届“中国科技名牌500强”名单揭晓
  8. 蒂姆·库克:乔布斯背后的天才
  9. 卷积满足交换律:F*G(x)=G*F(x)
  10. 数据分析1——系统认识数据分析