使用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的setuptools框架下生成egg的教程
Apr 13 Python
python爬虫的工作原理
Mar 05 Python
Python实现选择排序
Jun 04 Python
Python实现图片转字符画的示例
Aug 22 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
详解python pandas 分组统计的方法
Jul 30 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
python时间序列数据转为timestamp格式的方法
Aug 03 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
php5 pdo新改动加载注意事项
2008/09/11 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
销售人员自我评价怎么写
2013/09/19 职场文书
临床医学专业个人的自我评价
2013/09/27 职场文书
优秀实习自我鉴定
2013/12/04 职场文书
创先争优制度
2014/01/21 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
2014年基建工作总结
2014/12/12 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
解析目标检测之IoU
2021/06/26 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js