1. 傅里叶变换

周期为𝑇的函数𝑓(𝑥)可以用傅里叶级数来表示,但是无法表示非周期函数。非周期函数可以看做周期𝑇的周期函数。 当𝑇时,则

𝜔=2𝜋𝑇0

代入傅里叶级数中,得到:

𝑓(𝑥)=𝑛=𝑑𝑛·𝑒𝑖𝑛𝜔𝑥=𝑛=(1𝑇·𝑇2𝑇2𝑓(𝑥)·𝑒𝑖𝑛𝜔𝑥)·𝑒𝑖𝑛𝜔𝑥=𝑛=(12𝜋·𝜔·𝑇2𝑇2𝑓(𝑥)·𝑒𝑖𝑛𝜔𝑥)·𝑒𝑖𝑛𝜔𝑥

基于定积分的概念,式 2 可以看做对连续变量𝜔的黎曼和形式。对于连续变量𝜔,将定义区间分为𝑚份小区间,每个区间的长度为Δ𝜔,为微小增量。对于第𝑛个区间,选取的变量为𝜀=𝑛Δ𝜔,则式 2 可以变换为:

𝑓(𝑥)=𝑛=𝑑𝑛·𝑒𝑖𝑛𝜔𝑥=𝑛=(12𝜋·Δ𝜔·𝑇2𝑇2𝑓(𝑥)·𝑒𝑖𝜀𝑥)·𝑒𝑖𝜀𝑥=𝑛=((12𝜋·𝑇2𝑇2𝑓(𝑥)·𝑒𝑖𝜀𝑥)·𝑒𝑖𝜀𝑥)·Δ𝜔=12𝜋𝑓(𝑥)·𝑒𝑖𝜔𝑥·𝑒𝑖𝜔𝑥𝜔𝜔=12𝜋·𝑓(𝑥)·𝑒𝑖𝜔𝑥·𝑒𝑖𝜔𝑥𝜔𝜔

𝐹(𝜔)为:

𝐹(𝜔)=𝑓(𝑥)·𝑒𝑖𝜔𝑥

则傅里叶变换公式可以表示为:

𝑓(𝑥)=𝐹(𝜔)·𝑒𝑖𝜔𝑥𝜔𝜔

其中𝐹(𝜔)为频率为𝜔时的线性组合系数。

2. 离散傅里叶变换

傅里叶变换与傅里叶级数都是对连续信号进行分析处理的工具,而无法对离散的时间信号或者有限长信号进行分析。为了解决傅里叶变换的局限性, 离散傅里叶变换被提出来对离散时间信号进行频谱分析,例如二维图像、离散采样的信号等。

2.1. 周期离散信号的表示

对于离散信号𝑥[𝑛],如果满足:

𝑥[𝑛]=𝑥[𝑛+𝑁]

则该信号为一个周期为𝑁的信号。其最小正周期为𝑁,频率𝜔𝑜=2𝜋/𝑁

复指数函数𝜙[𝑛]=𝑒𝑖𝜔𝑜𝑛也是周期函数,其中𝑛为函数自变量。该函数的周期为𝑁。并且,式 7 中的复指数函数都是周期函数,

𝜙𝑘[𝑛]=𝑒𝑖𝑘𝜔𝑜𝑛=𝑒𝑖𝑘2𝜋𝑁·𝑛,𝑘=±0,±1,±2,

fuzhishu 其频率都是𝜔𝑜的倍数。

事实上,式 7 中只有𝑁个函数是不同。因为函数𝜙[𝑛]为周期函数,其周期为𝑁,因此:

𝜙𝑘+𝑚𝑁[𝑛]=𝜙𝑘[𝑛]

另外,设函数集合Φ定义如下:

Φ={𝑒𝑖𝑘𝜔𝑜𝑛|𝑘=0,1,2,,𝑁1}

定义在函数集Φ上的内积为:

𝑓[𝑛],𝑔[𝑛]=𝑘=0𝑁1𝑓[𝑛]·𝑔[𝑛]

则可以证明:函数集Φ是正交函数集。

因此,任意的周期为𝑁的离散信号𝑥[𝑛]都可以使用正交函数集Φ的线性组合来表示,即:

𝑥[𝑛]=𝑘=0𝑁1𝑎𝑘·𝜙𝑘[𝑛]

其中,系数𝑎𝑛可以用正交函数的性质表示为:

𝑎𝑘=1𝑁·𝑥[𝑛],𝜙𝑘[𝑛]=1𝑁·𝑛=0𝑁1(𝑥[𝑛]·𝑒𝑖𝑘𝜔𝑜𝑛)

3. 快速傅里叶变换

离散傅里叶变换需要求𝑁个线性组合系数𝑎𝑘,而每个系数𝑎𝑘都需要𝑁次复数乘法。因此,计算所有𝑁个组合系数的算法复杂度为𝑂(𝑛2)

为了解决计算离散傅里叶系数的算法复杂度过高的问题,快速傅里叶变换被提出了。快速傅里叶变换利用分治的思想,将大规模的DFT(discret fourier transform)问题转换为若干个小规模的DFT问题进行递归求解,其算法复杂度为𝑂(𝑛log𝑛)

3.1. 𝑁次单位根及其性质

对于复平面上的单位圆,将其𝑁等分,得到𝑁个等分点的集合,该集合称为𝑁次单位根。其中每个点的相位角相差2𝜋𝑁弧度。该集合中的根可以表示为:

𝑊𝑁𝑘=𝑒𝑖2𝜋𝑁·𝑘,𝑘=0,1,,𝑁1

