python绘制语谱图(不掉包实现)
1.绘制语谱图
为方便使用,现将同学唐维康的代码做出如下修正,封装成类,可以灵活调用
@作者:kingback@文件名称:MySpec.py@IDE:PyCharm@文件创建时间:2021-04-24 22:00:08@月份:4月import librosa
import numpy as np
import matplotlib.pyplot as pltclass MySpec(object):def __init__(self,filename,wlen,inc):#参数预定义self.filename=filenameself.wlen=wlenself.inc=incself.nfft=self.wlenself.win=self.hanning_window(self.wlen)# 计算每帧对应的时间def FrameTimeC(self,frameNum, frameLen, inc, fs):ll = np.array([i for i in range(frameNum)])return ((ll - 1) * inc + frameLen / 2) / fs# 分帧函数def enframe(self,x, win, inc=None):nx = len(x)if isinstance(win, list) or isinstance(win, np.ndarray):nwin = len(win)nlen = nwin # 帧长=窗长elif isinstance(win, int):nwin = 1nlen = win # 设置为帧长if inc is None:inc = nlennf = (nx - nlen + inc) // incframeout = np.zeros((nf, nlen))indf = np.multiply(inc, np.array([i for i in range(nf)]))for i in range(nf):frameout[i, :] = x[indf[i]:indf[i] + nlen]if isinstance(win, list) or isinstance(win, np.ndarray):frameout = np.multiply(frameout, np.array(win))return frameout# 加窗def hanning_window(self,N):nn = [i for i in range(N)]return 0.5 * (1 - np.cos(np.multiply(nn, 2 * np.pi) / (N - 1)))# 短时傅里叶变换def STFFT(self,x, win, nfft, inc):xn = self.enframe(x, win, inc)xn = xn.Ty = np.fft.fft(xn, nfft, axis=0)return y[:nfft // 2, :]#自己画语谱图的主函数def demain(self):data,fs=librosa.load(self.filename,sr=None,mono=False) # sr=None声音保持原采样频率, mono=False声音保持原通道数y = self.STFFT(data, self.win, self.nfft, self.inc)FrequencyScale = [i * fs / self.wlen for i in range(self.wlen // 2)] # 频率刻度frameTime = self.FrameTimeC(y.shape[1], self.wlen, self.inc, fs) # 每帧对应的时间LogarithmicSpectrogramData = 10 * np.log10((np.abs(y) * np.abs(y))) # 取对数后的数据plt.pcolormesh(frameTime, FrequencyScale, LogarithmicSpectrogramData)plt.colorbar()# plt.savefig('语谱图22.png')plt.show()
2.调用方式
from MySpec import MySpec......其他代码省略filename="I:/王延凯新建LibriVox数据集(3s)/english/english.2br02b_1_vonnegut_64kb_0.wav"
wlen=512
inc=256mySpec=MySpec(filename,wlen,inc)
mySpec.demain()
python绘制语谱图(不掉包实现)相关推荐
- python绘制语谱图(详细注释)
用python 绘制语谱图 1.步骤: 1)导入相关模块 2)读入音频并获取音频参数 3)将音频转化为可处理形式(注意读入的是字符串格式,需要转换成int或short型) 代码如下: import ...
- python绘制语谱图(手动实现)
1 原理分析 在获取语谱图数据之前,我们需要先了解短时傅里叶变换.语音信号是典型的非平稳信号,但是由于其非平稳性由发声器官的物理运动过程而产生,这种过程是相对变换缓慢的,在10~30ms以内可以认为是 ...
- python画图标题为蓝色_python绘制语谱图怎么设置成黄蓝色
展开全部 语音的时域分析和频32313133353236313431303231363533e59b9ee7ad9431333431333937域分析是语音分析的两种重要方法,但是都存在着局限性.时域 ...
- python绘制梅尔谱图_Python入门到底有多简单(三):填充数据
目录 1.加载包和数据读取2.数据填充2.1 用数值或字符串填充2.2 用字典填充2.3 method参数填充2.3.1 用前面的值填充2.3.2 用后面的值填充2.3.3 limit限制填充的个数2 ...
- python绘制梅尔谱图_3D星空图V2版——添加背景图片和音乐
阿黎逸阳 精选Python.SQL.R.MATLAB等相关知识,让你的学习和工作更出彩(可提供风控建模干货经验). 还记得之前发表的3D星空图吗?一直想给喜欢的星空图加上背景图片和音乐. 经过研究 ...
- python将批量音频信号(wav)转化为语谱图并保存(jpg/png)
python将批量音频信号(wav)转化为语谱图并保存(jpg/png) 1. 导入需要的函数库 import numpy as np import wave import matplotlib.py ...
- 不调包绘制音频语谱图并批量生成语谱图
什么是语谱图 语谱图(Spectrogam)是表示语音频谱随时间变化的图形,其实是一个二维的图像,但却能表示三个维度的信息,横坐标表示时间,纵坐标表示频率,颜色的深浅来映射能量的大小.任一给定频率成分 ...
- python实现绘制信号序列语谱图
python实现绘制信号序列语谱图 功能:绘制信号序列语谱图 代码: import numpy as np # 导入音频及绘图显示包 import librosa.display # 导入绘图工作的函 ...
- python实现时频谱,语谱图,mel语谱倒谱等
python实现时频谱,语谱图,mel语谱倒谱等 可以和理论相结合学习:https://blog.csdn.net/qq_36002089/article/details/108378796 语音信号 ...
- MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf
<语音信号处理>仿真作业 院 系 电气与电子工程学院 专业班级 姓 名 学 号 指导教师 2020 年 3 月 作业题目:语音采集与读写 一.目的 (1)了解matlab 采集语音信号的原 ...
最新文章
- 一种电磁铁磁场分析测量
- 200米外遥测心跳确定身份,五角大楼全新黑科技,比人脸识别更准、伪装也没用...
- html5+原生js画的瀑布,果然程序员不适合做设计吗?
- 用了那么多年MySQL不知道Explain?怪不得性能那么差!
- PYTHON 数据分析常用类库
- python matplotlib.pyplot() plt() 如何限制坐标的上下限?plt.xlim() plt.ylim()
- java面向对象的特征 —(13)
- 在c语言中load,一道题理清Objective-C中的load和initialize
- apache shiro_Apache Shiro:简化应用程序安全性
- 中邮智递通过数加和datav将系统和服务迁移到大数据平台
- jbpm视频教程全集下载【21讲完整】
- Java多线程机制(一)
- unity 打包减小包体大小
- 什么是CRM客户管理系统?
- 新知实验室 TUIKaraoke在线 K 歌
- 在ros中使用glog
- SpringBoot2基础篇
- 用安卓手机给电脑当摄像头[DroidCam]
- Win10笔记本电脑硬盘如何分区
- 数据赋能:Uber的数据治理实践分享