使用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的Supervisor进行进程监控以及自动启动
May 29 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python学习入门之区块链详解
Jul 25 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
基于python监控程序是否关闭
Jan 14 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
Python之京东商品秒杀的实现示例
Jan 06 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
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
小学优秀班集体申报材料
2014/05/25 职场文书
道歉情书大全
2015/05/12 职场文书
闪闪的红星观后感
2015/06/08 职场文书
就业证明函
2015/06/17 职场文书
法律服务所工作总结
2015/08/10 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Redis读写分离搭建的完整步骤
2021/09/14 Redis
python热力图实现的完整实例
2022/06/25 Python