Bootstrap

【数字信号处理】DFT

DFT

2023年11月18日
#elecEngeneer



1. 离散傅里叶变换-DFT

离散傅里叶变换(Discrete Fourier Transform,DFT),是当有 N {N} N 个信号采样点,且采样间隔为 T {T} T 时候的傅里叶变换。
实际信号不可能无限长,所以采样点只有有限个。
傅里叶变换中,离散与周期相对应。有限个离散采样点做傅里叶变换(即DTFT,离散时间傅里叶变换)得到的是连续且有周期性(周期为 2 π {2\pi} 2π )的频谱。
如果我们把已有的采样点不断重复,就得到了时域上离散且有周期性的函数,这样傅里叶变换的频谱也是离散且有周期性的。
这种将已有采样点延拓成周期信号做傅里叶变换的方法即为DFT。
在这里插入图片描述
时域中的一个周期与频域中的一个周期相对应。时域中一个周期包含所有采样点。
显然,DFT时域与频域一个周期中离散点的个数是有限的,于是可以用计算机进行运算。
设有连续信号 f ( t ) {f(t)} f(t) ,和 N {N} N 个采样点 f [ 0 ] , f [ 1 ] , f [ 2 ] , ⋯   , f [ N − 1 ] {f[0],f[1],f[2], \cdots ,f[N-1]} f[0],f[1],f[2],,f[N1] ,连续信号的傅里叶变换为:
F ( j ω ) =  FT  ∫ − ∞ ∞ f ( t ) e − j ω t d t F(j \omega ) \stackrel{\text{ FT }}{=} \int_{ -\infty }^{ \infty } f(t) e^{-j \omega t} \mathrm dt F()= FT f(t)etdt
我们认为每个采样点 f [ n ] {f[n]} f[n] 都是一个冲激函数,相加得到采样后的 f ( t ) {f(t)} f(t) ,将采样后的 f ( t ) {f(t)} f(t) 代入上式就得到了DTFT的公式,积分仅在冲激函数处存在:
F ( j ω ) =  DTFT  ∫ 0 ( N − 1 ) T f ( t ) e − j ω t d t    ,    t = n T = f [ 0 ] e − j 0 + f [ 1 ] e − j ω T + f [ 2 ] e − j ω 2 T + ⋯ + f [ N − 1 ] e − j ω ( N − 1 ) T = ∑ n = 0 N − 1 f [ n ] e − j ω n T \begin{align*} F(j \omega ) \stackrel{\text{ DTFT }}{=} & \int_{ 0 }^{ (N-1)T } f(t) e^{-j \omega t} \mathrm dt \,\,,\,\, t=nT \\ \\ =&f[0] e^{-j0}+f[1]e^{-j \omega T}+f[2]e^{-j \omega 2T}+ \cdots +f[N-1]e^{-j \omega (N-1)T} \\ \\ =& \sum_{n=0}^{ N-1} f[n]e^{-j \omega nT} \end{align*} F()= DTFT ==0(N1)Tf(t)etdt,t=nTf[0]ej0+f[1]eT+f[2]e2T++f[N1]e(N1)Tn=0N1f[n]ejωnT
DTFT的频谱是连续的,我们将时域的离散信号延拓成周期离散信号,可以得到离散且有周期性的频谱。
由于频谱有周期性,我们只观察离散频谱的第一个周期,其中离散点为:
ω = 0 , 2 π N T , 2 π N T × 2 , ⋯   , 2 π N T × k , ⋯   , 2 π N T × ( N − 1 ) \omega =0 , \frac{2\pi}{NT} , \frac{2\pi}{NT}\times 2 , \cdots , \frac{2\pi}{NT} \times k , \cdots , \frac{2\pi}{NT}\times (N-1) ω=0,NT2π,NT2π×2,,NT2π×k,,NT2π×(N1)
于是我们得到DFT的公式:
F [ k ] =  DFT  ∑ n = 0 N − 1 f [ n ] e − j 2 π N k n    ,    k = 0 , 1 , ⋯   , N − 1 F[k] \stackrel{\text{ DFT }}{=} \sum_{n=0}^{ N-1} f[n]e^{-j \frac{\large 2\pi}{\large N} kn} \,\,,\,\, k=0,1, \cdots ,N-1 F[k]= DFT n=0N1f[n]ejN2πkn,k=0,1,,N1
N − 1 {N-1} N1 个离散采样点 f [ n ] {f[n]} f[n] ,通过DFT可以得到 N − 1 {N-1} N1 个离散点构成的频谱 F [ k ] {F[k]} F[k] 。如果令
W = e − j 2 π N W=e^{-j\frac{\large 2\pi}{\large N}} W=ejN2π
则有:
F [ k ] =  DFT  ∑ n = 0 N − 1 f [ n ] W k n    ,    k = 0 , 1 , ⋯   , N − 1 F[k] \stackrel{\text{ DFT }}{=} \sum_{n=0}^{ N-1} f[n]W^{ kn} \,\,,\,\, k=0,1, \cdots ,N-1 F[k]= DFT n=0N1f[n]Wkn,k=0,1,,N1
W N n = e − j 2 n π = cos ⁡ ( − 2 n π ) + j sin ⁡ ( − 2 n π ) = 1    ,    n = 0 , 1 , ⋯   , N − 1 W^{Nn}=e^{-j2n\pi}=\cos(-2n\pi)+j\sin(-2n\pi)=1 \,\,,\,\, n=0,1, \cdots ,N-1 WNn=ej2=cos(2)+jsin(2)=1,n=0,1,,N1
DTF可以写成矩阵形式:
[ F [ 0 ] F [ 1 ] F [ 2 ] ⋮ F [ k ] ⋮ F [ N − 1 ] ] = [ 1 1 1 1 ⋯ 1 1 W W 2 W 3 ⋯ W N − 1 1 W 2 W 4 W 6 ⋯ W 2 ( N − 1 ) 1 W 3 W 6 W 9 ⋯ W 3 ( N − 1 ) ⋮ 1 W k W 2 k W 3 k ⋯ W k ( N − 1 ) ⋮ 1 W N − 1 W 2 ( N − 1 ) W 3 ( N − 1 ) ⋯ W ( N − 1 ) ( N − 1 ) ] [ f [ 0 ] f [ 1 ] f [ 2 ] ⋮ f [ n ] ⋮ f [ N − 1 ] ] \begin{bmatrix} F[0]\\ F[1]\\ F[2]\\ \vdots \\ F[k]\\ \vdots \\ F[N-1] \end{bmatrix}= \begin{bmatrix} 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 \\ 1&W^{k}&W^{2k}&W^{3k}& \cdots & W^{k(N-1)}\\ \vdots \\ 1&W^{N-1}&W^{2(N-1)}&W^{3(N-1)}& \cdots & W^{(N-1)(N-1)}\\ \end{bmatrix} \begin{bmatrix} f[0]\\ f[1]\\ f[2]\\ \vdots \\ f[n]\\ \vdots \\ f[N-1] \end{bmatrix} F[0]F[1]F[2]F[k]F[N1] = 1111111WW2W3WkWN11W2W4W6W2kW2(N1)1W3W6W9W3kW3(N1)1WN1W2(N1)W3(N1)Wk(N1)W(N1)(N1) f[0]f[1]f[2]f[n]f[N1]

