问题:求如下矩形波的傅里叶级数
可见次矩形波的周期
T
=
1
T=1
T=1。用傅里叶级数在区间
(
0
,
1
)
(0,1)
(0,1)内拟合矩形波
f
(
t
)
f(t)
f(t)。
傅里叶级数公式
傅里叶级数的公式为:
其中,
t
0
t_0
t0表示周期起点,可以设置为0,
ω
=
2
π
T
\omega={\frac {2\pi} T}
ω=T2π。
下面求
a
n
a_n
an和
b
n
b_n
bn。
设
t
0
=
0
t_0=0
t0=0,
a
0
=
2
T
∫
0
T
f
(
t
)
c
o
s
(
n
ω
t
)
d
t
=
2
∫
0
1
/
2
d
t
=
1
\begin{aligned} &a_0={\frac 2 T}\int_{0}^{T}f(t)cos(n\omega t)dt\\\ &\quad=2\int_{0}^{1/2}dt \\\ &\quad=1 \end{aligned}
a0=T2∫0Tf(t)cos(nωt)dt=2∫01/2dt=1
a
n
=
2
T
∫
0
T
f
(
t
)
c
o
s
(
n
ω
t
)
d
t
=
2
T
∫
0
T
/
2
c
o
s
(
n
ω
t
)
d
t
因为
f
(
x
)
只在这个区间有值
=
2
T
1
n
ω
s
i
n
(
n
ω
t
)
∣
0
T
/
2
定积分
=
1
n
π
s
i
n
(
n
π
)
\begin{aligned} &a_n={\frac 2 T}\int_{0}^{T}f(t)cos(n\omega t)dt\\\ &\quad={\frac 2 T}\int_{0}^{T/2}cos(n\omega t)dt \qquad\qquad 因为f(x)只在这个区间有值 \\\ &\quad={\frac 2 T}{\frac 1 {n\omega}} sin(n\omega t)\Big|_{0}^{T/2} \qquad\qquad 定积分 \\\ &\quad={\frac 1 {n\pi}}sin(n\pi) \end{aligned}
an=T2∫0Tf(t)cos(nωt)dt=T2∫0T/2cos(nωt)dt因为f(x)只在这个区间有值=T2nω1sin(nωt)∣
∣0T/2定积分=nπ1sin(nπ)
b
n
=
2
T
∫
0
T
f
(
t
)
s
i
n
(
n
ω
t
)
d
t
=
2
T
∫
0
T
/
2
s
i
n
(
n
ω
t
)
d
t
同理
f
(
x
)
只在这个区间有值
=
2
T
(
−
1
n
ω
)
c
o
s
(
n
ω
t
)
∣
0
T
/
2
定积分
=
1
n
π
(
1
−
c
o
s
(
n
π
)
)
\begin{aligned} &b_n={\frac 2 T}\int_{0}^{T}f(t)sin(n\omega t)dt\\\ &\quad={\frac 2 T}\int_{0}^{T/2}sin(n\omega t)dt \qquad\qquad 同理f(x)只在这个区间有值 \\\ &\quad={\frac 2 T}(-{\frac 1 {n\omega}}) cos(n\omega t)\Big|_{0}^{T/2} \qquad\qquad 定积分 \\\ &\quad={\frac 1 {n\pi}}(1-cos(n\pi)) \end{aligned}
bn=T2∫0Tf(t)sin(nωt)dt=T2∫0T/2sin(nωt)dt同理f(x)只在这个区间有值=T2(−nω1)cos(nωt)∣
∣0T/2定积分=nπ1(1−cos(nπ))
所以:
f
(
t
)
=
a
0
/
2
+
∑
n
=
1
∞
(
a
n
c
o
s
(
n
ω
t
)
+
b
n
s
i
n
(
n
ω
t
)
)
=
1
/
2
+
∑
n
=
1
∞
(
1
n
π
s
i
n
(
n
π
)
c
o
s
(
n
ω
t
)
+
1
n
π
(
1
−
c
o
s
(
n
π
)
)
s
i
n
(
n
ω
t
)
)
=
1
/
2
+
∑
n
=
1
∞
1
n
π
(
s
i
n
(
2
n
π
t
)
+
s
i
n
(
n
π
(
1
−
2
t
)
)
)
\begin{aligned} &f(t)=a_0/2+\displaystyle\sum_{n=1}^\infin\left(\LARGE{ a_ncos(n\omega t) + b_nsin(n\omega t) }\right)\\\ &\qquad=1/2+\displaystyle\sum_{n=1}^\infin\left(\LARGE{ {\frac 1 {n\pi}}sin(n\pi)cos(n\omega t) + {\frac 1 {n\pi}}(1-cos(n\pi))sin(n\omega t) }\right)\\\ &\qquad=1/2+\displaystyle\sum_{n=1}^\infin{\frac 1 {n\pi}}\left(\LARGE{ sin(2n\pi t)+sin(n\pi(1-2t)) }\right)\\\ \end{aligned}
f(t)=a0/2+n=1∑∞(ancos(nωt)+bnsin(nωt))=1/2+n=1∑∞⎝
⎛nπ1sin(nπ)cos(nωt)+nπ1(1−cos(nπ))sin(nωt)⎠
⎞=1/2+n=1∑∞nπ1(sin(2nπt)+sin(nπ(1−2t)))
绘图
根据上面求得的
f
(
x
)
f(x)
f(x),对其进行绘图,设置不同的正弦波个数n
,可以获得不同的拟合程度,n
越大拟合的越好。
import matplotlib.pyplot as plt
import numpy as np
def polt(n=10):
A0=1
N = np.arange(1,n)
F = []
for t in np.linspace(0,0.99,100):
n_pi = N*np.pi
S = 1/n_pi*(np.sin(2*n_pi*t)+np.sin(n_pi*(1-2*t)))
f_t = A0/2+np.sum(S)
F.append(f_t)
t = np.linspace(-1.1,1.1,1000)
# 方波
rec_wav = (abs(2*t%2)<1).astype('i')
plt.figure(figsize=(10,10))
ax = plt.gca()
ax.set_aspect(1) # 设置坐标轴等长
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
ax.plot(np.linspace(0,0.99,100), F)
ax.plot(t,rec_wav)
plt.show()
-
polt(n=5)
-
polt(n=25)
-
polt(n=50)
█ 完。