离散傅里叶变换

维基百科,自由的百科全书
跳转至: 导航搜索

离散傅里叶变换Discrete Fourier Transform,缩写为DFT),是傅里叶变换时域频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作其周期延拓的变换。在实际应用中通常采用快速傅里叶变换计算DFT。

下面给出离散傅里叶变换的变换对:

对于N点序列\left\{x[n]\right\}_{0\le n <N},它的离散傅里叶变换(DFT)为
\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自然对数底数i虚数单位。通常以符号\mathcal{F}表示这一变换,即
\hat{x}=\mathcal{F}x
离散傅里叶变换的逆变换(IDFT)为:
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=\mathcal{F}^{-1}\hat{x}
实际上,DFT和IDFT变换式中和式前面的归一化系数并不重要。在上面的定义中,DFT和IDFT前的系数分别为11/N。有时会将这两个系数都改成1/\sqrt{N}

从连续到离散[编辑]

连续时间信号x(t)以及对应的连续傅里叶变换\hat{x}(\omega)都是连续函数。由于数字系统只能处理有限长的离散信号,因此必须将x\hat{x}都离散化,并且建立对应的傅里叶变换。

假设x(t)时限于[0, L],再通过时域采样将x(t)离散化,就可以得到有限长离散信号,记为x_{discrete}(t)。设采样周期为T,则时域采样点数N=L/T

x_{discrete}(t) = x(t)\sum_{n=0}^{N-1}\delta(t-nT)=\sum_{n=0}^{N-1}x(nT)\delta(t-nT)

它的傅里叶变换为

\hat{x}_{discrete}(\omega) = \sum_{n=0}^{N-1}x(nT)\mathcal{F}\delta(t-nT) =  \sum_{n=0}^{N-1}x(nT)e^{-i n\omega T}

这就是x(t)在时域采样后的连续傅里叶变换,也就是离散时间傅里叶变换,它在频域依然是连续的。

下面将频域信号转化为有限长离散信号。与对时域信号的处理类似,假设频域信号是带限的,再经过离散化,即可得到有限长离散信号。依据采样定理,时域采样若要能完全重建原信号,频域信号\hat{x}(\omega)应当带限于(0,1/T)。由于时域信号时限于[0, L],由采样定理以及时频对偶的关系,频域的采样间隔应为1/L。故,频域采样点数为:

\frac{1/T}{1/L}=N

即频域采样的点数和时域采样同为N,频域采样点为\{\omega_k={2\pi}k/NT\}_{0 \le k < N} 在DTFT频域上采样:

\hat{x}[k] = \hat{x}_{discrete}(\omega_k) = \frac1{T} \sum_{n=0}^{N-1}x[nT]e^{-i\frac{2\pi}{N} nk}

T=1,将其归一化,就得到前面定义的离散傅里叶变换。因此,DFT就是先将信号在时域离散化,求其连续傅里叶变换后,再在频域离散化的结果。

DFT与CT[编辑]

参见连续傅里叶变换

下面考察离散傅里叶变换与连续傅里叶变换(CT,Continuous Fourier Transform)的关系。连续傅里叶变换

\mathcal{F}x(t)=\hat{x}(\omega)=\frac1{L} \int_0^L x(t)e^{-i\omega t} dt

的采样为:

\hat{x}(\omega_k)=\frac1{L} \int_0^L x(t)e^{-i\omega_k t} dt

将这个积分以黎曼和的形式近似,有:

\hat{x}(\omega_k) \approx \frac1{L} \sum_{n=0}^{N-1} x[n] e^{-i\omega_k nT} T=\frac1{N}\hat{x}[k]

这一结论指出离散傅里叶变换确实是连续傅里叶变换在某种意义上的近似。不过必须注意以下两点:

  • 时域采样必须满足采样定理
  • 离散傅里叶变换的处理对象是时限的

为此,通常对连续信号的时域采样再做一次加窗处理(Windowing),这样就得到带限的有限长离散信号。

