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编写的微博应用
Oct 17 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python回调函数用法实例详解
Jul 02 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
Python使用matplotlib填充图形指定区域代码示例
Jan 16 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
Python 绘制可视化折线图
Jul 22 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
python 实现ping测试延迟的两种方法
Dec 10 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分页实例代码分享
2011/07/28 PHP
php链式操作的实现方式分析
2019/08/12 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
python实现类之间的方法互相调用
2018/04/29 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
传播学毕业生求职信
2013/10/11 职场文书
财务部岗位职责
2013/11/19 职场文书
装潢设计专业推荐信模板
2013/11/26 职场文书
任命书怎么写
2014/06/04 职场文书
企业培训简报范文
2015/07/20 职场文书
车辆挂靠协议书
2016/03/23 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
nginx常用配置conf的示例代码详解
2022/03/21 Servers