时间序列matlab_1周学FFT——第5天 时间抽选奇偶分解基-2 FFT算法

993b7fd1282eb775975efb67406b6e3c.png

时间抽选奇偶分解基-2 FFT算法名字很长,其内容包括三部分内容

  1. 时间抽选(Decimation-in-time,DIT)是指在时域内将序列
    进行分解;
  2. 奇偶分解是指按照n的取值将
    分为奇偶两组,目的是将计算1个N点的DFT转化为计算2个
    点的DFT;
  3. 基-2(radix-2)是指
    ,M为自然数,比如
    就是符合基-2条件的。目的是可以一直进行奇偶分解直到将N点DFT分解为一堆2点DFT。

在不致混淆的时候,时间抽选奇偶分解基-2 FFT算法可简称为基-2 FFT算法。由于基-2可以最大限度的减少乘法运算次数,所以实际当中如果点数不满足基-2条件,可以人为在

中填补零点凑
基-2

以下为算法的推导过程: 序列

的DFT序列为:

,则n取偶数时可写作
,n取奇数时可写作
,按照奇偶将上式分为两组:

根据周期性2

,所以式(1)又可以写作:

则根据定义,

都是
点DFT。于是,将式(3)、(4)带入式(2)可得:

式(5)表示

可分解为两个折半点数的DFT
的和。由于
,因此上式只能表示
点的
。对于
的另一半,可以利用DFT隐含的周期性得到。因为
是周期为
的周期序列,所以:

所以将

代入式(5)得:

将式(5)、(6)合并可得

的完整表达式:

式(3)、(4)、(7)就是基-2FFT算法的核心

例子:

利用基-2 FFT算法求序列x(n)的N=4的DFT。

知乎对多行公式的支持简直一言难尽,没办法只能在其他地方再贴一遍:

1周学FFT——第5天 时间抽选奇偶分解基-2 FFT算法​www.jianshu.com
e5d7ec754e32c1826c77091f8962a13d.png

另外,通过观察可以发现,计算

各点、
各点和
各点的结构是完全一致的,这种结构被称为
蝶形运算(butterfly operation)

比如计算

的算式可以绘制为如下所示的蝶形运算:

81462ef27fcf0033910a372dca9f341b.png
计算$X_1(0)$和$X_1(1)$的蝶形运算示意图

再如计算

的算式可以绘制为如下所示的蝶形运算:

15849841162b2c72ec5a042d60558655.png
计算$X(0)$和$X(2)$的蝶形运算示意图

将N=4的基-2FFT算法全部的蝶形运算画在一起如下图所示:

a0c93318a329e568becf6e6d3eab1322.png
N=4时蝶形运算全貌

一次标准的蝶形运算包含1次复数乘法和2次复数加法(或1次复数乘加和1次复数加法)。如上图所示,N=4的DFT需要4次蝶形运算,共计4次复数乘法,远少于传统DFT的16次复数乘法。更进一步,经过更一般的推导可知,基-2 FFT算法的时间复杂度为

,当N=1024时,基-2 FFT算法比传统算法快64倍。

习题

  1. 根据基-2 FFT算法求序列x(n)的8点DFT,并画出蝶形流程图;
  2. 设计matlab程序,实现基-2 FFT算法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
时间-2FFT(Fast Fourier Transform)是一种常用于高效计算离散傅里叶变换(DFT)的算法。这种算法利用了快速算法的原则,通过分解DFT运算,减少计算次数和运算复杂度。 针对-2FFT算法的matlab实现,首先需要明确输入和输出的格式。通常输入是一个一维复数序列,输出是其离散傅里叶变换的结果。 在matlab中,可以使用fft函数实现-2FFT算法。具体的实现步骤如下: 1. 根据输入序列的长度N,将其分解成二进制形式的N个不同的子序列,每个子序列都对应着一个频率。 2. 对每个子序列进行二进制反转,以便在后续计算中进行时间。 3. 根据结果,将子序列分为两部分,数次项和数次项。 4. 对数次项和数次项分别进行-2FFT递归运算。 5. 将递归运算的结果按照结果重新组合,并乘上对应的旋转因子。 6. 重复步骤4和5,直到得到最终的离散傅里叶变换结果。 在matlab中,可以通过以下代码实现-2FFT算法的计算: ```matlab function output = base2fft(input) N = length(input); if N == 1 output = input; else even = base2fft(input(1:2:N-1)); odd = base2fft(input(2:2:N)); exponent = exp(-2i * pi * (0:N/2-1) / N); output = [even + odd .* exponent, even - odd .* exponent]; end end ``` 调用该函数,即可得到输入序列的离散傅里叶变换结果。 时间-2FFT快速算法是一种高效的算法,可以在较短的时间内计算出离散傅里叶变换结果。在matlab中,通过调用fft函数或者使用自定义的-2FFT函数,我们可以方便地实现该算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值