声纹识别.docx

上传人:b****3 文档编号:24790342 上传时间:2023-06-01 格式:DOCX 页数:17 大小:314.23KB
下载 相关 举报
声纹识别.docx_第1页
第1页 / 共17页
声纹识别.docx_第2页
第2页 / 共17页
声纹识别.docx_第3页
第3页 / 共17页
声纹识别.docx_第4页
第4页 / 共17页
声纹识别.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

声纹识别.docx

《声纹识别.docx》由会员分享,可在线阅读,更多相关《声纹识别.docx(17页珍藏版)》请在冰豆网上搜索。

声纹识别.docx

声纹识别

声纹识别

摘要

声纹识别广泛应用于安防、公安、军队、银行、证券、个人身份认定等领域.

本文首先先利用MATLAB对说话人数据进行预处理,提取到MFCC参数,然后利用MFCC参数采用DTW算法建立声纹识别模型,

 

关键词:

MATLAB,预处理,MFCC系数,dtw算法

 

一、问题重述

1.1问题的重述

生物认证是通过人体特征进行人物身份认证的重要手段,包括人脸识别、虹

膜识别、指纹识别、体态识别和声纹识别等方法,它们被广泛地应用于国防、军

事和民用等诸多领域,推动着信息产业的蓬勃发展。

声纹识别又称说话人识别,是通过分析说话人的语音的特点,利用计算机自

动识别说话人的身份。

声纹识别又分为文本相关和文本无关说话人的识别两大类。

文本无关是指说话人的说话内容不受限制,文本相关是指说话人的说话内容必须

是指定的内容。

评价声纹识别方法或模型的最重要指标是识别准确率,准确率越高越宜于应

用于实际。

评价的另外一个重要指标就是识别所花的时间,即输入待识别的说话

人语音到识别结果的输出说话的时间,该时间越短约好。

请试着利用采集到的说话人语音数据(文本相关和文本无关两类),完成以

下几点:

1)建立代表说话人身份的语音特征模型,通过编程从语音数据中提取说话

人特征;

2)利用说话人特征建立说话人模型或声纹识别模型;

3)利用语音数据评价你的说话人模型或声纹识别模型评价的好坏;

4)分析影响准确率的因素,采取措施进一步提高声纹识别的准确率。

二、问题分析

1.2问题的分析

1.2.1针对第一问,我们原准备直接对音频文件进行特征提取,后经编程提取后发现有大量无用数据,且干扰结果的准确性。

于是,我们决定先对音频文件编程进行预处理,处理过程包括:

预加重、分帧、加窗、端点检测。

然后对预处理后所得数据进行MFCC特征提取,得到合并的mfcc参数和一阶差分mfcc参数(即MFCC和△MFCC)。

1.2.2针对第二问,我们利用第一问建立的模型特征:

mfcc参数和一阶差分mfcc参数(即MFCC和△MFCC)用DTW算法进行建模。

1.2.3针对第三问,声纹识别假设已训练了n个(n>2)声纹模型,现输入一位话者的语音序列(已经过mfcc参数提取),要求判断该话者是谁,即语音序列与哪一个声纹模型匹配。

统计识别结果的准确性。

识别准确性越高说明模型越好。

1.2.4针对第四问,

 

三、基本假设

假设1、

 

四、符号说明

MFCCMel频率倒谱系数

 

五、声纹识别理论

声纹识别原理

声纹生理图所谓声纹(Voiceprint),是用电声学仪器显示的携带言语信息的声波频谱。

人类语言的产生是人体语言中枢与发音器官之间一个复杂的生理物理过程,人在讲话时使用的发声器官--舌、牙齿、喉头、肺、鼻腔在尺寸和形态方面每个人的差异很大,所以任何两个人的声纹图谱都有差异。

每个人的语音声学特征既有相对稳定性,又有变异性,不是绝对的、一成不变的。

这种变异可来自生理、病理、心理、模拟、伪装,也与环境干扰有关。

尽管如此,由于每个人的发音器官都不尽相同,因此在一般情况下,人们仍能区别不同的人的声音或判断是否是同一人的声音。

语音识别本质上是一种模式识别的过程,其基本结构原理框图如图所示,主要包括语音信号预处理、特征提取、特征建模(建立参考模式库)、模式匹配等几个功能模块。

一个语音识别系统主要包括训练和识别两个阶段。

无论是训练还是识别,都需要首先对输入的原始语音进行预处理,并进行特征提取。

六、模型建立

6.1针对第一问,首先是预处理分析,主要包括:

预加重、分帧和加窗、端点检测等。

6.1.1预加重

预加重是一阶网络,用来对声音信号的高频部分进行加重,以增强声音的高频分辨率,可由软件来实现,表示为:

数字信号S^(n)通过一个高通滤波器,

