傅里叶级数与傅里叶变换
一、傅里叶级数(Fourier Series)
1. 傅里叶级数的基本概念
傅里叶级数是将周期函数表示为正弦和余弦函数的无穷级数。其核心思想是,任何周期函数都可以通过适当的加权正弦和余弦波的叠加来表示。
对于一个周期为
T
T
T 的周期函数
f
(
t
)
f(t)
f(t),傅里叶级数的表达式为:
f
(
t
)
=
a
0
+
∑
n
=
1
∞
(
a
n
cos
(
n
ω
0
t
)
+
b
n
sin
(
n
ω
0
t
)
)
f(t) = a_0 + \sum_{n=1}^{\infty} \left( a_n \cos(n\omega_0 t) + b_n \sin(n\omega_0 t) \right)
f(t)=a0+n=1∑∞(ancos(nω0t)+bnsin(nω0t))
其中,
ω
0
=
2
π
T
\omega_0 = \frac{2\pi}{T}
ω0=T2π 是基频,
a
0
a_0
a0 是常数项,
a
n
a_n
an 和
b
n
b_n
bn 是傅里叶级数的系数。
2. 傅里叶级数系数的计算
傅里叶系数
a
0
,
a
n
,
b
n
a_0, a_n, b_n
a0,an,bn 的计算公式分别为:
a
0
=
2
T
∫
0
T
f
(
t
)
d
t
a_0 = \frac{2}{T} \int_0^T f(t) \, dt
a0=T2∫0Tf(t)dt
a
n
=
2
T
∫
0
T
f
(
t
)
cos
(
n
ω
0
t
)
d
t
a_n = \frac{2}{T} \int_0^T f(t) \cos(n \omega_0 t) \, dt
an=T2∫0Tf(t)cos(nω0t)dt
b
n
=
2
T
∫
0
T
f
(
t
)
sin
(
n
ω
0
t
)
d
t
b_n = \frac{2}{T} \int_0^T f(t) \sin(n \omega_0 t) \, dt
bn=T2∫0Tf(t)sin(nω0t)dt
3. 实例分析:用傅里叶级数表示周期函数
案例:
考虑一个简单的周期方波函数:
f
(
t
)
=
{
1
,
0
≤
t
<
T
/
2
−
1
,
T
/
2
≤
t
<
T
f(t) = \begin{cases} 1, & 0 \leq t < T/2 \\ -1, & T/2 \leq t < T \end{cases}
f(t)={1,−1,0≤t<T/2T/2≤t<T
这个函数的周期是
T
T
T。我们可以利用傅里叶级数来表示这个方波函数。首先,计算傅里叶系数
a
0
,
a
n
,
b
n
a_0, a_n, b_n
a0,an,bn。
傅里叶系数计算过程:
-
a 0 a_0 a0:
a 0 = 2 T ∫ 0 T / 2 1 d t + 2 T ∫ T / 2 T ( − 1 ) d t = 2 T × T 2 + 2 T × T 2 = 0 a_0 = \frac{2}{T} \int_0^{T/2} 1 \, dt + \frac{2}{T} \int_{T/2}^{T} (-1) \, dt = \frac{2}{T} \times \frac{T}{2} + \frac{2}{T} \times \frac{T}{2} = 0 a0=T2∫0T/21dt+T2∫T/2T(−1)dt=T2×2T+T2×2T=0 -
a n a_n an(对于偶函数来说, a n = 0 a_n = 0 an=0):
a n = 2 T ∫ 0 T / 2 1 cos ( n ω 0 t ) d t + 2 T ∫ T / 2 T ( − 1 ) cos ( n ω 0 t ) d t a_n = \frac{2}{T} \int_0^{T/2} 1 \cos(n \omega_0 t) \, dt + \frac{2}{T} \int_{T/2}^{T} (-1) \cos(n \omega_0 t) \, dt an=T2∫0T/21cos(nω0t)dt+T2∫T/2T(−1)cos(nω0t)dt -
b n b_n bn(由于函数是奇函数, b n b_n bn 不为零):
b n = 2 T ∫ 0 T / 2 1 sin ( n ω 0 t ) d t + 2 T ∫ T / 2 T ( − 1 ) sin ( n ω 0 t ) d t b_n = \frac{2}{T} \int_0^{T/2} 1 \sin(n \omega_0 t) \, dt + \frac{2}{T} \int_{T/2}^{T} (-1) \sin(n \omega_0 t) \, dt bn=T2∫0T/21sin(nω0t)dt+T2∫T/2T(−1)sin(nω0t)dt
你可以通过直接计算这些积分(或使用计算软件)来求出傅里叶系数。
结果:
得到的
b
n
b_n
bn 结果是:
b
n
=
4
n
π
(当
n
为奇数时,
b
n
=
0
对偶数)
b_n = \frac{4}{n \pi} \quad \text{(当 $n$ 为奇数时,$b_n = 0$ 对偶数)}
bn=nπ4(当 n 为奇数时,bn=0 对偶数)
二、傅里叶变换(Fourier Transform)
1. 傅里叶变换的基本概念
傅里叶变换是将一个非周期函数从时间域转换到频率域的工具。它将时间域中的函数
f
(
t
)
f(t)
f(t) 转换为频域中的函数
F
(
ω
)
F(\omega)
F(ω)。
傅里叶变换的定义式为:
F
(
ω
)
=
∫
−
∞
∞
f
(
t
)
e
−
i
ω
t
d
t
F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i \omega t} \, dt
F(ω)=∫−∞∞f(t)e−iωtdt
2. 傅里叶逆变换
傅里叶逆变换可以将频域信号转换回时间域,公式为:
f
(
t
)
=
1
2
π
∫
−
∞
∞
F
(
ω
)
e
i
ω
t
d
ω
f(t) = \frac{1}{2\pi} \int_{-\infty}^{\infty} F(\omega) e^{i \omega t} \, d\omega
f(t)=2π1∫−∞∞F(ω)eiωtdω
3. 实例分析:傅里叶变换在实际物理问题中的应用
假设我们有一个简单的脉冲信号
f
(
t
)
f(t)
f(t),定义为:
f
(
t
)
=
{
1
,
∣
t
∣
≤
1
2
0
,
∣
t
∣
>
1
2
f(t) = \begin{cases} 1, & |t| \leq \frac{1}{2} \\ 0, & |t| > \frac{1}{2} \end{cases}
f(t)={1,0,∣t∣≤21∣t∣>21
我们将计算该脉冲信号的傅里叶变换。
傅里叶变换计算过程:
F
(
ω
)
=
∫
−
∞
∞
f
(
t
)
e
−
i
ω
t
d
t
=
∫
−
1
/
2
1
/
2
e
−
i
ω
t
d
t
F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i \omega t} \, dt = \int_{-1/2}^{1/2} e^{-i \omega t} \, dt
F(ω)=∫−∞∞f(t)e−iωtdt=∫−1/21/2e−iωtdt
计算该积分,可以得到:
F
(
ω
)
=
sin
(
ω
/
2
)
ω
/
2
F(\omega) = \frac{\sin(\omega/2)}{\omega/2}
F(ω)=ω/2sin(ω/2)
三、课堂活动:傅里叶级数与傅里叶变换的实际应用
1. 傅里叶级数实际应用
案例:
对于信号处理中的周期信号,我们可以分析其频谱成分。假设我们有一个周期信号,其图形类似于一个方波。通过傅里叶级数,可以计算出该信号的频率分量。
活动过程:
使用之前的周期方波函数,要求学生计算前几项傅里叶级数,并画出其频谱(即每一项频率成分的幅度)。
2. 傅里叶变换的实际应用
案例:
分析一个窗口函数(例如矩形窗)的频谱。窗口函数是信号处理中的重要工具,了解其频谱有助于理解信号的频率特性。
四、Python代码实现示例
傅里叶级数的Python实现:
import numpy as np
import matplotlib.pyplot as plt
# 定义周期方波函数
def square_wave(t, T):
return np.where(np.mod(t, T) < T/2, 1, -1)
# 定义傅里叶级数
def fourier_series(t, T, N):
a_0 = 0
result = a_0
for n in range(1, N+1):
b_n = 4 / (n * np.pi) * (1 - (-1)**n)
result += b_n * np.sin(2 * np.pi * n * t / T)
return result
# 时间轴
T = 2
t = np.linspace(0, 2*T, 1000)
# 计算方波和其傅里叶级数
square_wave_signal = square_wave(t, T)
fourier_signal = fourier_series(t, T, N=10)
# 绘制图形
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.plot(t, square_wave_signal, label="Original Square Wave")
plt.title("Original Square Wave")
plt.grid(True)
plt.subplot(2, 1, 2)
plt.plot(t, fourier_signal, label="Fourier Series Approximation", color='r')
plt.title("Fourier Series Approximation (N=10)")
plt.grid(True)
plt.tight_layout()
plt.show()
傅里叶变换的Python实现:
from scipy.fft import fft, fftfreq
# 定义脉冲信号
def pulse_signal(t):
return np.where(np.abs(t) <= 0.5, 1, 0)
# 时间轴
t = np.linspace(-1, 1, 1000)
signal = pulse_signal(t)
# 计算傅里叶变换
N = len(t)
T = t[1] - t[0]
frequencies = fftfreq(N, T)
fourier_transform = fft(signal)
# 绘制图形
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.plot(t, signal, label="Pulse Signal")
plt.title("Pulse Signal in Time Domain")
plt.grid(True)
plt.subplot(2, 1, 2)
plt.plot(frequencies, np.abs(fourier_transform), label="Fourier Transform", color='r')
plt.title("Fourier Transform (Frequency Domain)")
plt.grid(True)
plt.tight_layout()
plt.show()
总结
这节课将通过傅里叶级数和傅里叶变换的基本概念、公式推导、实际应用和Python实现来帮助学生理解周期函数和非周期函数的频域表示。在课堂活动中,将能亲自计算傅里叶系数、绘制信号频谱,并用Python实现傅里叶分析工具。