python生成任意频率正弦波方式


Posted in Python onFebruary 25, 2020

如下所示:

def signal_xHz(A, fi, time_s, sample):

return A * np.sin(np.linspace(0, fi * time_s * 2 * np.pi , sample* time_s))

A:为信号幅值

fi:为信号频率

time_s:为时间长度(s)

sample:为信号采样频率

补充拓展:Python FFT合成波形实例

使用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生成任意频率正弦波方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Flask框架Flask-Login用法分析
Jul 23 Python
Python之时间和日期使用小结
Feb 14 Python
python实现两张图片的像素融合
Feb 23 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
keras得到每层的系数方式
Jun 15 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
Nov 19 Python
python 实现端口扫描工具
Dec 18 Python
一个入门级python爬虫教程详解
Jan 27 Python
python numpy库linspace相同间隔采样的实现
Feb 25 #Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 #Python
基于pygame实现童年掌机打砖块游戏
Feb 25 #Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 #Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 #Python
Python对wav文件的重采样实例
Feb 25 #Python
python实现打砖块游戏
Feb 25 #Python
You might like
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
Hutia 的 JS 代码集
2006/10/24 Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
javascript实用方法总结
2015/02/06 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
对python Tkinter Text的用法详解
2018/10/11 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
利用python 下载bilibili视频
2020/11/13 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
大学生职业生涯规划书参考模板
2014/03/05 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
儿园租房协议书范本
2014/12/02 职场文书
思想政治表现评语
2015/01/04 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
Python anaconda安装库命令详解
2021/10/16 Python