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的keyword模块用法实例分析
Jun 30 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
python实现飞机大战微信小游戏
Mar 21 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
appium+python adb常用命令分享
Mar 06 Python
python PIL模块的基本使用
Sep 29 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动态生成VRML网页
2006/10/09 PHP
网络资源
2006/10/09 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
python构造函数init实例方法解析
2020/01/19 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
怎样写好自我鉴定
2013/12/04 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
实习推荐信格式模板
2015/03/27 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL