跳到主要内容

离散 Fourier 变换

阐述

设单位根 ω=e2πi/N\omega=e^{-2\pi i/N},则离散 Fourier 变换是对长度为 NN 的向量 xx 的变换,满足

yk=1Nj=0N1ωjkxjy_k=\frac1{\sqrt N}\sum_{j=0}^{N-1}\omega^{jk}x_j

这可以视为一个矩阵向量乘法,矩阵为

F=1N[111111ωω2ω3ωN11ω2ω4ω6ω2(N1)1ω3ω6ω9ω3(N1)1ωN1ω2(N1)ω3(N1)ω(N1)(N1)]F=\frac{1}{\sqrt{N}}\left[\begin{array}{cccccc}1 & 1 & 1 & 1 & \cdots & 1 \\ 1 & \omega & \omega^{2} & \omega^{3} & \cdots & \omega^{N-1} \\ 1 & \omega^{2} & \omega^{4} & \omega^{6} & \cdots & \omega^{2(N-1)} \\ 1 & \omega^{3} & \omega^{6} & \omega^{9} & \cdots & \omega^{3(N-1)} \\ \vdots & \vdots & \vdots & \vdots & & \vdots \\ 1 & \omega^{N-1} & \omega^{2(N-1)} & \omega^{3(N-1)} & \cdots & \omega^{(N-1)(N-1)}\end{array}\right]

该变换为酉变换 FF=1FF^\dagger=1

快速 Fourier 变换

上述变换可以在 O(NlogN)O(N\log N) 的时间而非 O(N2)O(N^2) 的时间内完成。核心在于注意到上式是递归的:定义 k=k1+N2k2k=k_1+N_2k_2n=n1+N1n2n=n_1+N_1n_2,则有

yk1+N2k2=1Nn1=0N1ωN1n1k2ωk1n1n2=0N2ωN2n1k2xn1+N1n2y_{k_1+N_2k_2}=\frac1{\sqrt N}\sum_{n_1=0}^{N_1}\omega_{N_1}^{n_1k_2}\omega^{k_1n_1}\sum_{n_2=0}^{N_2}\omega_{N_2}^{n_1k_2}x_{n_1+N_1n_2}

例如,对于 Radix-2 的快速 Fourier 变换,计算方法为:

f^n=Fnfn=(In/2In/2In/2In/2)(Fn/2feDFn/2fo)\hat f_n=F_nf_n=\begin{pmatrix}I_{n/2}&I_{n/2}\\I_{n/2}&-I_{n/2}\end{pmatrix}\begin{pmatrix}F_{n/2}f_e\\DF_{n/2}f_o\end{pmatrix}

其中 D=diag{ω0,,ωn/21}D=\operatorname{diag}\{\omega^0,\cdots,\omega^{n/2-1}\}.

正弦、余弦变换

第一类余弦变换:要求函数能偶拓展到 [0,2π][0,2\pi] 区间内

f^j=2nk=0n1fkcosπjkn1=(2nk=0n1fke2πijk/2(n1))\hat f_j=\frac2n\sum_{k=0}^{n-1}f_k\cos\frac{\pi jk}{n-1}=\Re\left(\frac2n\sum_{k=0}^{n-1}f_ke^{-2\pi ijk/2(n-1)}\right)

第二类正弦变换:要求函数能奇拓展到 [0,2π][0,2\pi] 区间内

f^j=2nk=0n1fksinπ(j+1)(k+1)n+1=(2nk=0n1fke2πi(j+1)(k+1)/2(n1))\hat f_j=\frac2n\sum_{k=0}^{n-1}f_k\sin\frac{\pi (j+1)(k+1)}{n+1}=\Im\left(\frac2n\sum_{k=0}^{n-1}f_ke^{2\pi i(j+1)(k+1)/2(n-1)}\right)

实例

性质

相关内容

离散 Fourier 变换可以认为是在求 Fourier 系数的时候使用了梯形法则。

f^k=1L0Lf(x)e2πikx/Ldx=1Nn=0N1f(nL/N)e2πikn/N\begin{aligned} \hat f_k&=\frac1L\int_0^Lf(x)e^{-2\pi ikx/L}\mathrm dx\\ &=\frac1N\sum_{n=0}^{N-1}f(nL/N)e^{-2\pi ikn/N} \end{aligned}

参考文献