本次笔记参考 Stein Shakarchi 1 Fourier Analysis 218页到223页的内容,下文只证明了 ZN 中的傅里叶变换,更一般的,在 Abel 群中的傅里叶变换可以参考此书。
DFT 与 IDFT
DFT:Discrete Fourier Transform 离散傅里叶变换
IDFT:Inverse Discrete Fourier Transform 离散傅里叶逆变换
令 F:ZN→C(ZN 为模 N 下的整数加群,同构于 N 阶 Abel 群),定义
F^(n)=F(k)= N1k=0∑N−1F(k)eN−2πink n=0∑N−1F^(n)eN2πink离散傅里叶变换 DFT离散傅里叶逆变换 IDFT
思考: 这种形式的定义是类比一般形式的傅里叶变换系数的,设 f:R→C,f 周期为 L,且 f∈L1([0,L]),则 f 的第 n 个傅里叶系数为
f^(n)=L1∫0Lf(x)e−L2πinx
且
f(x)∼n=−∞∑+∞f^(n)eL2πinx
则 F:Zn→C 可视为周期为 N 的复值函数,则这两个定义类似。
证明: 设 V:={F:ZN→C},则 V 为线性空间,令 ξ=eN2πi,记
el(k)=ξlk=eN2πilk
则 el 为周期为 N 的离散函数,el∈V。
定义 Hermite 内积,设 F,G∈V,则
⟨F,G⟩=k=0∑N−1F(k)G(k)
对应的范数为
∣∣F∣∣2=⟨F,F⟩=k=0∑N−1∣F(k)∣2
下证 {e0,e1,⋯,eN−1},在 Hermite 内积下正交
任意的 m,l∈{0,1,⋯,N−1},则
⟨em,el⟩=k=0∑N−1em(k)el(k)=k=0∑N−1ξmkξ−lk=k=0∑N−1ξ(m−l)k
当 m=l 时,⟨em,em⟩=N⇒∣em∣=N
当 m=l 时,记 ξ(m−l)=q,则 qN=1,
⟨em,el⟩=k=0∑N−1qk=1−q1−qN=0
由于 V 是 n 维空间,则 {e0,e1,⋯,eN−1} 为 V 上的一组正交基。
记
ei∗=N1ei(0⩽i⩽N−1)
则 {e0∗,e1∗,⋯,eN−1∗} 为 V 上的一组单位正交基,则
F=k=0∑N−1⟨F,ek∗⟩ek∗
推导结论
F^(n)====n=0∑N−1F^(n)eN2πink===== N1k=0∑N−1F(k)eN−2πink N1k=0∑N−1F(k)en(k) N1⟨F,en⟩ N1⟨F,en∗⟩ n=0∑N−1F^(n)en(k) n=0∑N−1N1⟨F,en∗⟩Nen∗(k) n=0∑N−1⟨F,en∗⟩en∗(k) ⟨F,en∗⟩en∗(k) F(k)离散傅里叶变换 DFT离散傅里叶逆变换 IDFT
当然,将两者的定义反过来,上述推导也是正确的,于是也可以如下定义
F^(k)=F(n)= n=0∑N−1F^(n)eN2πink N1k=0∑N−1F(k)eN−2πink离散傅里叶变换 DFT离散傅里叶逆变换 IDFT
由于这样计算 DFT 比较简单,下面采用这种定义。
利用离散傅里叶变换求卷积
设 F,G:Zn→C,定义 F 与 G 的卷积为
F∗G(n)=k=0∑N−1F(k)G(n−k)
则卷积与离散傅里叶变换有如下关系
F∗G(n)=F^(n)G^(n)
应用: 这种形式的卷积一个很重要的应用就是求 多项式乘法,设 Pn(x),Qn(x) 为两个多项式:
Pn(x)=a0+a1x+⋯+anxnQn(x)=b0+b1x+⋯+bnxn
则
Pn(x)Qn(x)=m=0∑2n(k=0∑makbm−k)xm
其中
k=0∑makbm−k
就是 Pn(x),Qn(x) 对应系数的卷积了。
证明: 直接计算
F∗G(n)===由于G周期为N= m=0∑N−1F∗G(m)en(m) m=0∑N−1k=0∑N−1F(k)G(m−k)en(m) k=0∑F(k)en(k)m=0∑N−1G(m−k)en(m−k) k=0∑F(k)en(k)m=0∑N−1G(m)en(m) F^(n)G^(n)
于是可以将求解 F∗G 的问题,转化为先求解 F,G 的离散傅里叶变换 F^,G^,然后逐项相乘得到 F∗G,然后再使用离散傅里叶逆变换求得 F∗G。
如果能在时间复杂度为 O(NlogN) 中求解离散傅里叶变换(类似的离散傅里叶逆变换也可求解,只需要改变正负号,再乘上 N1 即可),逐项相乘的复杂度为 O(N),则求解 F,G 的卷积 F∗G,就可以在 O(NlogN) 下求解了。
在 O(NlogN) 的复杂度下求解离散傅里叶变换的算法叫做 快速傅里叶变换(FFT:Fast Fourier Transform),其主要思想是 分治合并 的思想,对奇偶分类合并,使用位逆序置换加速,还有很多细节,详细代码和过程可以看 算法总结 - 快速傅里叶变换(当初学习FFT后对傅里叶变换理解还是十分模糊,因为当时使用代数的方法(矩阵)证明的,并没有从分析上进行定义,这次相当于用分析的方法,再解释一次DFT和IDFT的原理)