资源简介
项目包含全部的代码,实现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
相关资源
- hmm算法库.rar
- 基于MFCC和SVM的说话人性别识别
- 基于DTW的孤立词语音识别代码
- 语音识别技术C++源代码
- PE文件格式解析MFCC++源码
- 梅尔倒谱系数MFCC的matlab代码
- 音频感知哈希函数的提取matlab codes
- CNN卷积神经网络实现语音识别.zip
- 语音识别系统源码
- mfcc源代码
- MFCC的详细介绍PPT
- MFCC梅尔倒谱参数及matlab代码
- zw_MFCCombox自动提示.zip
- 语音情感识别matlab源代码.zip
- google code mfcc c语言实现。
- 语音识别MFCC特征提取matlab代码
- MFCC参数提取的matlab实现
- 基于c语言的语音识别程序
- 声纹识别MATLAB源程序全代码
- MFCC的matlab实现
- 说话人识别代码
- 基于Matlab的声纹锁
- 基于mfcc,vq的说话人识别代码实现_自
- 语音信号处理- MFCC特征提取
- mfcc,,可输入自己的wav文件运行
- mfcc的C程序
- c语音识别程序
- 说话人识别和确认系统
- Matlab语音识别的完整程序-SpeechRec.pa
- Unity3D:讯飞实现语音识别功能语音转
评论
共有 条评论