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程序与服务器连接的WSGI接口
Apr 29 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
快速查找Python安装路径方法
Feb 06 Python
python中np是做什么的
Jul 21 Python
Python request中文乱码问题解决方案
Sep 17 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
详解Vue2的diff算法
2021/01/06 Vue.js
python中的一些类型转换函数小结
2013/02/10 Python
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
Python对文件操作知识汇总
2016/05/15 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
财务人员个人求职信范文
2013/12/04 职场文书
车辆安全检查制度
2014/01/12 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
会计求职信怎么写
2015/03/20 职场文书
入党团支部推荐意见
2015/06/02 职场文书
庆祝教师节主持词
2015/07/06 职场文书
法制工作总结2015
2015/07/23 职场文书
八年级英语教学反思
2016/02/15 职场文书
nginx共享内存的机制详解
2022/03/21 Servers
浅谈Redis的事件驱动模型
2022/05/30 Redis
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技