信号处理原理 笔记 6
离散Fourier变换
DFT
DTFT用于将时域上的内容离散化,但得到的结果在频域上仍然是一个连续的函数,仍然是计算机无法存储和计算的值,因此我们需要将其在频域上也进行离散化,得到离散Fourier变换DFT
由于我们有:
X(ω)=X(ω+2π)
因此我们取一个Nyquist周期[0,2π],将其划分为N份,只保留这些特定点上的频谱:
ωk=0+kN2πk=0,1,…,N−1
得到:
X(ωk)=n=0∑L−1x(n)e−jωkn=n=0∑L−1x(n)e−jN2πnk
为了将上述公式写成只与k有关的形式,我们记WN=exp(−jN2π),则有:
X(k)=n=0∑L−1x(n)WNnk
于是我们可以定义矩阵W∈RN×L,满足Wnk=WNnk,则我们对于时域序列xT=[x(0),…,x(L−1)]与频域序列XT=[X(0),⋯,X(N−1)],我们有:
X=Wx
N与L的关系
L为在时域上采样的数量,在处理数据的过程中可以认为是常数,N是我们主动在频域上采样的数量,通常情况下,我们期待L=N,如果不等,则我们可以做如下变换:
-
L<N:时域序列较短,此时直接在其后方补零即可:
xD=[x,0N−L−1]
显然这个序列做DFT得到的结果和x是一致的
-
L>N:时域序列较长,此时对于时域采样序列做回绕:
x~(n)=m=0∑∞x(mN+n)n=0,1,…,N−1
不容易证明,回绕之后得到的DFT和原序列的DFT是相同的,证明过程见附录
但是这导致,内容完全不同但是回绕相同的序列,其DFT完全相同
因此,我们在处理过程中,一般取N=L
IDFT
有了DFT,我们同样也需要构造IDFT,但是这是简单的,因为DFT的本质是矩阵变换,因此我们只需要对矩阵求逆即可,我们直接给出结果:
x~(n)=N1k=0∑L−1WN−nkX(k)
注意到,我们求出的是x~(n)而并非精确的x(n),这是因为回绕相同的所有序列求出的DFT都是相同的
性质
根据上述讨论,我们在研究性质的过程中,默认L=N
显然性质
DFT是离散的、周期的、线性的
实序列的共轭对称性
如果x(n)是实序列,那么有:
X(k)=X∗(N−k)
Parsval定理
n=0∑N−1∣x(n)∣2=N1k=0∑N−1∣X(k)∣2
奇偶性与虚实性
- 奇/偶函数的DFT是奇/偶函数
- 实/虚函数的DFT,实部是偶/奇函数,虚部是奇/偶函数,模是偶函数,相位是奇函数
- 偶函数DFT不改变虚实性,奇函数DFT改变虚实性
反褶与共轭
x(n)x(−n)x∗(n)⇔X(k)⇔X(−k)⇔X∗(−k)
对称性
DFT[X(n)]=Nx~(−k)
频移与时移
DFT[x(n)WN−nl]DFT[x(n−m)]=X(k−l)=WNmkX(k)
对这两个性质的证明详见Appendix B
卷积特性
离散序列的线卷积定义详见笔记5,圆卷积定义为:
x(n)⊗y(n)=m=0∑N−1x(m)y((n−m) mod N)
则有:
DFT[x(n)∗y(n)]DFT[x(n)⋅y(n)]IDFT[X(k)⋅Y(k)]=X(k)⋅Y(k)=N1X(k)⊗Y(k)=x(n)⊗y(n)
需要注意的是,DFT和IDFT并不严格一一对应,这是因为回绕的DFT都相同
DFT的快速算法
按照定义式:
X(k)=DFT[x(n)]=n=0∑N−1x(n)WNnk
假设我们已经预先计算好了所有的WNnk,则计算X复杂度为O(N2)
根据定义式,WN=exp(−jN2π),因此我们有以下两条性质:
WNnkWNnk+2N=WN(nk) mod N=−WNnk
于是采用快速Fouier变换(FFT)的计算过程进行加速,具体过程如下:
假设N=2R为偶数,首先将定义式按照奇偶项拆分开
X(k)=r=0∑R−1x(2r)WN2rk+r=0∑R−1x(2r+1)WN(2r+1)k=r=0∑R−1x(2r)WN2rk+WNkr=0∑R−1x(2r+1)WN2rk
并且我们有:
WN2rk=exp(−jN2π2rk)=exp(−jR2πrk)=WRrk
可以看出,这和DFT变换矩阵的元素形式是一样的,这说明Xk的奇偶项分别对应的一个DFT
于是我们可以记g(r)=x(2r),h(r)=x(2r+1),有:
X(k)=r=0∑R−1x(2r)WN2rk+WNkr=0∑R−1x(2r+1)WN2rk=r=0∑R−1g(r)WRrk+WNkr=0∑R−1h(r)WRrk=DFT[g(r)]+WNkDFT[h(r)]=G(k)+WNkH(k)
注意,上式的定义区间是[0,R)而不是[0,N),因为其中使用的变换核的周期(即W的下标)是R而非N,因此应该写作:
X(k)=G(k)+WNkH(k)k=0,1,…2N−1
后半个序列的计算过程为:
X(k+2N)=r=0∑R−1x(2r)WN2r(k+2N)+WNk+2Nr=0∑R−1x(2r+1)WN2r(k+2N)=r=0∑R−1g(r)WRrkWNrN+WNk+2Nr=0∑R−1h(r)WRrkWNrN=r=0∑R−1g(r)WRrk−WNkr=0∑R−1h(r)WRrk=DFT[g(r)]−WNkDFT[h(r)]=G(k)−WNkH(k)
这说明我们可以通过G(k)与H(k)计算出全部的X(k),并且复杂度是O(1)的
假设按照FFT计算X的时间复杂度为T(N),则有:
T(N)=2T(2N)+N⋅O(1)=2T(2N)+O(N)
因此我们有最终复杂度为T(N)=O(NlogN)
Appendix
Appendix A
对回绕性质的证明
证明:
X=X~
设L=qN+r,则我们可以将x对应的变换矩阵W按列分为q+1块,前q块为N×N,最后一块为N×r,同样我们可以这样对应的划分xT=[x0x1⋯xq−1xq],其中xmn=x(mN+n),
则显然,x~(n)=m=0∑qxmn,于是有:
X=Wx=[W0W1⋯Wq−1Wq]x0x1⋮xq−1xq=W0[INWNNIN⋯WN(q−1)NINM]x0x1⋮xq−1xq=W0[ININ⋯INM]x0x1⋮xq−1xq=W0(i=0∑⌊L/N⌋−1xi+Mxq)=X~
其中,M是一个N×r的矩阵,满足M=[Ir0(N−r−1)×N]
Appendix B
TODO