题目:

设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−1​x(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−1​x(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−1​x(n)⋅e−j2N2π​nk=r=0∑N−1​x(2r)⋅e−j2N2π​(2r)k+r=0∑N−1​x(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−1​x(2r)⋅e−j2N2π​(2r)k=r=0∑N−1​X1(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−1​x(2r+1)⋅e−j2N2π​(2r+1)k=r=0∑N−1​X2(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)=2N1​k=0∑2N−1​Y(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)=N1​k=0∑N−1​Y(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)=N1​k=0∑N−1​Y(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)=2N1​k=0∑2N−1​Y(k)ej2N2π​nk=2N1​r=0∑N−1​Y(r)ejNπ​2rn+2N1​r=0∑N−1​Y(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} 2N1​r=0∑N−1​Y(r)ejNπ​2rn=N1​r=0∑N−1​y1(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} 2N1​r=0∑N−1​Y(N+r)ejNπ​(2r+1)n=N1​r=0∑N−1​y2(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】高效算法相关推荐

  1. CVPR2020论文介绍: 3D 目标检测高效算法

    CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...

  2. 再谈poj2965(高效算法)

    在枚举分类中已有暴力枚举的方法解这道题.之后在网上看到大神的高效算法,膜拜之.故copy在此. /*参考高手的高效解法: > 证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为 ...

  3. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符

    题目描述 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符. 给定一个字符串(不一定全为字母)A及它的长度n.请返回第一个重复出现的字符.保证字符串中有重复字符,字符串的长度小于等于500 ...

  4. ( 设计高效算法 ) 年龄排序 Age Sort Uva 11462

    ( 设计高效算法 ) 年龄排序 Age Sort Uva 11462 可以使用整数排序法, 内存太小无法堆排序. #include <cstdio> #include <cstrin ...

  5. 3d 自动生成物体_CVPR2020论文介绍: 3D 目标检测高效算法

    CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...

  6. 算法心得:高效算法的奥秘 作者:[美] Henry S. Warren, Jr.

    书籍信息 名称:<算法心得:高效算法的奥秘>电子书PDF版 作者:[美] Henry S. Warren, Jr. 出版社:机械工业出版社 内容简介 在本书中,作者给我们带来了一大批极为诱 ...

  7. 《算法心得:高效算法的奥秘(原书第2版)》

    <算法心得:高效算法的奥秘(原书第2版)> 基本信息 原书名:Hacker's Delight,Second Edition 原出版社: Addison-Wesley Profession ...

  8. C#,楔子数(Sphenic Number)的暴力算法与高效算法源代码

    楔子数(Sphenic Number)来自于一个题目: Schoolboy Vasya is interested in the problem of distinguishing prime num ...

  9. 国产申威处理器上如何部署FFTW3,实现FFT的高效运算

    标题国产申威处理器上如何部署FFTW3,实现FFT的高效运算 FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言 ...

最新文章

  1. linux后台执行命令:amp;与nohup的用法
  2. gradle 指定springcloud 版本_SpringCloud微服务架构开发实战:实现服务注册与发现
  3. wifi共享大师电脑版_手机开wifi热点,共享网络给电脑,变身4G无线路由器
  4. Oracle 检索数据
  5. Linux内存中加载二进制,linux – 程序退出后二进制文件会留在内存中吗?
  6. 关键字—final static const的区别
  7. 单继承-继承的传递性
  8. JSF简单Ajax示例
  9. zeppelin 连接hive 认证方式_HIVE的学习之路(六)Hive的分组Join排序
  10. mxchip EWM3166串口转WIFI AT指令设置
  11. 关闭计算机的方式有哪些,关机快捷键有哪些?电脑Windows快捷关机最全方法图文详解...
  12. ExtJS 可视化开发工具大全
  13. 【sklearn-cookbook-zh】第一章 模型预处理
  14. 【从零开始vnpy量化投资】三. 手动安装vnpy环境
  15. SQL查询语句练习(一)
  16. aliexpress商品详情API接口(速卖通商品详情页面数据接口)
  17. 布兰妮新年演唱会上用狗项圈“遛”男友
  18. Java中高级面试题部分答案解析(3)
  19. pycuda安装报错(已解决)
  20. 【LabVIEW花样翻新】前言

热门文章

  1. 2021年秋招面经:上海禾赛提前批(FPGA设计)
  2. 微信小程序点击图片预览真机无法显示的问题
  3. 10Mbps以太网的帧长度
  4. python读书心得体会范文_读书的心得体会范文3篇
  5. PaddleOCR 文字检测部分源码学习(8)-损失函数(4)
  6. Node + WebSocket + Vue 聊天室创建群聊/加入群聊功能 – 第五章
  7. python练习_邮件定时收取处理附件后发送结果
  8. 在硬盘上快速安装多个操作系统
  9. mysql存密码_存储用户ID和密码到mysql数据库的方法
  10. 数据库的用户名及密码