使用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错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
python遍历文件夹下所有excel文件
Jan 03 Python
python 检查是否为中文字符串的方法
Dec 28 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
python创建子类的方法分析
Nov 28 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
python接口自动化框架实战
Dec 23 Python
解决hive中导入text文件遇到的坑
Apr 07 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
一个颜色轮换的简单例子
2006/10/09 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP学习之数组值的操作
2011/04/17 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
Python基于scipy实现信号滤波功能
2019/05/08 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python3.6编写的单元测试示例
2019/08/17 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
python 调用Google翻译接口的方法
2020/12/09 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
禁毒宣传标语
2014/06/19 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python