信号处理原理 笔记 6

离散Fourier变换

DFT

DTFT用于将时域上的内容离散化,但得到的结果在频域上仍然是一个连续的函数,仍然是计算机无法存储和计算的值,因此我们需要将其在频域上也进行离散化,得到离散Fourier变换DFT

由于我们有:

X(ω)=X(ω+2π)X(\omega) = X(\omega + 2\pi)

因此我们取一个Nyquist周期[0,2π][0, 2\pi],将其划分为NN份,只保留这些特定点上的频谱:

ωk=0+k2πNk=0,1,,N1\omega_{k} = 0 + k\frac{2\pi}{N}\quad k = 0, 1, \dots, N - 1

得到:

X(ωk)=n=0L1x(n)ejωkn=n=0L1x(n)ej2πNnkX(\omega_{k}) = \sum\limits_{n=0}^{L-1}x(n)e^{-j\omega_{k}n} = \sum\limits_{n=0}^{L-1}x(n)e^{-j\frac{2\pi}{N}nk}

为了将上述公式写成只与kk有关的形式,我们记WN=exp(j2πN)W_{N} = \exp({-j\frac{2\pi}{N}}),则有:

X(k)=n=0L1x(n)WNnkX(k) = \sum\limits_{n=0}^{L-1}x(n)W_{N}^{nk}

于是我们可以定义矩阵WRN×L\mathbf{W}\in \mathbb{R}^{N\times L},满足Wnk=WNnk\mathbf{W}_{nk} = W_{N}^{nk},则我们对于时域序列xT=[x(0),,x(L1)]\mathbf{x}^{T} = [x(0), \dots, x(L-1)]与频域序列XT=[X(0),,X(N1)]\mathbf{X}^{T} = [X(0), \cdots, X(N - 1)],我们有:

X=Wx\mathbf{X} = \mathbf{W}\mathbf{x}

N与L的关系

LL为在时域上采样的数量,在处理数据的过程中可以认为是常数,NN是我们主动在频域上采样的数量,通常情况下,我们期待L=NL = N,如果不等,则我们可以做如下变换:

  1. L<NL < N:时域序列较短,此时直接在其后方补零即可:

    xD=[x,0NL1]\mathbf{x}_{D} = [\mathbf{x}, \mathbf{0}_{N - L - 1}]

    显然这个序列做DFT得到的结果和x\mathbf{x}是一致的

  2. L>NL > N:时域序列较长,此时对于时域采样序列做回绕:

    x~(n)=m=0x(mN+n)n=0,1,,N1\tilde{x}(n) = \sum\limits_{m=0}^{\infty}x(mN + n)\quad n = 0, 1, \dots, N - 1

    不容易证明,回绕之后得到的DFT和原序列的DFT是相同的,证明过程见附录

    但是这导致,内容完全不同但是回绕相同的序列,其DFT完全相同

因此,我们在处理过程中,一般取N=LN = L

IDFT

有了DFT,我们同样也需要构造IDFT,但是这是简单的,因为DFT的本质是矩阵变换,因此我们只需要对矩阵求逆即可,我们直接给出结果:

x~(n)=1Nk=0L1WNnkX(k)\tilde{x}(n) = \frac{1}{N}\sum\limits_{k=0}^{L-1}W_{N}^{-nk}X(k)

注意到,我们求出的是x~(n)\tilde{x}(n)而并非精确的x(n)x(n),这是因为回绕相同的所有序列求出的DFT都是相同的

性质

根据上述讨论,我们在研究性质的过程中,默认L=NL = N

显然性质

DFT是离散的、周期的、线性的

实序列的共轭对称性

如果x(n)x(n)是实序列,那么有:

X(k)=X(Nk)X(k) = X^{*}(N - k)

Parsval定理

n=0N1x(n)2=1Nk=0N1X(k)2\sum\limits_{n=0}^{N-1}|x(n)|^{2} = \frac{1}{N}\sum\limits_{k=0}^{N-1}|X(k)|^{2}

奇偶性与虚实性

  • 奇/偶函数的DFT是奇/偶函数
  • 实/虚函数的DFT,实部是偶/奇函数,虚部是奇/偶函数,模是偶函数,相位是奇函数
  • 偶函数DFT不改变虚实性,奇函数DFT改变虚实性

反褶与共轭

x(n)X(k)x(n)X(k)x(n)X(k)\begin{align*} x(n) &\Leftrightarrow X(k) \\ x(-n) &\Leftrightarrow X(-k) \\ x^{*}(n) &\Leftrightarrow X^{*}(-k) \end{align*}

对称性

DFT[X(n)]=Nx~(k)\mathrm{DFT}\bigl[X(n)\bigr] = N\tilde{x}(-k)

频移与时移

DFT[x(n)WNnl]=X(kl)DFT[x(nm)]=WNmkX(k)\begin{align*} \mathrm{DFT}\bigl[x(n)W_{N}^{-nl}\bigr] &= X(k - l) \\ \mathrm{DFT}\bigl[x(n - m)\bigr] &= W_{N}^{mk}X(k) \end{align*}

