【傅里叶变换与FFT】

FT DFT FFT

  • 傅里叶变换
  • 离散傅里叶变换
  • 快速傅里叶变换

傅里叶变换FT

#。 要学习FFT(快速傅里叶变换),首先我们要了解傅里叶变换,所谓傅里叶变换就是将一个时域信号转化为频域信号
-> 时域信号,是我们最常见的信号,就是随时间变化的信号,如下图【傅里叶变换与FFT】_第1张图片 ,,,,,,,,,,图1-1,,,,,,,,,,

-> 频域信号, 自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,如下图【傅里叶变换与FFT】_第2张图片
,,,,,,,,,,图1-2,,,,,,,,,,

如上图就是频率为2pi的频谱图。
了解了时域与频域,接下来就说傅里叶变换,(任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加),其实傅里叶变换就是将时域信号转化为正弦频域信号(可以理解为将时域转化为频域),其主要就是通过与计算与某一频率的正弦函数的相关性来实现,而傅里叶变化就是通过积分(与要比较的正弦波每点的乘积的累加)的形式来计算相关性,通过公式就更加了解了
在这里插入图片描述其中f(t)是原函数->就是对应的时域函数如图1-1。后半部分是欧拉公式在这里插入图片描述
后半部分可化为( con(ωt) - i * sin(ωt) )就是与原函数进行比较相似度的部分。最后就是将他们相乘再在从负无穷到正无穷进行积分(累加)的到的数值就是原函数与对比部分的相似度即 -> 原函数对应频率的幅值 通过不断调整ω,得到不同频率的幅值,最后得到 频谱图 如上图1-2.

离散傅里叶变换DFT

#。在现实中我们只能测量得到 离散的 有限的 信息,无法得到连续,无穷的信息,于是将傅里叶变换转化为离散数据可处理的公式,如下图
在这里插入图片描述再通过欧拉公式转换为下图公式在这里插入图片描述
公式原理与上傅里叶变换意义基本相同,只是将原公式的积分区间 从负无穷到正无穷, 改变为从0到N-1。将积分改为累加(其实积分本就是累加)。
通过以上方式就将傅里叶变换转化为离散傅里叶变换。
#。但是我们从公式观察理解就会发现有一个很大的不足,就是需要做大量的乘法与加法,很难应用到实际中,于是人们改进出快速傅里叶变换,实现将函数从时域快速转化为频域。下面就来说明快速傅里叶变换。

快速傅里叶变换FFT

#。接下来就要说明FFT了。FFT只是在DFT的基础上进行化简等效。
我们先将DFT原式化为更容易处理的式子 X(k) = ∑ n = 0 N − 1 x ( n ) ( e − j 2 π k N ) n \sum_{n=0}^{N-1}x(n)(e^{-j\frac{2\pi k}{N}})^{n} n=0N1x(n)(ejN2πk)n
再将X(k)中的k用 e − j 2 π k N e^{-j\frac{2\pi k}{N}} ejN2πk 表示 >> A( e − j 2 π k N e^{-j\frac{2\pi k}{N}} ejN2πk) = ∑ n = 0 N − 1 x ( n ) ( e − j 2 π k N ) n \sum_{n=0}^{N-1}x(n)(e^{-j\frac{2\pi k}{N}})^{n} n=0N1x(n)(ejN2πk)n
进一步 >> A(x) = ∑ i = 0 n − 1 a i x i \sum_{i = 0}^{n-1}a_{i}x^{i} i=0n1aixi = a 0 + a 1 x + a 2 x 2 + . . . + a n − 1 x n − 1 a_{0} + a_{1}x + a_{2}x^{2} + ... + a_{n-1}x^{n-1} a0+a1x+a2x2+...+an1xn1
这样就化为我们常见的式子了。

#。接着就是FFT的核心了,分解(将A(x)的奇数项和偶数项分开)。
按A(x)下标的奇偶性把A(x)分成两项,并将后式提出一个x
A(x) =
a 0 + a 2 x 2 + . . . + a n − 2 x n − 2 a_{0} + a_{2}x^{2} + ... + a_{n-2}x^{n-2} a0+a2x2+...+an2xn2
a 1 x + a 3 x 3 + . . . + a n − 1 x n − 1 a_{1}x + a_{3}x^{3} + ... + a_{n-1}x^{n-1} a1x+a3x3+...+an1xn1