[!example]-
f ( t ) = 5 + 2 cos ⁡ ( 2 π t − 90 ° ) + 3 cos ⁡ ( 4 π t ) {f(t)=5+2\cos(2\pi t-90°)+3\cos(4\pi t)} f(t)=5+2cos(2πt90°)+3cos(4πt)

设有4个离散的采样点,采样间隔 0.25 s {0.25s} 0.25s ,采样周期正好为 1 s {1s} 1s
f [ 0 ] = 8 , f [ 1 ] = 4 , f [ 2 ] = 8 , f [ 3 ] = 0    ,    N = 4 f[0]=8,f[1]=4,f[2]=8,f[3]=0 \,\,,\,\, N=4 f[0]=8,f[1]=4,f[2]=8,f[3]=0,N=4
则DTF矩阵可以写成:
[ F [ 0 ] F [ 1 ] F [ 2 ] F [ 3 ] ] = [ 1 1 1 1 1 − j − 1 j 1 − 1 1 − 1 1 j − 1 − j ] [ f [ 0 ] f [ 1 ] f [ 2 ] f [ 3 ] ] = [ 20 − 4 j 12 4 j ] \begin{bmatrix} F[0]\\F[1]\\F[2]\\F[3] \end{bmatrix}= \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & -j & -1 & j \\ 1 & -1 & 1 & -1\\ 1 & j & -1 & -j \end{bmatrix} \begin{bmatrix} f[0]\\f[1]\\f[2]\\f[3] \end{bmatrix}= \begin{bmatrix} 20\\-4j\\12\\4j \end{bmatrix} F[0]F[1]F[2]F[3] = 11111j1j11111j1j f[0]f[1]f[2]f[3] = 204j124j
频谱取幅值,我们可以得到4个离散的频谱
∣ F [ 0 ] ∣ = 20 , ∣ F [ 1 ] ∣ = 4 , ∣ F [ 2 ] ∣ = 12 , ∣ F [ 3 ] ∣ = 4 |F[0]|=20,|F[1]|=4,|F[2]|=12,|F[3]|=4 F[0]=20,F[1]=4,F[2]=12,F[3]=4


