mfcc的特征提取python 代码实现和解析
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import numpy
- import scipy.io.wavfile
- from matplotlib import pyplot as plt
- from scipy.fftpack import dct
- sample_rate,signal=scipy.io.wavfile.read('stop.wav')
- print(sample_rate,len(signal))
- #读取前3.5s 的数据
- signal=signal[0:int(3.5*sample_rate)]
- print(signal)
- #预先处理
- pre_emphasis = 0.97
- emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])
- frame_size=0.025
- frame_stride=0.1
- frame_length,frame_step=frame_size*sample_rate,frame_stride*sample_rate
- signal_length=len(emphasized_signal)
- frame_length=int(round(frame_length))
- frame_step=int(round(frame_step))
- num_frames=int(numpy.ceil(float(numpy.abs(signal_length-frame_length))/frame_step))
- pad_signal_length=num_frames*frame_step+frame_length
- z=numpy.zeros((pad_signal_length-signal_length))
- pad_signal=numpy.append(emphasized_signal,z)
- indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
- frames = pad_signal[numpy.mat(indices).astype(numpy.int32, copy=False)]
- #加上汉明窗
- frames *= numpy.hamming(frame_length)
- # frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / (frame_length - 1)) # Explicit Implementation **
- #傅立叶变换和功率谱
- NFFT = 512
- mag_frames = numpy.absolute(numpy.fft.rfft(frames, NFFT)) # Magnitude of the FFT
- #print(mag_frames.shape)
- pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2)) # Power Spectrum
- low_freq_mel = 0
- #将频率转换为Mel
- nfilt = 40
- high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))
- mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2) # Equally spaced in Mel scale
- hz_points = (700 * (10**(mel_points / 2595) - 1)) # Convert Mel to Hz
- bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
- fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))
- for m in range(1, nfilt + 1):
- f_m_minus = int(bin[m - 1]) # left
- f_m = int(bin[m]) # center
- f_m_plus = int(bin[m + 1]) # right
- for k in range(f_m_minus, f_m):
- fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])
- for k in range(f_m, f_m_plus):
- fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
- filter_banks = numpy.dot(pow_frames, fbank.T)
- filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks) # Numerical Stability
- filter_banks = 20 * numpy.log10(filter_banks) # dB
- num_ceps = 12
- mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)]
- (nframes, ncoeff) = mfcc.shape
- n = numpy.arange(ncoeff)
- cep_lifter =22
- lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
- mfcc *= lift #*
- #filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)
- mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)
- print(mfcc.shape)
- plt.plot(filter_banks)
- plt.show()
测试结果:
mfcc的特征提取python 代码实现和解析的更多相关文章
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
- 机器学习完整过程案例分布解析,python代码解析
所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的 ...
- 研磨设计模式解析及python代码实现——(二)外观模式(Facade)
一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- Python 代码风格
1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...
- 如何在batch脚本中嵌入python代码
老板叫我帮他测一个命令在windows下消耗的时间,因为没有装windows那个啥工具包,没有timeit那个命令,于是想自己写一个,原理很简单: REM timeit.bat echo %TIME% ...
- ROS系统python代码测试之rostest
ROS系统中提供了测试框架,可以实现python/c++代码的单元测试,python和C++通过不同的方式实现, 之后的两篇文档分别详细介绍各自的实现步骤,以及测试结果和覆盖率的获取. ROS系统中p ...
- [转] Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
- python代码风格-PEP8
转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...
随机推荐
- jQuery的load函数是异步的
今天使用load函数的时候,用它加载页面,再修改页面样式,但是没有成功,上网查了一下,原来是异步的,也就是说之后的代码不会等页面加载完再执行,有可能先执行,这就找不到元素了. 解决方法,利用load函 ...
- 第二阶段第五次spring会议
昨天我对软件加上了写便签时自动加上时间的功能. 今天我将对初始页面进行加工和修改. 我用两个小动物作为按钮分别进入动物便签界面和植物便签界面,可以让用户自由选择. 明天我将尝试对软件进行添加搜索引擎的 ...
- Siamese Neural Networks for One-shot Image Recognition
one-shot learning简介 这是迁移学习的两种极端形式 zero-shot learning 指的是我们之前没有这个类别的训练样本,但是我们可以学习到一个映射X->Y, 如果这个映射 ...
- HttpWebRequest.AddRange 支持long类型
很久很久以前,在哪个FAT32格式还流行的年代,文件大小普遍还没超过4G的年代,.Net已经出来了. 而那时候.Net实现的HTTP断点续传协议,还没预料到如此普及(我猜的).那时候的HttpWebR ...
- 优雅的找出ArrayList中重复的元素
https://blog.csdn.net/caoxiaohong1005/article/details/54286384
- RPA答疑
变量:部分主要对于工程中的变量进行管理和设置,支持手动拖拉至右侧画布 1全局变量:全局变量可以在整个工程中传递,被不同的子流程或函数进行调用,全局可见可调用 2 流程参数:只对子流程设置传入参数,供子 ...
- kali配置python3的开发环境
最近打算学习一下python3,毕竟不会写脚本的程序员,不是一个好的安全测试人员! 对于我来说,python的大部分应用都是在linux上,而kali是我唯一一个有图形化操作界面的linux系统 所以 ...
- 【ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序】
服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小. 取得 ...
- 去除最后一个li的样式
推荐::::方法一,使用:first-child 纯css的:first-child伪类就可以胜任此任务,操作很方便,代码量忽略不计.支持IE7+,不支持IE6 :first-child /:l ...
- JavaScript基础视频教程总结(081-090章)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...