【数字信号处理】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[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)T?f(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?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=0∑N?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=0∑N?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?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?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=0∑N?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=0∑N?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=0∑N?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]-
- 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]=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窗的情况下,不存在非常小的不连续性)。泄漏的现象也会减小。
下链
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!