南昌哪里有网站建设,企业网站设计收费,关键词歌词简谱,郑州做网站哪家公司最好博主简介 博主是一名大二学生#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇#xff0c;博主致力于在这里分享关于人工智能#xff0c;c#xff0c;Python#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主#xff0c;博主会继续更新的#xff0c… 博主简介 博主是一名大二学生主攻人工智能研究。感谢让我们在CSDN相遇博主致力于在这里分享关于人工智能cPython爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主博主会继续更新的如果有错误之处大家可以指正。 专栏简介 本专栏主要研究python在人工智能方面的应用涉及算法案例实践。包括一些常用的数据处理算法也会介绍很多的Python第三方库。如果需要点击这里 订阅专栏。 给大家分享一个我很喜欢的一句话“每天多努力一点不为别的只为日后能够多一些选择选择舒心的日子选择自己喜欢的人” 目录 背景引入
MFCC语音特征值提取算法简介
语音信号分帧
计算MFCC系数
对语音信号进行预加重
对语音信号进行短时傅里叶变换
定义滤波器组
计算MFCC系数 背景引入
特征值提取在模式识别领域是很常见的一种算法和手段。特征值看起来好像很陌生其实在我们日常生活中也很常见。我们使用的身份认证ID都可以视为不同系统下的特征值。
MFCC在语音识别领域就是一组特征向量它通过对语音信号频谱包络与细节进行编码运算来得到。MFCC有39个系数其中包括13个静态系数13个一阶差分系数以及13个二阶差分系数。差分系数用来描述动态特征也就是声学特征在相邻帧间的变化情况。这些系数都是通过离散余弦变换Discrete Cosine TransformDCT计算而来。
MFCC语音特征值提取算法简介
MFCC意为梅尔频率倒谱系数顾名思义MFCC语音特征提取包含两个关键步骤将语音信号转化为梅尔频率然后进行倒谱分析。梅尔频谱是一个可用来代表短期音频的频谱梅尔刻度Mel Scale则是一种基于人耳对等距的音高变化的感官判断而确定的非线性频率刻度。梅尔频率和正常的频率f之间的关系 当梅尔刻度均匀分布则对应的频率之间的距离会越来越大。梅尔刻度的滤波器组在低频部分的分辨率高跟人耳的听觉特性比较相符这也是梅尔刻度的物理意义。在梅尔频域内人对音调的感知度为线性关系如果两段语音的梅尔频率相差两倍则人耳听起来两者的音调也相差两倍。
转化为梅尔频率时首先对时域信号进行离散傅里叶变换将信号转换到频域然后再利用梅尔刻度的滤波器组对频域信号进行切分使每个频率段对应一个数值。倒谱Cepstrum通过对一个时域信号进行傅里叶变换后取对数并再次进行反傅里叶变换Inverse Fast Fourier TransformIFFT得到。倒谱可分为复倒谱Complex Cepstrum实倒谱Real Cepstrum和功率倒谱Power Cepstrum。倒谱分析可用于信号分解也就是将两个信号的卷积转化为两个信号的相加。
MFCC的物理含义简而言之可理解为语音信号的能量在不同频率范围的分布。 人的发声过程可以看作是肺里的气流通过声带这个线性系统。如果用et表示输入声音的音高h(t)表示声带的响应也即我们需要获取的语音特征那么听到的语音信号x(t)即为二者的卷积 xt)为时域信号对其进行离散傅里叶变换后可得到频域信号XK亦即频谱 时域信号的卷积在频域内则可表示为二者的乘积 通常在频域分析中我们只关注频谱的能量而忽略其相位信息即 对频谱进行对数运算 然后进行反傅里叶计算 c(n)即为倒谱系数已经和原始的时域信号x(t)不一样。并且时域信号的卷积关系已经转化为频域信号的线性相加关系。 语音信号分帧
语音信号属于准稳态信号这也意味着在一定的时间内信号会保持稳定。这个时常对于我们人类来说很短一般只有10ms~30ms。在这一区间即帧内可将语音信号看成稳态信号只有稳态信号才能进行信号处理。
信号分帧一般会涉及到一个加窗的操作即将原始信号与一个窗函数相乘。我们用计算机处理信号的时候一般不会取无限长的信号而是会取其中间的一段信号这将会减少工作量也会加快程序法分析的时间。
无限长的信号被截断后其频谱会发生畸变从而导致频谱能量泄露。 为了减少这种能量泄露我们可采用不同的截取函数对信号进行截断。执行截断操作的函数称为窗函数简称为窗。常用的窗函数有矩形窗三角窗汉明Hamming窗及汉宁窗等。
汉宁窗也叫升余弦窗是很有用的窗函数。如果测试测试信号有多个频率分量频谱表现非常复杂测试目的更多在于关注频率点而非能量大小则用汉宁窗。汉宁窗主瓣加宽并降低旁瓣则显著减小从减少泄漏的观点出发汉宁窗明显优于矩形窗。但汉宁窗主瓣加宽相当于分析带宽加宽频率分辨率下降他与矩形窗相比泄露以及波动较小选择性则相应较高。
汉明窗是用来加权余弦形成的锥形窗也称之为改进的升余弦窗只是加权系数不同其旁瓣更小但其旁瓣衰减速度比汉宁窗要慢。汉明窗是以著名的美国数学家理查德·卫斯理·汉明Richard Wesley Hamming的名字来命名 下面的代码就是用python来生成汉明窗和汉宁窗 import matplotlib.pyplot as plt
import scipy #信号处理工具包
plt.figure(figsize(6,2))
plt.plot(scipy.hanning(512),b--,labelHanning) #绘制汉宁窗
plt.plot(scipy.hamming(512),r--,labelHamming) #绘制汉明窗
plt.title(Demo Hanning Hamming Window)
plt.legend()
plt.show() 除了scipy模块可以实现汉宁窗和汉明窗我们也可以用NumPy来实现汉宁窗和汉明窗。示例代码如下 import numpy as np
import matplotlib.pyplot as plt
hanWingnp.hanning(512)#定义汉宁窗
hamWinnp.hamming(512) #定义汉明窗
plt.plot(hanWing,y--,labelHanning)
plt.plot(hamWin,b--,labelHamming)
plt.title(Hamming Hanning window)
plt.ylabel(Amplitude)
plt.xlabel(Sample)
plt.legend()
plt.show() 信号加窗从本质上而言就是将原始信号与一个窗函数相乘。进行加窗操作之后我们就可以对信号进行傅里叶展开。加窗的代价就是一帧信号的两端部分将会被消弱。所以在进行信号分帧处理时帧与帧之间需要有部分重叠。相邻两帧重叠后其起始位置的时间差称之为帧移即步长Stride 。 以下为简单的信号加窗操作示意图 import numpy as np
import matplotlib.pyplot as plt
import scipy
xnp.linspace(0,10,1000)
originWavnp.sin(x**2) #示例原信号
winscipy.hamming(1000) #定义一个窗函数这里使用的汉明窗
winFrameoriginWav*win
#结果可视化
plt.title(Signal Chunk with Hamming Windows)
plt.plot(originWav)
plt.plot(win)
plt.plot(winFrame)
plt.legend()
plt.show() 运行程序其中蓝色波形为原信号橙色波形为窗函数绿色为加窗操作之后的信号。
假设x为语音信号w为窗函数则分帧信号为 其中w(n-m)为窗口序列当n去不同的值时窗口w(n-m)沿x(m)。因此w(n-m)是一个“滑动的”窗口。y(n)为短时傅里叶变换SIFT。由于窗口是有限长度的满足绝对可和条件所以这个变幻的前提条件是存在的这也是信号分帧的理论依据。
以下示例代码从指定文件夹读取一个音频文件然后将该音频文件分帧并显示其中一个分帧信号的波形 #读取指定音频文件
import matplotlib.pyplot as plt
import numpy as np
import wave #导入波形处理工具包
import os
import soundfile
def audioSignalFrame(signal,nw,inc):signal:原始音频信号nw:每一帧的长度inc:相邻帧的间隔#信号总长度signal_lengthlen(signal)#若信号长度小于一个帧的长度则帧数定义为1if signal_lengthnw:nf1else:nfint(np.ceil((1.0*signal_length-nwinc)/inc))#所有帧加起来的总的铺平的长度pad_lengthint((nf-1)*incnw)#长度不够时使用0填补类似于FFT中的扩充数组长度zerosnp.zeros((pad_length-signal_length,))#填补后的信号pad_signalnp.concatenate((signal,zeros))#相当于对所有帧的时间点进行抽取得到nf*nw的长度的矩阵indicesnp.tile(np.arange(0,nw),(nf,1))np.tile(np.arange(0,nf*inc,inc),(nw,1)).T#将indices转化为矩阵indicesnp.array(indices,dtypenp.int32)#得到帧信号framespad_signal[indices]#窗函数这里默认取1return frames
def readSignalWave(filename):fwave.open(filename,rb)paramsf.getparams()nchannels,sampwidth,frammerate,nframesparams[:4]#读取音频字符串格式strDataf.readframes(nframes)#将字符串转化为intwaveDatanp.fromstring(strData,dtypenp.int16)f.close()#信号幅值归一化waveDatawaveData*1.0/(max(abs(waveData)))waveDatanp.reshape(waveData,[nframes,nchannels]).Treturn waveData
if __name____main__:filepath./test.wav#dirnameos.listdir(filepath)#filenamefilepathdirname[3]datareadSignalWave(filepath)#初始化每帧长度及帧间隔nw512inc128FrameaudioSignalFrame(data[0],nw,inc)#显示原始信号plt.plot(data[0])plt.title(Original Signal)plt.show()#显示第一帧信号plt.plot(Frame[0])plt.title(First Frame)plt.show()上面的代码中没有对信号进行加窗处理若要执行信号加床操作只需将分帧函数稍作修改 def audioSignalFrame(signal,nw,inc,winfunc):signal:原始音频信号nw:每一帧的长度inc:相邻帧的间隔#信号总长度signal_lengthlen(signal)#若信号长度小于一个帧的长度则帧数定义为1if signal_lengthnw:nf1else:nfint(np.ceil((1.0*signal_length-nwinc)/inc))#所有帧加起来的总的铺平的长度pad_lengthint((nf-1)*incnw)#长度不够时使用0填补类似于FFT中的扩充数组长度zerosnp.zeros((pad_length-signal_length,))#填补后的信号pad_signalnp.concatenate((signal,zeros))#相当于对所有帧的时间点进行抽取得到nf*nw的长度的矩阵indicesnp.tile(np.arange(0,nw),(nf,1))np.tile(np.arange(0,nf*inc,inc),(nw,1)).T#将indices转化为矩阵indicesnp.array(indices,dtypenp.int32)#得到帧信号framespad_signal[indices]#窗函数这里默认取1winnp.tile(winfunc,(nf,1))return frames*win 当然随着函数的改变主函数中对函数的调用也需要改变只需要改变参数即可。除了调用工具包中的汉明窗函数也可以使用公式来定义。 def hamming(n): return 0.54-0.46*cos(2*pi/n*(arange(n)0.5)) 语音信号在进行分帧之前一般需要进行一个与加重操作。语音信号的预加重是为了对语音的高频部分进行加重使信号变得平坦保持在地频到高频的整个频带中能用同样的信噪比求频谱。同时也为了消除发声过程中声带和口唇辐射效应补偿语音信号受到发音系统所抑制的高频部分增加语音的高频分辨率。
我们一般通过一阶有限长单位冲激响应Finite Impulse ResponseFIR高通数字滤波器来实现预加重。FIR滤波器作为传递函数其中a为预加重系数0.9a1.0。假设t时刻的语音采样值为x(t)经过预加重处理后的结果为.a一般默认取0.95.
信号的预加重处理示例代码 def preemphasis(signal,coeff0.95):signal:要滤波的输入信号coeff:预加重系数。0表示无过滤默认为0.95返回值滤波信号return numpy.append(signal[0],signal[1:]-coeff*signal[:-1]) 计算MFCC系数
由于信号在时域上的变换很难看出特征因此我们通常将它转换为频域上的能量分布以便于观察。不同的能量分布代表不同语音的特征。语音原信号在与窗函数如汉明窗相乘后每帧还必须再经过快速傅里叶变换以得到频谱上的能量分布。对语音信号分帧加窗后的各帧的频谱然后对频谱进行取模平方运算后即为语音信号的功率谱。
对信号幅度谱、功率谱以及对数功谱的计算实例代码如下 import numpy
import logging
def msgspec(frames,NFFT):计算帧中每个帧的幅度谱。如果帧为N*D则输出N*NFFT/21if numpy.shape(frames)[1]NFFT:logging.warn(frame length (%d)is greater than FFT size(%d),frame will be truncated .Increase NFFT to avoid.,numpy.shape(frames)[1],NFFT)complex_specnumpy.fft.rfft(frames,NFFT)return numpy.absolute(complex_spec)def power_spectrum(frames,NFFT):return 1.0/NFFT*numpy.square(spectrum_magnitude(frames,NFFT))
def log_power_spectrum(frames,NFFT,norm1):spec_powerpower_spectrum(frames,NFFT)spec_power[spec_power1e-30]log_spec_power10*numpy.log10(spec_power)if norm:return log_spec_power-numpy.max(log_spec_power)else:return log_spec_power
此外信号的每一帧的音量即能量也是语音的特征而且非常容易计算。因此通常会再加上一帧的能量使得每一帧基本的语音特征增加一个维度包括一个对数能量和倒谱参数。标准的倒谱参数MFCC只反映了语音参数的静态特征语音参数的动态特征可以用这些静态特征的差分普来描述。
MFCC的全部组成如下N维MFCC系数N/3 MFCC系数N/3 一阶差分系数N/3二阶差分系数帧能量。以语音识别中常用的39维MFCC为例即为13个静态系数13个一阶差分系数Delta系数13个二阶差分系数Delta-Delta系数。其中差分系数用来描述动态特征即声学特征在相邻帧间的变化情况。
在MFCC计算中还涉及频率与梅尔刻度之间的转换其转换方式如下 def hz2mel(hz): return 2595*numpy.log10(1hz/700.0) 同样我们也可以推出下列公式 Delta系数的计算公式为 其中为Delta系数从帧t根据静态系数 计算而得。N一般取值为2。Delta-Delta加速度系数的计算方法相同但他们是根据Delta而不是静态系数来进行计算得到的。计算Deltaa系数的示例代码如下 def delta(feat,N):if N1:raise ValueError(N must be an integer1)NUMFRAMESlen(feat)denominator2*sum([i**2 for i in range(1,N1)])delta_featnumpy.pad(feat,((N,N),(0,0)),modeedge)for t in range(NUMFRAMES):delta_feat[t]numpy.dot(numpy.arange(-N,N1),padded[t:t2*N1])/denominatorreturn delta_feat 当然除了自己定义函数也可以直接使用工具包中的API。 对语音信号进行预加重 import numpy as np
import matplotlib.pyplot as plt
from python_speech_features.sigproc import *
from python_speech_features import *
from scipy.fftpack import dct
import scipy.io.wavfile as wav
sample_rate,signalwav.read(./test.wav)
#保留语音的前3.5秒
signalsignal[0:int(3.5*sample_rate)]
#信号预加重
emphasized_signalpreemphasis(signal,coeff0.95)
#显示信号
plt.plot(signal)
plt.title(Original Signal)
plt.plot(emphasized_signal)
plt.title(Preemphasis Signal)
plt.show() 上述示例代码对信号进行预加重处理的是preemphasissignalcoeff函数除了这个函数也可以使用以下代码实现 pre_emphasis0.95 emphasized_signalnumpy.append(signal[0],signal[1:]-pre_emphasis*signal[:-1]) 源代码
import numpy as np
import matplotlib.pyplot as plt
from python_speech_features.sigproc import *
from python_speech_features import *
from scipy.fftpack import dct
import scipy.io.wavfile as wav
sample_rate,signalwav.read(./test.wav)
pre_emphasis0.95
emphasized_signalnumpy.append(signal[0],signal[1:]-pre_emphasis*signal[:-1])
#保留语音的前3.5秒
#signalsignal[0:int(3.5*sample_rate)]
#信号预加重
#emphasized_signalpreemphasis(signal,coeff0.95)
#显示信号
plt.plot(signal)
plt.title(Original Signal)
plt.plot(emphasized_signal)
plt.title(Preemphasis Signal)
plt.show() 通过上面的程序可知两种函数都可以进行预加重处理可以自行选择合适的方法。
对语音信号进行短时傅里叶变换
在对语音信号进行处理之前我们需要对不稳定的语音信号进行短时分帧以获取傅里叶变换必需的稳定信号。语音处理范围内的典型帧大小范围为20ms~40ms连续帧之间重叠50%左右。因此一般将帧长度设置为25ms。短时傅里叶变换Short-Time Fourier TransformSIFT在MFCC计算过程中主要用于短时分帧处理后通过对信号进行时域到频域的转换来获取语音信号的频谱。 #对信号进行短时分帧处理
frame_size0.025 #设置帧长
#计算帧对应采样数frame_length)以及步长对应采样数frame_step)
frame_length,frame_stepframe_size*sample_rate,frame_stride*sample_rate
signal_lengthlen(emphasized_signal) #信号总采样数
frame_lengthint(round(frame_length)) #帧采样数
frame_stepint(round(frame_step))
#num_frames为总帧数确保我们至少有一个帧
num_framesint(np.ceil(float(np.abs(signal_length-frame_length))/frame_step))
pad_signal_lengthnum_frames*frame_stepframe_length
znp.zeros((pad_signal_length-signal_length))
#填充信号以后确保所有的帧的采样数相等
pad_signalnp.append(emphasized_signal,z)
indicesnp.tile(np.arange(0,frame_length),(num_frames,1))np.tile(np.arange(0,num_frames*frame_step,frame_step),(frame_length,1)).T
framespad_signal[indices.astype(np.int32,copyFalse)] 信号经过短时分帧之后可通过短时傅里叶变换得到各种频谱 NFFT512
mag_framesnp.absolute(np.fft.rfft(frames,NFFT))
pow_frames((1.0/NFFT)*((mag_frames)**2))
log_pow_frameslogpowspec(pow_frames,NFFT,norm1)
#保留语音的前3.5秒
#signalsignal[0:int(3.5*sample_rate)]
#信号预加重
#emphasized_signalpreemphasis(signal,coeff0.95)
#显示信号
plt.plot(mag_frames)
plt.title(Mag_Spectrum)
plt.plot(emphasized_signal)
plt.show()
plt.plot(pow_frames)
plt.title(Power_Spectrum)
plt.show()
plt.plot(pow_frames)
plt.title(Log_Power_Spectrum)
plt.show()运行上面的程序就可以得到处理结果下面展示原有的所有代码 import numpy as np
import matplotlib.pyplot as plt
from python_speech_features.sigproc import *
from python_speech_features import *
from scipy.fftpack import dct
import scipy.io.wavfile as wav
sample_rate,signalwav.read(./test.wav)
pre_emphasis0.95
emphasized_signalnumpy.append(signal[0],signal[1:]-pre_emphasis*signal[:-1])
#对信号进行短时分帧处理
frame_size0.025 #设置帧长
frame_stride0.1
#计算帧对应采样数frame_length)以及步长对应采样数frame_step)
frame_length,frame_stepframe_size*sample_rate,frame_stride*sample_rate
signal_lengthlen(emphasized_signal) #信号总采样数
frame_lengthint(round(frame_length)) #帧采样数
frame_stepint(round(frame_step))
#num_frames为总帧数确保我们至少有一个帧
num_framesint(np.ceil(float(np.abs(signal_length-frame_length))/frame_step))
pad_signal_lengthnum_frames*frame_stepframe_length
znp.zeros((pad_signal_length-signal_length))
#填充信号以后确保所有的帧的采样数相等
pad_signalnp.append(emphasized_signal,z)
indicesnp.tile(np.arange(0,frame_length),(num_frames,1))np.tile(np.arange(0,num_frames*frame_step,frame_step),(frame_length,1)).T
framespad_signal[indices.astype(np.int32,copyFalse)]NFFT512
mag_framesnp.absolute(np.fft.rfft(frames,NFFT))
pow_frames((1.0/NFFT)*((mag_frames)**2))
log_pow_frameslogpowspec(pow_frames,NFFT,norm1)
#保留语音的前3.5秒
#signalsignal[0:int(3.5*sample_rate)]
#信号预加重
#emphasized_signalpreemphasis(signal,coeff0.95)
#显示信号
plt.plot(mag_frames)
plt.title(Mag_Spectrum)
plt.plot(emphasized_signal)
plt.show()
plt.plot(pow_frames)
plt.title(Power_Spectrum)
plt.show()
plt.plot(log_pow_frames)
plt.title(Log_Power_Spectrum)
plt.show()(a)幅度谱 (b)功率谱 c)功率对数谱 音频文件使用不同最终结果也会不同大家自己使用自己的音频注意音频格式为“.wav” 定义滤波器组
将信号通过一组梅尔刻度的三角形滤波器组采用的滤波器为三角形滤波器中心频率为f(m),m1,2,3,,M,M通常取22~26. 各f(m)之间的间隔随着m值的减少而减少。随着m值的增大而增大。如图 三角形滤波器的频率响应定义公式4 对于其他的情况例如kf(m-1)和kf(m1)则为0当kf(m)时为1. 定义梅尔刻度的三角形滤波器组的示例代码为 low_freq_MEL0 #将频率转换为梅尔刻度
nfilt40 #窗的数目
#计算m2595*log10(1f/700)
high_freq_mel(2595*np.log10(1(sample_rate/2)/700))
mel_pointsnp.linspace(low_freq_MEL,high_freq_mel,nfilt2) #梅尔刻度的均匀分布
#计算f700(10**(m/2595)-1)
hz_points(700*(10**(mel_points/2595)-1))
binnp.floor((NFFT1)*hz_points/sample_rate)
fbanknp.zeros((nfilt,int(np.floor(NFFT/21))))
#计算三角形滤波器频率响应
for m in range(1,nfilt1):f_m_minusint(bin[m-1]) #三角形滤波器左边频率f(m-1)f_mint(bin[m]) #三角形滤波器中间频率fmf_m_plusint(bin[m1]) #三角形滤波器右边频率f(m-1)for k in range(f_m_minus,f_m):fbank[m-1,k](k-bin[m-1])/(bin[m1]-bin[m])
plt.plot(fbank.T)
plt.show()三角形滤波器有两个主要功能其一对频谱进行平滑并消除谐波的作用突显原先语音的共振峰其二用以降低运算量。如图所示的滤波器组中的每个滤波器在中心频率处响应为1并朝着0线性减少直至达到响应为0的两个相邻滤波器的中心频率。
计算MFCC系数
如果计算出的滤波器组系数高度相关则在某些机器学习算法中可能会存在问题。我们可用离散余弦变换对滤波器组系数进行去相关并产生滤波器组的压缩表示。滤波器组输出的对数能量经离散余弦变换后即可得到MFCC系数。示例代码如下 import numpy as np
import matplotlib.pyplot as plt
from python_speech_features.sigproc import *
from python_speech_features import *
from scipy.fftpack import dct
import scipy.io.wavfile as wav
sample_rate,signalwav.read(./test.wav)
pre_emphasis0.95
emphasized_signalnumpy.append(signal[0],signal[1:]-pre_emphasis*signal[:-1])
#对信号进行短时分帧处理
frame_size0.025 #设置帧长
frame_stride0.1
#计算帧对应采样数frame_length)以及步长对应采样数frame_step)
frame_length,frame_stepframe_size*sample_rate,frame_stride*sample_rate
signal_lengthlen(emphasized_signal) #信号总采样数
frame_lengthint(round(frame_length)) #帧采样数
frame_stepint(round(frame_step))
#num_frames为总帧数确保我们至少有一个帧
num_framesint(np.ceil(float(np.abs(signal_length-frame_length))/frame_step))
pad_signal_lengthnum_frames*frame_stepframe_length
znp.zeros((pad_signal_length-signal_length))
#填充信号以后确保所有的帧的采样数相等
pad_signalnp.append(emphasized_signal,z)
indicesnp.tile(np.arange(0,frame_length),(num_frames,1))np.tile(np.arange(0,num_frames*frame_step,frame_step),(frame_length,1)).T
framespad_signal[indices.astype(np.int32,copyFalse)]NFFT512
mag_framesnp.absolute(np.fft.rfft(frames,NFFT))
pow_frames((1.0/NFFT)*((mag_frames)**2))
log_pow_frameslogpowspec(pow_frames,NFFT,norm1)
#保留语音的前3.5秒
#signalsignal[0:int(3.5*sample_rate)]
#信号预加重
#emphasized_signalpreemphasis(signal,coeff0.95)
#显示信号plt.plot(mag_frames)
plt.title(Mag_Spectrum)
plt.plot(emphasized_signal)
plt.show()
plt.plot(pow_frames)
plt.title(Power_Spectrum)
plt.show()
plt.plot(log_pow_frames)
plt.title(Log_Power_Spectrum)
plt.show()
low_freq_MEL0 #将频率转换为梅尔刻度
nfilt40 #窗的数目
#计算m2595*log10(1f/700)
high_freq_mel(2595*np.log10(1(sample_rate/2)/700))
mel_pointsnp.linspace(low_freq_MEL,high_freq_mel,nfilt2) #梅尔刻度的均匀分布
#计算f700(10**(m/2595)-1)
hz_points(700*(10**(mel_points/2595)-1))
binnp.floor((NFFT1)*hz_points/sample_rate)
fbanknp.zeros((nfilt,int(np.floor(NFFT/21))))
#计算三角形滤波器频率响应
for m in range(1,nfilt1):f_m_minusint(bin[m-1]) #三角形滤波器左边频率f(m-1)f_mint(bin[m]) #三角形滤波器中间频率fmf_m_plusint(bin[m1]) #三角形滤波器右边频率f(m-1)for k in range(f_m_minus,f_m):fbank[m-1,k](k-bin[m-1])/(bin[m1]-bin[m])
plt.plot(fbank.T)
plt.show()filter_banksnp.dot(pow_frames,fbank.T)
filter_banksnp.where(filter_banks0,np.finfo(float).eps,filter_banks)
filter_banks20*np.log10(filter_banks)
num_ceps12 #取12个系数
#通过DCT计算MFCC系数
mfccdct(filter_banks,type2,axis1,normortho)[:,1:(num_ceps1)]
#对MFCC进行倒谱提升可以改善噪声信号中的语音识别
(nframes,ncoeff)mfcc.shape
nnp.arange(ncoeff)
cep_lifter22 #倒谱滤波系数定义倒谱所用到的滤波器组内滤波器个数
lift1(cep_lifter/2)*np.sin(np.pi*n/cep_lifter)
mfcc*lift
mfcc-(np.mean(mfcc,axis0)1e-8)
plt.imshow(np.flipud(mfcc.T),cmapplt.cm.jet,aspect0.2,extent[0,mfcc.shape[0],0,mfcc.shape[1]]) #绘制MFCC热力图
plt.show() 对MFCC进行如下的归一化操作运行操作其相应的热力图如下 filter_banks-(np.mean(filter_banks,axis0)1e-8)
plt.imshow(np.flipud(filter_banks.T),cmapplt.cm.jet,aspect0.2,extent[0,filter_banks.shape[1],0,filter_banks.shape[0]])
plt.show() 归一化的MFCC热力图 好了本篇文章介绍就到此结束了拜了个拜 文章转载自: http://www.morning.clgbb.cn.gov.cn.clgbb.cn http://www.morning.hrdx.cn.gov.cn.hrdx.cn http://www.morning.zsrjn.cn.gov.cn.zsrjn.cn http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn http://www.morning.sqlh.cn.gov.cn.sqlh.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn http://www.morning.zlgth.cn.gov.cn.zlgth.cn http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.bwjws.cn.gov.cn.bwjws.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.lwgrf.cn.gov.cn.lwgrf.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.hgcz.cn.gov.cn.hgcz.cn http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.mdwlg.cn.gov.cn.mdwlg.cn http://www.morning.wbfg.cn.gov.cn.wbfg.cn http://www.morning.kklwz.cn.gov.cn.kklwz.cn http://www.morning.lzttq.cn.gov.cn.lzttq.cn http://www.morning.rfxg.cn.gov.cn.rfxg.cn http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn http://www.morning.rbyz.cn.gov.cn.rbyz.cn http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.qphdp.cn.gov.cn.qphdp.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.msbpb.cn.gov.cn.msbpb.cn http://www.morning.twpq.cn.gov.cn.twpq.cn http://www.morning.dplmq.cn.gov.cn.dplmq.cn http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.sdamsm.com.gov.cn.sdamsm.com http://www.morning.rhmpk.cn.gov.cn.rhmpk.cn http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn http://www.morning.xqndf.cn.gov.cn.xqndf.cn http://www.morning.hxlch.cn.gov.cn.hxlch.cn http://www.morning.rngyq.cn.gov.cn.rngyq.cn http://www.morning.rnkq.cn.gov.cn.rnkq.cn http://www.morning.bmssj.cn.gov.cn.bmssj.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.khntd.cn.gov.cn.khntd.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.jbblf.cn.gov.cn.jbblf.cn http://www.morning.nlffl.cn.gov.cn.nlffl.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.ztmnr.cn.gov.cn.ztmnr.cn http://www.morning.ktrh.cn.gov.cn.ktrh.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn http://www.morning.dpqqg.cn.gov.cn.dpqqg.cn http://www.morning.yodajy.cn.gov.cn.yodajy.cn http://www.morning.tsflw.cn.gov.cn.tsflw.cn http://www.morning.mbrbk.cn.gov.cn.mbrbk.cn http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.lwtfr.cn.gov.cn.lwtfr.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.ptysj.cn.gov.cn.ptysj.cn http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn http://www.morning.krdb.cn.gov.cn.krdb.cn http://www.morning.mgfnt.cn.gov.cn.mgfnt.cn http://www.morning.tftw.cn.gov.cn.tftw.cn http://www.morning.skwwj.cn.gov.cn.skwwj.cn http://www.morning.newfeiya.com.cn.gov.cn.newfeiya.com.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.qnypp.cn.gov.cn.qnypp.cn http://www.morning.gsjzs.cn.gov.cn.gsjzs.cn