一、说明

scipy signal.chirp是产生波形的函数,可以虚拟出声音波形。与Wave配合可以实现虚拟音响。

二、函数用法

scipy.signal.chirp(t, f0, t1, f1, method='linear', phi=0, vertex_zero=True)

Frequency-swept余弦发生器。

在下文中,‘Hz’应解释为“每单位循环数”;此处不要求单位为一秒。重要的区别是旋转单位是周期,而不是弧度。同样,t可以表示空间而不是时间。

参数:

tarray_like

评估波形的时间。

f0float

在时间t = 0处的频率(例如Hz)。

t1float

指定f1的时间。

f1float

在时间t1处的波形频率(例如Hz)。

method{‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’}, 可选参数

频率扫描的种类。如果未给出,则假定为线性。有关更多详细信息,请参见下面的注释。

phifloat, 可选参数

相位偏移,以度为单位。默认值为0。

vertex_zerobool, 可选参数

仅当方法为‘quadratic’时才使用此参数。它确定抛物线的顶点(即频率的图表)是在t = 0还是在t = t1。

返回值:

yndarray

包含在t处以请求的time-varying频率评估的信号的numpy数组。更准确地说,函数返回cos(phase + (pi/180)*phi)其中是整数(从0到t的)2*pi*f(t)f(t)在下面定义。

注意:

该方法有四个选项。以下公式给出了由chirp()生成的信号的瞬时频率(以Hz为单位)。为了方便起见,也可以使用下面显示的简称。

1)线性简称:linear, lin, li:

f(t) = f0 + (f1 - f0) * t / t1

2) 抛物线形:quadratic, quad, q:

频率f(t)的曲线是一条通过(0,f0)和(t1,f1)的抛物线。默认情况下,抛物线的顶点位于(0,f0)。如果vertex_zero为False,则顶点位于(t1,f1)。公式是:

if vertex_zero is True:

f(t) = f0 + (f1 - f0) * t**2 / t1**2

else:

f(t) = f1 - (f1 - f0) * (t1 - t)**2 / t1**2

To use a more general quadratic function, or an arbitrary polynomial, use the function scipy.signal.sweep_poly.

3 )对数形 logarithmic, log, lo:

f(t) = f0 * (f1/f0)**(t/t1)

f0 and f1 must be nonzero and have the same sign.

This signal is also known as a geometric or exponential chirp.

4)双曲形hyperbolic, hyp:

f(t) = f0*f1*t1 / ((f0 - f1)*t + f1*t1)

f0 and f1 must be nonzero.

三、例子

示例中将使用以下内容:

>>> from scipy.signal import chirp, spectrogram
>>> import matplotlib.pyplot as plt

对于第一个示例,我们将绘制10秒内从6 Hz到1 Hz的线性chi的波形:

>>> t = np.linspace(0, 10, 5001)
>>> w = chirp(t, f0=6, f1=1, t1=10, method='linear')
>>> plt.plot(t, w)
>>> plt.title("Linear Chirp, f(0)=6, f(10)=1")
>>> plt.xlabel('t (sec)')
>>> plt.show()

对于其余示例,我们将使用更高的频率范围,并使用scipy.signal.spectrogram。我们将以8000 Hz的频率采样10秒。

fs = 8000
T = 10
t = np.linspace(0, T, T*fs, endpoint=False)

在10秒内从1500 Hz到250 Hz的二次chi(频率的抛物线曲线的顶点在t = 0处):

w = chirp(t, f0=1500, f1=250, t1=10, method='quadratic')
ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512, nfft=2048)
plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
plt.title('Quadratic Chirp, f(0)=1500, f(10)=250')
plt.xlabel('t (sec)')
plt.ylabel('Frequency (Hz)')
plt.grid()
plt.show()

在10秒内从1500 Hz到250 Hz的二次chi(频率的抛物线曲线的顶点在t = 10处):

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='quadratic',
...           vertex_zero=False)
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
>>> plt.title('Quadratic Chirp, f(0)=1500, f(10)=250\n' +
...           '(vertex_zero=False)')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()

在10秒内从1500 Hz到250 Hz的对数chi:

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='logarithmic')
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
>>> plt.title('Logarithmic Chirp, f(0)=1500, f(10)=250')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()

在10秒内从1500 Hz到250 Hz的双曲chi:

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='hyperbolic')
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
>>> plt.title('Hyperbolic Chirp, f(0)=1500, f(10)=250')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()

源码:

scipy.signal.chirp的API实现见:[源代码]

