FFT是一种快速计算DFT的算法。按时间抽选的基-2FFT推导过程如下:

首先给出DFT的计算公式:

X(k)=DFT[x(n)]=∑n=0N−1x(n)WnkN X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) W N n k

X(k)=DFT[x(n)]=\sum^{N-1}_{n=0}x(n)W^{nk}_{N}

其中 WN=e−j2πN W N = e − j 2 π N W_{N}=e^{-j\frac{2\pi}{N}}

容易证明:

WnkN=W(n+rN)kN=W(k+rN)nN,r为整数 W N n k = W N ( n + r N ) k = W N ( k + r N ) n , r 为 整 数

W_N^{nk}=W_N^{(n+rN)k}=W_N^{(k+rN)n},r为整数

WnkN=WmnkmN,WnkN=Wnk/mN/m W N n k = W m N m n k , W N n k = W N / m n k / m

W_N^{nk}=W_{mN}^{mnk},W_N^{nk}=W_{N/m}^{nk/m}

因此,可以得出一些特殊值:

WN/2N=−1 W N N / 2 = − 1

W_N^{N/2}=-1

Wk+N2N=−WkN W N k + N 2 = − W N k

W_N^{k+\frac{N}{2}}=-W_N^k

W(N−k)nN=W(N−n)kN=W−nkN W N ( N − k ) n = W N ( N − n ) k = W N − n k

W_N^{(N-k)n}=W_N^{(N-n)k}=W_N^{-nk}

FFT的主要思想就是利用这些性质将DFT中的某些项合并。

设序列的长度为 N=2L N = 2 L N=2^L,将其分成奇偶两组:

