一、引入:离散傅里叶级数
对于离散傅里叶变换【离散(无穷多项)连续】:
正变换:
逆变换:
其中以为周期。
要在计算机中实现离散傅里叶变换,正变换的实现要无穷多项加和,在计算机中不易实现,逆变换的连续积分更是不易实现。但如果是有限项,N项。那么离散傅里叶变换公式(非最终版)将会变为:
正变换:
反变换:
对于正变换:有限的可以变换成一个连续的吗?显然不能,所以是一个虚假的连续信号。即,只需知道在一个周期内的N个值,那么就可以知道在整个周期内的所有值。
证明:
写成矩阵的形式:
所以只需知道N个的值,就可以反解出N个的值,那么再带入公式就可以得到所有的的值。 图中矩阵为范德蒙德矩阵,其行列式不为0,所以矩阵一定是可逆的。
该过程(由N个的值反解N个的值)的计算复杂度为,
如果选取一组特殊的,那么计算的复杂度可以降为,即在上均匀选取N个点,即选取的为 , ,离散傅里叶变换公式(最终版)将变为:
正变换:
反变换:
证明反变换公式:
由N个反解N个的值的复杂度变为。
二、快速计算离散傅里叶级数算法(FFT)
FFT算法,将上面计算离散傅里叶级数的计算复杂度由变为。
1、N=8时,FFT算法
以N=8为例,
显然,将8点离散傅里叶级数变成了两个4点离散傅里叶级数,
流程图为:
下面是4点FFT流程图:
综合后的流程图:
2、N≠8时,FFT算法
(1)N=9时,可以将9点离散傅里叶级数变为三个3点离散傅里叶级数。
(2)N=17时,在计算正变换离散傅里叶级数前,可以在后补0,将其补为长度的序列。
补0法可以增大频域的分辨率。
具体方法是:
举例:
将17点序列补0至128点序列,FFT后得到的也将是一个128点序列,如何获取的17点序列呢?128/17=7.5294,则17点的中的第一个点在128点的第七个点和第八个点中间,第七个点和第八个点两点确定一条直线,在带入直线求得17点的第一个点,同意的方法求17点的其他点。
三、用FFT计算两个序列的卷积
1、定理
时域卷积等于频域相乘,但在此的卷积是循环卷积(圆卷积)。
2、证明
3、用FFT计算普通卷积(非循环卷积)
时域卷积等于频域相乘,但FFT中的卷积是循环卷积(圆卷积)。
那么普通的卷积如何使用FTFT计算呢?答:补0
若要计算(点序列)与(点序列)的卷积,那么在后补个0,在后补个0,再采用循环卷积,那么得到的结果就是普通的卷积。