Python知识: scipy signal.chirp用法例相关推荐

  1. Python知识:生成声波并显示

    scipy.signal.chirp - SciPy v1.8.0 Manual 1 说明 如何自己产生一个声波? 采用signal.chirp产生声波,对声波读.存.参数设定,等声波操作,都依靠一个 ...

  2. scipy库 signal 导入_Python scipy.signal方法代码示例

    本文整理汇总了Python中scipy.signal方法的典型用法代码示例.如果您正苦于以下问题:Python scipy.signal方法的具体用法?Python scipy.signal怎么用?P ...

  3. python 希尔伯特变换_python scipy signal.hilbert用法及代码示例

    使用希尔伯特变换来计算分析信号. 默认情况下,转换是沿着最后一个轴完成的. 参数: x:array_like信号数据.必须是真实的. N:int, 可选参数傅立叶分量的数量.默认:x.shape[ax ...

  4. Python学习-Scipy库信号处理signal(过滤、快速傅里叶变换、信号窗函数、卷积)

    Python学习-Scipy库信号处理signal 目录 1.过滤:以某种方式修改输入信号 2.快速傅里叶变换 3.信号窗函数 4.卷积 导入库 import matplotlib.pyplot as ...

  5. python库函数之scipy.signal——滤波器设计

    文章目录 python库函数之scipy.signal.butter() 函数参数 设计模拟滤波器 设计数字滤波器 2021.06.03 有位博主评论了这篇博客(评论已被删除),特此说明. pytho ...

  6. Matlab和Python(Numpy,Scipy)与Lapack的关系

    说到数值计算,可能许多人都能立马想到Matlab.Matlab多年的持续影响力已经让它成为许多人心中科学计算的代名词.但它底层一个重要的库Lapack却很少有人知道. 而Python年龄比Matlab ...

  7. Python介绍与特点(自学python知识整理)

    Python介绍与特点(自学python知识整理) Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计: Python 是一种解释 ...

  8. python应用-scipy,numpy,sympy计算微积分

    python应用-scipy,numpy,sympy计算微积分 今天来讲一下使用python进行微积分运算,python有很多科学计算库都可以进行微积分运算,当然如果知晓微积分计算的原理也可以自己编程 ...

  9. (待完善)python模块scipy介绍(misc)

    (待完善)python模块scipy介绍(misc) scipy模块简介 SciPy是建立在Python的NumPy扩展上的数学算法和高级函数的集合.它通过向用户提供高级命令和类来操作和可视化数据,为 ...

最新文章

  1. PHP curl 实现RESTful PUT DELETE 实例
  2. php实现变声,PHP:用UTF-8字符串中最接近的7位ASCII等效替换变音符号
  3. C++ Stack 与String
  4. [分享]多个选项卡切换效果
  5. mysql explain 用法和理解
  6. 【ARM】ARM汇编程序设计(五) str和ldr
  7. C语言:L1-033 出生年 (15分)(解题报告)
  8. procyon java8_java jdk 8反编译工具JD-GUI、procyon-decompiler、luyten、crf下载使用简介
  9. Windows下Eclipse 安装 SVN 插件的两种方法
  10. 【转】Linux内核结构详解
  11. 第二次作业:硬币游戏——代码分析与改进
  12. Mac下如何将 GBK 编码的文档转成 UTF-8 编码的?
  13. 2.3安装工业相机SDK及测试
  14. 下载Linux系统内文件到Windows
  15. 2、数码相框之显示文字
  16. 产品可靠性测试 - 学习笔记(1)
  17. onclick,click和onfocus,change区别
  18. Excel函数大全二《数字处理函数》
  19. Kruskal理解+代码解析
  20. 计算机中的数值和信息编码有哪些,[转载]信息编码 (数值型和字符型编码)...

热门文章

  1. 文巾解题 183. 从不订购的客户
  2. Flink从入门到精通100篇(二十三)-基于Apache Flink的爱奇艺实时计算平台建设实践
  3. mysql查看比较大的数据表_mysql 如何查看哪些表数据量比较大
  4. hive解决数据倾斜问题_八种解决 Spark 数据倾斜的方法
  5. emacs python plugin_使用 python 扩展 emacs
  6. Frighting的日常:第5天
  7. github关联域名,创建个人网站教程终结篇
  8. 机器学习实战读书笔记--logistic回归
  9. RSA加密解密及数字签名Java实现--转
  10. Linux getopt()函数 getopt_long()函数---转