3.2. 快速傅里叶算法

对于周期为𝑁的函数𝑥[𝑛],其线性组合系数为𝑎0,𝑎1,,𝑎𝑁1。 离散傅里叶变换的线性组合系数𝑎𝑘的计算公式如下:

𝑎𝑘=1𝑁·𝑛=0𝑁1(𝑥[𝑛]·𝑒𝑖𝑘𝜔𝑜𝑛)

其中:

𝜔𝑜=2𝜋𝑁

对该公式中的形式进行简化,令

𝛼=𝑒𝑖𝑘𝜔𝑜=𝑊𝑁𝑘,

且令函数𝑓(𝛼)为:

𝑓(𝛼)=𝑛=0𝑁1(𝑥[𝑛]·𝑒𝑖𝑘𝜔𝑜𝑛)=𝑛=0𝑁1(𝑥[𝑛]·𝛼𝑛)

3.2.1. 分治法

将函数𝑓(𝑎)分解为:

𝑓(𝛼)=𝑥[0]·𝛼0+𝑥[1]·𝛼1++𝑥[𝑁1]·𝛼𝑁1=(𝑥[0]·𝛼0+𝑥[2]·𝛼2++𝑥[𝑁2]·𝛼𝑁2)+(𝑥[1]·𝛼1+𝑥[3]·𝛼3++𝑥[𝑁1]·𝛼𝑁1)=(𝑥[0]·𝛼0+𝑥[2]·𝛼2++𝑥[𝑁2]·𝛼𝑁2)+𝛼·(𝑥[1]·𝛼0+𝑥[3]·𝛼2++𝑥[𝑁1]·𝛼𝑁2)

𝑓1(𝛼)=(𝑥[0]·𝛼0+𝑥[2]·𝛼1++𝑥[𝑁2]·𝛼𝑁21)𝑓2(𝛼)=(𝑥[1]·𝛼1+𝑥[3]·𝛼1++𝑥[𝑁1]·𝛼𝑁21)

𝑓(𝛼)=𝑓1(𝛼2)+𝛼·𝑓2(𝛼2)

根据𝑁次方根的性质3,即:

𝑊𝑁𝑚𝑘=𝑊𝑁𝑚𝑘

可以得到:

𝑓(𝛼)=𝑓(𝑊𝑁𝑘)=𝑓1(𝑊𝑁2𝑘)+𝛼·𝑓2(𝑊𝑁2𝑘)=𝑓1(𝑊𝑁2𝑘)+𝛼·𝑓2(𝑊𝑁2𝑘)

函数𝑓1(𝑊𝑁2𝑘)展开为:

𝑓1(𝑊𝑁2𝑘)=𝑥[0]·𝑊𝑁2𝑘·0+𝑥[2]·𝑊𝑁2𝑘·1+𝑥[4]·𝑊𝑁2𝑘·2++𝑥[2𝑁2]·𝑊𝑁2𝑘·𝑛

对于周期为𝑁的信号𝑥[𝑛],将其下标𝑛为偶数与奇数的信号元素进行分组,可以得到两个子信号,分别为𝑥[2𝑛]以及x[2 n + 1],其中𝑛满足:

𝑛𝑍,𝑛𝑁2

因此,𝑓1(𝑊𝑁2𝑘)可以看做是对周期为𝑁2的信号𝑥[2𝑛]求取系数𝑎𝑘过程。同理,𝑓2(𝑊𝑁2𝑘)可以看为对周期为𝑁2的信号𝑥[2𝑛+1]求取系数𝑎𝑘的过程。

从上面可以看出,对于周期为𝑇的信号𝑥[𝑛],求取其离散傅里叶变换系数{𝑎𝑘|𝑘=0,1,,𝑁1}的过程,可以划分为两个子问题:

  • 求子信号𝑥[2𝑛]的离散傅里叶变换系数
  • 求子信号𝑥[2𝑛+1]的离散傅里叶变换系数

该流程一直会递归,则到子信号的周期为1,此时可以直接求解。

3.2.2. 周期性

当对周期为𝑇的信号𝑥[𝑛]求离散傅里叶变换的系数时,根据𝑁次单位根的对称性,可以发现以下结论:

𝑚=𝑘+𝑁2,其中0𝑘<𝑁2。根据𝑁次单位根的周期性有:

𝑓(𝑊𝑁𝑘+𝑁2)=𝑓1(𝑊𝑁2𝑘+𝑁)+𝑊𝑁𝑘+𝑁2·𝑓2(𝑊𝑁2𝑘+𝑁)=𝑓1(𝑊𝑁2𝑘·𝑊𝑁𝑁)+𝑊𝑁𝑘+𝑁2·𝑓2(𝑊𝑁2𝑘·𝑊𝑁𝑁)=𝑓1(𝑊𝑁2𝑘·1)+𝑊𝑁𝑘+𝑁2·𝑓2(𝑊𝑁2𝑘·1)=𝑓1(𝑊𝑁2𝑘)𝑊𝑁𝑘·𝑓2(𝑊𝑁2𝑘)=𝑓1(𝑊𝑁2𝑘)𝑊𝑁𝑘·𝑓2(𝑊𝑁2𝑘)=𝑓1(𝑊𝑁2𝑘)𝛼·𝑓2(𝑊𝑁2𝑘)

因此,当𝑚>𝑁2时,根据对称性,可以通过子信号𝑥[2𝑛]𝑥[2𝑛+1]的离散傅里叶变换系数,可以简单的得到离散傅里叶变换中𝑎𝑚的系数值。