矩形波的傅里叶级数及代码

目录

  • 问题:求如下矩形波的傅里叶级数
  • 傅里叶级数公式
  • 绘图

问题:求如下矩形波的傅里叶级数

矩形波的傅里叶级数及代码_第1张图片
可见次矩形波的周期 T = 1 T=1 T=1。用傅里叶级数在区间 ( 0 , 1 ) (0,1) (0,1)内拟合矩形波 f ( t ) f(t) f(t)

傅里叶级数公式

傅里叶级数的公式为:
矩形波的傅里叶级数及代码_第2张图片
其中, 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=T20Tf(t)cos(t)dt=201/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=T20Tf(t)cos(t)dt=T20T/2cos(t)dt因为f(x)只在这个区间有值=T21sin(t) 0T/2定积分=1sin()
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=T20Tf(t)sin(t)dt=T20T/2sin(t)dt同理f(x)只在这个区间有值=T2(1)cos(t) 0T/2定积分=1(1cos())
所以:
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(t)+bnsin(t))=1/2+n=1 1sin()cos(t)+1(1cos())sin(t) =1/2+n=11(sin(2t)+sin((12t)))

绘图

根据上面求得的 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)
    矩形波的傅里叶级数及代码_第3张图片

  • polt(n=25)
    矩形波的傅里叶级数及代码_第4张图片

  • polt(n=50)
    矩形波的傅里叶级数及代码_第5张图片
    █ 完。

你可能感兴趣的:(专栏04-数学知识,matploylib,傅里叶级数)