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 相关文章推荐
Python实现控制台中的进度条功能代码
Dec 22 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python贪吃蛇游戏代码
Apr 18 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
Python关于OS文件目录处理的实例分享
May 23 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 Python
Python 全局空间和局部空间
Apr 06 Python
python神经网络 使用Keras构建RNN训练
May 04 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 常用类整理
2009/12/23 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
php实现的农历算法实例
2015/08/11 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
Python中的异常处理学习笔记
2015/01/28 Python
详解python-图像处理(映射变换)
2019/03/22 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
毕业自荐书
2013/12/09 职场文书
运动会100米解说词
2014/01/23 职场文书
学生喝酒检讨书
2014/02/06 职场文书
出纳担保书范文
2014/04/02 职场文书
招股说明书范本
2014/05/06 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
故宫导游词
2015/01/31 职场文书
家长会主持词开场白
2015/05/29 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