使用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中使用mongoengine操作MongoDB教程
Apr 24 Python
Python 基础知识之字符串处理
Jan 06 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python制作词云的方法
Jan 03 Python
Python常见数字运算操作实例小结
Mar 22 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python实现键盘输入的实操方法
Jul 16 Python
Python values()与itervalues()的用法详解
Nov 27 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 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 如何向 MySQL 发送数据
2006/10/09 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
js实现每日签到功能
2018/11/29 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python编写百度贴吧的简单爬虫
2015/04/02 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python三级目录展示的实现方法
2016/09/28 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python实现俄罗斯方块游戏
2020/03/25 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
python flask框架实现重定向功能示例
2019/07/02 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
局域网标准
2016/09/10 面试题
自动一体化专业求职信
2014/03/15 职场文书
群众路线个人整改措施
2014/10/24 职场文书
大学生十八大感想
2015/08/11 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
Python 阶乘详解
2021/10/05 Python