傅里叶变换,离散傅里叶和快速傅里叶



一,预备知识

1,三角函数正交性

对于三角函数系:
{1,sinx,cosx,,sinnx,cosnx}(1.1)\{1,\sin{ x },\cos{ x },\dotsm,sin{ nx },cos{ nx }\} \tag{1.1}
任意取两个三角函数,满足:
ππsinnxcosmxdx=0,mn(1.2)\int_{-\pi}^{\pi} \sin{nx} \cos{mx} \mathrm{d}x = 0,m \not = n \tag{1.2}

2,傅里叶变换思想

f(x)f(x)可以转换为三角函数系的加和:
f(x)=a02+k=1akcoskωx+k=1aksinkωx(1.3)f(x)=\frac{a_0}{2} + \sum_{k=1}^{\infty} a_k \cos{k \omega x} + \sum_{k=1}^{\infty} a_k \sin{k \omega x} \tag{1.3}

二,傅里叶级数

函数f(x)f(x)周期为T,在复数域下求解得:
f(x)=f(x+T)f(x)=cneinωxcn=1T0Tf(x)einωxdx(2.1)\begin{array}{l} f(x) = f(x + T) \\ f(x) = \sum_{-\infty}^{\infty} c_n e^{i n \omega x} \\ c_n = \frac{1}{T} \int_{0}^{T} f(x) e^{-i n \omega x} \mathrm{d}x \end{array} \tag{2.1}

注意:这里的ω=2πT\omega = \frac{2 \pi}{T},为基频率,是常值。

三,连续的傅里叶变换

函数f(x)f(x)没有周期。
f(x)=c(ω)eiωxdωc(ω)=12πf(x)eiωxdx(3.1)\begin{array}{l} f(x) = \int_{-\infty}^{\infty} c(\omega) e^{i \omega x} \mathrm{d} \omega\\ c(\omega) = \frac{1}{ 2 \pi} \int_{-\infty}^{\infty} f(x) e^{-i \omega x} \mathrm{d}x \end{array} \tag{3.1}

注意:这里的ω\omega是连续变量。

存在条件:
f(t)dt<(3.2)\int_{-\infty}^{\infty} |f(t)| dt < \infty \tag{3.2}

四,离散傅里叶变换

1,作用

不是新的理论,而是计算cnc_n算法:通过N个离散的等距的采样点,计算出周期为T的函数f(x)f(x)的傅里叶级数cnc_n(这里的 T 可以推广到无周期)

2,前提假设

f(x)f(x)的傅里叶级数形式为有限个[c0,c1,,cN1][c_0,c_1,\dotsm,c_{N-1}]

3,基wkw^k

1,定义
wk=ek2πiN(4.1)w^k = e^{ k \frac{2 \pi i}{N}} \tag{4.1}

2,性质

N个采样点,w0,w1,,wN1w^0,w^1,\dotsm,w^{N - 1}在复平面上是一个圆。对于wN,wN+1,w^{N},w^{N+1},\dotsm则在这个圆上循环。

w

4,傅里叶离散

取N个采样点[(0TN,f(0TN)),(1TN,f(1TN)),,((N1)TN,f((N1)TN))][(0 \frac{T}{N},f(0 \frac{T}{N})),(1 \frac{T}{N},f(1 \frac{T}{N})),\dotsm,((N - 1) \frac{T}{N},f((N - 1) \frac{T}{N}))]。分别带入傅里叶级数(2.1)(2.1),得到N个方程,然后求解方程组,得到cnc_n序列,实现傅里叶变换