DFT与DTFT[编辑]

参见离散时间傅里叶变换

离散时间傅里叶变换(DTFT)是在时域上对连续傅里叶变换的采样。DFT则是在频域上对DTFT的均匀采样。离散信号x[n](n=0,...,N-1)的DTFT为:

\hat{x}(e^{i\omega}) = \sum_{n=0}^{N-1}x[n] e^{-in\omega}

\hat{x}(e^{i\omega})在离散的频点\{\omega_k=k\frac{2\pi}{N}\}_{0 \le k <N}上采样

\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的DFT。由于DTFT在频域是周期的,所以在DTFT频域上的均匀采样也应是周期的。\hat{x}[k]实际上是这个周期序列的主值序列。

栅栏效应[编辑]

N点序列的DFT只能在有限的N个频点上观察频谱,这相当于从栅栏的缝隙中观察景色,对于了解信号在整个频域上的特性是不够的。为了观察到其他频率的信息,需要对原信号x[n]做一些处理,以便在不同的频点上采样。

将原来在DTFT频域上的采样点数增加到M点,这样采样点位置变为\{ \omega'_k = e^{ik\frac{2\pi}{M}}\}_{0 \le k < M}。则对应的DFT成为

\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]之后补上M-N个零,设为x'[n],则上式变为

\hat{x}'[k] = \sum_{n=0}^{M-1} x'[n]e^{-i\frac{2\pi}{M}kn} = \mathcal{F}x'

因此将x[n]补零再做DFT就可以得到x[n]的DTFT在其他频率上的值,相当于移动了栅栏,因而能够从其他位置进行观察。

频谱分辨率[编辑]

N点DFT的频谱分辨率是2\pi/N栅栏效应一节指出可以通过补零观察到更多的频点,但是这并不意味着补零能够提高真正的频谱分辨率。这是因为x[n]实际上是x(t)采样的主值序列,而将x[n]补零得到的x'[n]周期延拓之后与原来的序列并不相同,也不是x(t)的采样。因此\hat{x}'\hat{x}是不同离散信号的频谱。对于补零至M点的x'的DFT,只能说它的分辨率2\pi/M仅具有计算上的意义,\hat{x}'并不是真正的、物理意义上的频谱。频谱分辨率的提高只能在满足采样定理的条件下增加时域采样长度来实现。

从空间的角度分析[编辑]

周期为N的离散信号构成一个N欧几里得空间\mathbb{C}^N。在这一空间上两个信号xy内积定义为

\langle x,y \rangle = \sum_{n=0}^{N-1}x[n]y^*\left[n\right]

下面给出\mathbb{C}^N上的一组正交基

\{ e_k[n] = e^{i\frac{2\pi}{N}kn}\}_{0 \le k < N }

将信号x在这组正交基上分解,得

x = \sum_{k=0}^{N-1}\frac{\langle x,e_k \rangle}{\Vert e_k \Vert ^2} e_k

\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

则有

x[n] = \frac1{N} \sum_{k=0}^{N-1} \hat{x}[k]e^{i\frac{2\pi}{N}kn}

此即为离散傅里叶变换的逆变换。

由此可知,在正交分解的角度上说,离散周期信号x的离散傅里叶变换\hat{x}实质上是x在正交基\{e_k\}上的分量。而从线性变换的角度上说,\{e_k\}圆周卷积特征向量\hat{x}则是对应的特征值

DFT与圆周卷积[编辑]

根据卷积定理,离散信号x与y的圆周卷积对偶于频域上x与y离散傅里叶变换的乘积。下面揭示DFT与圆周卷积的内在关系。

对长为N的离散信号\tilde{x}\tilde{y},如果要计算它们的卷积,就必须定义\tilde{x}[n]\tilde{y}[n]0≤n<N之外的值。如果将\tilde{x}\tilde{y}作周期为N的延拓,则有

