使用傅里叶级数和Python表示方波
引言
在信号处理和数字通信中,方波是非常常见的一种波形。方波是一种周期性波形,信号在两个固定的幅度之间跳跃,通常是“高”与“低”的状态。你可能会问,如何通过数学模型来表示一个方波呢?今天,我们就来聊聊如何使用傅里叶级数(Fourier Series)和 Python 来表示方波。
什么是傅里叶级数?
傅里叶级数是一个非常强大的数学工具,它可以将一个周期性信号分解为一系列简单的正弦波和余弦波的叠加。换句话说,任何一个周期性信号,都可以通过不同频率、不同幅度的正弦波和余弦波的组合来表示。这些正弦波和余弦波的频率、幅度和相位可以通过傅里叶级数来计算。
方波的傅里叶级数展开
假设我们有一个周期性方波信号,定义为:
- 在一个周期内,信号从 0 跳跃到 1,再跳回 0。
- 方波信号是一个不连续的、只有两种状态(0 和 1)变化的波形。
我们可以通过傅里叶级数将其表示为无穷多个正弦波的叠加。具体来说,方波的傅里叶级数展开式可以写成:
\]
其中,\(\omega\) 是方波的基本频率,\(\frac{4}{\pi}\) 是常数系数,奇次谐波(如 1, 3, 5, …)依次加入,幅度随着谐波次数的增加逐渐减小。
使用 Python 表示方波
我们可以使用 Python 来验证傅里叶级数在表示方波时的有效性。下面是一个简单的代码示例,展示了如何通过傅里叶级数表示方波,并利用 Matplotlib 绘制其波形。
# coding=utf-8
import matplotlib
matplotlib.use('Agg')
import numpy as np
import matplotlib.pyplot as plt
# 设置时间范围和频率
T = 1 # 方波周期
f = 1 / T # 方波频率
t = np.linspace(0, T, 1000) # 时间从0到1秒,共1000个点
# 方波傅里叶级数近似
def fourier_series(t, n_terms=10):
result = 0
for n in range(1, n_terms + 1, 2): # 仅考虑奇次谐波
result += (4 / (np.pi * n)) * np.sin(2 * np.pi * n * f * t)
return result
# 计算傅里叶级数的前10项近似
y = fourier_series(t, n_terms=10)
# 绘制结果
plt.plot(t, y, label="Fourier Series Approximation")
plt.title("Fourier Series Approximation of a Square Wave")
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.grid(True)
plt.legend()
plt.savefig('Square.png')
代码解读
- np.linspace(0, T, 1000):创建了一个从 0 到一个周期 T 的时间数组,共有 1000 个点,用来更细致地绘制波形。
- fourier_series(t, n_terms=10):定义了一个函数来计算傅里叶级数的前 n 项。这里我们选取 10 项近似,意味着考虑了前 10 个奇次谐波。
- plt.plot(t, y):绘制了傅里叶级数近似得到的方波波形。
运行这段代码后,你会看到一个从 0 到 1 周期的方波近似图形。随着谐波数目的增加,方波的近似效果会越来越好。
结果分析
通过傅里叶级数,方波的表示逐渐变得更加精确。最开始,仅使用低频的正弦波时,波形看起来比较“平滑”,但随着更多高频谐波的加入,波形的尖锐转变越来越清晰,最终可以非常接近理想的方波形态。