例如,令x=TNx = \frac{T}{N},则ωTN=2πN\omega \frac{T}{N}= \frac{2 \pi}{N},带入(2.1)(2.1)得到:
f(TN)=+c1e12πiN+c0e02πiN+c1e2πiNcNeN2πiN+cN+1e(N+1)2πiN=+c1w1+c0w0+c1w1cNwN+cN+1wN+1(4.2)\begin{aligned} f(\frac{T}{N}) &= \cdots+c_{-1} e^{-1 \frac{2 \pi i}{N}}+c_{0} e^{0 \frac{2 \pi i}{N}}+c_{1} e^{\frac{2 \pi i}{N}} \cdots c_{N} e^{N \frac{2 \pi i}{N}}+c_{N+1} e^{(N+1) \frac{2 \pi i}{N}}\cdots \\ &= \cdots+c_{-1} w^{-1} + c_{0} w^{0} + c_{1}w^{1} \cdots c_{N} w^{N} +c_{N+1} w^{N + 1} \cdots \end{aligned} \tag{4.2}
由所有的wkw^k都可以化解为[w0,w1,,wN1][w^0,w^1,\dotsm,w^{N - 1}]中的某个形式。所以(4.2)(4.2)进一步化解:
f(TN)=(cN+c0+cN)w0+(cN+1+c1+cN+1)w1+(cN+2+c2+cN+2)w2+(c1+cN1+c2N1)wN1(4.3)\begin{aligned} f(\frac{T}{N}) &= (\dotsm c_{-N} + c_{0} + c_{N} \dotsm) w^{0} \\ &+ (\dotsm c_{-N + 1} + c_{1} + c_{N+1} \dotsm) w^{1} \\ &+ (\dotsm c_{-N + 2} + c_{2} + c_{N+2} \dotsm) w^{2} \\ &\dotsm \\ &+ (\dotsm c_{- 1} + c_{N-1} + c_{2N-1} \dotsm) w^{N - 1} \\ \end{aligned} \tag{4.3}

通过(2.1)(2.1)式还可以看出,x=kTNx = k \frac{T}{N}只会影响f(x)f(x)中的wkw^k项,而不会影响cnc_n值。剩余的N-1个采样点均可以按照上述方式进行处理。
f(kTN)=(cN+c0+cN)w0k+(cN+1+c1+cN+1)w1k+(cN+2+c2+cN+2)w2k+(c1+cN1+c2N1)w(N1)k(4.4)\begin{aligned} f(k \frac{T}{N}) &= (\dotsm c_{-N} + c_{0} + c_{N} \dotsm) w^{0 k} \\ &+ (\dotsm c_{-N + 1} + c_{1} + c_{N+1} \dotsm) w^{1k} \\ &+ (\dotsm c_{-N + 2} + c_{2} + c_{N+2} \dotsm) w^{2k} \\ &\dotsm \\ &+ (\dotsm c_{- 1} + c_{N-1} + c_{2N-1} \dotsm) w^{( N - 1 )k} \\ \end{aligned} \tag{4.4}

再引入假设,傅里叶级数形式为有限个[c0,c1,,cN1][c_0,c_1,\dotsm,c_{N-1}]
f(kTN)=c0w0k+c1w1k+c2w2k+cN1w(N1)k(4.5)\begin{aligned} f(k \frac{T}{N}) &= c_{0} w^{0 k} \\ &+ c_{1} w^{1k} \\ &+ c_{2} w^{2k} \\ &\dotsm \\ &+ c_{N-1} w^{( N - 1 )k} \\ \end{aligned} \tag{4.5}

(4.5)(4.5)写成矩阵形式,进行解方程组计算。
[f(0TN)f(1TN)f(2TN)f(3TN)f((N1)TN)]=[111111ww2w3wN11w2w4w6w2(N1)1w3w6w9w3(N1)1wN1w2(N1)w3(N1)w(N1)2][c0c1c2c3cN1]\left[\begin{array}{c} f(0 \frac{T}{N}) \\ f(1 \frac{T}{N}) \\ f(2 \frac{T}{N}) \\ f(3 \frac{T}{N}) \\ \vdots \\ f((N-1) \frac{T}{N}) \end{array}\right]=\left[\begin{array}{cccccc} 1 & 1 & 1 & 1 & \cdots & 1 \\ 1 & w & w^{2} & w^{3} & \cdots & w^{N-1} \\ 1 & w^{2} & w^{4} & w^{6} & \cdots & w^{2(N-1)} \\ 1 & w^{3} & w^{6} & w^{9} & \cdots & w^{3(N-1)} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & w^{N-1} & w^{2(N-1)} & w^{3(N-1)} & \cdots & w^{(N-1)^{2}} \end{array}\right]\left[\begin{array}{c} c_{0} \\ c_{1} \\ c_{2} \\ c_{3} \\ \vdots \\ c_{N-1} \end{array}\right]

