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高效编程技巧
Jan 07 Python
python实现数独算法实例
Jun 09 Python
Python之py2exe打包工具详解
Jun 14 Python
python3安装speech语音模块的方法
Dec 24 Python
解决python 上传图片限制格式问题
Oct 30 Python
python deque模块简单使用代码实例
Mar 12 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
Pygame如何使用精灵和碰撞检测
Nov 17 Python
Python列表的索引与切片
Apr 07 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 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脚本的10个技巧(3)
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php获取域名的google收录示例
2014/03/24 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Django Admin实现上传图片校验功能
2016/03/06 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
python 默认参数相关知识详解
2019/09/18 Python
基于python实现雪花算法过程详解
2019/11/16 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
python如何写个俄罗斯方块
2020/11/06 Python
PyQt 如何创建自定义QWidget
2021/03/24 Python
《乞巧》教学反思
2014/02/27 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技