实验三语音信号的特征提取最终实验报告.docx
《实验三语音信号的特征提取最终实验报告.docx》由会员分享,可在线阅读,更多相关《实验三语音信号的特征提取最终实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
实验三语音信号的特征提取最终实验报告
实验三语音信号的特征提取
一、实验目的
1、熟练运用MATLAB软件进行语音信号实验。
2、熟悉短时分析原理、MFCC、LPC的原理。
3、学习运用MATLAB编程进行MFCC、LPC的提取。
4、学会利用短时分析原理提取MFCC、LPC特征序列。
二、实验仪器设备及软件
HPD538、MATLAB
三、实验原理
1、MFCC
语音识别和说话人识别中,常用的语音特征是基于Mel频率的倒谱系数(即MFCC)。
MFCC参数是将人耳的听觉感知特性和语音的产生机制相结合。
Mel频率可以用如下公式表示:
在实际应用中,MFCC倒谱系数计算过程如下;
将信号进行分帧,预加重和加汉明窗处理,然后进行短时傅里叶变换并得到其频谱。
求出频谱平方,即能量谱,并用M个Mel带通滤波器进行滤波;由于每一个频带中分量的作用在人耳中是叠加的。
因此将每个滤波器频带的能量进行叠加,这时第k个滤波器输出功率谱
。
将每个滤波器的输出取对数,得到相应频带的对数功率谱;并进行反离散余弦变换,得到L个MFCC系数,一般L取12~16个左右。
MFCC系数为
,n=1,2,...,L
将这种直接得到的MFCC特征作为静态特征,再将这种静态特征做一阶和二阶差分,得到相应的动态特征。
2、LPC
由于频率响应
反映声道的频率响应和被分析信号的谱包络,因此用
做反傅里叶变换求出的LPC倒谱系数。
通过线性预测分析得到的合成滤波器的系统函数为
,其冲激响应为h(n)。
h(n)的倒谱为
,
就是说
的逆变换
是存在的。
设
,将式
两边同时对
求导,得
得到
,于是有
令其左右两边z的各次幂前系数分别相等,得到
和
间的递推关系
,按其可直接从预测系数{
}求得倒谱
。
这个倒谱是根据线性预测模型得到的,又称为LPC倒谱。
LPC倒谱由于利用线性预测中声道系统函数H(z)的最小相位特性,因此避免了一般同态处理中求复对数的麻烦。
四、实验步骤及程序
1、MFCC
(1)、实验步骤
输入样本音频
给样本音频预加重、分帧、加窗
将处理好的样本音频做傅里叶变换
进行Mel频率滤波
进行Log对数能量
对样本求倒谱
输出MFCC图像
(2)、MFCC提取程序流程图
s(n)s(n)X(k)X(k)
图3.1MFCC特征提取
(3)、MFCC特征提取实验源程序
closeall
clear
clc
[x]=wavread('1.wav');
bank=melbankm(24,256,8000,0,0.5,'m');
bank=full(bank);
bank=bank/max(bank(:
));
fork=1:
12
n=0:
23;
dctcoef(k,:
)=cos((2*n+1)*k*pi/(2*24));
end
w=1+6*sin(pi*[1:
12]./12);
w=w/max(w);
%预加重滤波器
xx=double(x);
xx=filter([1-0.9375],1,xx);
%语音信号分帧
xx=enframe(xx,256,80);
%计算每帧的MFCC参数
fori=1:
size(xx,1)
y=xx(i,:
);
s=y'.*hamming(256);
t=abs(fft(s));
t=t.^2;
c1=dctcoef*log(bank*t(1:
129));
c2=c1.*w';
m(i,:
)=c2';
end
figure
plot(m);xlabel('帧数');ylabel('幅度');title('MFCC');
2、LPC
(1)、实验步骤
1、输入原始语音
2、对样本语音进行加窗处理
3、计算LPC系数
4、建立语音正则方程
5、输出原始样本语音、预测语音波形和预测误差
6、输出LPC谱
7、求出预测误差的倒谱
8、输出原始语音和预测语音的语谱图
(2)实验流程
输入原始语音
图3.2LPC系数实验流程图
(3)、LPC系数实验源代码
I=wavread('1.wav');%读入原始语音
%subplot(3,1,1),
plot(I);
title('原始语音波形')
%对指定帧位置进行加窗处理
Q=I';
N=256;%窗长
Hamm=hamming(N);%加窗
frame=60;%需要处理的帧位置
M=Q(((frame-1)*(N/2)+1):
((frame-1)*(N/2)+N));
Frame=M.*Hamm';%加窗后的语音帧
[B,F,T]=specgram(I,N,N/2,N);
[m,n]=size(B);
fori=1:
m
FTframe1(i)=B(i,frame);
end
P=input('请输入预测器阶数=');
ai=lpc(Frame,P);%计算lpc系数
LP=filter([0-ai(2:
end)],1,Frame);%建立语音帧的正则方程
FFTlp=fft(LP);
E=Frame-LP;%预测误差
subplot(2,1,1),plot(1:
N,Frame,1:
N,LP,'-r');grid;
title('原始语音和预测语音波形')
subplot(2,1,2),plot(E);grid;
title('预测误差');
pause
fLength(1:
2*N)=[M,zeros(1,N)];
Xm=fft(fLength,2*N);
X=Xm.*conj(Xm);
Y=fft(X,2*N);
Rk=Y(1:
N);
PART=sum(ai(2:
P+1).*Rk(1:
P));
G=sqrt(sum(Frame.^2)-PART);
A=(FTframe1-FFTlp(1:
length(F')))./FTframe1;
subplot(2,1,1),plot(F',20*log(abs(FTframe1)),F',(20*log(abs(1./A))),'-r');grid;
xlabel('频率/dB');ylabel('幅度');
title('短时谱');
subplot(2,1,2),plot(F',(20*log(abs(G./A))));grid;
xlabel('频率/dB');ylabel('幅度');
title('LPC谱');
pause
%求出预测误差的倒谱
pitch=fftshift(rceps(E));
M_pitch=fftshift(rceps(Frame));
subplot(2,1,1),plot(M_pitch);grid;
xlabel('语音帧');ylabel('/dB');
title('原始语音帧倒谱');
subplot(2,1,2),plot(pitch);grid;
xlabel('语音帧');ylabel('/dB');
title('预测误差倒谱');
pause
%画出语谱图
ai1=lpc(I,P);%计算原始语音lpc系数
LP1=filter([0-ai(2:
end)],1,I);%建立原始语音的正则方程
subplot(2,1,1);
specgram(I,N,N/2,N);
title('原始语音语谱图');
subplot(2,1,2);
specgram(LP1,N,N/2,N);
title('预测语音语谱图');
五、实验结果与分析
1、MFCC
图3.3MFCC特征提取图像
通过计算MFCC参数,获得了声纹识别的特征参数。
由于MFCC参数是对人耳听觉特征的描述,因此,可以认为,不同声纹的MFCC参数距离,能够代表人耳对两个语音听觉上的差异,可以为声纹的识别提供可靠的依据。
2、LPC
图3.4原始语音波形
请输入预测器阶数=12
图3.5原始语音和预测语音波形及预测误差波形
图3.6短时谱和LPC谱波形
图3.7原始语音帧倒谱和预测误差倒谱波形
图3.8原始语音和预测语音语谱图
LPC系数
ai=
Columns1through8
1.0000-1.09140.5025-0.74850.15570.28630.07440.2411
Columns9through13
-0.28150.1132-0.24640.3990-0.1947
通过计算LPC系数可以很好的利用先行预测中声道系统函数的最小相位特性来提取特征函数
6、实验体会
通过本次实验是我更加熟练运用MATLAB软件进行编程,对MFCC和LPC两种特征序列的提取原理有了更深的理解,能够更好地运用课堂上所学的基础知识运用到实验当中,对于以后的学习有了很大的帮助。