信号处理:<三> DFT和FFT
信号处理:<一> 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∑Nx[n]WNkn=n=0∑Nx[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为偶数)∑Nx[n]WNkn+n=0(n为奇数)∑Nx[n]WNkn=n=0∑N/2−1x1[n]WN2kn+n=0∑N/2−1x[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−1x1[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−1x2[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相关推荐
- DTFT、DFS、DFT和FFT的关系 离散数字信号处理 数字角频率和模拟角频率
学信号最烦的便是数字信号处理,感觉很一大部分的人都在DTFT和DFT和FFT之间迷茫,下面我就大概谈一下我自己对它们的看法. 下面我就从第一步大概给大家介绍一下它们的变化过程. 首先是DTFT: (1 ...
- 【从FT到DFT和FFT】(三)从离散傅里叶变换到快速傅里叶变换
文章目录 推荐阅读 前言 从离散傅里叶变换到快速傅里叶变换 单位根 对DFT进行分治得到FFT 计算前半截 计算后半截 快速傅里叶逆变换(IFFT) 推荐阅读 前置阅读 [从FT到DFT和FFT](一 ...
- DFS、DTFT、DFT、 FFT的定义和区别
1.DFT DTFT FFT有啥区别 对于一般的周期信号可以用一系列(有限个或者无穷多了)正弦波的叠加来表示.这些正弦波的频率都是某一个特定频率的倍数如5hz.2*5hz.3*5hz--(其中的5hz ...
- 离散傅里叶变换DFT与FFT,MATLAB的FFT函数使用(原创)——如何使用fft()绘制出真正的频谱图像
以前一直对MATLAB中fft()函数的使用一直存在疑惑,为什么要加一 些参数,并且如何确定这些参数,也查了许多资料,但很多都感觉只是 表面一说根本没有讲清其本质.但随着学习的推进,慢慢有所领悟,所 ...
- matlab fft实现dft,matlab实现dft和fft
对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 设计要求 利用 Matlab 或者 C 语言设计 DFT 和 FFT 程序,比较两种频谱分析方法的 计算速度,并与...... DF ...
- 关于矩形窗函数DFT和FFT的笔记
一直想写这个程序,今日终于如尝所愿,非常开心! 矩形窗函数的FT是个什么样子呢? 1.先从理论上分析一下,如图所示(贼简单): 我们在二维坐标系里只能画出信号的幅度谱 |F(w)| ,那么矩形窗的幅度 ...
- (2)DFT和FFT原理与实现
目录 1.图像变换 2.离散傅里叶变换(Discrete Fourier Transform) 3.DFT性质 4.DFT与数字图像处理 5.FFT-快速傅里叶变换 6.DFT与FFT的算法实现 1. ...
- 近代数字信号处理实验-DFT分析信号的频谱
一.实验目的 (1)掌握利用DFT近似计算不同类型信号频谱的原理和方法. (2)理解误差产生的原因及减小误差的方法. (3)培养学生自主学习能力,以及发现问题.分析问题和解决问题的能力. 二.知识点及 ...
- 离散傅里叶变换-DFT(FFT基础)
本文是从最基础的知识开始讲解,力求用最通俗易懂的文字将问题将的通俗易懂,大神勿喷,多多指教啊,虽然说是从零学习FFT,但是基本的数学知识还是要有的,sin,cos,等. FFT(快速傅里叶变换)其本质 ...
最新文章
- 电子科大邹权组招聘博后、科研助理和访问学生(生物信息学方向)
- sql中的text字段如何导入oracle
- 卡巴斯基发现新型恶意软件StoneDrill,或与 Shamoon有关
- python的pass语句_Python pass语句–通过Python
- 机器学习初探:Logistic选股模型实证
- cxf调用webservice
- mysql姓名三位随机_Mysql之生成随机数,随机字符串,随机姓名
- 【观察】西部数据:再定义分层存储架构,赋能数据中心新基建
- js Array 标准方法
- Java 操作Word书签(一):添加、删除、读取书签
- 算法创作|模拟商品加入购物车并结算价钱问题解决方法
- SpringBoot中全面接管SpringMVC
- Ubuntu中使用RoboMongo实现MongoDB的可视化
- Android Material Design 之 CardView卡片式布局
- [Delaunay Triangle] [图形学] Delaunay Triangles最易懂的实现方案
- UVA - 1225
- 详尽解读正则表达式:python下的re方法
- 香港四日,逛吃逛吃—16家地道美味全纪录+伴手礼推荐
- 建筑物面数据(城市+农村)shp格式,包含建筑面要素、面积、人口信息
- 基于SpringBoot的房屋租赁管理系统的设计与实现
热门文章
- idea 参数显示s: o:
- C语言井字棋电脑相互对战
- 趣米征文,木头来拉票了,噗哈哈
- LeetCode题解 - 动态规划-股票买卖
- sw转cad映射文件_SW转CAD完美无乱码教程 附JPG PDF SW CAD格式转换工具
- mysql SQLSTATE[HY000] [1045] Access denied for user
- 中国科学计算机品牌,第一届“中国科技名牌500强”名单揭晓
- 蒂姆·库克:乔布斯背后的天才
- 卷积满足交换律:F*G(x)=G*F(x)
- 数据分析1——系统认识数据分析