python时间序列分解VMD_时间序列matlab


时间抽选奇偶分解基-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

python时间序列分解VMD_知乎_02


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


各点、


各点和


各点的结构是完全一致的,这种结构被称为

蝶形运算(butterfly operation)

比如计算



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


python时间序列分解VMD_python时间序列分解VMD_03

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

再如计算



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


python时间序列分解VMD_知乎_04

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

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


python时间序列分解VMD_时域_05

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算法。