{x(2r)=x1(r)x(2r+1)=x2(r)(1) (1) { x ( 2 r ) = x 1 ( r ) x ( 2 r + 1 ) = x 2 ( r )

\begin{equation} \left\{ \begin{array}\ x(2r)=x_1(r) \\ x(2r+1)=x_2(r) \end{array} \right.\tag{1} \end{equation}

其中

r=0,1,...,N2−1 r = 0 , 1 , . . . , N 2 − 1

r=0,1,...,\frac{N}{2}-1

X(k)=∑n=0(n为偶数)N−1x(n)WnkN+∑n=0(n为奇数)N−1x(n)WnkN X ( k ) = ∑ n = 0 ( n 为 偶 数 ) N − 1 x ( n ) W N n k + ∑ n = 0 ( n 为 奇 数 ) N − 1 x ( n ) W N n k

X(k)=\sum_{n=0(n为偶数)}^{N-1}x(n)W_N^{nk}+\sum_{n=0(n为奇数)}^{N-1}x(n)W_N^{nk}

X(k)=∑r=0N2−1x(2r)W2rkN+∑r=0N2−1x(2r+1)W(2r+1)kN X ( k ) = ∑ r = 0 N 2 − 1 x ( 2 r ) W N 2 r k + ∑ r = 0 N 2 − 1 x ( 2 r + 1 ) W N ( 2 r + 1 ) k

X(k)=\sum_{r=0}^{\frac{N}{2}-1}x(2r)W_N^{2rk}+\sum_{r=0}^{\frac{N}{2}-1}x(2r+1)W_N^{(2r+1)k}

X(k)=∑r=0N2−1x1(r)WrkN/2+WkN∑r=0N2−1x2(r)WrkN/2 X ( k ) = ∑ r = 0 N 2 − 1 x 1 ( r ) W N / 2 r k + W N k ∑ r = 0 N 2 − 1 x 2 ( r ) W N / 2 r k

X(k)=\sum_{r=0}^{\frac{N}{2}-1}x_1(r)W_{N/2}^{rk}+W_N^k\sum_{r=0}^{\frac{N}{2}-1}x_2(r)W_{N/2}^{rk}

X1(k)=∑r=0N2−1x1(r)WrkN/2 X 1 ( k ) = ∑ r = 0 N 2 − 1 x 1 ( r ) W N / 2 r k

X_1(k)=\sum_{r=0}^{\frac{N}{2}-1}x_1(r)W_{N/2}^{rk}

X2(k)=∑r=0N2−1x2(r)WrkN/2 X 2 ( k ) = ∑ r = 0 N 2 − 1 x 2 ( r ) W N / 2 r k

X_2(k)=\sum_{r=0}^{\frac{N}{2}-1}x_2(r)W_{N/2}^{rk}

X(k)=X1(k)+WkNX2(k)(2) (2) X ( k ) = X 1 ( k ) + W N k X 2 ( k )

X(k)=X_1(k)+W_N^{k}X_2(k)\tag{2}

X1(k),X2(k) X 1 ( k ) , X 2 ( k ) X_1(k),X_2(k)分别是 x1(r)和x2(r) x 1 ( r ) 和 x 2 ( r ) x_1(r)和x_2(r)的 N/2 N / 2 N/2点DFT。

这样我们就可以把一个 N N N点DFT分解为两个N/2" role="presentation">N/2N/2N/2点DFT,并通过 (2) ( 2 ) (2)式组合成 N N N点DFT。

但是式中的k,r=0,1,...,N2−1" role="presentation">k,r=0,1,...,N2−1k,r=0,1,...,N2−1k,r=0,1,...,\frac{N}{2}-1,也就是说,这只是 X(k) X ( k ) X(k)的前一半序列。

可以应用周期性求解 X(k) X ( k ) X(k)的后一半序列。

易证:

X1(N2+k)=X1(k)X2(N2+k)=X2(k)Wk+N2N=−WkN X 1 ( N 2 + k ) = X 1 ( k ) X 2 ( N 2 + k ) = X 2 ( k ) W N k + N 2 = − W N k

X_1(\frac{N}{2}+k)=X_1(k) \\ X_2(\frac{N}{2}+k)=X_2(k) \\ W_N^{k+\frac{N}{2}}=-W_{N}^{k}

因此:

X(k+N2)=X1(k)−WkNX2(k),k=0,1,...,N2−1(3) (3) X ( k + N 2 ) = X 1 ( k ) − W N k X 2 ( k ) , k = 0 , 1 , . . . , N 2 − 1

X(k+\frac{N}{2})=X_1(k)-W_N^k X_2(k),k=0,1,...,\frac{N}{2}-1 \tag{3}

通过 (2) ( 2 ) (2)式和 (3) ( 3 ) (3)式,就可以通过两个 N/2 N / 2 N/2点DFT序列组合出一个完整的 N N N点DFT序列。

附运算次数(序列的长度为N" role="presentation">NNN):

直接DFT:
复数乘法 N2 N 2 N^2次
复数加法 N(N−1) N ( N − 1 ) N(N-1)次

利用FFT求解DFT:
复数乘法 N2log2N N 2 l o g 2 N \frac{N}{2}log_2{N}次
复数加法 Nlog2N N l o g 2 N N log_2{N}次

快速傅里叶变换(FFT)的推导过程(DIT)相关推荐

  1. 快速傅里叶变换(完整推导过程 + 模板)

    快速傅里叶变换 多项式表示 系数表示法: 一个nnn次多项式可以用n+1n + 1n+1个系数表示出来:f(x)=a0+a1x+a2x2+⋯+an−1xn−1+anxnf(x) = a_0 + a_1 ...

  2. Java中实现快速傅里叶变换FFT

    Java中实现快速傅里叶变换FFT 一.概述 1.傅里叶变换(FT) 2.离散傅里叶变换(DFT) 3.快速傅里叶变换(FFT) 1)单位根 2)快速傅里叶变换的思想 3)蝶形图 4)快速傅里叶变换的 ...

  3. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测

    OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...

  4. Java编程实现快速傅里叶变换FFT

    快速傅里叶变换的时间复杂度分析 1 快速傅里叶变换FFT 1.1 理论分析 1.1.1 离散傅里叶变换 1.1.2 快速傅里叶变换 1.2 编程实现 1.2.1 算法思想 1.2.2 实验结果 1 快 ...

  5. 快速傅里叶变换FFT C语言实现 可用于嵌入式系统进行模拟采样频谱分析

    快速傅里叶变换C语言实现 模拟采样进行频谱分析 FFT是DFT的快速算法用于分析确定信号(时间连续可积信号.不一定是周期信号)的频率(或相位.此处不研究相位)成分,且傅里叶变换对应的 ω \omega ...

  6. 离散傅里叶变换 (DFT)、快速傅里叶变换 (FFT)

    目录 离散傅里叶变换 (DFT) 离散傅里叶变换的基 离散傅里叶变换 快速傅里叶变换 (FFT) 卷积 线性时不变系统 傅里叶级数 参考文献 离散傅里叶变换 (DFT) 离散傅里叶变换的基 对于周期为 ...

  7. Python信号处理小试牛刀——快速傅里叶变换(FFT)

    输入:仿真一个理想的多频信号y,频率为3Hz.10Hz,然后在这个理想信号上添加一个白噪声,得到一个带有白噪声的多频信号y_noise: 处理过程:分别对两个信号进行快速傅里叶变换得到对应的频谱图: ...

  8. MATLAB之傅里叶变换,快速傅里叶变换FFT

    文章目录 傅里叶变换及傅里叶逆变换定义 窗函数/矩形脉冲信号的傅里叶变换 基于MATLAB的快速傅里叶变换FFT 傅里叶变换及傅里叶逆变换定义 能从时域的非周期连续信号转化到频域非周期连续信号. 窗函 ...

  9. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点   FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...

