【数字信号处理】DFT

2023-12-13 05:30:06

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[N?1] ,连续信号的傅里叶变换为:
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)e?tdt
我们认为每个采样点 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(N?1)T?f(t)e?tdt,t=nTf[0]e?j0+f[1]e?T+f[2]e?2T+?+f[N?1]e?(N?1)Tn=0N?1?f[n]e?jω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π?×(N?1)
于是我们得到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=0N?1?f[n]e?jN2π?kn,k=0,1,?,N?1
N ? 1 {N-1} N?1 个离散采样点 f [ n ] {f[n]} f[n] ,通过DFT可以得到 N ? 1 {N-1} N?1 个离散点构成的频谱 F [ k ] {F[k]} F[k] 。如果令
W = e ? j 2 π N W=e^{-j\frac{\large 2\pi}{\large N}} W=e?jN2π?
则有:
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=0N?1?f[n]Wkn,k=0,1,?,N?1
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=e?j2=cos(?2)+jsin(?2)=1,n=0,1,?,N?1
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[N?1]? ?= ?1111?1?1?1WW2W3WkWN?1?1W2W4W6W2kW2(N?1)?1W3W6W9W3kW3(N?1)????????1WN?1W2(N?1)W3(N?1)Wk(N?1)W(N?1)(N?1)? ? ?f[0]f[1]f[2]?f[n]?f[N?1]? ?

[!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πt?90°)+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]? ?= ?1111?1?j?1j?1?11?1?1j?1?j? ? ?f[0]f[1]f[2]f[3]? ?= ?20?4j124j? ?
频谱取幅值,我们可以得到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=0N?1?f[n]e?jN2π?kn,k=0,1,?,N?1
其反变换(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?N1?k=0N?1?F[k]ejN2π?kn,n=0,1,?,N?1
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[N?k] 对信号点 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[N?k]ejN2π?(N?k)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[N?k]=k=0N?1?f[n]e?jN2π?(N?k)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} e?jN2π?(N?k)n=e?j2πnejN2π?kn=ejN2π?kn
所以 F [ N ? k ] {F[N-k]} F[N?k] F [ k ] {F[k]} F[k] 的共轭转置,记为
F [ N ? k ] = F ? [ k ] F[N-k]=F ^{*} [k] F[N?k]=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π?(N?k)n},ej2πn=1N2?{?[F[k]]cos(N2π?kn)??[F[k]]sin(N2π?kn)}N2?F[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?=ω?Tp?N?
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π?nT?90°)=2cos(2π?n?90°)
  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]=N1?F[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


文章来源:https://blog.csdn.net/lafea/article/details/134957194
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。