傅里叶级数的展开演示

       学校期间学习过遍傅里叶级数以及傅里叶变换,但学完就会忘掉,现在回想应该是当时并没有真正理解其用途。目前由于在图像处理或信号处理中经常用到傅里叶变换来将空间或时间域变换成频率域分析,所以最近重新翻阅当年高数书籍,看了一遍书中的在2\pi周期的傅里叶级数展开,这次有了更深入的理解。下面我们先简单介绍傅里叶级数在2\pi周期的展开公式,之后以一个经典例子来理解傅里叶级数。

        其实我们可以将傅里叶级数想像成是把一个周期函数分解成无穷个简谐振动,或者可以理解成无穷各简谐振动(正余弦函数)求和 组成了一个周期函数。若周期函数用f(x)表示,简谐振动由三角函数   sin(\omega t+\varphi )  表示,则得到如下表达式

f(x)=A_{0}+\sum_{n=1}^{\propto }sin(n\omega t+\varphi )                                    (1)

在电工领域,这种展开称为谐波分析, A_{0} 叫做直流分量,sin(\omega t+\varphi ) 叫做一次谐波,sin(2\omega t+\varphi ) 叫做二次谐波,sin(3\omega t+\varphi ) 叫做三次谐波..........

       再将上式经过三角公式等变形得到如下表达式(具体变形参考相关高数书籍,这里不做推导,我们重点演示傅里叶的展开和叠加过程):

f(x)=\frac{^{a_{0}}}{2}+\sum_{n=1}^{\propto }(a_{n}cosnx+b_{n}sinn x)                       (2)

由上式可知,其实傅里叶级数就是将 周期函数 展开成无穷个正弦级数 或 无穷个余弦级数的和。

       

       下面给出一个简单的周期函数,将其展开成傅里叶级数的例子,并附python代码演示,读者可尝试复制代码自己运行查看结果

:设f(x)是周期为 2\pi的函数,在[-\pi ,\pi ) 区间的表达式 为

f(x)=\left\{\begin{matrix} -1& -\pi \leqslant x< 0\\ 1& 0\leqslant x< \pi \end{matrix}\right.

可知该函数在坐标系的图形表示如下(这里暂不讨论f(x)在不连续点的情况):

       现在要做的是将函数展开成傅里叶级数,由于函数是奇函数,可知该函数展开后是只含有正弦项的正弦级数(由于函数的奇偶性),根据高数的推导方法,求出系数a_{0}a_{n}b_{n}的值后带入到(2)式中即可得到f(x)傅里叶级数展开式,具体系数求解方法请参考高等数学书籍。

       最后我们得到展开后函数表达式如下:f(x)=\frac{4}{\pi }[sinx+\frac{1}{3}sin3x+\frac{1}{5}sin5x+......]

       我们用代码演示逐个叠加谐波分量后得到的结果,当f(x)用1个谐波分量表示时,n=1,即f(x)=\frac{4}{\pi }[sinx],曲线图如下

f(x)用2个谐波分量表示时,n=2,即f(x)=\frac{4}{\pi }[sinx+\frac{1}{3}sin3x]f(x)的各谐波分量曲线  以及f(x)曲线如下图,蓝色式f(x)的第一项,黄色是f(x)的第二项,黑色是两项求和的结果即f(x)

f(x)用3个谐波分量表示时,n=3,即f(x)=\frac{4}{\pi }[sinx+\frac{1}{3}sin3x+\frac{1}{5}sin5x],曲线如下,黑色曲线为三项正弦函数的叠加求和结果,其余颜色曲线分别表示f(x)的三个谐波分量

f(x)用10个谐波分量表示时,n=10,曲线如下,黑色曲线为10个谐波分量叠加求和结果。其余颜色曲线分别表示f(x)的10个谐波分量

f(x)用100个谐波分量表示时,n=100,曲线如下,如图可知黑色曲线已经很接尽函数f(x)=\left\{\begin{matrix} -1& -\pi \leqslant x< 0\\ 1& 0\leqslant x< \pi \end{matrix}\right.的方波形状,如此也展示了周期函数可以由无穷个简单的正余弦函数叠加而成。

上述结果的代码如下,调整for循环的区间,即可得到不同数量谐波的叠加,当前设置为range(1,101),即在n=100时的叠加

import numpy as np
import matplotlib.pyplot as plt

# 生成x轴数据

x = np.linspace(-np.pi, np.pi, 100)
# 生成y轴数据,即正弦函数的值
y = 0
for n in range(1,101):
    y2 = (4/np.pi)*(1/(2*n-1))*np.sin((2*n-1)*x)
    y += y2
    plt.plot(x, y2)  #绘制每个谐波分量到同一张图上

plt.grid(axis='both')

# 绘制所有谐波分量的和
plt.plot(x, y ,linewidth=3.0,color= 'k')

# 添加标题和标签
plt.title("各谐波分量与其叠加结果曲线")
plt.xlabel("x轴")
plt.ylabel("y轴")


# 汉字字体
plt.rcParams['font.sans-serif'] = ['Kaitt', 'SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 显示图形
plt.show()

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗德里格斯胡闳图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值