本文部分公式很长,整体排版对移动端不太友好,建议在 PC 端或者宽屏设备上阅读。
傅里叶变换(Fourier transform)是信号处理中一个重要的概念。傅里叶变换将时间(例如音频)/ 空间域(例如图像)转换到频率域,方便很多后续的信号处理。本文从周期函数的傅里叶级数开始,详细推导傅里叶级数的复数表示,以及非周期函数的傅里叶变换,希望能帮助大家理解傅里叶变换的原理。
正交函数系
对于两个实值函数 f ( x ) f(x) f(x) 和 g ( x ) g(x) g(x),定义函数的内积为:
⟨ f , g ⟩ = ∫ a b f ( x ) g ( x ) d x \langle f, g \rangle = \int_a^b f(x)g(x)\,dx ⟨f,g⟩=∫abf(x)g(x)dx
如果
⟨ f , g ⟩ = 0 \langle f, g \rangle = 0 ⟨f,g⟩=0
则称 f f f 和 g g g 正交。函数正交是向量正交的一个扩展,函数正交中的"乘积后求积分"对应向量内积的"乘积后求和"。
假设有函数的集合 { ϕ n ( x ) } \{\phi_n(x)\} {ϕn(x)},其中对于任意 m ≠ n m \neq n m=n 有:
∫ a b ϕ m ( x ) ϕ n ( x ) d x = 0 \int_a^b \phi_m(x)\phi_n(x)\,dx = 0 ∫abϕm(x)ϕn(x)dx=0
则称该函数集合为"正交函数系"(orthogonal functions)。
三角函数集合
1 , cos x , sin x , cos 2 x , sin 2 x , ⋯ 1,\ \cos x,\ \sin x,\ \cos 2x,\ \sin 2x,\ \cdots 1, cosx, sinx, cos2x, sin2x, ⋯
是正交函数系。以区间 − π , π -\\pi,\\pi −π,π 为例:
对于任意的 m , n m,n m,n,当 m ≠ n m \neq n m=n 时:
∫ − π π cos ( m x ) cos ( n x ) d x = 0 \int_{-\pi}^{\pi}\cos(mx)\cos(nx)\,dx = 0 ∫−ππcos(mx)cos(nx)dx=0
对于任意的 m , n m,n m,n,当 m ≠ n m \neq n m=n 时:
∫ − π π sin ( m x ) sin ( n x ) d x = 0 \int_{-\pi}^{\pi}\sin(mx)\sin(nx)\,dx = 0 ∫−ππsin(mx)sin(nx)dx=0
并且:
∫ − π π sin ( m x ) cos ( n x ) d x = 0 \int_{-\pi}^{\pi}\sin(mx)\cos(nx)\,dx = 0 ∫−ππsin(mx)cos(nx)dx=0
周期函数的傅里叶级数展开
周期函数是指满足
f ( x + T ) = f ( x ) f(x+T)=f(x) f(x+T)=f(x)
的函数,其中常数 T T T 称为周期。任意一个周期为 T T T 的函数 f ( x ) f(x) f(x) 都可以展开为不同频率的余弦函数的线性组合:
f ( x ) = A 0 + ∑ n = 1 ∞ A n cos ( n ω 0 x + φ n ) f(x)=A_0+\sum_{n=1}^{\infty}A_n\cos(n\omega_0 x+\varphi_n) f(x)=A0+n=1∑∞Ancos(nω0x+φn)
式中 ω 0 = 2 π T \omega_0=\dfrac{2\pi}{T} ω0=T2π 称为基频率。
公式也可以写为正弦形式:
f ( x ) = A 0 + ∑ n = 1 ∞ A n sin ( n ω 0 x + φ n ) f(x)=A_0+\sum_{n=1}^{\infty}A_n\sin(n\omega_0 x+\varphi_n) f(x)=A0+n=1∑∞Ansin(nω0x+φn)
同时也可以写成正弦余弦组合的形式:
f ( x ) = a 0 + ∑ n = 1 ∞ a n cos ( n ω 0 x ) + b n sin ( n ω 0 x ) f(x)=a_0+\sum_{n=1}^{\infty}\lefta_n\\cos(n\\omega_0 x)+b_n\\sin(n\\omega_0 x)\\right f(x)=a0+n=1∑∞ancos(nω0x)+bnsin(nω0x)
令
A n = a n 2 + b n 2 A_n=\sqrt{a_n^2+b_n^2} An=an2+bn2
φ n = arctan ( − b n a n ) \varphi_n=\arctan\!\left(-\frac{b_n}{a_n}\right) φn=arctan(−anbn)
式子可以简写成:
f ( x ) = a 0 + ∑ n = 1 ∞ A n cos ( n ω 0 x + φ n ) f(x)=a_0+\sum_{n=1}^{\infty}A_n\cos(n\omega_0 x+\varphi_n) f(x)=a0+n=1∑∞Ancos(nω0x+φn)
式中的系数 a 0 , a n , b n a_0,a_n,b_n a0,an,bn 可以通过积分求得。
下面推导 a 0 , a n , b n a_0,a_n,b_n a0,an,bn。
对于 a 0 a_0 a0,对上式两边在一个周期区间 − T 2 , T 2 \left-\\dfrac{T}{2},\\dfrac{T}{2}\\right −2T,2T 求积分:
∫ − T / 2 T / 2 f ( x ) d x = ∫ − T / 2 T / 2 a 0 + ∑ n = 1 ∞ ( a n cos ( n ω 0 x ) + b n sin ( n ω 0 x ) ) d x \int_{-T/2}^{T/2}f(x)\,dx=\int_{-T/2}^{T/2} \left a_0+\\sum_{n=1}\^{\\infty}\\bigl(a_n\\cos(n\\omega_0x)+b_n\\sin(n\\omega_0x)\\bigr) \\rightdx ∫−T/2T/2f(x)dx=∫−T/2T/2a0+n=1∑∞(ancos(nω0x)+bnsin(nω0x))dx
由正交性得:
a 0 = 1 T ∫ − T / 2 T / 2 f ( x ) d x a_0=\frac{1}{T}\int_{-T/2}^{T/2}f(x)\,dx a0=T1∫−T/2T/2f(x)dx
对于 a n a_n an,对上式两边乘以 cos ( m ω 0 x ) \cos(m\omega_0x) cos(mω0x),然后再在 − T 2 , T 2 \left-\\dfrac{T}{2},\\dfrac{T}{2}\\right −2T,2T 区间求积分:
∫ − T / 2 T / 2 f ( x ) cos ( m ω 0 x ) d x = ∫ − T / 2 T / 2 a 0 + ∑ n = 1 ∞ ( a n cos ( n ω 0 x ) + b n sin ( n ω 0 x ) ) cos ( m ω 0 x ) d x \int_{-T/2}^{T/2}f(x)\cos(m\omega_0x)\,dx=\int_{-T/2}^{T/2} \left a_0+\\sum_{n=1}\^{\\infty}\\bigl(a_n\\cos(n\\omega_0x)+b_n\\sin(n\\omega_0x)\\bigr) \\right\cos(m\omega_0x)\,dx ∫−T/2T/2f(x)cos(mω0x)dx=∫−T/2T/2a0+n=1∑∞(ancos(nω0x)+bnsin(nω0x))cos(mω0x)dx
化简后得到:
a n = 2 T ∫ − T / 2 T / 2 f ( x ) cos ( n ω 0 x ) d x a_n=\frac{2}{T}\int_{-T/2}^{T/2}f(x)\cos(n\omega_0x)\,dx an=T2∫−T/2T/2f(x)cos(nω0x)dx
类似地,对上式两边乘以 sin ( m ω 0 x ) \sin(m\omega_0x) sin(mω0x),然后再在 − T 2 , T 2 \left-\\dfrac{T}{2},\\dfrac{T}{2}\\right −2T,2T 区间求积分,可以得到:
b n = 2 T ∫ − T / 2 T / 2 f ( x ) sin ( n ω 0 x ) d x b_n=\frac{2}{T}\int_{-T/2}^{T/2}f(x)\sin(n\omega_0x)\,dx bn=T2∫−T/2T/2f(x)sin(nω0x)dx
整理后得到:
a 0 = 1 T ∫ − T / 2 T / 2 f ( x ) d x a_0=\frac{1}{T}\int_{-T/2}^{T/2}f(x)\,dx a0=T1∫−T/2T/2f(x)dx
a n = 2 T ∫ − T / 2 T / 2 f ( x ) cos ( n ω 0 x ) d x a_n=\frac{2}{T}\int_{-T/2}^{T/2}f(x)\cos(n\omega_0x)\,dx an=T2∫−T/2T/2f(x)cos(nω0x)dx
b n = 2 T ∫ − T / 2 T / 2 f ( x ) sin ( n ω 0 x ) d x b_n=\frac{2}{T}\int_{-T/2}^{T/2}f(x)\sin(n\omega_0x)\,dx bn=T2∫−T/2T/2f(x)sin(nω0x)dx
求出 a n , b n a_n,b_n an,bn 后,根据前面的替换,可以得到:
A n = a n 2 + b n 2 A_n=\sqrt{a_n^2+b_n^2} An=an2+bn2
φ n = arctan ( − b n a n ) \varphi_n=\arctan\!\left(-\frac{b_n}{a_n}\right) φn=arctan(−anbn)
其中, A n A_n An 称为幅度,表示不同频率余弦分量的"权重"; φ n \varphi_n φn 称为相位,表示不同频率余弦分量的初始相位。通过这些系数就可以恢复出原函数 f ( x ) f(x) f(x)。
傅里叶级数的复数形式
理论上讲,上面的傅里叶级数展开已经比较完备,但是形式上不是很统一,每个频率分量需要两个参数来表示。那么有没有一种统一的形式,使得傅里叶级数展开等号右边只有一种类型的基函数,而且基函数的参数可以统一表示出来呢?
要回答这个问题,要从欧拉公式开始。
欧拉公式
首先介绍欧拉公式:
e i x = cos x + i sin x e^{ix}=\cos x+i\sin x eix=cosx+isinx
由上式可以推出:
cos x = e i x + e − i x 2 \cos x=\frac{e^{ix}+e^{-ix}}{2} cosx=2eix+e−ix
sin x = e i x − e − i x 2 i \sin x=\frac{e^{ix}-e^{-ix}}{2i} sinx=2ieix−e−ix
通过欧拉公式将傅里叶级数转换到复数域
将
f ( x ) = a 0 + ∑ n = 1 ∞ a n cos ( n ω 0 x ) + b n sin ( n ω 0 x ) f(x)=a_0+\sum_{n=1}^{\infty}\lefta_n\\cos(n\\omega_0 x)+b_n\\sin(n\\omega_0 x)\\right f(x)=a0+n=1∑∞ancos(nω0x)+bnsin(nω0x)
带入欧拉公式,得到:
f ( x ) = a 0 + ∑ n = 1 ∞ a n e i n ω 0 x + e − i n ω 0 x 2 + b n e i n ω 0 x − e − i n ω 0 x 2 i f(x)=a_0+\sum_{n=1}^{\infty} \left a_n\\frac{e\^{in\\omega_0x}+e\^{-in\\omega_0x}}{2} + b_n\\frac{e\^{in\\omega_0x}-e\^{-in\\omega_0x}}{2i} \\right f(x)=a0+n=1∑∞an2einω0x+e−inω0x+bn2ieinω0x−e−inω0x
整理得:
f ( x ) = a 0 + ∑ n = 1 ∞ ( a n − i b n 2 e i n ω 0 x + a n + i b n 2 e − i n ω 0 x ) f(x)=a_0+\sum_{n=1}^{\infty} \left( \frac{a_n-ib_n}{2}e^{in\omega_0x} + \frac{a_n+ib_n}{2}e^{-in\omega_0x} \right) f(x)=a0+n=1∑∞(2an−ibneinω0x+2an+ibne−inω0x)
改用新的系数符号 c n c_n cn:
c n = { a n − i b n 2 , n > 0 a 0 , n = 0 a ∣ n ∣ + i b ∣ n ∣ 2 , n < 0 c_n= \begin{cases} \dfrac{a_n-ib_n}{2}, & n>0\\6pt a_0, & n=0\\6pt \dfrac{a_{|n|}+ib_{|n|}}{2}, & n<0 \end{cases} cn=⎩ ⎨ ⎧2an−ibn,a0,2a∣n∣+ib∣n∣,n>0n=0n<0
于是得到傅里叶级数的复指数形式:
f ( x ) = ∑ n = − ∞ + ∞ c n e i n ω 0 x f(x)=\sum_{n=-\infty}^{+\infty}c_n e^{in\omega_0x} f(x)=n=−∞∑+∞cneinω0x
其中
c n = 1 T ∫ − T / 2 T / 2 f ( x ) e − i n ω 0 x d x c_n=\frac{1}{T}\int_{-T/2}^{T/2}f(x)e^{-in\omega_0x}\,dx cn=T1∫−T/2T/2f(x)e−inω0xdx
至此导出了傅里叶级数的复指数形式。此时基函数为复指数信号 e i n ω 0 x e^{in\omega_0x} einω0x,系数 c n c_n cn 是复数。每个频率分量只需要一个复数权重,因为这个复数同时包含了幅度和相位信息。
接下来求解不同情况下 c n c_n cn 的表达式:
当 n = 0 n=0 n=0 时:
c 0 = a 0 c_0=a_0 c0=a0
当 n > 0 n>0 n>0 时:
c n = a n − i b n 2 c_n=\frac{a_n-ib_n}{2} cn=2an−ibn
当 n < 0 n<0 n<0 时:
c n = a ∣ n ∣ + i b ∣ n ∣ 2 c_n=\frac{a_{|n|}+ib_{|n|}}{2} cn=2a∣n∣+ib∣n∣
不论 n n n 取何值, c n c_n cn 都可以统一表示为:
c n = 1 T ∫ − T / 2 T / 2 f ( x ) e − i n ω 0 x d x c_n=\frac{1}{T}\int_{-T/2}^{T/2}f(x)e^{-in\omega_0x}\,dx cn=T1∫−T/2T/2f(x)e−inω0xdx
总结起来,任意一个周期为 T T T 的实值函数 f ( x ) f(x) f(x) 都可以展开为以下傅里叶级数:
f ( x ) = ∑ n = − ∞ + ∞ c n e i n ω 0 x f(x)=\sum_{n=-\infty}^{+\infty}c_n e^{in\omega_0x} f(x)=n=−∞∑+∞cneinω0x
其中 ω 0 = 2 π T \omega_0=\dfrac{2\pi}{T} ω0=T2π 称为基频率,不同频率分量的权重 c n c_n cn 是一个同时包含了幅度和相位信息的复数。
将 c n c_n cn 的表达式带入上式,得到周期函数 f ( x ) f(x) f(x) 的复指数形式傅里叶级数展开的完整表达式:
f ( x ) = ∑ n = − ∞ + ∞ ( 1 T ∫ − T / 2 T / 2 f ( ξ ) e − i n ω 0 ξ d ξ ) e i n ω 0 x f(x)=\sum_{n=-\infty}^{+\infty} \left( \frac{1}{T}\int_{-T/2}^{T/2}f(\xi)e^{-in\omega_0\xi}\,d\xi \right)e^{in\omega_0x} f(x)=n=−∞∑+∞(T1∫−T/2T/2f(ξ)e−inω0ξdξ)einω0x
傅里叶级数到傅里叶变换
上式中的傅里叶级数展开是针对周期函数的,但是在现实中大多数信号都是非周期的。对于非周期函数 f ( x ) f(x) f(x),也存在类似的分解。
非周期函数可以看做是周期 T → ∞ T\to\infty T→∞ 的周期函数。当 T → ∞ T\to\infty T→∞ 时,基频率
ω 0 = 2 π T \omega_0=\frac{2\pi}{T} ω0=T2π
就变成了微分 d ω d\omega dω,同时求和
∑ n = − ∞ + ∞ \sum_{n=-\infty}^{+\infty} n=−∞∑+∞
就变成了求积分
∫ − ∞ + ∞ \int_{-\infty}^{+\infty} ∫−∞+∞
先将上式带入,然后将求和转化为积分。
用
ω = n ω 0 \omega=n\omega_0 ω=nω0
替换,则有
f T ( x ) = ∑ n = − ∞ + ∞ ( 1 T ∫ − T / 2 T / 2 e − i n ω 0 ξ f ( ξ ) d ξ ) e i n ω 0 x f_T(x)=\sum_{n=-\infty}^{+\infty} \left( \frac{1}{T}\int_{-T/2}^{T/2}e^{-in\omega_0\xi}f(\xi)\,d\xi \right)e^{in\omega_0x} fT(x)=n=−∞∑+∞(T1∫−T/2T/2e−inω0ξf(ξ)dξ)einω0x
又因为
1 T = ω 0 2 π \frac{1}{T}=\frac{\omega_0}{2\pi} T1=2πω0
所以
f T ( x ) = ∑ n = − ∞ + ∞ { ω 0 2 π ∫ − T / 2 T / 2 e − i n ω 0 ξ f ( ξ ) d ξ } e i n ω 0 x f_T(x)=\sum_{n=-\infty}^{+\infty} \left\{ \frac{\omega_0}{2\pi} \int_{-T/2}^{T/2}e^{-in\omega_0\xi}f(\xi)\,d\xi \right\} e^{in\omega_0x} fT(x)=n=−∞∑+∞{2πω0∫−T/2T/2e−inω0ξf(ξ)dξ}einω0x
当 T → ∞ T\to\infty T→∞ 时,周期函数 f T ( x ) f_T(x) fT(x) 变为非周期函数 f ( x ) f(x) f(x), ω 0 \omega_0 ω0 变成无穷小,上式等号右边过渡为一个积分:
f ( x ) = 1 2 π ∫ − ∞ + ∞ ∫ − ∞ + ∞ e − i ω ξ f ( ξ ) d ξ e i ω x d ω f(x)=\frac{1}{2\pi} \int_{-\infty}^{+\infty} \left \\int_{-\\infty}\^{+\\infty} e\^{-i\\omega \\xi}f(\\xi)\\,d\\xi \\right e^{i\omega x}\,d\omega f(x)=2π1∫−∞+∞∫−∞+∞e−iωξf(ξ)dξeiωxdω
式中
F ( ω ) = ∫ − ∞ + ∞ f ( x ) e − i ω x d x F(\omega)=\int_{-\infty}^{+\infty}f(x)e^{-i\omega x}\,dx F(ω)=∫−∞+∞f(x)e−iωxdx
称为"傅里叶变换";
f ( x ) = 1 2 π ∫ − ∞ + ∞ F ( ω ) e i ω x d ω f(x)=\frac{1}{2\pi}\int_{-\infty}^{+\infty}F(\omega)e^{i\omega x}\,d\omega f(x)=2π1∫−∞+∞F(ω)eiωxdω
称为"傅里叶逆变换"。
勘误说明:这里采用的是角频率记号 ω = n ω 0 \omega=n\omega_0 ω=nω0,因此最终应统一写为
F ( ω ) = ∫ − ∞ + ∞ f ( x ) e − i ω x d x F(\omega)=\int_{-\infty}^{+\infty}f(x)e^{-i\omega x}\,dx F(ω)=∫−∞+∞f(x)e−iωxdx 和
f ( x ) = 1 2 π ∫ − ∞ + ∞ F ( ω ) e i ω x d ω f(x)=\dfrac{1}{2\pi}\int_{-\infty}^{+\infty}F(\omega)e^{i\omega x}\,d\omega f(x)=2π1∫−∞+∞F(ω)eiωxdω。
如果指数中写成 2 π ω x 2\pi\omega x 2πωx,则变量应改为普通频率 u u u,同时逆变换前面不再写 1 2 π \dfrac{1}{2\pi} 2π1。
引用
如果本文的内容对你撰写学术论文有帮助,希望能考虑引用:
bibtex
@misc{zhao2020fourier,
title = {从傅里叶级数到傅里叶变换:详细的数学推导},
author = {Kai Zhao},
year = 2020,
note = {\url{http://kaizhao.net/blog/fourier}}
}
一维离散傅里叶变换推导: