实验名称

使用python进行傅里叶变换

实验目的

1.掌握使用matplotlib进行绘图的基本步骤
2. 利用python程序实现傅里叶变换

实验原理

傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。
傅里叶变换在物理学、电子类学科、数论、组合数学、信号处理、概率论、统计学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用。
本节将利用python来实现一个傅里叶变换的简单模拟,既有助于大家理解傅里叶变化的意义,同时掌握matplotlib绘图的基本方法。

实验环境

OS:Windows
python:v3.6
matplotlib,numpy

实验步骤

题目一:周期函数的傅里叶分解

周期为2l的函数可以分解为如下的形式:
在这里插入图片描述
其中:
在这里插入图片描述

题目二:周期方波函数的傅里叶级数展开

如下图所示,存在周期为T的周期方波函数,根据上面给出的傅里叶级数,可以对齐进行展开。
在这里插入图片描述
展开式如下
在这里插入图片描述
这里ω=2π/T

题目三:利用matplot模拟傅里叶级数展开

  1. 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()

得到的结果如下:
在这里插入图片描述
可以看到,随着级数的增加,图像越来越趋近周期方波函数

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