注意: 采样值N一定要大于等于f(x)f(x)的傅里叶级数的个数,才能实现对系数cnc_n的求解。否则会导致cnc_n的重合

5、频率的换算

  对于序列傅里叶变换而言: ΩT=ω\Omega T = \omega, T=1FsT = \frac{1}{Fs}为信号的采样周期。对于离散傅里叶变换而言:可以将 ω=2πNk\omega = \frac{2 \pi}{N} k。整理两个方程,就能将离散傅里叶变换的频率变量 kk 换算为真实的角频率 Ω\Omega

Ω=ωT=k2πFsN(5.3)\Omega = \frac{\omega}{T} = k 2 \pi \frac{Fs}{N} \tag{5.3}

其中:Fs为时域信号的采样频率;N为离散傅里叶变换的点数。

五,快速傅里叶变换

1,作用

加速离散傅里叶变换计算的算法

2,基的共轭wˉk\bar{w}^k

将上述方程组进行改写:
[111111wˉwˉ2wˉ3wˉN11wˉ2wˉ4wˉ6wˉ2(N1)1wˉ3wˉ6wˉ9wˉ3(N1)1wˉN1wˉ2(N1)wˉ3(N1)wˉ(N1)2][f0f1f2f3fN1]=[c0c1c2c3cN1]\left[\begin{array}{cccccc} 1 & 1 & 1 & 1 & \cdots & 1 \\ 1 & \bar{w} & \bar{w}^{2} & \bar{w}^{3} & \cdots & \bar{w}^{N-1} \\ 1 & \bar{w}^{2} & \bar{w}^{4} & \bar{w}^{6} & \cdots & \bar{w}^{2(N-1)} \\ 1 & \bar{w}^{3} & \bar{w}^{6} & \bar{w}^{9} & \cdots & \bar{w}^{3(N-1)} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & \bar{w}^{N-1} & \bar{w}^{2(N-1)} & \bar{w}^{3(N-1)} & \cdots & \bar{w}^{(N-1)^{2}} \end{array}\right]\left[\begin{array}{c} f_{0} \\ f_{1} \\ f_{2} \\ f_{3} \\ \vdots \\ f_{N-1} \end{array}\right] = \left[\begin{array}{c} c_{0} \\ c_{1} \\ c_{2} \\ c_{3} \\ \vdots \\ c_{N-1} \end{array}\right]
定义wˉk\bar{w}^k
wˉk=ek2πiN(4.6)\bar{w}^k = e^{-k\frac{2 \pi i}{N}} \tag{4.6}

3,矩阵乘法

交换顺序,矩阵乘积的结果不变。

matrix

4,快速傅里叶变换推导

1)对于傅里叶的共轭矩阵将偶数列排在前,将奇数列排在后(编号从0开始)。

change matrix

2)对交换后的矩阵进行分块

sub matrix

注意:

  1. 子块F2F_2并不是采样数为2时的傅里叶共轭矩阵
  2. wˉk\bar{w}^k,当N=2n4N = 2^n \ge 4时,对于wˉN2=1\bar{w}^{\frac{N}{2}} = -1;(此时采样点在园上对半分,第N2\frac{N}{2}个采样点就刚好在负实轴上。)
  3. 上述分块法用于N=2nN = 2^n的情况

3)将分块公式一般化

normal
normal1
normal2

4)获得递推式,实现快速傅里叶算法计算公式l

FN[f0f1f2f3fN1]=[IDN2IDN2][FN2xeven FN2xodd ](4.7)F_{N} \left[\begin{array}{c} f_{0} \\ f_{1} \\ f_{2} \\ f_{3} \\ \vdots \\ f_{N-1} \end{array}\right]=\left[\begin{array}{cc} I & D_{\frac{N}{2}} \\ I & -D_{\frac{N}{2}} \end{array}\right]\left[\begin{array}{c} F_{\frac{N}{2}} \mathbf{x}_{\text {even }} \\ F_{\frac{N}{2}} \mathbf{x}_{\text {odd }} \end{array}\right] \tag{4.7}

5,编程流程

自下而上的迭代计算递推式(4.7)(4.7)

programme

参考