使用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新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python实现朴素贝叶斯算法
Nov 19 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python opencv判断图像是否为空的实例
Jan 26 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
python turtle绘图
May 04 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循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
PHP 代码规范小结
2012/03/08 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
PHP编写简单的App接口
2016/08/28 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
layer更改皮肤的实现方法
2019/09/11 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Python Requests 基础入门
2016/04/07 Python
Python 将pdf转成图片的方法
2018/04/23 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python中uuid模块实例浅析
2020/12/29 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
拓展策划方案
2014/06/03 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android