对这两个性质的证明详见Appendix B

卷积特性

离散序列的线卷积定义详见笔记5,圆卷积定义为:

x(n)y(n)=m=0N1x(m)y((nm) mod N)x(n)\otimes y(n) = \sum\limits_{m=0}^{N-1}x(m)y((n - m) \text{ mod } N)

则有:

DFT[x(n)y(n)]=X(k)Y(k)DFT[x(n)y(n)]=1NX(k)Y(k)IDFT[X(k)Y(k)]=x(n)y(n)\begin{align*} \mathrm{DFT}\bigl[x(n) * y(n)\bigr] &= X(k)\cdot Y(k) \\ \mathrm{DFT}\bigl[x(n)\cdot y(n)\bigr] &= \frac{1}{N}X(k)\otimes Y(k) \\ \mathrm{IDFT}\bigl[X(k) \cdot Y(k)\bigr] &= x(n) \otimes y(n) \end{align*}

需要注意的是,DFT和IDFT并不严格一一对应,这是因为回绕的DFT都相同

DFT的快速算法

按照定义式:

X(k)=DFT[x(n)]=n=0N1x(n)WNnkX(k) = \mathrm{DFT}\bigl[x(n)\bigr] = \sum\limits_{n=0}^{N-1}x(n)W_{N}^{nk}

假设我们已经预先计算好了所有的WNnkW_{N}^{nk},则计算X\mathbf{X}复杂度为O(N2)O(N^{2})

根据定义式,WN=exp(j2πN)W_{N} = \exp(-j\frac{2\pi}{N}),因此我们有以下两条性质:

WNnk=WN(nk) mod NWNnk+N2=WNnk\begin{align*} W_{N}^{nk} &= W_{N}^{(nk)\text{ mod }N} \\ W_{N}^{nk + \frac{N}{2}} &= -W_{N}^{nk} \end{align*}

于是采用快速Fouier变换(FFT)的计算过程进行加速,具体过程如下:

假设N=2RN = 2R为偶数,首先将定义式按照奇偶项拆分开

X(k)=r=0R1x(2r)WN2rk+r=0R1x(2r+1)WN(2r+1)k=r=0R1x(2r)WN2rk+WNkr=0R1x(2r+1)WN2rk\begin{align*} X(k) &= \sum\limits_{r=0}^{R - 1}x(2r)W_{N}^{2rk} + \sum\limits_{r=0}^{R - 1}x(2r + 1)W_{N}^{(2r + 1)k} \\ &= \sum\limits_{r=0}^{R - 1}x(2r)W_{N}^{2rk} + W_{N}^{k}\sum\limits_{r=0}^{R - 1}x(2r + 1)W_{N}^{2rk} \\ \end{align*}

并且我们有:

WN2rk=exp(j2πN2rk)=exp(j2πRrk)=WRrk\begin{align*} W_{N}^{2rk} &= \exp(-j\frac{2\pi}{N}2rk) \\ &= \exp(-j\frac{2\pi}{R}rk) \\ &= W_{R}^{rk} \end{align*}

可以看出,这和DFT变换矩阵的元素形式是一样的,这说明XkX_{k}的奇偶项分别对应的一个DFT

于是我们可以记g(r)=x(2r)g(r) = x(2r)h(r)=x(2r+1)h(r) = x(2r+1),有:

X(k)=r=0R1x(2r)WN2rk+WNkr=0R1x(2r+1)WN2rk=r=0R1g(r)WRrk+WNkr=0R1h(r)WRrk=DFT[g(r)]+WNkDFT[h(r)]=G(k)+WNkH(k)\begin{align*} X(k) &= \sum\limits_{r=0}^{R - 1}x(2r)W_{N}^{2rk} + W_{N}^{k}\sum\limits_{r=0}^{R - 1}x(2r + 1)W_{N}^{2rk} \\ &= \sum\limits_{r=0}^{R - 1}g(r)W_{R}^{rk} + W_{N}^{k}\sum\limits_{r=0}^{R-1}h(r)W_{R}^{rk} \\ &= \mathrm{DFT}\bigl[g(r)\bigr] + W_{N}^{k}\mathrm{DFT}\bigl[h(r)\bigr] \\ &= G(k) + W_{N}^{k}H(k) \end{align*}

注意,上式的定义区间是[0,R)[0, R)而不是[0,N)[0, N),因为其中使用的变换核的周期(即WW的下标)是RR而非NN,因此应该写作:

X(k)=G(k)+WNkH(k)k=0,1,N21X(k) = G(k) + W_{N}^{k}H(k) \quad k = 0, 1, \dots \frac{N}{2} - 1

后半个序列的计算过程为:

