scipy.signal.chirp — SciPy v1.8.0 Manual

1 说明

如何自己产生一个声波? 采用signal.chirp产生声波,对声波读、存、参数设定,等声波操作,都依靠一个叫Wav的对象完成。

2 读文件Wave_read Objects

Wave_read Objects对象是由open()返回,Wave_read Objects内部函数是:

  • Wave_read.close()

如果流被wave打开,请关闭它,并使实例不可用。这在对象集合中自动调用。

  • Wave_read.getnchannels()

返回音频通道数(1个用于单声道 mono,2个用于立体声 stereo)。

  • Wave_read.getsampwidth()

返回以字节为单位的样本宽度。

  • Wave_read.getframerate()

返回采样频率。

  • Wave_read.getnframes()

返回音频帧数。

  • Wave_read.getcomptype()

返回压缩类型(“无”是唯一受支持的类型,因wav格式从不压缩)。

  • Wave_read.getcompname()

压缩getcomptype()的人能读格式。通常“不压缩”平行“无”。

  • Wave_read.getparams()

返回一个属性名称的列组:(nchannels, sampwidth, framerate, nframes, comptype, compname), equivalent to output of the get*() methods.

  • Wave_read.readframes(n)

读取第n个帧的声音采样信号,以 bytes 格式读入。

  • Wave_read.rewind()

将文件指针倒回音频流的开头。

以下两种方法是为了与aifc模块兼容而定义的,不做任何有趣的事情。

  • Wave_read.getmarkers()

Returns None.

  • Wave_read.getmark(id)

Raise an error.

The following two methods define a term “position” which is compatible between them, and is otherwise implementation dependent.

Wave_read.setpos(pos)

Set the file pointer to the specified position.

Wave_read.tell()

Return current file pointer position

3 存储 Wave_write Objects¶

对于可查找的输出流,wave头将自动更新,以反映实际写入的帧数。对于不可见流,写入第一帧数据时,nframes值必须准确。通过调用setnframes()或setparams(),在调用close()之前写入的帧数,然后使用writeframesraw()写入帧数据,或者通过调用writeframes()写入所有要写入的帧数据,可以获得准确的nframes值。在后一种情况下,writeframes()将计算数据中的帧数,并在写入帧数据之前相应地设置nframes。

  • Wave_write.close()

确保nframes是正确的,如果文件是由wave打开的,关闭该文件。此方法在对象集合中调用。如果输出流不可查找且nframes与实际写入的帧数不匹配,则会引发异常。

  • Wave_write.setnchannels(n)

设置通道

  • Wave_write.setsampwidth(n)

设置采样宽度 n bytes.

  • Wave_write.setframerate(n)

设置帧的速率. 在版本3.2中更改:此方法的非整数输入被四舍五入到最接近的整数。

  • Wave_write.setnframes(n)

将帧数设置为n。如果实际写入的帧数不同,这将在以后更改(如果输出流不可查找,则此更新尝试将引发错误)。

  • Wave_write.setcomptype(typename)

设置压缩类型和描述。目前,仅支持压缩类型NONE,这意味着不支持压缩。

  • Wave_write.setparams(tuple)

获取属性的元组,元组应该是(nchannels、sampwidth、framerate、nframes、comptype、compname),其值对set*()方法有效。设置所有参数。

  • Wave_write.tell()

返回文件中的当前位置,与Wave_read的免责声明相同。告诉()并挥手阅读。setpos()方法。

  • Wave_write.writeframesraw(data)

编写音频帧,但不更正nframes。在版本3.4中更改:现在接受任何类似对象的字节。

  • Wave_write.writeframes(data)

编写音频帧并确保nframes是正确的。如果输出流不可查找,并且写入数据后写入的帧总数与之前为nframes设置的值不匹配,则会引发错误。

Changed in version 3.4: Any bytes-like object is now accepted.

4 signal.chirp函数

函数说明:

Frequency-swept名叫余弦信号发生器。

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

函数格式:

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

参数:

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)在下面定义。

5、Python代码

#!usr/bin/env python
#code=utf-8from tkinter import *
import wave
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
import syssys.setrecursionlimit(1000000)#define the params of wave
channels = 1
sampwidth = 2
framerate = 9600
file_name = 'sweep.wav'
frequency_begin = 1
frequency_end = 100
#define the time of wave
time = 1def Generate_Wav():#generate the time bart = np.arange(0,time,1.0/framerate)#generate the chirp signal from 300 to 3300Hzwave_data = signal.chirp(t, frequency_begin, time, frequency_end, method = 'linear')*1000#cast to the type of shortwave_data = wave_data.astype(np.short)#open a wav documentf = wave.open(file_name,"wb")#set wav paramsf.setnchannels(channels)f.setsampwidth(sampwidth)f.setframerate(framerate)#turn the data to stringf.writeframes(wave_data.tobytes())f.close()def my_button(root,label_text,button_text,button_func):'''''function of creat label and button'''#label detailslabel = Label(root)label['text'] = label_textlabel.pack()#label detailsbutton = Button(root)button['text'] = button_textbutton['command'] = button_funcbutton.pack()def read_wave_data(file_path):#open a wave file, and return a Wave_read objectf = wave.open(file_path,"rb")#read the wave's format infomation,and return a tupleparams = f.getparams()#get the infonchannels, sampwidth, framerate, nframes = params[:4]#Reads and returns nframes of audio, as a string of bytes.str_data = f.readframes(nframes)#close the streamf.close()#turn the wave's data to arraywave_data = np.frombuffer(str_data, dtype = np.short)time = np.arange(0, nframes) * (1.0/framerate)return wave_data, timedef Plot_Wav():wave_data, time = read_wave_data(file_name)plt.plot(time, wave_data)plt.grid(True)plt.show()def main():root = Tk()my_button(root, 'Generate a sweep wav', 'Generate', Generate_Wav)my_button(root, 'Plot the wav', 'Plot', Plot_Wav)root.mainloop()if __name__ == "__main__":main()

