python生成任意频率正弦波方式

 更新时间:2020年02月25日 10:53:43   作者:宇宙小虾米  
今天小编就为大家分享一篇python生成任意频率正弦波方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

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使用pymssql连接SQL SEVER数据库全流程

    Python使用pymssql连接SQL SEVER数据库全流程

    SQL Server是微软推出的重量级的数据库,目前有多个版本,如2000、2008、2012等,下面这篇文章主要给大家介绍了关于Python使用pymssql连接SQL SEVER数据库的相关资料,需要的朋友可以参考下
    2023-12-12
  • 使用Python神器对付12306变态验证码

    使用Python神器对付12306变态验证码

    这篇文章主要介绍了使用Python神器对付12306变态验证码的相关资料,需要的朋友可以参考下
    2016-01-01
  • Python从临时邮箱获取验证码的操作代码

    Python从临时邮箱获取验证码的操作代码

    这篇文章主要介绍了Python从临时邮箱获取验证码的操作代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Python爬虫框架之Scrapy中Spider的用法

    Python爬虫框架之Scrapy中Spider的用法

    今天给大家带来的是关于Python爬虫的相关知识,文章围绕着Scrapy中Spider的用法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Python获取二维矩阵每列最大值的方法

    Python获取二维矩阵每列最大值的方法

    下面小编就为大家分享一篇Python获取二维矩阵每列最大值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 关于python实现常用的相似度计算方法

    关于python实现常用的相似度计算方法

    这篇文章主要介绍了关于python实现常用的相似度计算方法,最初的相似度计算是为了表征向量的重合程度的,在这里最经典的就是余弦相似度了,当然使用正弦或者是正切等等三角函数也都是可以的,需要的朋友可以参考下
    2023-07-07
  • 基于python调用jenkins-cli实现快速发布

    基于python调用jenkins-cli实现快速发布

    这篇文章主要介绍了基于python调用jenkins-cli实现快速发布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 工程师必须了解的LRU缓存淘汰算法以及python实现过程

    工程师必须了解的LRU缓存淘汰算法以及python实现过程

    这篇文章主要介绍了工程师必须了解的LRU缓存淘汰算法以及python实现过程,帮助大家更好的学习算法数据结构,感兴趣的朋友可以了解下
    2020-10-10
  • Python中zip()函数用法及应用场景详解

    Python中zip()函数用法及应用场景详解

    Python的zip()函数用于将多个可迭代对象的元素按位置组合成元组,支持不等长的可迭代对象和多个可迭代对象,这篇文章主要介绍了Python中zip()函数用法及应用场景的相关资料,需要的朋友可以参考下
    2025-04-04
  • Python操作Access数据库基本步骤分析

    Python操作Access数据库基本步骤分析

    这篇文章主要介绍了Python操作Access数据库基本步骤,结合实例形式详细分析了Python针对access操作的具体步骤与相关注意事项,需要的朋友可以参考下
    2016-09-09

最新评论