学校期间学习过遍傅里叶级数以及傅里叶变换,但学完就会忘掉,现在回想应该是当时并没有真正理解其用途。目前由于在图像处理或信号处理中经常用到傅里叶变换来将空间或时间域变换成频率域分析,所以最近重新翻阅当年高数书籍,看了一遍书中的在2周期的傅里叶级数展开,这次有了更深入的理解。下面我们先简单介绍傅里叶级数在2
周期的展开公式,之后以一个经典例子来理解傅里叶级数。
其实我们可以将傅里叶级数想像成是把一个周期函数分解成无穷个简谐振动,或者可以理解成无穷各简谐振动(正余弦函数)求和 组成了一个周期函数。若周期函数用表示,简谐振动由三角函数
表示,则得到如下表达式
(1)
在电工领域,这种展开称为谐波分析, 叫做直流分量,
叫做一次谐波,
叫做二次谐波,
叫做三次谐波..........
再将上式经过三角公式等变形得到如下表达式(具体变形参考相关高数书籍,这里不做推导,我们重点演示傅里叶的展开和叠加过程):
(2)
由上式可知,其实傅里叶级数就是将 周期函数 展开成无穷个正弦级数 或 无穷个余弦级数的和。
下面给出一个简单的周期函数,将其展开成傅里叶级数的例子,并附python代码演示,读者可尝试复制代码自己运行查看结果
例 :设是周期为 2
的函数,在
区间的表达式 为
可知该函数在坐标系的图形表示如下(这里暂不讨论在不连续点的情况):
现在要做的是将函数展开成傅里叶级数,由于函数是奇函数,可知该函数展开后是只含有正弦项的正弦级数(由于函数的奇偶性),根据高数的推导方法,求出系数、
、
的值后带入到(2)式中即可得到
傅里叶级数展开式,具体系数求解方法请参考高等数学书籍。
最后我们得到展开后函数表达式如下:
我们用代码演示逐个叠加谐波分量后得到的结果,当用1个谐波分量表示时,n=1,即
,曲线图如下
当用2个谐波分量表示时,n=2,即
,
的各谐波分量曲线 以及
曲线如下图,蓝色式
的第一项,黄色是
的第二项,黑色是两项求和的结果即
当用3个谐波分量表示时,n=3,即
,曲线如下,黑色曲线为三项正弦函数的叠加求和结果,其余颜色曲线分别表示
的三个谐波分量
当用10个谐波分量表示时,n=10,曲线如下,黑色曲线为10个谐波分量叠加求和结果。其余颜色曲线分别表示
的10个谐波分量
当用100个谐波分量表示时,n=100,曲线如下,如图可知黑色曲线已经很接尽函数
的方波形状,如此也展示了周期函数可以由无穷个简单的正余弦函数叠加而成。
上述结果的代码如下,调整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()