使用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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
python爬取淘宝商品详情页数据
Feb 23 Python
python3 拼接字符串的7种方法
Sep 12 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
python requests模拟登陆github的实现方法
Dec 26 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 Python
python实现网络五子棋
Apr 11 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
Look And Say 序列php实现代码
2011/05/22 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
深入解析Python编程中super关键字的用法
2016/06/24 Python
python实现杨辉三角思路
2017/07/14 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Django model序列化为json的方法示例
2018/10/16 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
python如何求100以内的素数
2020/05/27 Python
python操作redis数据库的三种方法
2020/09/10 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
问卷调查计划书
2014/01/10 职场文书
大型车展策划方案
2014/02/01 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
倡议书的格式写法
2015/04/28 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
公司考勤管理制度
2015/08/04 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书