2. 离散傅里叶反变换-IDFT

对DFT
F [ k ] =  DFT  ∑ n = 0 N − 1 f [ n ] e − j 2 π N k n    ,    k = 0 , 1 , ⋯   , N − 1 F[k] \stackrel{\text{ DFT }}{=} \sum_{n=0}^{ N-1} f[n]e^{-j \frac{\large 2\pi}{\large N} kn} \,\,,\,\, k=0,1, \cdots ,N-1 F[k]= DFT n=0N1f[n]ejN2πkn,k=0,1,,N1
其反变换(Inverse Discrete Fourier Transform)为:
f [ n ] =  IDFT  1 N ∑ k = 0 N − 1 F [ k ] e j 2 π N k n    ,    n = 0 , 1 , ⋯   , N − 1 f[n] \stackrel{\text{ IDFT }}{=} \frac{1}{N} \sum_{k=0}^{ N-1}F[k]e^{j\frac{\large 2\pi}{\large N} kn} \,\,,\,\, n=0,1, \cdots ,N-1 f[n]= IDFT N1k=0N1F[k]ejN2πkn,n=0,1,,N1
DFT的输出为复数,IDFT的输出为实数。由于

  • DTFT的幅度频谱的周期为 2 π {2\pi} 2π,且实数信号的频谱共轭对称(幅度为偶函数)
  • DTFT的连续频谱为DFT离散频谱的包络线

