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实现ftp客户端示例分享
Feb 17 Python
python中ConfigParse模块的用法
Sep 29 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python 获取div标签中的文字实例
Dec 20 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
Python将主机名转换为IP地址的方法
Aug 14 Python
python下载库的步骤方法
Oct 12 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
在jupyter notebook中调用.ipynb文件方式
Apr 14 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
Python基于百度AI实现抓取表情包
Jun 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
javascript eval函数深入认识
2009/02/21 Javascript
javascript截取字符串小结
2015/04/28 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
python实现的防DDoS脚本
2011/02/08 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
会计系毕业个人自荐信格式
2013/09/23 职场文书
函授本科自我鉴定
2013/11/03 职场文书
学校献爱心活动总结
2014/07/08 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
党员批评与自我批评
2014/10/15 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
详解pytorch创建tensor函数
2022/03/22 Python