离散傅里叶变换 - 快速计算方法及C实现 - 第二篇

DFT – Fast algorithms and C implementations - Part2


Radix-2 DFT

在我的上一篇博客里,已经介绍了基-2 离散傅里叶变换的基本原理(参见第4(4)部分),总结一下就是:

设N长序列\lbrace x_j \rbrace的DFT为N长序列\lbrace X_k \rbrace,若N被2整除,则:

\forall ~k<N/2:~ \begin{cases} X_k = \sum_{j}{x_{2j}W_{N/2}^{jk}} + W_N^k \sum_{j}{x_{2j+1}W_{N/2}^{jk}}\\ X_{k+N/2} = \sum_{j}{x_{2j}W_{N/2}^{jk}} - W_N^k \sum_{j}{x_{2j+1}W_{N/2}^{jk}} \end{cases}

radix-2算法将一个N长的DFT分解为两个N/2长的DFT的线性组合。如果N/2仍然可以被2整除,则可以继续对两个N/2长的子序列进行奇偶分解。如果序列长度为2的指数倍,即

\exists m \in \lbrace 0,1,2,...\rbrace, s.t., N=2^m

则可以应用radix-2算法将N长序列逐渐分解,直至序列长度变成1为止。由于标量的DFT等于其自身(见我的上一篇博客),因此我们实际上已经不需要执行任何一次DFT变换——我们只需要执行几次radix-2变换即可

下面从360图书馆借用两张图来说明这个计算过程:

上图显示的是N=16的DFT计算过程:基于radix-2算法,首先将序列分成偶数列和奇数列,由于两个子序列长度为8,可以进一步对各自进行奇偶分解,经过4次分解以后,我们得到了16组长度为1的子序列,这些序列的DFT等于其自身。下面我们先根据radix-2算法求取8个N=2长序列[0,8], [4,2], [2,10], [6,14], [1,9], [5,13], [3,11], [7,15]的DFT,e.g.,

\mathcal{F} \left( \begin{bmatrix} x_0 \\ x_8 \end{bmatrix} \right ) = \begin{bmatrix} x_0+W_2^0 x_8 \\ x_0-W_2^0 x_8 \end{bmatrix}

然后再根据radix-2算法求取4个N=4长序列[0,4,8,12], [2,6,10,14], [1,5,9,13], [3,7,11,15]的DFT,e.g.,

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值