使用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读写Excel文件的实例
Nov 01 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
python 调用HBase的简单实例
Dec 18 Python
Python 文件操作的详解及实例
Sep 18 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python游戏开发的五个案例分享
Mar 09 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
Python中requests做接口测试的方法
May 30 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
DIY实用性框形天线
2021/03/02 无线电
php 分库分表hash算法
2009/11/12 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php给图片加文字水印
2015/07/31 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
对于Python的框架中一些会话程序的管理
2015/04/20 Python
Python中有趣在__call__函数
2015/06/21 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
python模拟斗地主发牌
2020/04/22 Python
python ETL工具 pyetl
2020/06/07 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
导游词之安徽九华山
2019/09/18 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电