Mel频率倒谱系数(melfrequency cepstral coefficients,MFCC)是声音的短期功率谱的表示,基于非线性频谱上的对数功率谱的线性余弦变换。在自动语音识别领域,MFCC是使用最广泛的特征之一,同时,它也广泛应用于声纹识别领域。MFCC特征提取过程,如图1所示。
图 1 MFCC特征提取过程
1)对原始语音进行预加重、分帧和加窗等预处理操作,得到短时信号x(n);
2)对每一个短时信号x(n)进行快速傅里叶变换(FFT)得到对应的线性频谱Xa(k);
3)对Xa(k)取模的平方,得到离散功率谱X(k);
4)将得到的频谱X(k)通过Mel滤波器[4]组进行滤波,再对滤波器组的输出求对数能量mi;
5)对mi进行离散余弦变换(discrete cosine transform,DCT)得到MFCC,此变换式可简化为:
式中:Cn表示的是MFCC的系数;L表示MFCC的阶数。
实验表明,当阶数升高到一定程度,系统识别性能的改善将变得很小,系统的复杂度却大大增加。因此实际应用中,只需取12~16阶倒谱系数就可以达到很高的识别效率。
function c=mfcc(s,fs) % 创建函数mfcc,其中,c为输出变量,mfcc为函数名,s、fs为输入变量;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% function: mfcc() 计算mel频率倒谱系数
% input : s:输入的语音数字信号 fs:采样频率
% output: MFCC特征系数
% rewriter: zhuchunqiang
% time: 2020.5.29
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%预加重
a=0.98;
len=length(s);
for i=2:lens1(i)=s(i)-a*s(i-1);%形成了一个新的信号s1;
end
%figure(2),plot(s1),title('heavyed signal'); s1为预加重后的信号;%计算功率谱密度n=320;%每个帧的采样点数
m=160;%相邻帧起点之间距离帧与帧之间的偏移;
% [Pxx,w]=pwelch(s1,n,m,256,10000); 这个函数是计算括号内所描述函数的功率谱密度;%分帧
frame=floor((len-n)/m)+1;%信号分帧的个数,floor的作用是取接近于括号内A的整数;
for j=1:frame %一列为一帧for i=1:nz(i,j)=s1((j-1)*m+i); %这句话对吗,s1不是从2开始的吗?1end
end%加窗hamming
h=hamming(n);
for j=1:framefor i=1:nz2(i,j)=h(i)*z(i,j);%加窗;end
end
% z3=z2(:);同上
% figure(4),plot(z3),title('window') % fft变换
for j=1:frameFFT(:,j)=fft(z2(:,j));%每一帧都要进行傅氏变换;
end%melfb 生成mel域滤波器组;
m=melfb(20,n,fs); % 这里应该是调用melfb函数,这里取p=20,指滤波器个数;
n2=1+floor(n/2);
mel=m*abs(FFT(1:n2,:)).^2; %计算经mel滤波器组加权后的能量值;abs(FFT(1:n2,:)).^2为能量谱,幅度平方谱通过美尔滤波器组;% *m为通过一组美尔尺度的三角形滤波器组,得到经滤波器组加权后的能量值;
c=dct(log(mel)); % 将滤波器组的输出取对数,然后做DCT变换;得到mel倒谱系数;
c(1,:)=[]; %去除c的第一行;% 过程总结:输入语音-预加重-分帧-加窗-FFT-经MEL滤波器组频响加权-计算加权后的能量值-将输出取对数,做DCT变换-得到mel倒谱系数;
【参考文献】
[1]王涛,王国中,朱林林等,一种基于声纹识别的智能门锁系统设计与实现[J].电子测量技术,2019,42(3):107-111.
[2]李虹,徐小力,吴国新等.基于MFCC的语音情感特征提取研究[J].电子测量与仪器学报,2017,31(3):448-453.
[3]刘翔,孙静,赵洋等.基于MFCC的心音信号特征提取及识别研究[J].电子测量技术,2018,41(2):1-5.
[4]胡政权,曾毓敏,宗原等.说话人识别中MFCC参数提取的改进[J].计算机工程与应用,2014,50(7):217-220.
[5]周萍,李晓盼,李杰等.混合MFCC特征参数应用于语音情感识别[J].计算机测量与控制,2013,21(7):1966-1968,1986.