最新文章

  1. HDU2016 数据的交换输出
  2. 阿里Druid数据库连接池配置解释
  3. 全球及中国便携式卧式空压机行业前景动态与投资趋势分析报告2022版
  4. 【ABAP】通过ST05分析程序执行路径
  5. webform(八)——LinQ简单增、删、改、查
  6. 卡尔曼滤波器学习笔记(一)
  7. 微软XAML Studio - WPF, UWP, Xamarin等技术开发者的福音
  8. 将你的Vim 打造成轻巧强大的IDE
  9. webpack常用loader和plugin及打包速度优化
  10. 2021衢二中高考成绩查询入口,2021衢州市地区高考成绩排名查询,衢州市高考各高中成绩喜报榜单...
  11. 【Vue】自定义指令(全局定义 局部定义)
  12. 新版Ubuntu安装日文输入法
  13. new+date+xxx+java_SpringMVC+MyBatis - 12 spring mvc4返回的json日期为Long的解决方案
  14. 计算机组成原理—cpu于主存的连接(例题)
  15. 《机器学习Python实践》第4章——Python和SciPy速成
  16. 75道逻辑思维题及答案--计算机面试大全
  17. html动态图片怎么设背景,[gif制作教程]如何把gif动态图片的背景变透明,仍保留有动画效果...
  18. 12.分布式定时任务(xxl-job)
  19. An动画基础之元件的影片剪辑效果
  20. 深度学习花朵识别系统的设计与实现

热门文章

  1. python123怎么注销账号_怎么注销账号
  2. 怎样查看hp台式计算机名称,惠普台式机型号怎么样查看
  3. 游戏中基于物理的渲染
  4. GEE绘制DEM全解析
  5. ToC产品和ToB产品的区别To C/To B/To G分别是什么
  6. CodeBlocks使用小技巧
  7. 堆排序--10亿个数字取出最大或者最小的10个数字
  8. 英语四级作文模板(一)
  9. mysql建表按 t分开_记一次MYSQL建表失败得bug
  10. 【史上最全】月薪3万的程序员都在用这些实用工具