使用傅里叶级数和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内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...
随机推荐
- 一文搞懂企业架构与DDD融合
大家好,我是汤师爷~ 今天聊聊企业架构与DDD如何进行融合. 企业架构TOGAF 什么是企业架构TOGAF? TOGAF(The Open Group Architecture Framework)是 ...
- langchain-agent
Agent 参考:LangChain 实战:Agent思维 大模型是被训练出来的,知识是有时间限制的,所以当进行问答时,可以结合本地知识库和调用搜索或在线API来增强自身能力,这些不属于大模型的内部数 ...
- matlib:图像旋转-缩放
需求 使用MATLAB尝试完成一个自定义的图像攻击软件,功能描述: 1)根据输入参数,完成旋转功能 2)根据输入参数,完成缩放功能 开始 旋转 参数:参数为正,顺时针旋转:参数为负,逆时针旋转 主要代 ...
- Linux基础命令3:通过名称指定文件、创建文件目录
描述Linux文件系统层次结构概念 /root(root的home目录)/home/username(其它普通用户的home目录)/bin, /usr/bin, /usr/local/bin命令存放处 ...
- Linux/Centos文件授权用户文件夹权限介绍
一.Linux文件权限介绍 在Linux中,一切皆为文件(目录也是文件),每个文件对用户具有可读(read).可写(write).可执行(excute)权限.目录的执行操作表示是否有权限进入该目录并操 ...
- 自定义Ollama安装路径
由于Ollama的exe安装软件双击安装的时候默认是在C盘,以及后续的模型数据下载也在C盘,导致会占用C盘空间,所以这里单独写了一个自定义安装Ollama安装目录的教程. Ollama官网地址:htt ...
- 解决Git拉取出现“bad config line 1 in file C:\Users\quber/.gitconfig”的错误
1.问题描述 我们在拉取Git项目的时候,突然出现如下图所示的错误提示: 2.解决办法 定位到.gitconfig文件,然后将其删除掉: 然后在项目文件夹中点击鼠标右键,选择Git Bash Here ...
- [源码分析] Facebook如何训练超大模型--- (5)
[源码分析] Facebook如何训练超大模型--- (5) 目录 [源码分析] Facebook如何训练超大模型--- (5) 0x00 摘要 0x01 背景 0x02 思路 2.1 学习建议 2. ...
- flutter-原生路由传自定义对象
自定义对象 1 class Dk { 2 int id; 3 String title; 4 String address; 5 String ww; 6 String account; 7 } 传值 ...
- 用python做时间序列预测三:时间序列分解
在初始概念篇中,我们简单提到了时间序列由趋势.周期性.季节性.误差构成,本文将介绍如何将时间序列的这些成分分解出来.分解的使用场景有很多,比如当我们需要计算该时间序列是否具有季节性,或者我们要去除该时 ...