实验名称
使用python进行傅里叶变换
实验目的
1.掌握使用matplotlib进行绘图的基本步骤
2. 利用python程序实现傅里叶变换
实验原理
傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。
傅里叶变换在物理学、电子类学科、数论、组合数学、信号处理、概率论、统计学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用。
本节将利用python来实现一个傅里叶变换的简单模拟,既有助于大家理解傅里叶变化的意义,同时掌握matplotlib绘图的基本方法。
实验环境
OS:Windows
python:v3.6
matplotlib,numpy
实验步骤
题目一:周期函数的傅里叶分解
周期为2l的函数可以分解为如下的形式:
其中:
题目二:周期方波函数的傅里叶级数展开
如下图所示,存在周期为T的周期方波函数,根据上面给出的傅里叶级数,可以对齐进行展开。
展开式如下
这里ω=2π/T
题目三:利用matplot模拟傅里叶级数展开
- python中np.zeros()的用法
用法:zeros(shape, dtype=float, order=‘C’)
返回:返回来一个给定形状和类型的用0填充的数组;参数:shape:形状
dtype:数据类型,可选参数,默认numpy.float64
dtype类型:
t ,位域,如t4代表4位
b,布尔值,true or false
i,整数,如i8(64位)
u,无符号整数,u8(64位)
f,浮点数,f8(64位)
c,浮点负数,
o,对象,
s,a,字符串,s24
u,unicode,u24
order:可选参数,c代表与c语言类似,行优先;F代表列优先
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,10,0.02)
def sin_square(n):
y = np.zeros(500)
# print(y)
for i in range(0,n,1):
b = np.sin((2*i+1)*x/(2*i+1))
y = y+b
return y
def plot_sin_square(ax,x,y,n):
ax.plot(x,y,label = 'n='+str(n))
ax.set_xlim([0,10])
ax.set_ylim([-1,1])
ax.legend()
y10 = sin_square(10)
y20 = sin_square(20)
y30 = sin_square(30)
fig,(a1,a2,a3) = plt.subplots(3,1,sharex = True,sharey = True)
plot_sin_square(a1,x,y10,10)
plot_sin_square(a2,x,y20,20)
plot_sin_square(a3,x,y30,30)
plt.tight_layout()
plt.show()
得到的结果如下:
可以看到,随着级数的增加,图像越来越趋近周期方波函数