H(z)=1-AZ-1(0.9

S^(n)=S(n)-aS(n-1)(0.9

6.1.2分帧

虽然声音信号是非线性时变信号,但它同时具有短时平稳的特点,所以对其进行分帧可以提取其短时特性。

在处理语音信号时一般取帧长为10~30ms,为了避免帧与帧之间的特性变化太大,所以帧移一般取帧长的1P3或1P2。

6.1.3加窗

为了进行短时分析必须加窗,这在理论上应使用两端具有平滑过渡特性的窗口。

即其目的就是为了减少帧起始和结束处的信号不连续性。

常用的窗

函数有:

(1)方窗

(2)汉明窗(HammingWindow)(3)汉宁窗(HannWindow):

其中最常用的窗函数是汉明窗。

函数为:

6.1.4端点检测

所谓端点检测,就是在实时输入的声音信号中,区分背景噪声和环境噪声,准确地判断出声音信号的开始点和结束点。

这一过程应由特定地算法自动完成,通常利用短时能量来检测浊音,用过零率来检测清音,两者配合实现可靠的端点检测。

端点检测算法常用的是由语音能量和过零率组合的有双门限法,以及由短时能量和过零率的乘积构成的能频值法。

具体过程如下图:

6.1.5然后我们进行特征参数的提取,特征参数主要有:

能量、幅度、过零率、频谱、倒谱和功率谱等,另外考虑到其他因素的影响,还有许多基于基本参数的参数,本文选用了MEL频率倒谱系数(MFCC)进行提取特征参数。

MFCC:

MFCC系数的计算是以“bark”为其频率基准的,它和线性频率的转换关系是:

(2-9)

MFCC系数也是按帧计算的,首先要通过FFT得到该帧信号的功率谱S(n),转换为Mel频率下的功率谱。

这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器:

NHm(n)m=0,1,…,M-1;n=0,1,…,N/2-1(2-10)

M为滤波器的个数,通常取24,与临界带的个数一样;N为一帧语音信号的点数,为了计算FFT的方便,通常取256。

滤波器在频域上为简单的三角形,其中心频率fm在Mel频率轴上是均匀分布的。

从下图就可以看到MFCC系数的计算过程如下:

(1)预处理:

确定每一帧语音采样序列的长度(如N=256),并对每帧序列s(n)进行预加重、分帧和加窗处理;

(2)计算离散功率谱:

对预处理的每帧进行离散FFT变换得到其频谱,再取模的平方作为离散功率谱S(n);

(3)将功率谱通过滤波器组:

计算S(n)通过M个Hm(n)后所得的功率值,即计算S(n)和Hm(n)在各离散频率点上的乘积之和,得到M个参数Pm,m=0,1,……M-1;

(4)取对数:

计算Pm的自然对数,得到Lm,m=0,1,……M-1;

(5)离散余弦变换:

对Lm计算其离散余弦变换,得到Dm,m=0,1,……M-1,舍去代表直流成份的D0,取D1,D2,……,Dk作为MFCC参数。

6.2通过DTW算法建立模型。

DTW算法:

在孤立词语音识别中,最为简单有效的方法是采用DTW(DynamicTimeWarping,动态时间归整)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典的一种算法。

用于孤立词识别,DTW算法与HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需要额外的计算。

所以在孤立词语音识别中,DTW算法仍然得到广泛的应用。

 

6.3

6.4

 

 

六、模型优缺点评价

7.1优点:

音纹识别可推广至只多方面如工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。

7.2缺点:

模型建立的特征值数据库比较庞大,存储和读取数据较慢,识别需要较长时间。

七、模型推广

八、参考文献

附录

程序1

%%MFCC参数的提取函数

functionccc=mfcc(x)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%functionccc=mfcc(x);

%对输入的语音序列x进行MFCC参数的提取,返回MFCC参数和一阶

%差分MFCC参数,Mel滤波器的阶数为24

%fft变换的长度为256,采样频率为8000Hz,对x256点分为一帧

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

bank=melbankm(24,256,8000,0,0.5,'m');

%归一化mel滤波器组系数

bank=full(bank);

bank=bank/max(bank(:

));

%DCT系数,12*24

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,512,80);

%计算每帧的MFCC参数

fori=1:

size(xx,1)%size(xx,1)返回xx的维数

y=xx(i,:

);

s=y'.*hamming(1024);%乘窗

t=abs(fft(s));

t=t.^2;%计算能量

c1=dctcoef*log(bank*t(1:

129));%dctcoef为DCT系数,bank归一化mel滤

波器组系数

c2=c1.*w';%w为归一化倒谱提升窗口

m(i,:

)=c2';

end

%差分系数

dtm=zeros(size(m));

fori=3:

size(m,1)-2

dtm(i,:

)=-2*m(i-2,:

)-m(i-1,:

)+m(i+1,:

)+2*m(i+2,:

);

end

 

程序2

%提取MFCC参数并保存在speakertestdata.mat中

fori=1:

80

fprintf('\n=====testdata\n');

tic

testNum=[];

testsnoring=dir(files);

testsnoring(1:

2)=[];

fprintf('%s\n',testsnoring(i).name);%显示处理进程

fullPath=[files,'\',testsnoring(i).name];%取出每一个语句的完整路径和文件名

[y,fs,nbits]=readwav(fullPath);

nbits=str2num(nbits(3:

end));

x=fix(y(:

1)*(2^(nbits-1)));%对数据进行扩大

cc=mfcc(x);

tspeaker(i).name=testsnoring(i).name;

tspeaker(i).data=cc;%24MFCC参数

 

savespeakertestdatatspeaker

end

t=toc

 

程序3

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1