快速傅里叶变换(FFT)的推导过程(DIT)
FFT是一种快速计算DFT的算法。按时间抽选的基-2FFT推导过程如下:
首先给出DFT的计算公式:
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}}
容易证明:
W_N^{nk}=W_N^{(n+rN)k}=W_N^{(k+rN)n},r为整数
W_N^{nk}=W_{mN}^{mnk},W_N^{nk}=W_{N/m}^{nk/m}
因此,可以得出一些特殊值:
W_N^{N/2}=-1
W_N^{k+\frac{N}{2}}=-W_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,将其分成奇偶两组:
\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,...,\frac{N}{2}-1
则
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)=\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)=\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}
令
X_1(k)=\sum_{r=0}^{\frac{N}{2}-1}x_1(r)W_{N/2}^{rk}
X_2(k)=\sum_{r=0}^{\frac{N}{2}-1}x_2(r)W_{N/2}^{rk}
则
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)的后一半序列。
易证:
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+\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)相关推荐
- 快速傅里叶变换(完整推导过程 + 模板)
快速傅里叶变换 多项式表示 系数表示法: 一个nnn次多项式可以用n+1n + 1n+1个系数表示出来:f(x)=a0+a1x+a2x2+⋯+an−1xn−1+anxnf(x) = a_0 + a_1 ...
- Java中实现快速傅里叶变换FFT
Java中实现快速傅里叶变换FFT 一.概述 1.傅里叶变换(FT) 2.离散傅里叶变换(DFT) 3.快速傅里叶变换(FFT) 1)单位根 2)快速傅里叶变换的思想 3)蝶形图 4)快速傅里叶变换的 ...
- OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...
- Java编程实现快速傅里叶变换FFT
快速傅里叶变换的时间复杂度分析 1 快速傅里叶变换FFT 1.1 理论分析 1.1.1 离散傅里叶变换 1.1.2 快速傅里叶变换 1.2 编程实现 1.2.1 算法思想 1.2.2 实验结果 1 快 ...
- 快速傅里叶变换FFT C语言实现 可用于嵌入式系统进行模拟采样频谱分析
快速傅里叶变换C语言实现 模拟采样进行频谱分析 FFT是DFT的快速算法用于分析确定信号(时间连续可积信号.不一定是周期信号)的频率(或相位.此处不研究相位)成分,且傅里叶变换对应的 ω \omega ...
- 离散傅里叶变换 (DFT)、快速傅里叶变换 (FFT)
目录 离散傅里叶变换 (DFT) 离散傅里叶变换的基 离散傅里叶变换 快速傅里叶变换 (FFT) 卷积 线性时不变系统 傅里叶级数 参考文献 离散傅里叶变换 (DFT) 离散傅里叶变换的基 对于周期为 ...
- Python信号处理小试牛刀——快速傅里叶变换(FFT)
输入:仿真一个理想的多频信号y,频率为3Hz.10Hz,然后在这个理想信号上添加一个白噪声,得到一个带有白噪声的多频信号y_noise: 处理过程:分别对两个信号进行快速傅里叶变换得到对应的频谱图: ...
- MATLAB之傅里叶变换,快速傅里叶变换FFT
文章目录 傅里叶变换及傅里叶逆变换定义 窗函数/矩形脉冲信号的傅里叶变换 基于MATLAB的快速傅里叶变换FFT 傅里叶变换及傅里叶逆变换定义 能从时域的非周期连续信号转化到频域非周期连续信号. 窗函 ...
- 基于python的快速傅里叶变换FFT(二)
基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...
最新文章
- HDU2016 数据的交换输出
- 阿里Druid数据库连接池配置解释
- 全球及中国便携式卧式空压机行业前景动态与投资趋势分析报告2022版
- 【ABAP】通过ST05分析程序执行路径
- webform(八)——LinQ简单增、删、改、查
- 卡尔曼滤波器学习笔记(一)
- 微软XAML Studio - WPF, UWP, Xamarin等技术开发者的福音
- 将你的Vim 打造成轻巧强大的IDE
- webpack常用loader和plugin及打包速度优化
- 2021衢二中高考成绩查询入口,2021衢州市地区高考成绩排名查询,衢州市高考各高中成绩喜报榜单...
- 【Vue】自定义指令(全局定义 局部定义)
- 新版Ubuntu安装日文输入法
- new+date+xxx+java_SpringMVC+MyBatis - 12 spring mvc4返回的json日期为Long的解决方案
- 计算机组成原理—cpu于主存的连接(例题)
- 《机器学习Python实践》第4章——Python和SciPy速成
- 75道逻辑思维题及答案--计算机面试大全
- html动态图片怎么设背景,[gif制作教程]如何把gif动态图片的背景变透明,仍保留有动画效果...
- 12.分布式定时任务(xxl-job)
- An动画基础之元件的影片剪辑效果
- 深度学习花朵识别系统的设计与实现