使用python进行波形及频谱绘制的方法


Posted in Python onJune 17, 2019

如下所示:

# -*- coding: UTF-8 -*-
import wave
import numpy as np
import matplotlib.pyplot as plt
 
# 打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据。
f = wave.open(r"D:\project\REC001.wav","rb")
# 读取格式信息
# 一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采
# 样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息
params = f.getparams()
[nchannels, sampwidth, framerate, nframes] = params[:4]
# 读取波形数据
# 读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)
str_data = f.readframes(nframes)
f.close()
# 将波形数据转换成数组
# 需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组
wave_data = np.fromstring(str_data,dtype = np.short)
# 将wave_data数组改为2列,行数自动匹配。在修改shape的属性时,需使得数组的总长度不变。
wave_data.shape = -1,2
# 转置数据
wave_data = wave_data.T
# 通过取样点数和取样频率计算出每个取样的时间。
time=np.arange(0,nframes/2)/framerate
# print(params)
plt.figure(1)
# time 也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标
plt.subplot(211)
plt.plot(time,wave_data[0])
plt.xlabel("time/s")
plt.title('Wave')
 
 
N=44100
start=0
# 开始采样位置
df = framerate/(N-1)
# 分辨率
freq = [df*n for n in range(0,N)]
# N个元素
wave_data2=wave_data[0][start:start+N]
c=np.fft.fft(wave_data2)*2/N
# 常规显示采样频率一半的频谱
plt.subplot(212)
plt.plot(freq[:round(len(freq)/2)],abs(c[:round(len(c)/2)]),'r')
plt.title('Freq')
plt.xlabel("Freq/Hz")
plt.show()

以上这篇使用python进行波形及频谱绘制的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python文件和目录操作方法大全(含实例)
Mar 12 Python
python的文件操作方法汇总
Nov 10 Python
用tensorflow搭建CNN的方法
Mar 05 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
python模糊图片过滤的方法
Dec 14 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
Python 创建TCP服务器的方法
Jul 28 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
教你用Python matplotlib库制作简单的动画
Jun 11 Python
PyQt5图形界面播放音乐的实例
Jun 17 #Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 #Python
PyQt5显示GIF图片的方法
Jun 17 #Python
详解pytorch 0.4.0迁移指南
Jun 16 #Python
对pyqt5多线程正确的开启姿势详解
Jun 14 #Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 #Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 #Python
You might like
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
关于js类的定义
2011/06/28 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
使用Python3制作TCP端口扫描器
2017/04/17 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
python如何快速生成时间戳
2020/07/21 Python
python中altair可视化库实例用法
2021/01/26 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
干部行政关系介绍信
2014/01/17 职场文书
四年级评语大全
2014/04/21 职场文书
社区节水倡议书
2015/04/29 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
小学体育组工作总结
2015/08/13 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python