离散傅里叶变换 (英語:Discrete Fourier Transform ,缩写为DFT ),是傅里叶变换 在时域 和频域 上都呈离散的形式,将信号的时域采样变换为其DTFT 的频域采样。
在形式上,变换两端(时域和频域上)的序列都是的,而实际上这两组序列都应当被认为是离散 周期 信号 的主值序列。即使对有限长的离散信号作DFT,也应当将其看作其周期延拓的变换。在实际应用中通常采用快速傅里叶变换 计算DFT。
離散傅立葉轉換,是連續傅立葉轉換在離散樣本上的類比,目前廣泛應用於信號處理、數值分析、數位通信、音訊處理等領域,在快速演算法問世,以及硬體設備的提升後,能夠更廣泛的應用在人們的日常生活當中,也是個非常重要的學問之一。
定义
对于
N
{\displaystyle N}
点序列
{
x
[
n
]
}
0
≤
n
<
N
{\displaystyle \left\{x[n]\right\}_{0\leq n<N}}
,它的离散傅里叶变换(DFT)为
x
^
[
k
]
=
∑
n
=
0
N
−
1
e
−
i
2
π
N
n
k
x
[
n
]
k
=
0
,
1
,
…
,
N
−
1.
{\displaystyle {\hat {x}}[k]=\sum _{n=0}^{N-1}e^{-i{\frac {2\pi }{N}}nk}x[n]\qquad k=0,1,\ldots ,N-1.}
其中
e
{\displaystyle e}
是自然对数 的底数 ,
i
{\displaystyle i}
是虚数单位 。通常以符号
F
{\displaystyle {\mathcal {F}}}
表示这一变换,即
x
^
=
F
x
{\displaystyle {\hat {x}}={\mathcal {F}}x}
离散傅里叶变换的逆变换(IDFT)为:
x
[
n
]
=
1
N
∑
k
=
0
N
−
1
e
i
2
π
N
n
k
x
^
[
k
]
n
=
0
,
1
,
…
,
N
−
1.
{\displaystyle x\left[n\right]={1 \over N}\sum _{k=0}^{N-1}e^{i{\frac {2\pi }{N}}nk}{\hat {x}}[k]\qquad n=0,1,\ldots ,N-1.}
可以记为:
x
=
F
−
1
x
^
{\displaystyle x={\mathcal {F}}^{-1}{\hat {x}}}
实际上,DFT和IDFT变换式中和式前面的归一化系数并不重要。在上面的定义中,DFT和IDFT前的系数分别为
1
{\displaystyle 1}
和
1
N
{\displaystyle {\frac {1}{N}}}
。有时会将这两个系数都改成
1
N
{\displaystyle {\frac {1}{\sqrt {N}}}}
。
从连续到离散
连续时间信号
x
(
t
)
{\displaystyle x(t)}
以及对应的连续傅里叶变换
x
^
(
ω
)
{\displaystyle {\hat {x}}(\omega )}
都是连续函数。由于数位系统只能处理有限长的离散信号 ,因此必须将
x
{\displaystyle x}
和
x
^
{\displaystyle {\hat {x}}}
都离散化,并且建立对应的傅里叶变换。
假设
x
(
t
)
{\displaystyle x(t)}
时限于
[
0
,
L
]
{\displaystyle [0,L]}
,再通过时域采样将
x
(
t
)
{\displaystyle x(t)}
离散化,就可以得到有限长离散信号,记为
x
d
i
s
c
r
e
t
e
(
t
)
{\displaystyle x_{discrete}(t)}
。设采样周期为
T
{\displaystyle T}
,则时域采样点数
N
=
L
T
{\displaystyle N={\frac {L}{T}}}
。
x
d
i
s
c
r
e
t
e
(
t
)
=
x
(
t
)
∑
n
=
0
N
−
1
δ
(
t
−
n
T
)
=
∑
n
=
0
N
−
1
x
(
n
T
)
δ
(
t
−
n
T
)
{\displaystyle x_{discrete}(t)=x(t)\sum _{n=0}^{N-1}\delta (t-nT)=\sum _{n=0}^{N-1}x(nT)\delta (t-nT)}
它的傅里叶变换为
x
^
d
i
s
c
r
e
t
e
(
ω
)
=
∑
n
=
0
N
−
1
x
(
n
T
)
F
δ
(
t
−
n
T
)
=
∑
n
=
0
N
−
1
x
(
n
T
)
e
−
i
n
ω
T
{\displaystyle {\hat {x}}_{discrete}(\omega )=\sum _{n=0}^{N-1}x(nT){\mathcal {F}}\delta (t-nT)=\sum _{n=0}^{N-1}x(nT)e^{-in\omega T}}
这就是
x
(
t
)
{\displaystyle x(t)}
在时域采样后的连续傅里叶变换,也就是离散时间傅里叶变换 ,它在频域依然是连续的。
下面将频域信号转化为有限长离散信号。与对时域信号的处理类似,假设频域信号是带限的,再经过离散化,即可得到有限长离散信号。依据采样定理 ,频域采样若要能完全重建原信号,频域信号
x
^
(
ω
)
{\displaystyle {\hat {x}}(\omega )}
应当带限于
(
0
,
1
2
T
)
{\displaystyle (0,{\frac {1}{2T}})}
。由于时域信号时限于
[
0
,
L
]
{\displaystyle [0,L]}
,由采样定理以及时频对偶的关系,频域的采样间隔应为
1
/
L
{\displaystyle 1/L}
。故,频域采样点数为:
1
/
T
1
/
L
=
N
{\displaystyle {\frac {1/T}{1/L}}=N}
即频域采样的点数和时域采样同为
N
{\displaystyle N}
,频域采样点为
{
ω
k
=
2
π
k
/
N
T
}
0
≤
k
<
N
{\displaystyle \{\omega _{k}={2\pi }k/NT\}_{0\leq k<N}}
。
而DTFT在频域上采样:
x
^
[
k
]
=
x
^
d
i
s
c
r
e
t
e
(
ω
k
)
=
1
T
∑
n
=
0
N
−
1
x
[
n
T
]
e
−
i
2
π
N
n
k
{\displaystyle {\hat {x}}[k]={\hat {x}}_{discrete}(\omega _{k})={\frac {1}{T}}\sum _{n=0}^{N-1}x[nT]e^{-i{\frac {2\pi }{N}}nk}}
令
T
=
1
{\displaystyle T=1}
,将其归一化,就得到前面定义的离散傅里叶变换。因此,DFT就是先将信号在时域离散化,求其连续傅里叶变换后,再在频域离散化的结果。
DFT与CFT
下面考察离散傅里叶变换与连续傅里叶变换(CFT,Continuous Fourier Transform)的关系。连续傅里叶变换
F
x
(
t
)
=
x
^
(
ω
)
=
1
L
∫
0
L
x
(
t
)
e
−
i
ω
t
d
t
{\displaystyle {\mathcal {F}}x(t)={\hat {x}}(\omega )={\frac {1}{L}}\int _{0}^{L}x(t)e^{-i\omega t}dt}
的采样为:
x
^
(
ω
k
)
=
1
L
∫
0
L
x
(
t
)
e
−
i
ω
k
t
d
t
{\displaystyle {\hat {x}}(\omega _{k})={\frac {1}{L}}\int _{0}^{L}x(t)e^{-i\omega _{k}t}dt}
将这个积分以黎曼和的形式近似,有:
x
^
(
ω
k
)
≈
1
L
∑
n
=
0
N
−
1
x
[
n
]
e
−
i
ω
k
n
T
T
=
1
N
x
^
[
k
]
{\displaystyle {\hat {x}}(\omega _{k})\approx {\frac {1}{L}}\sum _{n=0}^{N-1}x[n]e^{-i\omega _{k}nT}T={\frac {1}{N}}{\hat {x}}[k]}
这一结论指出离散傅里叶变换确实是连续傅里叶变换在某种意义上的近似。不过必须注意以下两点:
时域采样必须满足采样定理
离散傅里叶变换的处理对象是时限的
为此,通常对连续信号的时域采样再做一次加窗处理(Windowing),这样就得到带限的有限长离散信号。
DFT与DTFT
离散时间傅里叶变换(DTFT)是在时域上对连续傅里叶变换 的采样。DFT则是在频域上对DTFT的均匀采样。离散信号
x
[
n
]
{\displaystyle x[n]}
(n=0,...,N-1)的DTFT为:
x
^
(
e
i
ω
)
=
∑
n
=
0
N
−
1
x
[
n
]
e
−
i
n
ω
{\displaystyle {\hat {x}}(e^{i\omega })=\sum _{n=0}^{N-1}x[n]e^{-in\omega }}
对
x
^
(
e
i
ω
)
{\displaystyle {\hat {x}}(e^{i\omega })}
在离散的频点
{
ω
k
=
k
2
π
N
}
0
≤
k
<
N
{\displaystyle \{\omega _{k}=k{\frac {2\pi }{N}}\}_{0\leq k<N}}
上采样
x
^
[
k
]
=
x
^
(
e
i
ω
k
)
=
∑
n
=
0
N
−
1
x
[
n
]
e
−
i
2
π
N
k
n
k
=
0
,
…
,
N
−
1
{\displaystyle {\hat {x}}[k]={\hat {x}}(e^{i\omega _{k}})=\sum _{n=0}^{N-1}x[n]e^{-i{\frac {2\pi }{N}}kn}\qquad k=0,\ldots ,N-1}
即为
x
{\displaystyle x}
的DFT。由于DTFT在频域是周期的,所以在DTFT频域上的均匀采样也应是周期的。
x
^
[
k
]
{\displaystyle {\hat {x}}[k]}
实际上是这个周期序列的主值序列。
栅栏效应
N
{\displaystyle N}
点序列的DFT只能在有限的
N
{\displaystyle N}
个频点上观察频谱,这相当于从栅栏 的缝隙中观察景色,对于了解信号在整个频域上的特性是不够的。为了观察到其他频率的信息,需要对原信号
x
[
n
]
{\displaystyle x[n]}
做一些处理,以便在不同的频点上采样。
将原来在DTFT频域上的采样点数增加到
M
{\displaystyle M}
点,这样采样点位置变为
{
ω
k
′
=
e
i
k
2
π
M
}
0
≤
k
<
M
{\displaystyle \{\omega '_{k}=e^{ik{\frac {2\pi }{M}}}\}_{0\leq k<M}}
。则对应的DFT成为
x
^
′
[
k
]
=
x
^
(
e
i
k
ω
k
′
)
=
∑
n
=
0
N
−
1
x
[
n
]
e
−
i
2
π
M
k
n
{\displaystyle {\hat {x}}'[k]={\hat {x}}(e^{ik\omega '_{k}})=\sum _{n=0}^{N-1}x[n]e^{-i{\frac {2\pi }{M}}kn}}
若在序列
x
[
n
]
{\displaystyle x[n]}
之后补上M-N个零,设为
x
′
[
n
]
{\displaystyle x'[n]}
,则上式变为
x
^
′
[
k
]
=
∑
n
=
0
M
−
1
x
′
[
n
]
e
−
i
2
π
M
k
n
=
F
x
′
{\displaystyle {\hat {x}}'[k]=\sum _{n=0}^{M-1}x'[n]e^{-i{\frac {2\pi }{M}}kn}={\mathcal {F}}x'}
因此将
x
[
n
]
{\displaystyle x[n]}
补零再做DFT就可以得到
x
[
n
]
{\displaystyle x[n]}
的DTFT在其他频率上的值,相当于移动了栅栏,因而能够从其他位置进行观察。
频谱分辨率
N
{\displaystyle N}
点DFT的频谱分辨率是
2
π
/
N
{\displaystyle 2\pi /N}
。栅栏效应 一节指出可以通过补零观察到更多的频点,但是这并不意味着补零能够提高真正的频谱分辨率。这是因为
x
[
n
]
{\displaystyle x[n]}
实际上是
x
(
t
)
{\displaystyle x(t)}
采样的主值序列,而将
x
[
n
]
{\displaystyle x[n]}
补零得到的
x
′
[
n
]
{\displaystyle x'[n]}
周期延拓之后与原来的序列并不相同,也不是
x
(
t
)
{\displaystyle x(t)}
的采样。因此
x
^
′
{\displaystyle {\hat {x}}'}
与
x
^
{\displaystyle {\hat {x}}}
是不同离散信号的频谱。对于补零至
M
{\displaystyle M}
点的
x
′
{\displaystyle x'}
的DFT,只能说它的分辨率
2
π
M
{\displaystyle {\frac {2\pi }{M}}}
仅具有计算上的意义,
x
^
′
{\displaystyle {\hat {x}}'}
并不是真正的、物理意义上的频谱。频谱分辨率的提高只能在满足采样定理的条件下增加时域采样长度来实现。
从空间的角度分析
周期为N的离散信号构成一个N 维欧几里得空间
C
N
{\displaystyle \mathbb {C} ^{N}}
。在这一空间上两个信号x 和y 的内积 定义为
⟨
x
,
y
⟩
=
∑
n
=
0
N
−
1
x
[
n
]
y
∗
[
n
]
{\displaystyle \langle x,y\rangle =\sum _{n=0}^{N-1}x[n]y^{*}\left[n\right]}
下面给出
C
N
{\displaystyle \mathbb {C} ^{N}}
上的一组正交基 :
{
e
k
[
n
]
=
e
i
2
π
N
k
n
}
0
≤
k
<
N
{\displaystyle \{e_{k}[n]=e^{i{\frac {2\pi }{N}}kn}\}_{0\leq k<N}}
将信号x 在这组正交基上分解,得
x
=
∑
k
=
0
N
−
1
⟨
x
,
e
k
⟩
‖
e
k
‖
2
e
k
{\displaystyle x=\sum _{k=0}^{N-1}{\frac {\langle x,e_{k}\rangle }{\Vert e_{k}\Vert ^{2}}}e_{k}}
令
x
^
[
k
]
=
⟨
x
,
e
k
⟩
=
∑
n
=
0
N
−
1
x
[
n
]
e
−
i
2
π
N
k
n
{\displaystyle {\hat {x}}[k]=\langle x,e_{k}\rangle =\sum _{n=0}^{N-1}x[n]e^{-i{\frac {2\pi }{N}}kn}}
此即为离散傅里叶变换。又
‖
e
k
‖
2
=
N
{\displaystyle \|e_{k}\|^{2}=N}
则有
x
[
n
]
=
1
N
∑
k
=
0
N
−
1
x
^
[
k
]
e
i
2
π
N
k
n
{\displaystyle x[n]={\frac {1}{N}}\sum _{k=0}^{N-1}{\hat {x}}[k]e^{i{\frac {2\pi }{N}}kn}}
此即为离散傅里叶变换的逆变换。
由此可知,在正交分解的角度上说,离散周期信号
x
{\displaystyle x}
的离散傅里叶变换
x
^
{\displaystyle {\hat {x}}}
实质上是
x
{\displaystyle x}
在正交基
{
e
k
}
{\displaystyle \{e_{k}\}}
上的分量。而从线性变换 的角度上说,
{
e
k
}
{\displaystyle \{e_{k}\}}
是圆周卷积 的特征向量 ,
x
^
{\displaystyle {\hat {x}}}
则是对应的特征值 。
DFT与圆周卷积
根据卷积定理 ,离散信号x与y的圆周卷积 对偶于频域上x与y离散傅里叶变换的乘积。下面揭示DFT与圆周卷积的内在关系。
对长为N的离散信号
x
~
{\displaystyle {\tilde {x}}}
与
y
~
{\displaystyle {\tilde {y}}}
,如果要计算它们的卷积,就必须定义
x
~
[
n
]
{\displaystyle {\tilde {x}}[n]}
与
y
~
[
n
]
{\displaystyle {\tilde {y}}[n]}
在0≤n<N 之外的值。如果将
x
~
{\displaystyle {\tilde {x}}}
与
y
~
{\displaystyle {\tilde {y}}}
作周期为N的延拓,则有
x
[
n
]
=
x
~
[
n
mod
N
]
y
[
n
]
=
y
~
[
n
mod
N
]
{\displaystyle x[n]={\tilde {x}}[n\mod N]\qquad y[n]={\tilde {y}}[n\mod N]}
如此,周期为N的圆周卷积:
(
x
⊗
y
)
[
n
]
=
∑
m
=
0
N
−
1
x
[
m
]
y
[
n
−
m
]
=
∑
m
=
0
N
−
1
x
[
n
−
m
]
y
[
m
]
{\displaystyle (x\otimes y)[n]=\sum _{m=0}^{N-1}x[m]y[n-m]=\sum _{m=0}^{N-1}x[n-m]y[m]}
卷积的结果仍然是以N为周期的离散信号。
前面指出,
e
k
{\displaystyle e_{k}}
是DFT的特征向量,实际上它也是圆周卷积的特征向量。定义x与y的圆周卷积算子:
L
x
[
n
]
=
(
x
⊗
y
)
[
n
]
{\displaystyle {L}x[n]=(x\otimes y)[n]}
则
e
k
{\displaystyle e_{k}}
与y的圆周卷积为
L
e
k
[
n
]
=
e
k
[
n
]
⋅
∑
m
=
0
N
−
1
y
[
m
]
e
k
[
−
m
]
{\displaystyle {L}e_{k}[n]=e_{k}[n]\cdot \sum _{m=0}^{N-1}y[m]e_{k}[-m]}
显然,y的DFT
y
^
[
k
]
=
∑
m
=
0
N
−
1
y
[
m
]
e
k
[
−
m
]
{\displaystyle {\hat {y}}[k]=\sum _{m=0}^{N-1}y[m]e_{k}[-m]}
就是圆周卷积的特征值。
性质
完全性
离散傅里叶变换是可逆的线性变换
F
:
C
N
→
C
N
{\displaystyle {\mathcal {F}}:\mathbf {C} ^{N}\to \mathbf {C} ^{N}}
其中C 表示复数集 。即,任意N -维复向量都存在DFT和IDFT,而且其DFT和IDFT也是N -维复向量。
正交性
向量组exp(2πi kn/N )是N -维复数空间上的一组正交基:
∑
n
=
0
N
−
1
(
e
2
π
i
N
k
n
)
(
e
−
2
π
i
N
k
′
n
)
=
N
δ
k
k
′
{\displaystyle \sum _{n=0}^{N-1}\left(e^{{\frac {2\pi i}{N}}kn}\right)\left(e^{-{\frac {2\pi i}{N}}k'n}\right)=N~\delta _{kk'}}
其中δkn 是Kronecker delta 。
移位定理
时域信号序列
x
n
{\displaystyle x_{n}}
的相位移动
exp
(
2
π
i
n
m
/
N
)
{\displaystyle \exp(2\pi inm/N)}
(其中
m
{\displaystyle m}
为整数)在频域反映为“循环移位”,即:频域信号序列
X
k
{\displaystyle X_{k}}
变为
X
(
(
k
−
m
)
)
N
{\displaystyle X_{((k-m))_{N}}}
,其中下标是指将k-m 对N 取余 。类似的,由对偶性,时域信号序列的循环移位对应于频域信号序列的相移:
若
F
(
{
x
n
}
)
k
=
X
k
{\displaystyle {\mathcal {F}}(\{x_{n}\})_{k}=X_{k}}
则
F
(
{
x
n
e
2
π
i
N
n
m
}
)
k
=
X
k
−
m
{\displaystyle {\mathcal {F}}(\{x_{n}e^{{\frac {2\pi i}{N}}nm}\})_{k}=X_{k-m}}
且有
F
(
{
x
n
−
m
}
)
k
=
X
k
e
−
2
π
i
N
k
m
{\displaystyle {\mathcal {F}}(\{x_{n-m}\})_{k}=X_{k}e^{-{\frac {2\pi i}{N}}km}}
周期性
上文中DFT与DTFT 一节已经证明,离散序列的傅里叶变换是周期的。有限长序列
x
n
{\displaystyle x_{n}}
的离散傅里叶变换
X
k
{\displaystyle X_{k}}
可以被看作是它的周期延拓序列
x
~
n
=
x
n
m
o
d
N
{\displaystyle {\tilde {x}}_{n}=x_{n\ mod\ N}}
的离散时间傅里叶变换
X
~
k
{\displaystyle {\tilde {X}}_{k}}
。由时频对偶性可知
X
k
{\displaystyle X_{k}}
也可以被看作它的周期延拓的主值。
上一节的移位定理隐含着DFT的周期性,因为DFT的幅度
|
X
k
|
{\displaystyle |X_{k}|}
不受输入信号的循环移位的影响,因为时移在频域对偶于相移,循环移位仅仅使DFT的相位产生平移。周期性的边界条件在DFT的许多应用中有重要作用。解差分方程 时,就假设边界条件是满足周期性的,这是一个很有用的性质(参见应用 )。
普朗歇尔定理与帕塞瓦尔定理
如果X k 和Y k 分别是x n 和y n 的离散傅立叶变换,那么就有普朗歇尔定理 :
∑
n
=
0
N
−
1
x
n
y
n
∗
=
1
N
∑
k
=
0
N
−
1
X
k
Y
k
∗
{\displaystyle \sum _{n=0}^{N-1}x_{n}y_{n}^{*}={\frac {1}{N}}\sum _{k=0}^{N-1}X_{k}Y_{k}^{*}}
其中星号表示复共扼。帕塞瓦尔定理 是普朗歇尔定理的一个特例:
∑
n
=
0
N
−
1
|
x
n
|
2
=
1
N
∑
k
=
0
N
−
1
|
X
k
|
2
.
{\displaystyle \sum _{n=0}^{N-1}|x_{n}|^{2}={\frac {1}{N}}\sum _{k=0}^{N-1}|X_{k}|^{2}.}
应用
DFT在诸多多领域中有着重要应用,下面仅是颉取的几个例子。需要指出的是,所有DFT的实际应用都依赖于计算离散傅里叶变换及其逆变换的快速算法,即快速傅里叶变换 。
快速傅里叶变换
簡介
快速傅立葉轉換(Fast Fourier Transform,簡稱FFT)是一種用來高效計算離散傅立葉轉換(Discrete Fourier Transform,DFT)及其反轉換的演算法。傅立葉轉換是一種數學變換,用來將信號從時間域或空間域轉換到頻率域。這在信號處理、圖像處理、數據分析等領域有著廣泛的應用。傳統的DFT計算複雜度較高,約為
O
(
n
2
)
{\displaystyle {\mathcal {O}}(n^{2})}
,而FFT將其降為
O
(
n
log
n
)
{\displaystyle {\mathcal {O}}(n\log n)}
,大大提高了計算效率。高效的計算能力使其在各種實際應用中扮演著關鍵角色。理解和應用FFT不僅能解決具體的技術問題,還能幫助我們更深入地了解信號處理的基本原理和方法。FFT的出現和應用,無疑是數學和工程領域的一大突破。
常見用於執行離散傅立葉轉換的演算法:
1. 庫利-圖基演算法(Cooley-Tukey algorithm)
庫利-圖基演算法是一種用於快速計算離散傅立葉轉換的方法,通過分治法策略(Divide-and-conquer)將一個長度為N的DFT分解為多個較小長度的DFT。這使得它特別適合處理長度為2的冪次方的序列,但實際上也適用於其他因數分解形式的序列。庫利和圖基在1965年首次提出這個方法,但類似的概念早在1805年由高斯提出。
2.基數-4、8、16、……演算法(Radix-4, 8, 16, …. Algorithms)
可以視為庫利-圖基演算法的一種推廣,使用不只是以2作為基底,以其他數字做為基底的快速演算法。
3.互質因子算法(prime factor algorithm)
互質因子算法,又稱Good–Thomas算法,是一種用於快速傅立葉變換(FFT)的算法。它將大小為
N
=
N
1
N
2
{\displaystyle N=N_{1}N_{2}}
的DFT轉換為
N
1
×
N
2
{\displaystyle N_{1}\times \ N_{2}}
的二維DFT,前提是
N
1
{\displaystyle N_{1}}
和
N
2
{\displaystyle N_{2}}
必須是互質的。這種算法在此特殊情況下比傳統的Cooley–Tukey算法更有效。
4.格策爾演算法(Goertzel Algorithm)
此演算法在1958年被傑拉德 · 格策爾 所提出。
此算法,使用數字濾波方法計算離散傅立葉轉換(DFT)係數和信號頻譜。修改後的格策爾演算法可以用來計算信號頻譜,而無需像DFT算法那樣涉及複雜的代數計算。
啁啾-Z轉換(Chirp-Z transform)是一種離散傅立葉轉換(DFT)的擴展算法,適用於當取樣頻率間隔與取樣時間間隔的乘積不等於信號的時頻分佈面積時的情況。它利用卷積來實現任意大小的DFT,從而加快計算速度,是一種基於快速傅立葉轉換(FFT)的高效算法。
此外,啁啾-Z變換也是一種用於評估非單位圓上的Z變換的算法。
6.威諾格拉德演算法(Winograd algorithm)
由以色列裔美國計算機科學家Shmuel Winograd於1976年提出的,是一種改進型的快速傅立葉轉換(FFT)算法,旨在進一步提高計算效率和速度。此演算法使用的加法數量與庫利-圖基演算法大致相同,但其所需的乘法數量只有其演算法的約20%。
频谱分析
前面指出,DFT是连续傅里叶变换的近似 。因此可以对连续信号x(t)均匀采样并截断以得到有限长的离散序列
{
x
n
}
{\displaystyle \{x_{n}\}\,}
,对这一序列作离散傅里叶变换,可以分析连续信号x(t)频谱的性质。前面还提到DFT应用于频谱分析需要注意的两个问题:即采样可能导致信号混叠和截断信号引起的频谱泄漏。可以通过选择适当的采样频率(见奈奎斯特频率 )消减混叠 。选择适当的序列长度并加窗可以抑制频谱泄漏。
数据压缩
由于人类感官的分辨能力存在极限,因此很多有损压缩算法利用这一点将语音、音频、图像、视频等信号的高频部分除去。高频信号对应于信号的细节,滤除高频信号可以在人类感官可以接受的范围内获得很高的压缩比。这一去除高频分量的处理就是通过离散傅里叶变换完成的。将时域或空域的信号转换到频域,仅储存或传输较低频率上的系数,在解压缩端采用逆变换即可重建信号。
解偏微分方程
离散傅里叶变换及其多维形式在偏微分方程的求解中也有应用。此时DFT被看作傅里叶级数 的近似。傅里叶级数将函数在复指数e inx 上展开,这正是微分算子的特征方程:d /dx e inx = in e inx 。因此,通过傅里叶级数的形式,线性常微分方程被转换为代数方程,而后者是很容易求解的。此时得到的结果是偏微分方程解的级数表示,只要通过DFT逆变换即可得到其一般表示。这种方法被称作谱方法或级数解法。
长整数与多项式乘法
目前长整数 或多项式 乘法 最快速的算法是基于离散傅里叶变换的。由于整数(或多项式)乘法是逐位(或逐项)乘累加的形式,因此整数(或多项式)乘积的数字(或系数)可以用乘数数字(或乘式系数)的卷积 表示。利用卷积定理 ,只要将数字(或系数)序列通过离散傅里叶变换变到频域,就可以将逐个乘累加的卷积变为对位的乘法,从而减少计算量,再以一次逆变换便可以得到乘法结果。需要注意整数乘法还有进位 的问题。下面以多项式乘法为例说明这一应用:
假设需要计算多项式乘法c (x ) = a (x )·b (x ),这一乘积结果的各项系数的表达式实际上是线性卷积的形式。由于离散傅里叶变换对应于圆周卷积,因此需要将这两个乘式的系数按照次数升序排列,序列后“补零”,使它们的长度d 大于两式最高项次数的和:d > deg(a (x )) + deg(b (x ))。然后作圆周卷积:
c
=
a
⊗
b
{\displaystyle \mathbf {c} =\mathbf {a} \otimes \mathbf {b} }
其中c 就是c (x )系数的向量。由于圆周卷积的DFT是乘积,有:
F
c
=
F
a
⋅
F
b
{\displaystyle {\mathcal {F}}\mathbf {c} ={\mathcal {F}}\mathbf {a} \cdot {\mathcal {F}}\mathbf {b} }
则
c
=
F
−
1
(
F
a
⋅
F
b
)
{\displaystyle \mathbf {c} ={\mathcal {F}}^{-1}({\mathcal {F}}\mathbf {a} \cdot {\mathcal {F}}\mathbf {b} )}
利用快速傅里叶变换,这一算法的运算复杂度为
O
(
N
log
N
)
{\displaystyle {\mathcal {O}}(N\log N)}
。
OFDM
OFDM(正交频分复用)在宽带无线通信 中有重要的应用。这种技术将带宽分为N 个等间隔的子载波,可以证明这些子载波相互正交。尤其重要的是,OFDM调制可以由IDFT实现,而解调可以由DFT实现。OFDM还利用DFT的移位性质,在每个帧头部加上循环前缀(Cyclic Prefix),使得只要信道延时小于循环前缀的长度,就能消除信道延时对传输的影响。
特殊例子
数论转换
數論轉換 是一種可以計算摺積 的快速演算法。計算摺積的快速演算法中最常用的一種是使用快速傅里葉變換 ,然而快速傅立葉變換具有一些實現上的缺點,舉例來說,資料向量必須乘上複數 係數的矩陣加以處理,而且每個複數係數的實部和虛部是一個正弦 及餘弦 函數,因此大部分的係數都是浮點數 ,也就是說,必須做複數而且是浮點數的運算,因此計算量會比較大,而且浮點數運算產生的誤差會比較大。
而在數論轉換中,資料向量需要乘上的矩陣是一個整數 的矩陣,因此不需要作浮點數的乘法運算,更進一步,在模數為的情況下,只有種可能的加法與種可能的乘法,這可以使用記憶體把這些有限數目的加法和乘法存起來,利用查表法來計算,使得數論轉換完全不須任何乘法與加法運算,不過需要較大的記憶體與消耗較大的存取記憶體量。
雖然使用數論轉換可以降低計算摺積的複雜度,不過由於只進行整數的運算,所以只能用於對整數 的訊號計算摺積,而利用快速傅立葉變換可以對任何複數的訊號計算摺積,這是降低運算複雜度所要付出的代價,也不一定所有信號都可以找到適合做數論轉換的質數。
F
=
Z
/
p
{\displaystyle F=Z/p}
,此運算是根據模運算 而取得的,
p
{\displaystyle p}
需要是質數 ,如此可以建構出有限域 ,並且存在
n
{\displaystyle n}
個可以整除
(
p
−
1
)
{\displaystyle (p-1)}
的實數 根。如此可以得到
p
=
k
⋅
n
+
1
{\displaystyle p=k\cdot n+1}
,
k
{\displaystyle k}
為正整數。令
ω
{\displaystyle \omega }
為第
(
p
−
1
)
{\displaystyle (p-1)}
個單位根 ,則第
n
{\displaystyle n}
個單位根
α
{\displaystyle \alpha }
可以表示成
α
=
ω
k
{\displaystyle \alpha =\omega ^{k}}
。另外,再令
N
{\displaystyle N}
為
α
{\displaystyle \alpha }
次方
p
{\displaystyle p}
模運算之循環個數。
數論轉換的公式
F
[
k
]
=
∑
n
=
0
N
−
1
f
[
n
]
α
n
k
(
mod
M
)
k
=
0
,
1
,
2
,
…
,
N
−
1
{\displaystyle F[k]=\sum _{n=0}^{N-1}f[n]\alpha ^{nk}{\pmod {M}}\quad k=0,1,2,\ldots ,N-1}
f
[
n
]
=
N
−
1
∑
k
=
0
N
−
1
F
[
k
]
α
−
n
k
(
mod
M
)
n
=
0
,
1
,
2
,
…
,
N
−
1
{\displaystyle f[n]=N^{-1}\sum _{k=0}^{N-1}F[k]\alpha ^{-nk}{\pmod {M}}\quad n=0,1,2,\ldots ,N-1}
其中有幾點限制以及應該注意的事項:
1.M應是一個質數
2.N應該是M-1的因數
3.
N
−
1
{\displaystyle N^{-1}}
是滿足
N
−
1
{\displaystyle N^{-1}}
N
{\displaystyle N}
modM=1 的整數(當 N = M−1 時,
N
−
1
{\displaystyle N^{-1}}
= M−1)。它也被稱為 N 的模 M 的逆元
4.
α
{\displaystyle \alpha }
是 N 階的單位根。
舉個例子來說,當
p
=
5
,
α
=
2
{\displaystyle p=5,\alpha =2}
則
α
1
=
2
(
m
o
d
5
)
{\displaystyle \alpha ^{1}=2\qquad (mod\quad 5)}
α
2
=
4
(
m
o
d
5
)
{\displaystyle \alpha ^{2}=4\qquad (mod\quad 5)}
α
3
=
3
(
m
o
d
5
)
{\displaystyle \alpha ^{3}=3\qquad (mod\quad 5)}
α
4
=
1
(
m
o
d
5
)
{\displaystyle \alpha ^{4}=1\qquad (mod\quad 5)}
因為
α
4
{\displaystyle \alpha ^{4}}
經
5
{\displaystyle 5}
的模運算為
1
{\displaystyle 1}
,因此可以判定此情況為
4
{\displaystyle 4}
個次方一循環,所以
N
=
4
{\displaystyle N=4}
,
N
{\displaystyle N}
可以整除
(
p
−
1
)
{\displaystyle (p-1)}
。則數論矩陣可以表示成
[
F
(
0
)
F
(
1
)
F
(
2
)
F
(
3
)
]
=
[
1
1
1
1
1
2
4
3
1
4
1
4
1
3
4
2
]
[
f
(
0
)
f
(
1
)
f
(
2
)
f
(
3
)
]
{\displaystyle {\begin{bmatrix}F(0)\\F(1)\\F(2)\\F(3)\end{bmatrix}}={\begin{bmatrix}1&1&1&1\\1&2&4&3\\1&4&1&4\\1&3&4&2\end{bmatrix}}{\begin{bmatrix}f(0)\\f(1)\\f(2)\\f(3)\end{bmatrix}}}
在一些特殊的情況下,令
F
=
Z
/
m
{\displaystyle F=Z/m}
,而
m
{\displaystyle m}
不是值數也是有意義的。像是 Fermat Number Transform 中
(
m
=
2
k
+
1
)
{\displaystyle (m=2^{k}+1)}
,以及 Mersenne Number Transform 中
(
m
=
2
k
−
1
)
{\displaystyle (m=2^{k}-1)}
.
數論轉換的數學性質
前面提到數論轉換是一種離散傅立葉轉換的特例,因此數論轉換具有許多離散傅立葉轉換的數學性質。
若F[k]為f[n]的數論轉換結果,即f[n]→F[k](NTT)
1.正交性質:
矩陣中的每個行或列,彼此正交,即任兩個行或列的內積為0
∑
n
=
0
N
−
1
α
n
l
α
−
n
k
=
∑
n
=
0
N
−
1
α
n
(
k
−
l
)
=
N
δ
k
t
{\displaystyle \sum _{n=0}^{N-1}\alpha ^{nl}\alpha ^{-nk}=\sum _{n=0}^{N-1}\alpha ^{n(k-l)}=N\delta _{kt}}
證明:
當
k
=
l
{\displaystyle k=l}
,
S
N
=
∑
n
=
0
N
−
1
α
n
(
0
)
=
N
{\displaystyle S_{N}=\sum _{n=0}^{N-1}\alpha ^{n(0)}=N}
當
k
≠
0
{\displaystyle k\neq 0}
,
(
α
n
(
k
−
l
)
−
1
)
S
N
=
(
α
n
(
k
−
l
)
−
1
)
∑
n
=
0
N
−
1
α
n
(
k
−
l
)
=
α
N
(
k
−
l
)
−
1
=
1
−
1
=
0
{\displaystyle (\alpha ^{n(k-l)}-1)S_{N}=(\alpha ^{n(k-l)}-1)\sum _{n=0}^{N-1}\alpha ^{n(k-l)}=\alpha ^{N(k-l)}-1=1-1=0}
2.線性性質:
NTT 符合線性轉換,即:
F
[
k
1
+
k
2
]
=
f
[
n
1
]
+
f
[
n
2
]
{\displaystyle F[k_{1}+k_{2}]=f[n_{1}]+f[n_{2}]}
並且對於常數 c 有:
F
[
c
k
]
=
c
F
[
k
]
{\displaystyle F[ck]=cF[k]}
若
f
[
n
]
↔
F
[
k
]
{\displaystyle f[n]\leftrightarrow F[k]}
,則
−
f
[
n
]
↔
−
F
[
k
]
{\displaystyle -f[n]\leftrightarrow -F[k]}
。
3.平移性質:
若
f
[
n
]
↔
F
[
k
]
{\displaystyle f[n]\leftrightarrow F[k]}
,則
f
[
n
+
l
]
↔
α
−
l
k
F
[
k
]
{\displaystyle f[n+l]\leftrightarrow \alpha ^{-lk}F[k]}
,且
f
[
n
]
α
n
l
↔
F
[
k
+
l
]
{\displaystyle f[n]\alpha ^{nl}\leftrightarrow F[k+l]}
4.可逆性質:
NTT 變換是可逆的,存在反轉換 INTT 使得:
INTT(NTT(n))=n
5.對稱性質:
若
f
[
n
]
{\displaystyle f[n]}
具有對稱性質,即
f
[
n
]
=
f
[
N
−
n
]
{\displaystyle f[n]=f[N-n]}
,則
f
[
n
]
{\displaystyle f[n]}
的數論轉換
F
[
k
]
{\displaystyle F[k]}
也會有對稱性質,即
F
[
k
]
=
F
[
N
−
k
]
{\displaystyle F[k]=F[N-k]}
的特性。
若
f
[
n
]
=
−
f
[
N
−
n
]
{\displaystyle f[n]=-f[N-n]}
,則
f
[
n
]
{\displaystyle f[n]}
的數論轉換
F
[
k
]
{\displaystyle F[k]}
也會有
F
[
k
]
=
−
F
[
N
−
k
]
{\displaystyle F[k]=-F[N-k]}
的特性。
6.摺積性質:
此性質在線性非時變系統當中非常重要,NTT的主要應用多與此性質有關。
若考慮兩個信號,
f
[
n
1
]
↔
F
[
k
1
]
{\displaystyle f[n_{1}]\leftrightarrow F[k_{1}]}
,
f
[
n
2
]
↔
F
[
k
2
]
{\displaystyle f[n_{2}]\leftrightarrow F[k_{2}]}
f
[
n
1
]
∗
f
[
n
2
]
↔
F
[
k
1
]
F
[
k
2
]
(
mod
m
)
{\displaystyle f[n_{1}]*f[n_{2}]\leftrightarrow F[k_{1}]F[k_{2}]{\pmod {m}}}
f
[
n
1
]
f
[
n
2
]
↔
F
[
k
1
]
∗
F
[
k
2
]
(
mod
m
)
{\displaystyle f[n_{1}]f[n_{2}]\leftrightarrow F[k_{1}]*F[k_{2}]{\pmod {m}}}
數論轉換的優缺點
優點:
1.使用整數進行計算,計算較容易,也可以節省記憶體空間。
2.使用整數不會像浮點數一樣產生誤差,可以非常精確地計算。
3.很多性質都跟離散傅立葉轉換相同。
缺點:
1.只能對整數做計算,若信號為非整數,可能需要事先處理。
2.不容易找到root of unity,即不容易找到合適的對數轉換。
3.相對而言缺乏物理意義。
参阅
参考文献
Oppenheim, Alan V.; Schafer, R. W.; and Buck, J. R., (1999). Discrete-time signal processing , Upper Saddle River, N.J. : Prentice Hall. ISBN 0137549202
Mallat, S., A Wavelet Tour of Signal Processing, Second Edition , Academic Press, ISBN 0-12-466606-x
Gill, J., Fourier Transform and Its Applications ([1] (页面存档备份 ,存于互联网档案馆 ))
Jian-Jiun Ding, Advanced Digital Signal Processing class note,the Department of Electrical Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2024
Duhamel, Pierre, and Martin Vetterli. "Fast Fourier transforms: a tutorial review and a state of the art." Signal processing 19.4 (1990): 259-299.