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

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

在这里插入图片描述
可见次矩形波的周期 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=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)
    在这里插入图片描述

  • polt(n=25)
    在这里插入图片描述

  • polt(n=50)
    在这里插入图片描述
    █ 完。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值