使用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 命令行参数sys.argv
Sep 06 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
python Celery定时任务的示例
Mar 13 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
python读取Kafka实例
Dec 23 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
django注册用邮箱发送验证码的实现
Apr 18 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
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php生成验证码函数
2015/10/20 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Javascript模块模式分析
2008/05/16 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
VUE重点问题总结
2018/03/19 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
Python实现list反转实例汇总
2014/11/11 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
python虚拟环境完美部署教程
2019/08/06 Python
使用python计算三角形的斜边例子
2020/04/15 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
C#面试题
2016/05/06 面试题
党支部对转正的意见
2015/06/02 职场文书
简短清晨问候语
2015/11/10 职场文书
导游词之山东八大关
2019/12/18 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android