为什么是奇次谐波?
方波的傅里叶级数展开式中,只包含了奇次谐波(1, 3, 5, …)。这是因为方波是一个奇函数,即它关于原点对称。只有奇次谐波才能确保傅里叶级数合成的波形与方波在对称性上匹配。
总结
通过傅里叶级数,我们可以把方波这一简单的信号表示成一系列复杂的正弦波的叠加,这在信号处理和通信领域中非常有用。使用 Python,我们可以轻松实现这一过程并可视化结果,帮助我们更好地理解傅里叶级数的原理和应用。希望通过本文,你对傅里叶级数和方波的关系有了更深入的了解!
使用傅里叶级数和Python表示方波的更多相关文章
- GeoGebra案例(傅里叶级数的方波)
傅里叶级数介绍:请移步参见这位马大佬的博文 https://www.matongxue.com/madocs/619.html 马大佬中的gif图在我看来是非常直观且有趣的,奈何本人本领实在有限,学习 ...
- [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- python实现简单函数发生器
最近学校又抽风把我自动化系的苦逼童鞋留下做课设,简直无聊到爆的-->用VB实现函数发生器,(语言不限制) 大伙不知从哪搞来的MATLAB版本,于是几十个人就在这基础上修修改改蒙混过关了,可我实在 ...
- Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)
前面以前介绍过空间域滤波,空间域滤波就是用各种模板直接与图像进行卷积运算,实现对图像的处理,这个方案直接对图像空间操作,操作简单.所以也是空间域滤波. 频域滤波说究竟终于可能是和空间域滤波实现相同的功 ...
- Facebook支持python的开源预测工具Prophet
Facebook 宣布开源一款基于 Python 和 R 语言的数据预测工具――“Prophet”,即“先知”.取名倒是非常直白. Facebook 表示,Prophet 相比现有预测工具更加人性化, ...
- Python与硬件学习笔记:蜂鸣器(转)
相信大家对蜂鸣器都不会陌生,很多产品和方案中都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下.开始工作.工作结束或是故障等等.这里对单片机在蜂鸣器驱动上的应用作一下描述. 蜂鸣器的介绍 ...
- 看我如何基于Python&Facepp打造智能监控系统
由于种种原因,最近想亲自做一个基于python&facepp打造的智能监控系统. 0×00:萌芽 1:暑假在家很无聊 想出去玩,找不到人.玩个lol(已卸载),老是坑人.实在是无聊至极,不过, ...
- Python标准库、第三方库和外部工具汇总
导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...
- Python 标准库、第三方库
Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...
- 140种Python标准库、第三方库和外部工具
导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...
随机推荐
- 分布式事务---2PC和3PC原理TCC事务
分布式事务(1)---2PC和3PC原理 分布式事物基本理论:基本遵循CPA理论,采用柔性事物特征,软状态或者最终一致性特点保证分布式事物一致性问题. 分布式事物常见解决方案: 2PC两段提交协议 3 ...
- react中refs的使用
1.在dom元素中直接使用ref 意思就是可以在组件中创建一个dom节点的textInput,并将ref直接绑定到他 <script src="https://unpkg.com/@b ...
- kali 2019-04版安装问题
在这里主要解决的是kali的undercover mode 存在BUG,切换后出现无法还原.或还原失败的情况. 如果要解决的是中文乱码.kali桌面种类与安装和kali桌面切换的问题,直接看最底部的连 ...
- 《Linux shell 脚本攻略》第1章——读书笔记
目录 文件描述符及重定向 函数和参数 迭代器 算术比较 文件系统相关测试 字符串进行比较 文件描述符及重定向 echo "This is a sample text 1" > ...
- Kotlin:【初始化】延时初始化、惰性初始化、初始化的三个陷阱
- 第10章 LINQ to XML
第10章 LINQ to XML 10.1 架构概述--DOM 和 LINQ to XML 的 DOM XML 文档可以用一棵对象树完整的表示,这称为"文档对象模型(document obj ...
- manim边学边做--通用变换
在 Manim 动画制作中,Transform.TransformFromCopy.ReplacementTransform和Restore是四个通用的对象变换动画类. 这几个类能够实现从一个对象到另 ...
- 微信小程序之java服务端获取openid
微信小程序越来越热,最近团队写了一个小程序,这篇博客我将讲一下怎么通过java服务端获取到用户的openid. api文档的授权登陆地址: http://developers.weixin.qq.co ...
- OpenLayers change 事件获取当前值
这里有个 change:resolution 事件 但是事件的内容没有value,只有oldValue Zc {type: 'change:resolution', target: F, key: ' ...
- OpenLayers 绘制带箭头的LineString
<!--******************************************************************** * Copyright 2000 - 2022 ...