Python知识:生成声波并显示相关推荐

  1. Python 根据生成的txt对多目标跟踪结果画框可视化显示

    Python 根据生成的txt对多目标跟踪结果画框可视化显示 2022.1.3更新 输入为视频文件与多目标跟踪结果生成的txt文件(格式与gt一致) 输出为视频文件 draw_mot.py impor ...

  2. python生成表格并显示在浏览器_Pyodide:在浏览器端实现Python全栈科学计算

    现在越来越多的软件都Web化,浏览器化.虽然科学计算是一计算密集型的方向,对性能要求和实时性较高.但是数据计算方面也一直在做着这样的探索和发展. Jypyer notbook项目让科学计算真正实现了W ...

  3. 大数据分析如何在Python中生成FiveThirtyEight图

    大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容.自然,他们的出色可视化使你印象深刻.你想制作自己的出 ...

  4. python自动生成鸡汤文_python爬虫+pyinstaller制作一个属于自己的心灵鸡汤

    效果图如下: 实现方法 用Python爬虫对现有的api进行请求,获取彩虹屁,然后用tkinter模块形成一个可视化的gui,最后用pyinstaller对该py文件打包,这就是最后的彩虹屁生成器. ...

  5. 用python随机生成数字_如何实现python随机生成数字?

    今天小编就生成随机数,整理了多个方式,方便大家在项目时,根据自己的需求,直接拿来套用即可,以下内容相当详细,具体来看看吧~ 说明:python中生成随机数主要用到random模块,方法主要包括:ran ...

  6. python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题

    最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些 ...

  7. python横向柱状图-python画柱状图--不同颜色并显示数值的方法

    用python画柱状图容易,但是如何对不同柱子使用不同颜色呢?同时在柱子顶端显示精确数值? 主要用的方法为: atplotlib.pyplot.bar(left, height, width=0.8, ...

  8. python etree创建xml_利用 Python ElementTree 生成 xml的实例

    Python 处理 xml 文档的方法有很多,除了经典的 sax 和 dom 之外,还有一个 ElementTree. 首先 import 之: from xml.etree import Eleme ...

  9. 我的Python脚本——生成任意波形并存为txt

    我的Python脚本--生成任意波形并存为txt 一. 脚本功能 根据采样点数,采样周期数等参数以及波形的数学表达式,生成任意波形 将波形数据转为指定位宽的二进制补码,然后存为txt 绘制原始波形和转 ...

最新文章

  1. 去掉chrome记住密码后自动填充表单的黄色背景
  2. python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块
  3. CreateThread创建线程函数详细讲解
  4. 按住 ctrl 并滚动鼠标滚轮才可缩放地图_ZBrush自定义缩放快捷键
  5. 回归分析中自变量共线性_具有大特征空间的回归分析中的变量选择
  6. 引用 病毒是怎么命名的?教你认识病毒命名规则
  7. Android系统(204)---ContentProvider
  8. SPOJ QTree【树链剖分】
  9. java 测试 jar_java – 从可执行jar运行spring测试
  10. 【Python】pip超详细教程,pip的安装与使用,解决pip下载速度慢的问题
  11. 深入浅出MFC:动态创建控件
  12. iOS客户端安装包大小优化
  13. Java具体可以做什么?
  14. 【分享】超级菜鸟另类玩swf反汇编
  15. python 的魔法函数
  16. 八爪鱼怎样导入mysql_网页数据如何导出到数据库 - 八爪鱼采集器
  17. c语言 socket send,C语言中send()函数和sendto()函数的使用方法
  18. Python3飞机大战全代码(亲测OJBK)
  19. 【LeetCode】417. Pacific Atlantic Water Flow 太平洋大西洋水流问题
  20. 阿里妈妈展示广告粗排:面向链路一致性优化的端到端序学习模型

热门文章

  1. 禁忌搜索算法求解带时间窗的车辆路径问题原理讲解
  2. 里面使用轮播_小程序ColorUI框架初步使用教程及个人项目实战
  3. xshell无法连接linux虚拟机问题的解决办法
  4. Python编程基础:第四节 类型转换Type Cast
  5. Tomcat performance optimization through consolidated log file handlers
  6. HBase 数据库检索性能优化策略--转
  7. Where to Store your JWTs – Cookies vs HTML5 Web Storage--转
  8. weblogic 异常常见处理方法
  9. 评分卡上线后如何进行评分卡的监测
  10. 技术有时间衰减因子.