离散傅里叶变换(DFT)
离散傅里叶变换(Discrete Fourier Transform,DFT)是一种将离散时间序列转换到频域的数学工具。DFT 可以将一个有限长的时间序列分解为一组正弦波和余弦波的组合,从而分析信号的频率成分。
DFT 的定义
对于一个长度为 N N N的离散时间序列 x [ n ] x[n] x[n],其离散傅里叶变换 X [ k ] X[k] X[k]定义如下:
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π N k n , k = 0 , 1 , … , N − 1 X[k] = \sum_{n=0}^{N-1} x[n] e^{-j \frac{2\pi}{N} kn}, \quad k = 0, 1, \ldots, N-1 X[k]=n=0∑N−1x[n]e−jN2πkn,k=0,1,…,N−1
其中:
-
X
[
k
]
X[k]
X[k]是频域信号的第
k
k
k个频率分量。
-
x
[
n
]
x[n]
x[n]是时间域信号的第
n
n
n个时间点。
-
j
j
j是虚数单位,满足
j
2
=
−
1
j^2 = -1
j2=−1。
-
e
−
j
2
π
N
k
n
e^{-j \frac{2\pi}{N} kn}
e−jN2πkn是复指数函数,表示频率为
k
N
\frac{k}{N}
Nk的正弦波和余弦波。
逆离散傅里叶变换(IDFT)
DFT 的逆变换称为逆离散傅里叶变换(Inverse Discrete Fourier Transform,IDFT),用于将频域信号转换回时间域。IDFT 的定义如下:
x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] e j 2 π N k n , n = 0 , 1 , … , N − 1 x[n] = \frac{1}{N} \sum_{k=0}^{N-1} X[k] e^{j \frac{2\pi}{N} kn}, \quad n = 0, 1, \ldots, N-1 x[n]=N1k=0∑N−1X[k]ejN2πkn,n=0,1,…,N−1
DFT 的性质
-
周期性:
- X [ k ] X[k] X[k]和 x [ n ] x[n] x[n]都是周期性的,周期为 N N N。 -
对称性:
- DFT 结果 X [ k ] X[k] X[k]的对称性:如果 x [ n ] x[n] x[n]是实数序列,那么 X [ k ] X[k] X[k]的正频率部分和负频率部分是共轭对称的,即 X [ k ] = X ∗ [ N − k ] X[k] = X^*[N-k] X[k]=X∗[N−k]。
-
能量守恒:
- Parseval 定理指出,时间域信号的能量等于频域信号的能量总和,即:
∑ n = 0 N − 1 ∣ x [ n ] ∣ 2 = 1 N ∑ k = 0 N − 1 ∣ X [ k ] ∣ 2 \sum_{n=0}^{N-1} |x[n]|^2 = \frac{1}{N} \sum_{k=0}^{N-1} |X[k]|^2 n=0∑N−1∣x[n]∣2=N1k=0∑N−1∣X[k]∣2
- Parseval 定理指出,时间域信号的能量等于频域信号的能量总和,即:
DFT 的计算
直接计算 DFT 需要 O ( N 2 ) O(N^2) O(N2)次运算,因为每个 X [ k ] X[k] X[k]需要计算 N N N项乘法和加法。快速傅里叶变换(FFT)是计算 DFT 的高效算法,可以将计算复杂度降低到 O ( N log N ) O(N \log N) O(NlogN)。
示例
假设我们有一个长度为 4 的时间序列 x [ n ] = [ 1 , 2 , 3 , 4 ] x[n] = [1, 2, 3, 4] x[n]=[1,2,3,4]。我们计算其 DFT:
-
定义:
X [ k ] = ∑ n = 0 3 x [ n ] e − j 2 π 4 k n X[k] = \sum_{n=0}^{3} x[n] e^{-j \frac{2\pi}{4} kn} X[k]=n=0∑3x[n]e−j42πkn -
计算各频率分量:
- X [ 0 ] X[0] X[0]:
X [ 0 ] = 1 ⋅ e − j 0 + 2 ⋅ e − j 0 + 3 ⋅ e − j 0 + 4 ⋅ e − j 0 = 1 + 2 + 3 + 4 = 10 X[0] = 1 \cdot e^{-j 0} + 2 \cdot e^{-j 0} + 3 \cdot e^{-j 0} + 4 \cdot e^{-j 0} = 1 + 2 + 3 + 4 = 10 X[0]=1⋅e−j0+2⋅e−j0+3⋅e−j0+4⋅e−j0=1+2+3+4=10- X [ 1 ] X[1] X[1]:
X [ 1 ] = 1 ⋅ e − j 2 π 4 ⋅ 0 + 2 ⋅ e − j 2 π 4 ⋅ 1 + 3 ⋅ e − j 2 π 4 ⋅ 2 + 4 ⋅ e − j 2 π 4 ⋅ 3 X[1] = 1 \cdot e^{-j \frac{2\pi}{4} \cdot 0} + 2 \cdot e^{-j \frac{2\pi}{4} \cdot 1} + 3 \cdot e^{-j \frac{2\pi}{4} \cdot 2} + 4 \cdot e^{-j \frac{2\pi}{4} \cdot 3} X[1]=1⋅e−j42π⋅0+2⋅e−j42π⋅1+3⋅e−j42π⋅2+4⋅e−j42π⋅3
计算复数指数部分:
X [ 1 ] = 1 + 2 ( − j ) + 3 ( − 1 ) + 4 ( j ) = 1 − 3 + 2 j + 4 j = − 2 + 2 j X[1] = 1 + 2(-j) + 3(-1) + 4(j) = 1 - 3 + 2j + 4j = -2 + 2j X[1]=1+2(−j)+3(−1)+4(j)=1−3+2j+4j=−2+2j- X [ 2 ] X[2] X[2]:
X [ 2 ] = 1 ⋅ e − j 2 π 4 ⋅ 0 + 2 ⋅ e − j 2 π 4 ⋅ 2 + 3 ⋅ e − j 2 π 4 ⋅ 4 + 4 ⋅ e − j 2 π 4 ⋅ 6 X[2] = 1 \cdot e^{-j \frac{2\pi}{4} \cdot 0} + 2 \cdot e^{-j \frac{2\pi}{4} \cdot 2} + 3 \cdot e^{-j \frac{2\pi}{4} \cdot 4} + 4 \cdot e^{-j \frac{2\pi}{4} \cdot 6} X[2]=1⋅e−j42π⋅0+2⋅e−j42π⋅2+3⋅e−j42π⋅4+4⋅e−j42π⋅6
由于 e − j π = − 1 e^{-j \pi} = -1 e−jπ=−1,计算结果为:
X [ 2 ] = 1 + 2 ( − 1 ) + 3 ( 1 ) + 4 ( − 1 ) = 1 − 2 + 3 − 4 = − 2 X[2] = 1 + 2(-1) + 3(1) + 4(-1) = 1 - 2 + 3 - 4 = -2 X[2]=1+2(−1)+3(1)+4(−1)=1−2+3−4=−2- X [ 3 ] X[3] X[3]:
X [ 3 ] = 1 ⋅ e − j 2 π 4 ⋅ 0 + 2 ⋅ e − j 2 π 4 ⋅ 3 + 3 ⋅ e − j 2 π 4 ⋅ 6 + 4 ⋅ e − j 2 π 4 ⋅ 9 X[3] = 1 \cdot e^{-j \frac{2\pi}{4} \cdot 0} + 2 \cdot e^{-j \frac{2\pi}{4} \cdot 3} + 3 \cdot e^{-j \frac{2\pi}{4} \cdot 6} + 4 \cdot e^{-j \frac{2\pi}{4} \cdot 9} X[3]=1⋅e−j42π⋅0+2⋅e−j42π⋅3+3⋅e−j42π⋅6+4⋅e−j42π⋅9
计算复数指数部分:
X [ 3 ] = 1 + 2 ( j ) + 3 ( − 1 ) + 4 ( − j ) = 1 − 3 − 2 j − 4 j = − 2 − 2 j X[3] = 1 + 2(j) + 3(-1) + 4(-j) = 1 - 3 - 2j - 4j = -2 - 2j X[3]=1+2(j)+3(−1)+4(−j)=1−3−2j−4j=−2−2j
所以,时间序列 x [ n ] = [ 1 , 2 , 3 , 4 ] x[n] = [1, 2, 3, 4] x[n]=[1,2,3,4]的 DFT 结果为 X [ k ] = [ 10 , − 2 + 2 j , − 2 , − 2 − 2 j ] X[k] = [10, -2+2j, -2, -2-2j] X[k]=[10,−2+2j,−2,−2−2j]。
总结
离散傅里叶变换(DFT)是将时间序列转换到频域的重要工具。通过 DFT,我们可以分析信号的频率成分。在实际应用中,快速傅里叶变换(FFT)提供了高效计算 DFT 的方法,被广泛用于信号处理、图像分析等领域。在 Autoformer 模型中,DFT 被用于查询和键向量的频域变换,帮助模型捕捉时间序列中的周期性模式。