跳到主要内容

傅里叶级数实验

什么是傅里叶级数?

任何周期函数都可以分解为一系列正弦和余弦函数之和:

f(x)=a02+n=1[ancos(2πnxT)+bnsin(2πnxT)]f(x) = \frac{a_0}{2} + \sum_{n=1}^{\infty} \left[ a_n \cos\left(\frac{2\pi n x}{T}\right) + b_n \sin\left(\frac{2\pi n x}{T}\right) \right]

其中系数由以下积分确定:

an=2T0Tf(x)cos(2πnxT)dxa_n = \frac{2}{T}\int_0^T f(x)\cos\left(\frac{2\pi n x}{T}\right)dx

bn=2T0Tf(x)sin(2πnxT)dxb_n = \frac{2}{T}\int_0^T f(x)\sin\left(\frac{2\pi n x}{T}\right)dx


方波的傅里叶展开

方波(奇函数,周期 2π2\pi)的傅里叶级数:

f(x)=4πn=1,3,5,sin(nx)n=4π(sinx+sin3x3+sin5x5+)f(x) = \frac{4}{\pi}\sum_{n=1,3,5,\ldots}^{\infty} \frac{\sin(nx)}{n} = \frac{4}{\pi}\left(\sin x + \frac{\sin 3x}{3} + \frac{\sin 5x}{5} + \cdots\right)

叠加的谐波越多,逼近方波越精确(Gibbs 现象:边缘处约有 9% 的超调)。


复数形式

傅里叶级数的紧凑复数写法:

f(x)=n=cnei2πnx/Tf(x) = \sum_{n=-\infty}^{\infty} c_n \, e^{i 2\pi n x / T}

cn=1T0Tf(x)ei2πnx/Tdxc_n = \frac{1}{T}\int_0^T f(x)\, e^{-i 2\pi n x / T}\, dx


傅里叶变换(连续版本)

将周期延伸到无穷,得到傅里叶变换:

f^(ξ)=f(x)ei2πξxdx\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x)\, e^{-i 2\pi \xi x}\, dx

逆变换:

f(x)=f^(ξ)ei2πξxdξf(x) = \int_{-\infty}^{\infty} \hat{f}(\xi)\, e^{i 2\pi \xi x}\, d\xi


Manim 示例:方波的谐波叠加

from manim import *
import numpy as np

class FourierSquareWave(Scene):
def construct(self):
axes = Axes(x_range=[0, 4*PI, PI], y_range=[-1.5, 1.5])

def square_approx(n_terms):
def f(x):
return sum(
(4 / (np.pi * k)) * np.sin(k * x)
for k in range(1, 2*n_terms, 2)
)
return f

colors = [RED, ORANGE, YELLOW, GREEN, BLUE]
for i, n in enumerate([1, 3, 5, 9, 19]):
curve = axes.plot(square_approx(n), color=colors[i])
label = Text(f"n={n}", font_size=24, color=colors[i])
label.to_corner(UR).shift(DOWN * i * 0.4)
self.play(Create(curve), Write(label), run_time=0.8)

self.wait(2)