所以DFT在第一个周期内的频谱( [ 0 , 2 π ] {[0,2\pi]} [0,2π] 内的离散点)关于 N / 2 {N/2} N/2 共轭对称。
对于基频比较大的离散信号点组,按理说其频谱应该是有一个幅度较大的基频,还有一些幅度较小的谐波分量。但由于DFT的结果关于 N / 2 {N/2} N/2 共轭对称,会有另一个跟基频幅值一样的角频率在第一个频谱周期中出现。显然将第一个频谱周期当作DFT的结果是不合理的,对于第一个频谱周期,从 N / 2 {N/2} N/2 往后的离散点都属于“混叠频率”,只有 0 {0} 0 N / 2 {N/2} N/2 的离散点才会被考虑为合理的频谱
从IDFT的公式来看,共轭对称的离散频谱 F [ k ] {F[k]} F[k] F [ N − k ] {F[N-k]} F[Nk] 对信号点 f [ n ] {f[n]} f[n] 的贡献为:
f k [ n ] = 1 N { F [ k ] e j 2 π N k n + F [ N − k ] e j 2 π N ( N − k ) n } f_k[n]= \frac{1}{N} \lbrace F[k]e^{j\frac{\large 2\pi}{\large N} kn}+F[N-k]e^{j\frac{\large 2\pi}{\large N} (N-k)n} \rbrace fk[n]=N1{F[k]ejN2πkn+F[Nk]ejN2π(Nk)n}
由于
F [ N − k ] = ∑ k = 0 N − 1 f [ n ] e − j 2 π N ( N − k ) n F[N-k]= \sum_{k=0}^{ N-1}f[n]e^{-j\frac{\large 2\pi}{\large N} (N-k)n} F[Nk]=k=0N1f[n]ejN2π(Nk)n
e − j 2 π N ( N − k ) n = e − j 2 π n e j 2 π N k n = e j 2 π N k n e^{-j\frac{\large 2\pi}{\large N} (N-k)n}=e^{-j2\pi n}e^{j\frac{\large 2\pi}{\large N} kn}=e^{j\frac{\large 2\pi}{\large N} kn} ejN2π(Nk)n=ej2πnejN2πkn=ejN2πkn
所以 F [ N − k ] {F[N-k]} F[Nk] F [ k ] {F[k]} F[k] 的共轭转置,记为
F [ N − k ] = F ∗ [ k ] F[N-k]=F ^{*} [k] F[Nk]=F[k]
所以
f k [ n ] = 1 N { F [ k ] e j 2 π N k n + F ∗ [ k ] e j 2 π N ( N − k ) n }    ,    e j 2 π n = 1 = 2 N { ℜ [ F [ k ] ] cos ⁡ ( 2 π N k n ) − ℑ [ F [ k ] ] sin ⁡ ( 2 π N k n ) } = 2 N ∣ F [ k ] ∣ cos ⁡ ( ( 2 π N T k ) n T + arg ⁡ ( F [ k ] ) ) \begin{align*} f_k[n]=& \frac{1}{N} \lbrace F[k]e^{j\frac{\large 2\pi}{\large N} kn}+F ^{*} [k]e^{j\frac{\large 2\pi}{\large N} (N-k)n} \rbrace \,\,,\,\, e^{j2\pi n}=1 \\ \\ =& \frac{2}{N} \lbrace \Re [F[k]] \cos(\frac{2\pi}{N}kn)-\Im [ F [k]]\sin(\frac{2\pi}{N}kn) \rbrace \\ \\ =& \frac{2}{N} |F[k]| \cos \bigg( (\frac{2\pi}{NT}k)nT +\arg(F[k]) \bigg) \end{align*} fk[n]===N1{F[k]ejN2πkn+F[k]ejN2π(Nk)n},ej2πn=1N2{[F[k]]cos(N2πkn)[F[k]]sin(N2πkn)}N2F[k]cos((NT2πk)nT+arg(F[k]))
相当于采样之后的一个角频率为 2 π k / N T {2\pi k/NT} 2πk/NT ,幅值为 2 ∣ F [ k ] ∣ / N {2|F[k]|/N} 2∣F[k]∣/N 的正弦波,在连续时间下即为 k {k} k 次谐波。
DFT的有效频谱频率范围在 [ 0 , π ] {[0,\pi]} [0,π] ,即DFT输出的各次谐波频率为
ω = 0 , 2 π N T , 2 π N T × 2 , ⋯   , 2 π N T × k , ⋯   , 2 π N T × N 2 \omega =0 , \frac{2\pi}{NT} , \frac{2\pi}{NT}\times 2 , \cdots , \frac{2\pi}{NT} \times k , \cdots , \frac{2\pi}{NT}\times \frac{N}{2} ω=0,NT2π,NT2π×2,,NT2π×k,,NT2π×2N
真实的谐波频率为
ω r e a l = ω ⋅ N T p \omega _{real}= \omega \cdot \frac{N}{T_p} ωreal=ωTpN
T p {T_p} Tp 为时间序列的真实周期时间。 N {N} N 越大,DFT能输出的有效频率范围也越大。
仍以前面举出的例子为例

