【语音识别】基于matlab男女声识别【含Matlab源码 452期】
一、简介
一般来说,语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。
1 基于语音学和声学的方法
该方法起步较早,在语音识别技术提出的开始,就有了这方面的研究,但由于其模型及语音知识过于复杂,现阶段没有达到实用的阶段。
通常认为常用语言中有有限个不同的语音基元,而且可以通过其语音信号的频域或时域特性来区分。这样该方法分为两步实现:
第一步,分段和标号
把语音信号按时间分成离散的段,每段对应一个或几个语音基元的声学特性。然后根据相应声学特性对每个分段给出相近的语音标号
第二步,得到词序列
根据第一步所得语音标号序列得到一个语音基元网格,从词典得到有效的词序列,也可结合句子的文法和语义同时进行。
2 模板匹配的方法
模板匹配的方法发展比较成熟,目前已达到了实用阶段。在模板匹配方法中,要经过四个步骤:特征提取、模板训练、模板分类、判决。常用的技术有三种:动态时间规整(DTW)、隐马尔可夫(hmm)理论、矢量量化(VQ)技术。
(1)动态时间规整(DTW)
语音信号的端点检测是进行语音识别中的一个基本步骤,它是特征训练和识别的基础。所谓端点检测就是在语音信号中的各种段落(如音素、音节、词素) 的始点和终点的位置,从语音信号中排除无声段。在早期,进行端点检测的主要依据是能量、振幅和过零率。但效果往往不明显。60年代日本学者Itakura提出了动态时间规整算法(DTW:Dynamic Time Warping)。算法的思想就是把未知量均匀的升长或缩短,直到与参考模式的长度一致。在这一过程中,未知单词的时间轴要不均匀地扭曲或弯折,以使其特征与模型特征对正。
动态时间规整是将时间规整和距离测度结合起来的一种非线性规整技术。设测试语音参数共有N帧矢量,而参考模板共有M帧矢量,且N ≠M。 要找时间规整函数j = w(i) ,使测试矢量的时间轴 i 非线性地映射到模板的时间轴 j 上,并满足:式中d[ T(i) ,R(ω(i) ) ]是第 i 帧测试矢量T(i) 和第 j 帧模板矢量R(j) 之间的距离测度。 D 则是在最优情况下的两矢量之间的匹配路径。一般情况下,DTW采用逆向思路,从过程的最后阶段开始,逆推到起始点,寻找其中的最优路径。
(2)隐马尔可夫法(HMM)
隐马尔可夫法(HMM) 是70年代引入语音识别理论的,它的出现使得自然语音识别系统取得了实质性的突破。HMM 方法现已成为语音识别的主流技术,目前大多数大词汇量、连续语音的非特定人语音识别系统都是基于HMM模型的。HMM是对语音信号的时间序列结构建立统计模型,将之看作一个数学上的双重随机过程:一个是用具有有限状态数的Markov 链来模拟语音信号统计特性变化的隐含的随机过程,另一个是与Markov 链的每一个状态相关联的观测序列的随机过程。前者通过后者表现出来,但前者的具体参数是不可测的。人的言语过程实际上就是一个双重随机过程,语音信号本身是一个可观测的时变序列,是由大脑根据语法知识和言语需要(不可观测的状态) 发出的音素的参数流。可见HMM合理地模仿了这一过程,很好地描述了语音信号的整体非平稳性和局部平稳性,是较为理想的一种语音模型。
HMM语音模型λ(π,A ,B) 由起始状态概率(π) 、状态转移概率(A) 和观测序列概率(B) 三个参数决定。π揭示了HMM 的拓扑结构,A 描述了语音信号随时间的变化情况,B 给出了观测序列的统计特性。
经典HMM语音识别的一般过程是:用前向后向算法(Forward - Backward) 通过递推方法计算已知模型输出O 及模型λ= f (π,A ,B) 时的产生输出序列的概率P(O|λ),然后用Baum-Welch 算法,基于最大似然准则(ML) 对模型参数λ(π,A ,B) 进行修正,最优参数λ的求解可表示为λ= argmax{P(O|λ) } 。最后用Viterbi算法解出产生输出序列的最佳状态转移序列 X。所谓最佳是以 X 的最大条件后验概率为准则,即X =arg max{P(X| O ,λ) }。
(3)矢量量化(VQ)
矢量量化(Vector Quantization) 是一种重要的信号压缩方法。与HMM相比,矢量量化主要适用于小词汇量、孤立词的语音识别中。其过程是:将语音信号波形的 k 个样点的每一帧,或有k 个参数的每一参数帧,构成 k 维空间中的一个矢量,然后对矢量进行量化。量化时,将 k 维无限空间划分为 M 个区域边界,然后将输入矢量与这些边界进行比较,并被量化为“距离”最小的区域边界的中心矢量值。矢量量化器的设计就是从大量信号样本中训练出好的码书,从实际效果出发寻找到好的失真测度定义公式,设计出最佳的矢量量化系统,用最少的搜索和计算失真的运算量,实现最大可能的平均信噪比。失真测度主要有均方误差(即欧氏距离) 、加权的均方误差、Itakura2Saito距离、似然比失真测度等。初始码书的生成可以是随机选取、分裂生成法、乘积码书法[4]。在选定了失真测度和初始码书后,就用LBG算法,对初始码书进行迭代优化,一直到系统性能满足要求或不再有明显的改进为止。
核心思想可以这样理解:如果一个码书是为某一特定的信源而优化设计的,那么由这一信息源产生的信号与该码书的平均量化失真就应小于其它信息的信号与该码书的平均量化失真,也就是说编码器本身存在区分能力。
在实际的应用过程中,人们还研究了多种降低复杂度的方法,这些方法大致可以分为两类:无记忆的矢量量化和有记忆的矢量量化。无记忆的矢量量化包括树形搜索的矢量量化和多级矢量量化。
3 神经网络的方法
利用人工神经网络的方法是80年代末期提出的一种新的语音识别方法。人工神经网络(ANN)本质上是一个自适应非线性动力学系统,模拟了人类神经活动的原理,具有自适应性、并行性、鲁棒性、容错性和学习特性,其强的分类能力和输入-输出映射能力在语音识别中都很有吸引力。但由于存在训练、识别时间太长的缺点,目前仍处于实验探索阶段。
由于ANN不能很好的描述语音信号的时间动态特性,所以常把ANN与传统识别方法结合,分别利用各自优点来进行语音识别。
ANN与DTW:
ANN纳入DTW框架中的最简单方法就是利用多层感知器模型(MLP)计算DTW搜索中的局部路径得分。
ANN与HMM:
1)多层感知器网络来估计隐马尔可夫模型的状态概率输出的方法
2)BP算法实现HMM模型参数的重估
3)利用自组织神经网络Kohonen的学习矢量量化算法训练产生矢量量化码本
二、部分源代码
%filename:manwoman.m
%different man from woman.
%===========================================================
clear;
if nargin<1;action='initialized';end;
[fname,pname]=uigetfile('*.wav','Open Wave File');
file=[pname,fname];
[x,fs,bits]=wavread(file); % 读入声音文件(*.wav)
sound(x,fs,bits); % 数据通过声卡转换为声音
%===========================================================
% pause;
data1=x(:,1);
n=0:length(x)-1;
time=n/fs;
subplot(3,1,1) % 绘制2行1列的第1张子图
plot(time,data1) % 以时间为横轴,数据为纵轴作图
xlabel('Time (sec.)') % 标注横坐标
ylabel('Signal Level (Volts)') % 标注纵坐标
grid on % 添加网格
% pause;
% 对采集数据作滤波处理
blocksize =length(data1); % 计算窗函数长度
window = hanning(blocksize); % 计算汉宁窗函数(此函数为MATLAB自带)
data2=window.*data1; % 对数据先作加窗处理
% wp=[70,400]; %100Hz--400Hz
% wp=wp*2/fs;
wp=3000*2/fs;
[b,a]=ellip(4,0.1,20,wp); % 构造椭圆滤波器
data=filter(b,a,data2); % 求加窗处理后的数据经过滤波器的响应
subplot(3,1,2) % 绘制2行1列的第1张子图
plot(time,data) % 以时间为横轴,数据为纵轴作图
xlabel('Time (sec.)') % 标注横坐标
%ylabel('Signal Level (Volts)') % 标注纵坐标
grid on % 添加网格
% pause;
[xmax,index]=max(data1);
timewin=floor(0.015*fs);
xwin=data1(index-timewin:index+timewin);
[y,lags]=xcov(xwin);
subplot(3,1,3)
plot(lags,y)
grid on
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/114410085
- 点赞
- 收藏
- 关注作者
评论(0)