资源简介
项目包含全部的代码,实现wav格式的语音信号的MFCC特征提取。

代码片段和文件信息
#coding=utf-8
#计算每一帧的MFCC系数
import numpy as np
from preprocessing import audio2frame
from preprocessing import pre_emphasis
from preprocessing import spectrum_power
from scipy.fftpack import dct
import myplot
import math
#适配3.x版本的xrange
try:
xrange(1)
except:
xrange=range
def envelope(x):
n=len(x)
env=np.zeros(n)
for i in range(n):
j=max(0 i-5)
k=min(i+5 n-1)
env[i]=np.mean(x[j:k])
return env
def fbank(signal samplerate=16000 win_length=0.025 win_step=0.01 filters_num=26 NFFT=512 \
low_freq=0 high_freq=None pre_emphasis_coeff=0.97):
‘‘‘
计算音频信号的经过梅尔三角滤波的能量谱
参数说明:
samplerate:采样频率
win_length:窗长度,每一帧的时间间隔
win_step:窗间隔
filters_num:梅尔滤波器个数
NFFT:FFT采样点个数
low_freq:最低频率
high_freq:最高频率
pre_emphasis_coeff:预加重系数
‘‘‘
high_freq=high_freq or samplerate/2 #计算音频样本的最大频率
signal_emp=pre_emphasis(signal pre_emphasis_coeff)#预加重处理
raw_spectrum=np.absolute(np.fft.fft(signal))
emp_spectrum=np.absolute(np.fft.fft(signal_emp))
#画出预加重前后的频域图
myplot.plot_spectrum(10*np.log10(raw_spectrum) 10*np.log10(emp_spectrum) samplerate)
#画出原始和预加重之后的时域图
myplot.plot_signal1(signal signal_emp samplerate)
frames=audio2frame(signal_emp win_length*samplerate win_step*samplerate)#得到帧数组
#画出分帧之后的每一帧加上hamming窗之后的时域图,在此之前,在audio2frame中会先将原始的frame画出来
myplot.plot_frames(frames np.shape(frames)[0] np.shape(frames)[1])
#myplot.plot_hamming(frames[77:])
spec_power=spectrum_power(frames NFFT)#得到每一帧的能量谱
env=envelope(spec_power[1 :])
#画出某一帧的频谱包络图,这里选取第一帧
myplot.plot_envelope(10*np.log10(spec_power[1 :]) 10*np.log10(env) NFFT samplerate)
energy=np.sum(spec_power 1)#对每一帧的能量谱求和
energy=np.where(energy==0 np.finfo(float).eps energy)#对能量为0的地方调整为eps, 方便进行对数处理
#画出每一帧没有经过滤波器组的功率谱和热图
myplot.plot_power_before_mel(10*np.log10(spec_power) NFFT np.shape(frames)[0] samplerate)
#myplot.plot_power_heatmap_before_mel(10*np.log10(spec_power))
fb freq_point=get_filter_banks(filters_num NFFT samplerate low_freq high_freq)#获得每一个滤波器的频率宽度
#画出滤波器组的形状
myplot.plot_fbank(fb NFFT filters_num samplerate)
feat=np.dot(spec_power fb.T)#对滤波器和能量谱进行点乘
#得到num_frames*num_filter大小的矩阵,也就是得到了每一帧用滤波器组计算(将能量用滤波器进行加重)之后的结果
feat=np.where(feat==0 np.finfo(float).eps feat)#同样不能出现0
#画出经过滤波器组滤波的每一帧功率谱,注意这个时候的频率标度已经不是线性的了,是按照滤波器中心频率来标的
myplot.plot_power_after_mel(freq_point np.arange(0 np.shape(frames)[0] 1) 10*np.log10(feat))
return feat energy
def get_filter_banks(filters_num=20 NFFT=512 samplerate=16000 low_freq=0 high_freq=None):
‘‘‘
计算梅尔三角间距滤波器,该滤波器在第一个和第三个频率处为0,在第二个频率处为1
参数说明:
filters_num: 滤波器个数
NFFT:FFT的总计的个数
samplerate:采样频率
low_freq:最低频率
high_freq:最高频率
‘‘‘
#首先,将频率hz转化为梅尔频率,因为人耳分辨声音的大小与频率并非线性正比,所以化为梅尔频率再线性分割
low_mel=hz2mel(low_freq)
high_mel=hz2mel(high_freq)
#需要在low_mel和high_mel之间等间距插入filters_num个点,一个filters_num+2个点
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9378 2018-03-20 21:46 code\calcmfcc.py
文件 4639 2018-03-20 22:20 code\myplot.py
文件 5251 2018-03-20 10:04 code\preprocessing.py
文件 313 2018-03-20 10:05 code\test.py
文件 41964 2018-03-17 23:29 code\test.wav
目录 0 2018-03-21 08:30 code
----------- --------- ---------- ----- ----
61545 6
相关资源
- 语音识别系统设计
- 用matlab编的基于DTW和MFC算法的语音识
- gmm mfcc说话人识别
- matlab下的基于高斯混合模型的说话人
- 语音识别C++
- 基于DWT和MFCC的说话人识别系统
- 基于mfcc的说话人语音识别matlb
- windows 讯飞语音听写和微软sapi c++ 实现
- 语音识别的算法实现C++
- 基于MFCC的GMM的语音识别
- 人事管理系统(MFCC++实现)
- 基于MFCC和SVM的说话人性别识别matlab代
- 盛大开源哼唱识别代码(C++)
- 代码mfcc的pro
- 语音识别端点检测程序C++
- 用动态时间规整模型进行语音识别
- Frogs_MFCCs.csv
- 用遗传算法实现语音识别--基于mfcc参
- 百度语音识别api QT window下 调试应用
- 基于MFCC的GMM的说话人识别.rar
- 文本有关的说话人识别系统
- 语音识别STM_C语言代码
- 语音识别GMM模型
- matlab算法实现声纹识别,带界面
- 基于HMM语音识别的C语言实现
- 新版,积分也变少了C++语音识别接口
- VC++下的语音识别源代码
- 中英语种识别matlab程序包含40个测试音
- 讯飞windows端语音识别一套是基于QT设
- 基于mfcc特征的dtw算法实现
评论
共有 条评论