[!example]-

  1. F [ 0 ] = 20 {F[0]=20} F[0]=20 表示直流分量为 F [ 0 ] / N = 20 / 4 = 5 {F[0]/N=20/4=5} F[0]/N=20/4=5
  2. F [ 1 ] = − 4 j = F ∗ [ 3 ] {F[1]=-4j=F ^{*} [3]} F[1]=4j=F[3] 表示采样的基频幅值为 2 ∣ F [ 1 ] ∣ / N = 2 {2|F[1]|/N=2} 2∣F[1]∣/N=2 ,相位 − 90 ° {-90°} 90°
    2 cos ⁡ ( 2 π N T n T − 90 ° ) = 2 cos ⁡ ( π 2 n − 90 ° ) 2\cos(\frac{2\pi}{NT}nT-90°)=2\cos(\frac{\pi}{2}n-90°) 2cos(NT2πnT90°)=2cos(2πn90°)
  3. F [ 2 ] = 12 {F[2]=12} F[2]=12 表示采样的二次频谐波如下
    f 2 [ n ] = 1 N F [ 2 ] e j 2 π N 2 n = 3 cos ⁡ ( π n ) f_2[n]= \frac{1}{N}F[2]e^{j\frac{\large 2\pi}{\large N}2n}=3\cos(\pi n) f2[n]=N1F[2]ejN2π2n=3cos(πn)

在实际应用中, N {N} N 必须大于 4 {4} 4 N = 1024 {N=1024} N=1024 ,会有 1024 {1024} 1024 个离散频率点, F [ k ] {F[k]} F[k] 1024 {1024} 1024 个,但第 513 {513} 513 到第 1023 {1023} 1023 个点是 511 {511} 511 到第 1 {1} 1 个采样点的共轭转置, F [ 0 ] / 1024 {F[0]/1024} F[0]/1024 是直流分量, 2 ∣ F [ 1 ] ∣ / 1024 {2|F[1]|/1024} 2∣F[1]∣/1024 2 ∣ F [ 511 ] ∣ / 1024 {2|F[511]|/1024} 2∣F[511]∣/1024 是交流分量的幅值, 1 ∣ F [ 512 ] ∣ / 1024 {1|F[512]|/1024} 1∣F[512]∣/1024 是一个cosine-only的分量的幅值,且在最高分辨频率点 ( k = N / 2 {k=N/2} k=N/2)上。


3. DFT的误差

DFT在已有的采样点上能够多大程度近似傅里叶变换?显然DFT只是一个近似,因为它只提供了有限个频率点。但这些离散频率点有多正确?
DFT有两种误差,混叠(aliasing)与“泄漏(leakage)”。
混叠之前说过了,如果采样点过少(采样间隔太大),最高分辨频率点就会过小,会出现混叠。解决的方法是增加采样率,或者提前对信号进行滤波,去掉高次谐波。网上还说了一种方法就是补上一段值为 0 {0} 0 的信号,也相当于增加了采样点。
泄漏,或者说拖尾效应,就是在做DFT时候时域信号并不是某个周期信号的整数倍,比如如果输入信号是正弦信号的 1.25 {1.25} 1.25 个周期,那在对DFT时候实际上是将 1.25 {1.25} 1.25 个周期的正弦信号做为DFT的信号周期,这样延拓出的周期信号就有很大的不连续性,会导致频谱存在谐波。如图
请添加图片描述
解决方案是使用我们在设计FIR滤波器时遇到的窗口函数之一(例如Hamming或Hanning窗口)。这些窗函数使采样信号在两个端点处逐渐变细为零值,因此与假设的下一个周期不存在不连续性(在Hanning窗的情况下,不存在非常小的不连续性)。泄漏的现象也会减小。


下链

【数字信号处理】FFT


;