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(jω)= FT ∫−∞∞f(t)e−jω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(jω)= DTFT ==∫0(N−1)Tf(t)e−jωtdt,t=nTf[0]e−j0+f[1]e−jωT+f[2]e−jω2T+⋯+f[N−1]e−jω(N−1)Tn=0∑N−1f[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=0∑N−1f[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=0∑N−1f[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−j2nπ=cos(−2nπ)+jsin(−2nπ)=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⋮11WW2W3WkWN−11W2W4W6W2kW2(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] = 11111−j−1j1−11−11j−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=0∑N−1f[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 N1k=0∑N−1F[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=0∑N−1f[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=ω⋅TpN
T
p
{T_p}
Tp 为时间序列的真实周期时间。
N
{N}
N 越大,DFT能输出的有效频率范围也越大。
仍以前面举出的例子为例
[!example]-
- 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
- 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°)- 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窗的情况下,不存在非常小的不连续性)。泄漏的现象也会减小。