使用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中urllib2模块的8个使用细节分享
Jan 01 Python
Python编程中装饰器的使用示例解析
Jun 20 Python
python 二分查找和快速排序实例详解
Oct 13 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
详解Python如何生成词云的方法
Jun 01 Python
mac 安装python网络请求包requests方法
Jun 13 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
python三引号如何输入
Jul 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中cookie的作用域
2008/03/27 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
简述 Python 的类和对象
2020/08/21 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
《金钱的魔力》教学反思
2014/02/24 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
师范生教育见习总结
2015/06/23 职场文书
小学作文之描写天气
2019/08/15 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
python双向链表实例详解
2022/05/25 Python