X(k+N2)=r=0R1x(2r)WN2r(k+N2)+WNk+N2r=0R1x(2r+1)WN2r(k+N2)=r=0R1g(r)WRrkWNrN+WNk+N2r=0R1h(r)WRrkWNrN=r=0R1g(r)WRrkWNkr=0R1h(r)WRrk=DFT[g(r)]WNkDFT[h(r)]=G(k)WNkH(k)\begin{align*} X(k + \frac{N}{2}) &= \sum\limits_{r=0}^{R - 1}x(2r)W_{N}^{2r(k + \frac{N}{2})} + W_{N}^{k + \frac{N}{2}}\sum\limits_{r=0}^{R - 1}x(2r + 1)W_{N}^{2r(k + \frac{N}{2})} \\ &= \sum\limits_{r=0}^{R - 1}g(r)W_{R}^{rk}W_{N}^{rN} + W_{N}^{k + \frac{N}{2}}\sum\limits_{r=0}^{R-1}h(r)W_{R}^{rk}W_{N}^{rN} \\ &= \sum\limits_{r=0}^{R - 1}g(r)W_{R}^{rk} - W_{N}^{k}\sum\limits_{r=0}^{R-1}h(r)W_{R}^{rk} \\ &= \mathrm{DFT}\bigl[g(r)\bigr] - W_{N}^{k}\mathrm{DFT}\bigl[h(r)\bigr] \\ &= G(k) - W_{N}^{k}H(k) \end{align*}

这说明我们可以通过G(k)\boldsymbol{G(k)}H(k)\boldsymbol{H(k)}计算出全部的X(k)\boldsymbol{X(k)},并且复杂度是O(1)O(1)

假设按照FFT计算X\mathbf{X}的时间复杂度为T(N)T(N),则有:

T(N)=2T(N2)+NO(1)=2T(N2)+O(N)T(N) = 2T(\frac{N}{2}) + N\cdot O(1) = 2T(\frac{N}{2}) + O(N)

因此我们有最终复杂度为T(N)=O(NlogN)T(N) = O(N\log N)

Appendix

Appendix A

对回绕性质的证明

证明:

X=X~\mathbf{X} = \tilde{\mathbf{X}}

L=qN+rL = qN + r,则我们可以将x\mathbf{x}对应的变换矩阵WW按列分为q+1q + 1块,前qq块为N×NN\times N,最后一块为N×rN \times r,同样我们可以这样对应的划分xT=[x0x1xq1xq]\mathbf{x}^{T} = \begin{bmatrix} \mathbf{x}_{0} & \mathbf{x}_{1} & \cdots & \mathbf{x}_{q-1} & \mathbf{x}_{q} \end{bmatrix},其中xmn=x(mN+n)\mathbf{x}_{mn} = x(mN + n)
则显然,x~(n)=m=0qxmn\tilde{x}(n) = \sum\limits_{m=0}^{q}\mathbf{x}_{mn},于是有:

X=Wx=[W0W1Wq1Wq][x0x1xq1xq]=W0[INWNNINWN(q1)NINM][x0x1xq1xq]=W0[INININM][x0x1xq1xq]=W0(i=0L/N1xi+Mxq)=X~\begin{align*} \mathbf{X} &= \mathbf{W}\mathbf{x} \\ &= \begin{bmatrix} \mathbf{W}_{0} & \mathbf{W}_{1} & \cdots & \mathbf{W}_{q-1} & \mathbf{W}_{q} \end{bmatrix}\begin{bmatrix} \mathbf{x}_{0} \\ \mathbf{x}_{1} \\ \vdots \\ \mathbf{x}_{q-1} \\ \mathbf{x}_{q} \\ \end{bmatrix} \\ &= \mathbf{W}_{0}\begin{bmatrix} \mathbf{I}_{N} & W_{N}^{N}\mathbf{I}_{N} & \cdots & W_{N}^{(q - 1)N}\mathbf{I}_{N} & \mathbf{M} \end{bmatrix}\begin{bmatrix} \mathbf{x}_{0} \\ \mathbf{x}_{1} \\ \vdots \\ \mathbf{x}_{q-1} \\ \mathbf{x}_{q} \\ \end{bmatrix} \\ &= \mathbf{W}_{0}\begin{bmatrix} \mathbf{I}_{N} & \mathbf{I}_{N} & \cdots & \mathbf{I}_{N} & \mathbf{M} \end{bmatrix}\begin{bmatrix} \mathbf{x}_{0} \\ \mathbf{x}_{1} \\ \vdots \\ \mathbf{x}_{q-1} \\ \mathbf{x}_{q} \\ \end{bmatrix} \\ &= \mathbf{W}_{0}\Big(\sum\limits_{i = 0}^{\lfloor L / N\rfloor - 1}\mathbf{x}_{i} + \mathbf{M}\mathbf{x}_{q}\Big) \\ &= \tilde{\mathbf{X}}\end{align*}

其中,M\mathbf{M}是一个N×rN \times r的矩阵,满足M=[Ir0(Nr1)×N]\mathbf{M} = \begin{bmatrix} \mathbf{I}_{r} \\ \mathbf{0}_{(N - r - 1)\times N}\end{bmatrix}

Appendix B

TODO