Python FFT合成波形的实例


Posted in Python onDecember 04, 2019

使用Python numpy模块带的FFT函数合成矩形波和方波,增加对离散傅里叶变换的理解。

导入模块

import numpy as np
import matplotlib.pyplot as plt

分别是产生一个周期的方波和三角波程序

# 产生size点取样的三角波,其周期为1
def triangle_wave(size):
  x = np.arange(0, 1, 1.0/size)
  y = np.where(x<0.5, x, 0)
  y = np.where(x>=0.5, 1-x, y)
  return x, y
 
def square_wave(size):
  x = np.arange(0, 1, 1.0/size)
  y = np.where(x<0.5, 1.0, 0)
  return x, y

其中np.where函数第二个值是if,第三个是else

下面程序可以计算对应的频谱,采样点数取为2的n次幂是为了便于FFT计算

fft_size = 256
 
# 计算三角波和其FFT
x, y = triangle_wave(fft_size)
fy = np.fft.fft(y) / fft_size

下面对计算的频谱进行可视化,频率对应的强度使用工程上常用的分贝dp来表示

# 绘制三角波的FFT的前20项的振幅,由于不含下标为偶数的值均为0, 因此取
# log之后无穷小,无法绘图,用np.clip函数设置数组值的上下限,保证绘图正确
plt.figure()
plt.plot(np.clip(20*np.log10(np.abs(fy[:20])), -120, 120), "o")
plt.xlabel("frequency bin")
plt.ylabel("power(dB)")
plt.title("FFT result of triangle wave")

下面用正弦和余弦函数合成信号

# 取FFT计算的结果freqs中的前n项进行合成,返回合成结果,计算loops个周期的波形
def fft_combine(freqs, n, loops=1):
  length = len(freqs) * loops
  data = np.zeros(length)
  index = loops * np.arange(0, length, 1.0) / length * (2 * np.pi)
  for k, p in enumerate(freqs[:n]):
    if k != 0: p *= 2 # 除去直流成分之外,其余的系数都*2
    data += np.real(p) * np.cos(k*index) # 余弦成分的系数为实数部
    data -= np.imag(p) * np.sin(k*index) # 正弦成分的系数为负的虚数部
  return index, data

其中index代表频谱空间的采样点

画出合成信号,x坐标使用默认的整数表示即可

# 绘制原始的三角波和用正弦波逐级合成的结果,使用取样点为x轴坐标
plt.figure()
plt.plot(y, label="original triangle", linewidth=2)
for i in [0,1,3,5,7,9]:
  index, data = fft_combine(fy, i+1, 2) # 计算两个周期的合成波形
  plt.plot(data, label = "N=%s" % i)
plt.legend()
plt.title("partial Fourier series of triangle wave")
plt.show()

以上这篇Python FFT合成波形的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中删除文件的程序代码
Mar 13 Python
Python标准库之sqlite3使用实例
Nov 25 Python
Python自动连接ssh的方法
Mar 07 Python
在Python中使用列表生成式的教程
Apr 27 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
Python之列表的插入&amp;替换修改方法
Jun 28 Python
Python3字符串encode与decode的讲解
Apr 02 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
python中的django是做什么的
Jul 31 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
使用python动态生成波形曲线的实现
Dec 04 #Python
python3实现绘制二维点图
Dec 04 #Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 #Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 #Python
Python绘制二维曲线的日常应用详解
Dec 04 #Python
使用python远程操作linux过程解析
Dec 04 #Python
基于Python检测动态物体颜色过程解析
Dec 04 #Python
You might like
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
php后门URL的防范
2013/11/12 PHP
php实现webservice实例
2014/11/06 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
JS删除数组元素的函数介绍
2013/03/27 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python下简易的单例模式详解
2019/04/08 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
Python流程控制 while循环实现解析
2019/09/02 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
群众路线自查报告及整改措施
2014/11/04 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
护士心得体会范文
2016/01/25 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技