【FFT/IDFT】高效算法
题目:
设x(n)是长度为2N的有限长实序列,X(k)为x(n)的2N点 DFT。
(1)试设计用一次N点FFT完成计算X(k)的高效算法;
(2)若已知 X(k),试设计用一次N点 IFFT实现求X(k)的2N点IDFT运算
解答:
(1) 将2N点DFT分成两部分,分别对序列x(n)中下标为偶数和下标为奇数的元素进行N点DFT计算,得到长度为N的两个DFT数组X1(k)和X2(k),其中:
X 1 ( k ) = ∑ n = 0 N − 1 x ( 2 n ) ⋅ e − j 2 π N n k , k = 0 , 1 , ⋯ , N − 1 X1(k) = \sum_{n=0}^{N-1} x(2n)\cdot e^{-j\frac{2\pi}{N}nk}, \quad k=0,1,\cdots, N-1 X1(k)=n=0∑N−1x(2n)⋅e−jN2πnk,k=0,1,⋯,N−1
X 2 ( k ) = ∑ n = 0 N − 1 x ( 2 n + 1 ) ⋅ e − j 2 π N n k , k = 0 , 1 , ⋯ , N − 1 X2(k) = \sum_{n=0}^{N-1} x(2n+1)\cdot e^{-j\frac{2\pi}{N}nk}, \quad k=0,1,\cdots, N-1 X2(k)=n=0∑N−1x(2n+1)⋅e−jN2πnk,k=0,1,⋯,N−1
接下来,考虑如何利用FFT算法将这两个长度为N的DFT数组合成为总的2N点DFT数组X(k)。
根据DFT的运算方式可以得知,
X ( k ) = ∑ n = 0 2 N − 1 x ( n ) ⋅ e − j 2 π 2 N n k = ∑ r = 0 N − 1 x ( 2 r ) ⋅ e − j 2 π 2 N ( 2 r ) k + ∑ r = 0 N − 1 x ( 2 r + 1 ) ⋅ e − j 2 π 2 N ( 2 r + 1 ) k X(k) = \sum_{n=0}^{2N-1} x(n)\cdot e^{-j\frac{2\pi}{2N}nk} = \sum_{r=0}^{N-1} x(2r)\cdot e^{-j\frac{2\pi}{2N}(2r)k} + \sum_{r=0}^{N-1} x(2r+1)\cdot e^{-j\frac{2\pi}{2N}(2r+1)k} X(k)=n=0∑2N−1x(n)⋅e−j2N2πnk=r=0∑N−1x(2r)⋅e−j2N2π(2r)k+r=0∑N−1x(2r+1)⋅e−j2N2π(2r+1)k
对上式中的第一项和第二项分别代入它们的DFT计算公式,得到:
∑ r = 0 N − 1 x ( 2 r ) ⋅ e − j 2 π 2 N ( 2 r ) k = ∑ r = 0 N − 1 X 1 ( r ) ⋅ e − j π N k r \sum_{r=0}^{N-1} x(2r)\cdot e^{-j\frac{2\pi}{2N}(2r)k} = \sum_{r=0}^{N-1} X1(r)\cdot e^{-j\frac{\pi}{N}kr} r=0∑N−1x(2r)⋅e−j2N2π(2r)k=r=0∑N−1X1(r)⋅e−jNπkr
∑ r = 0 N − 1 x ( 2 r + 1 ) ⋅ e − j 2 π 2 N ( 2 r + 1 ) k = ∑ r = 0 N − 1 X 2 ( r ) ⋅ e − j π N k r \sum_{r=0}^{N-1} x(2r+1)\cdot e^{-j\frac{2\pi}{2N}(2r+1)k} = \sum_{r=0}^{N-1} X2(r)\cdot e^{-j\frac{\pi}{N}kr} r=0∑N−1x(2r+1)⋅e−j2N2π(2r+1)k=r=0∑N−1X2(r)⋅e−jNπkr
这表明,总的DFT计算可以分解成两个N点DFT计算,并利用FFT算法合成起来。具体实现时,可以先对X1(k)和X2(k)分别进行长度为N的FFT计算,得到两个N点FFT结果Y1(k)和Y2(k),然后按照如下式子合成Y(k):
Y ( k ) = Y 1 ( k ) + e − j 2 π 2 N k Y 2 ( k ) , k = 0 , 1 , ⋯ , N − 1 Y(k) = Y1(k) + e^{-j\frac{2\pi}{2N}k}Y2(k), \quad k=0,1,\cdots, N-1 Y(k)=Y1(k)+e−j2N2πkY2(k),k=0,1,⋯,N−1
Y ( k + N ) = Y 1 ( k ) − e − j 2 π 2 N k Y 2 ( k ) , k = 0 , 1 , ⋯ , N − 1 Y(k+N) = Y1(k) - e^{-j\frac{2\pi}{2N}k}Y2(k), \quad k=0,1,\cdots, N-1 Y(k+N)=Y1(k)−e−j2N2πkY2(k),k=0,1,⋯,N−1
上述式子可以通过直接计算得到,也可以采用基于FFT算法的方法高效地计算。
(2) 设Y(k)为X(k)的N点DFT,X(k)的2N点IDFT即为:
x ( n ) = 1 2 N ∑ k = 0 2 N − 1 Y ( k ) e j 2 π 2 N n k x(n) = \frac{1}{2N} \sum_{k=0}^{2N-1} Y(k)e^{j\frac{2\pi}{2N}nk} x(n)=2N1k=0∑2N−1Y(k)ej2N2πnk
根据DFT和IDFT的对称性,可以知道Y(k)的前N个元素和后N个元素互为共轭。因此,可以将Y(k)分成两部分,分别对前N个元素和后N个元素进行长度为N的IFFT计算,得到长度为N的两个IFFT数组y1(n)和y2(n),其中:
y 1 ( n ) = 1 N ∑ k = 0 N − 1 Y ( k ) e j 2 π N n k , n = 0 , 1 , ⋯ , N − 1 y1(n) = \frac{1}{N} \sum_{k=0}^{N-1} Y(k)e^{j\frac{2\pi}{N}nk}, \quad n=0,1,\cdots, N-1 y1(n)=N1k=0∑N−1Y(k)ejN2πnk,n=0,1,⋯,N−1
y 2 ( n ) = 1 N ∑ k = 0 N − 1 Y ( N + k ) e j 2 π N n k , n = 0 , 1 , ⋯ , N − 1 y2(n) = \frac{1}{N} \sum_{k=0}^{N-1} Y(N+k)e^{j\frac{2\pi}{N}nk}, \quad n=0,1,\cdots, N-1 y2(n)=N1k=0∑N−1Y(N+k)ejN2πnk,n=0,1,⋯,N−1
接下来,考虑如何将这两个长度为N的IFFT数组合成为总的2N点IDFT数组x(n)。
根据IDFT的运算方式可以得知,
x ( n ) = 1 2 N ∑ k = 0 2 N − 1 Y ( k ) e j 2 π 2 N n k = 1 2 N ∑ r = 0 N − 1 Y ( r ) e j π N 2 r n + 1 2 N ∑ r = 0 N − 1 Y ( N + r ) e j π N ( 2 r + 1 ) n x(n) = \frac{1}{2N} \sum_{k=0}^{2N-1} Y(k)e^{j\frac{2\pi}{2N}nk} = \frac{1}{2N} \sum_{r=0}^{N-1} Y(r)e^{j\frac{\pi}{N}2rn} + \frac{1}{2N} \sum_{r=0}^{N-1} Y(N+r)e^{j\frac{\pi}{N}(2r+1)n} x(n)=2N1k=0∑2N−1Y(k)ej2N2πnk=2N1r=0∑N−1Y(r)ejNπ2rn+2N1r=0∑N−1Y(N+r)ejNπ(2r+1)n
对上式中的第一项和第二项分别代入它们的IFFT计算公式,得到:
1 2 N ∑ r = 0 N − 1 Y ( r ) e j π N 2 r n = 1 N ∑ r = 0 N − 1 y 1 ( r ) e j π N r n \frac{1}{2N} \sum_{r=0}^{N-1} Y(r)e^{j\frac{\pi}{N}2rn} = \frac{1}{N} \sum_{r=0}^{N-1} y1(r)e^{j\frac{\pi}{N}rn} 2N1r=0∑N−1Y(r)ejNπ2rn=N1r=0∑N−1y1(r)ejNπrn
1 2 N ∑ r = 0 N − 1 Y ( N + r ) e j π N ( 2 r + 1 ) n = 1 N ∑ r = 0 N − 1 y 2 ( r ) e j π N r n \frac{1}{2N} \sum_{r=0}^{N-1} Y(N+r)e^{j\frac{\pi}{N}(2r+1)n} = \frac{1}{N} \sum_{r=0}^{N-1} y2(r)e^{j\frac{\pi}{N}rn} 2N1r=0∑N−1Y(N+r)ejNπ(2r+1)n=N1r=0∑N−1y2(r)ejNπrn
这表明,总的IDFT计算可以分解成两个N点IDFT计算,并利用IFFT算法合成起来。具体实现时,可以先对y1(n)和y2(n)分别进行长度为N的IFFT计算,得到两个N点IFFT结果X1(n)和X2(n),然后按照如下式子合成X(n):
X ( n ) = X 1 ( n ) + e j 2 π 2 N n X 2 ( n ) , n = 0 , 1 , ⋯ , N − 1 X(n) = X1(n) + e^{j\frac{2\pi}{2N}n}X2(n), \quad n=0,1,\cdots, N-1 X(n)=X1(n)+ej2N2πnX2(n),n=0,1,⋯,N−1
X ( n + N ) = X 1 ( n ) − e j 2 π 2 N n X 2 ( n ) , n = 0 , 1 , ⋯ , N − 1 X(n+N) = X1(n) - e^{j\frac{2\pi}{2N}n}X2(n), \quad n=0,1,\cdots, N-1 X(n+N)=X1(n)−ej2N2πnX2(n),n=0,1,⋯,N−1
上述式子可以通过直接计算得到,也可以采用基于IFFT算法的方法高效地计算。
【FFT/IDFT】高效算法相关推荐
- CVPR2020论文介绍: 3D 目标检测高效算法
CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...
- 再谈poj2965(高效算法)
在枚举分类中已有暴力枚举的方法解这道题.之后在网上看到大神的高效算法,膜拜之.故copy在此. /*参考高手的高效解法: > 证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为 ...
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符
题目描述 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符. 给定一个字符串(不一定全为字母)A及它的长度n.请返回第一个重复出现的字符.保证字符串中有重复字符,字符串的长度小于等于500 ...
- ( 设计高效算法 ) 年龄排序 Age Sort Uva 11462
( 设计高效算法 ) 年龄排序 Age Sort Uva 11462 可以使用整数排序法, 内存太小无法堆排序. #include <cstdio> #include <cstrin ...
- 3d 自动生成物体_CVPR2020论文介绍: 3D 目标检测高效算法
CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...
- 算法心得:高效算法的奥秘 作者:[美] Henry S. Warren, Jr.
书籍信息 名称:<算法心得:高效算法的奥秘>电子书PDF版 作者:[美] Henry S. Warren, Jr. 出版社:机械工业出版社 内容简介 在本书中,作者给我们带来了一大批极为诱 ...
- 《算法心得:高效算法的奥秘(原书第2版)》
<算法心得:高效算法的奥秘(原书第2版)> 基本信息 原书名:Hacker's Delight,Second Edition 原出版社: Addison-Wesley Profession ...
- C#,楔子数(Sphenic Number)的暴力算法与高效算法源代码
楔子数(Sphenic Number)来自于一个题目: Schoolboy Vasya is interested in the problem of distinguishing prime num ...
- 国产申威处理器上如何部署FFTW3,实现FFT的高效运算
标题国产申威处理器上如何部署FFTW3,实现FFT的高效运算 FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言 ...
最新文章
- linux后台执行命令:amp;与nohup的用法
- gradle 指定springcloud 版本_SpringCloud微服务架构开发实战:实现服务注册与发现
- wifi共享大师电脑版_手机开wifi热点,共享网络给电脑,变身4G无线路由器
- Oracle 检索数据
- Linux内存中加载二进制,linux – 程序退出后二进制文件会留在内存中吗?
- 关键字—final static const的区别
- 单继承-继承的传递性
- JSF简单Ajax示例
- zeppelin 连接hive 认证方式_HIVE的学习之路(六)Hive的分组Join排序
- mxchip EWM3166串口转WIFI AT指令设置
- 关闭计算机的方式有哪些,关机快捷键有哪些?电脑Windows快捷关机最全方法图文详解...
- ExtJS 可视化开发工具大全
- 【sklearn-cookbook-zh】第一章 模型预处理
- 【从零开始vnpy量化投资】三. 手动安装vnpy环境
- SQL查询语句练习(一)
- aliexpress商品详情API接口(速卖通商品详情页面数据接口)
- 布兰妮新年演唱会上用狗项圈“遛”男友
- Java中高级面试题部分答案解析(3)
- pycuda安装报错(已解决)
- 【LabVIEW花样翻新】前言