=>
A ( x ) = A 1 ( x ) + A 2 ( x ) A(x) = A_{1}(x) + A_{2}(x) A(x)=A1(x)+A2(x)
A 1 ( x ) = a 0 + a 2 x 2 + a 4 x 4 + . . . + a n − 2 x n − 2 A_{1}(x) = a_{0} + a_{2}x^{2} + a_{4}x^{4} + ... + a_{n-2}x^{n-2} A1(x)=a0+a2x2+a4x4+...+an2xn2
A 2 ( x ) = x ( a 1 + a 3 x 2 + a 5 x 4 + . . . + a n − 1 x n − 2 ) A_{2}(x)=x( a_{1} + a_{3}x^{2} + a_{5}x^{4} + ... + a_{n-1}x^{n-2}) A2(x)=x(a1+a3x2+a5x4+...+an1xn2)

是不是发现了什么,是的最后结果就是
A ( x ) = A 1 ( x 2 ) + x A 2 ( x 2 ) A(x) = A_{1}(x^{2}) +x A_{2}( x^{2}) A(x)=A1(x2)+xA2(x2) (x的范围变为原来的一半)

由上方化简DFT的第2步 x即 e − j 2 π k N e^{-\frac{j2\pi k}{N}} eNj2πk (欧拉转换-> con( 2 π k N \frac{2\pi k}{N} N2πk) -j * sin( 2 π k N \frac{2\pi k}{N} N2πk)
w n k w_{n}^{k} wnk 来表示上式 (此处用n代表N)。

前一半: A ( w n k ) = A 1 ( w n 2 k ) + x A 2 ( w n 2 k ) ( k ∈ 0 − 2 n ) A(w_{n}^{k}) = A_{1}(w_{n}^{2k}) +x A_{2}(w_{n}^{2k}) (k\in0-{\frac2{n}}) A(wnk)=A1(wn2k)+xA2(wn2k)(k0n2)
后一半: A ( w n k + 2 n ) = A 1 ( w n 2 k + n ) + x A 2 ( w n 2 k + n ) ( k ∈ 0 − 2 n ) A(w_{n}^{k + \frac2{n}}) = A_{1}(w_{n}^{2k+n}) +x A_{2}(w_{n}^{2k+n}) (k\in0-{\frac2{n}}) A(wnk+n2)=A1(wn2k+n)+xA2(wn2k+n)(k0n2)

又由于 w n k w_{n}^{k} wnk 是复数,是周期函数,如图
【傅里叶变换与FFT】_第3张图片

我们可以利用单位根的性质 对DFT原式进行化简

  • w n k = w 2 n 2 k w_{n}^{k}= w_{2n}^{2k} wnk=w2n2k
  • w n k + n 2 = − w n 2 k w_{n}^{k+\frac{n}{2}}= -w_{n}^{2k} wnk+2n=wn2k

代入化简得
A ( w n k ) = A 1 ( w n 2 k ) + w n 2 k A 2 ( w n 2 k ) ( k ∈ 0 − 2 n ) A(w_{n}^{k}) = A_{1}(w_{\frac n{2}}^{k}) + w_{\frac n{2}}^{k} A_{2}(w_{\frac n{2}}^{k}) (k\in0-{\frac2{n}}) A(wnk)=A1(w2nk)+w2nkA2(w2nk)(k0n2)
A ( w n k + 2 n ) = A 1 ( w n 2 k ) − w n 2 k A 2 ( w n 2 k ) ( k ∈ 0 − 2 n ) A(w_{n}^{k + \frac2{n}}) = A_{1}( w_{\frac n{2}}^{k} ) - w_{\frac n{2}}^{k} A_{2}( w_{\frac n{2}}^{k} ) (k\in0-{\frac2{n}}) A(wnk+n2)=A1(w2nk)w2nkA2(w2nk)(k0n2)

由此发现,一个较长的DFT可以有两个较短的DFT组成,通过不断的分解直到无法分解,
这样问题最后就分解成许多由两个元素组成的DFT,复杂问题被简化,接下来我们寻找分解规律
【傅里叶变换与FFT】_第4张图片再对起止的数分析在这里插入图片描述
很明显最后分解的顺序就是0-n的二进制数的倒序(倒序可以通过位操作轻松处理)

对分解结构化(蝴蝶操作基础)
【傅里叶变换与FFT】_第5张图片

既然发现最后分解后的顺序,我们可以直接通过蝶形算法不断 复数乘以 旋转因子 然后根据复数加减向上合并,完成FFT。注意:所有和 w w w有关的计算全部要使用复数的加减乘法运算法则( w w w的实部与虚部可以提前通过电脑计算出存储在程序中,减少计算量,为再次减少计算量可以通过简化只处理sin部分,不过会丢失相位信息)。【傅里叶变换与FFT】_第6张图片

你可能感兴趣的:(数字信号处理)