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 相关文章推荐
详解Django框架中用户的登录和退出的实现
Jul 23 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python3实现多线程聊天室
Dec 12 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python nmap实现端口扫描器教程
May 28 Python
Django之路由层的实现
Sep 09 Python
python实现udp聊天窗口
Mar 31 Python
python如何使用代码运行助手
Jul 03 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 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
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
总结一些js自定义的函数
2006/08/05 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
python3中zip()函数使用详解
2018/06/29 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
网络工程师自荐书范文
2014/04/01 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
三年级小学生评语
2014/04/22 职场文书
个人原因辞职信模板
2015/05/13 职场文书
合同审查法律意见书
2015/06/04 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python