x[n] = \tilde{x}[n \mod N] \qquad y[n] = \tilde{y}[n \mod N]

如此,周期为N的圆周卷积:

(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是DFT的特征向量,实际上它也是圆周卷积的特征向量。定义x与y的圆周卷积算子:

{L}x [n] = (x \otimes y) [n]

e_k与y的圆周卷积为

{L} e_k [n] = e_k[n] \cdot \sum_{m=0}^{N-1} y[m] e_k[-m]

显然,y的DFT

\hat{y}[k] = \sum_{m=0}^{N-1} y[m] e_k[-m]

就是圆周卷积的特征值。

性质[编辑]

完全性[编辑]

离散傅里叶变换是可逆的线性变换

\mathcal{F}:\mathbf{C}^N \to \mathbf{C}^N

其中C表示复数集。即,任意N-维复向量都存在DFT和IDFT,而且其DFT和IDFT也是N-维复向量。

正交性[编辑]

向量组exp(2πi kn/N)是N-维复数空间上的一组正交基:

\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'}

其中δknKronecker delta

移位定理[编辑]

时域信号序列x_n的相位移动\exp(2\pi i n m/N)(其中m为整数)在频域反映为“循环移位”,即:频域信号序列X_k变为X_{((k-m))_N},其中下标是指将k-mN 取余。类似的,由对偶性,时域信号序列的循环移位对应于频域信号序列的相移:

\mathcal{F}(\{x_n\})_k=X_k
\mathcal{F}(\{ x_n e^{\frac{2\pi i}{N}n m} \})_k=X_{k-m}
且有\mathcal{F}(\{x_{n-m}\})_k=X_k e^{-\frac{2\pi i}{N}k m}

周期性[编辑]

上文中DFT与DTFT一节已经证明,离散序列的傅里叶变换是周期的。有限长序列x_n的离散傅里叶变换X_k可以被看作是它的周期延拓序列\tilde{x}_n = x_{n \ mod \ N}的离散时间傅里叶变换\tilde{X}_k。由时频对偶性可知X_k也可以被看作它的周期延拓的主值。

上一节的移位定理隐含着DFT的周期性,因为DFT的幅度|X_k|不受输入信号的循环移位的影响,因为时移在频域对偶于相移,循环移位仅仅使DFT的相位产生平移。周期性的边界条件在DFT的许多应用中有重要作用。解差分方程时,就假设边界条件是满足周期性的,这是一个很有用的性质(参见应用)。

普朗歇尔定理与帕塞瓦尔定理[编辑]

如果XkYk分别是xnyn的离散傅立叶变换,那么就有普朗歇尔定理

\sum_{n=0}^{N-1} x_n y^*_n = \frac{1}{N} \sum_{k=0}^{N-1} X_k Y^*_k

其中星号表示复共扼。帕塞瓦尔定理是普朗歇尔定理的一个特例:

\sum_{n=0}^{N-1} |x_n|^2 = \frac{1}{N} \sum_{k=0}^{N-1} |X_k|^2.

应用[编辑]

DFT在诸多多领域中有着重要应用,下面仅是颉取的几个例子。需要指出的是,所有DFT的实际应用都依赖于计算离散傅里叶变换及其逆变换的快速算法,即快速傅里叶变换

快速傅里叶变换[编辑]

快速傅里叶变换(即FFT)是计算离散傅里叶变换及其逆变换的快速算法。按照DFT的定义计算一个长为n的序列的DFT需要的计算复杂度达到了\mathcal{O}(n^2),而同样长度FFT的计算复杂度仅为\mathcal{O}(n \log n)。由于DFT的逆变换可以由DFT表示,所以DFT逆变换的计算同样可以由FFT完成。FFT算法的提出,使DFT得到了广泛的实际应用。

频谱分析[编辑]

前面指出,DFT是连续傅里叶变换的近似。因此可以对连续信号x(t)均匀采样并截断以得到有限长的离散序列\{x_n\}\,,对这一序列作离散傅里叶变换,可以分析连续信号x(t)频谱的性质。前面还提到DFT应用于频谱分析需要注意的两个问题:即采样可能导致信号混叠和截断信号引起的频谱泄漏。可以通过选择适当的采样频率(见奈奎斯特频率)消减混叠。选择适当的序列长度并加窗可以抑制频谱泄漏。

数据压缩[编辑]

由于人类感官的分辨能力存在极限,因此很多有损压缩算法利用这一点将语音、音频、图像、视频等信号的高频部分除去。高频信号对应于信号的细节,滤除高频信号可以在人类感官可以接受的范围内获得很高的压缩比。这一去除高频分量的处理就是通过离散傅里叶变换完成的。将时域或空域的信号转换到频域,仅储存或传输较低频率上的系数,在解压缩端采用逆变换即可重建信号。

解偏微分方程[编辑]

离散傅里叶变换及其多维形式在偏微分方程的求解中也有应用。此时DFT被看作傅里叶级数的近似。傅里叶级数将函数在复指数einx上展开,这正是微分算子的特征方程:d/dx einx = in einx。因此,通过傅里叶级数的形式,线性常微分方程被转换为代数方程,而后者是很容易求解的。此时得到的结果是偏微分方程解的级数表示,只要通过DFT逆变换即可得到其一般表示。这种方法被称作谱方法或级数解法。

长整数与多项式乘法[编辑]

目前长整数多项式乘法最快速的算法是基于离散傅里叶变换的。由于整数(或多项式)乘法是逐位(或逐项)乘累加的形式,因此整数(或多项式)乘积的数字(或系数)可以用乘数数字(或乘式系数)的卷积表示。利用卷积定理,只要将数字(或系数)序列通过离散傅里叶变换变到频域,就可以将逐个乘累加的卷积变为对位的乘法,从而减少计算量,再以一次逆变换便可以得到乘法结果。需要注意整数乘法还有进位的问题。下面以多项式乘法为例说明这一应用:

假设需要计算多项式乘法c(x) = a(xbx),这一乘积结果的各项系数的表达式实际上是线性卷积的形式。由于离散傅里叶变换对应于圆周卷积,因此需要将这两个乘式的系数按照次数升序排列,序列后“补零”,使它们的长度d大于两式最高项次数的和:d > deg(a(x)) + deg(b(x))。然后作圆周卷积:

\mathbf{c} = \mathbf{a} \otimes \mathbf{b}

其中c就是c(x)系数的向量。由于圆周卷积的DFT是乘积,有:

\mathcal{F}\mathbf{c} = \mathcal{F}\mathbf{a} \cdot \mathcal{F}\mathbf{b}

\mathbf{c} = \mathcal{F}^{-1}(\mathcal{F}\mathbf{a} \cdot \mathcal{F}\mathbf{b})

利用快速傅里叶变换,这一算法的运算复杂度为\mathcal{O}(N \log N)

OFDM[编辑]

OFDM(正交频分复用)在宽带无线通信中有重要的应用。这种技术将带宽分为N个等间隔的子载波,可以证明这些子载波相互正交。尤其重要的是,OFDM调制可以由IDFT实现,而解调可以由DFT实现。OFDM还利用DFT的移位性质,在每个帧头部加上循环前缀(Cyclic Prefix),使得只要信道延时小于循环前缀的长度,就能消除信道延时对传输的影响。

参阅[编辑]

参考文献[编辑]

  1. Oppenheim, Alan V.; Schafer, R. W.; and Buck, J. R., (1999). Discrete-time signal processing, Upper Saddle River, N.J. : Prentice Hall. ISBN 0137549202
  2. Mallat, S., A Wavelet Tour of Signal Processing, Second Edition, Academic Press, ISBN 0-12-466606-x
  3. Gill, J., Fourier Transform and Its Applications[1]