zoukankan      html  css  js  c++  java
  • 孤立汉语数字语音识别系统

    摘要:本文通过提取声音信号的Mel倒谱系数作为特征,利用动态时间规整技术实现匹配算法,实现了特定人孤立汉语数字语音的识别,并利用Matlab编写了简单的图形用户界面。

    关键词:语音识别;MFCC;DTW

    一、引言

    语言是人类所特有的最重要最自然的交流工具,也是人类信息的重要来源之一。让机器拥有“听懂”人类口述语言的能力,将使得人与计算机之间的沟通变得更为方便快捷。自从1952年AT&T贝尔实验室的开发出能识别十个英文数字的Audry系统以来,语音识别技术已经得到了飞速发展,其中IBM、Microsoft、Apple等公司在语音识别技术实用化上的巨资投入也使得这项技术在日常生活中得到广泛应用。计算机技术的发展大大促进了数字信号处理技术的开发与应用,也使得更多的技术应用在语音识别方面。

    MATLAB是一种功能强大、效率高、交互性好的数值计算和可视化计算机高级语言,它将数值分析、信号处理和图形显示有机地融合为一体,使得技术人员可以在较短的时间里对自己的想法进行实验验证。本文就是在MATLAB基础上进行汉语数字语言识别的图形用户界面开发与程序设计的。

    二、语音识别系统概述

    针对不同的任务,语音识别系统也可以采用对应的多种设计方案,但其大致的结构和模型思想基本上是相同的。语音识别系统本质上是一种模式识别系统,它包括了特征提取、模式匹配、参考模型库这三个基本单元。典型系统的基本结构如图1所示。

    典型语音识别系统

    图1 典型语音识别系统

    目前常用的技术有特征参数匹配法、隐马尔科夫法和神经网络法。其中语音特征参数可以是能量、基音频率、过量率、共振峰值等,目前常用的参数为基于发声声道特征模型,通过线性预测分析的线性预测倒谱系数LPCC和基于人耳的听觉机理,反映听觉特性,模拟人耳对声音频率感知的梅尔倒谱系数MFCC等。

    MFCC的频率特性反映了人耳的听觉特性,因而在用于代替人耳来分析语音时,其性能和鲁棒性比较符合实际听音效果。与LPCC相比,不依赖于全极点语音产生模型的假定,抗噪能力较强。本系统也将使用MFCC参数作为语音识别的主要特征参数。

    三、语音信号的分析与处理

    1 信号采集

    本实验直接用电脑的声卡进行语音信号的数字化采样量化处理。根据奈奎斯特采样定理,采样频率必须到达信号的两倍带宽以上时,才不会发生频域上的混叠失真,能够从采样信号恢复出原始信号。理论上说,通常人声的频率范围上限可达15kHz或更高,但是即使当带宽限制到低于3kHz附近的频率时语音仍是较容易听懂的。对于数字电话通信系统,标准采样率为8000Hz。量化是将时间上离散而幅度依然连续的波形幅度值离散化,其决定了声音的动态范围。若采用8位,则可将声波分为256级。

    本系统采用Matlab的audiorecorder对象进行声音信号采集。使用默认参数8kHz采样率,8位量化精度,单声道。

    2 预加重处理

    将经采样后的数字语音信号s(n)通过一个高通滤波器:H(z)= 1 – a×z -1 ,0.9≤a≤1.0 (本系统中取0.97)。经过预加重后的信号为:s'(n)= s(n)– a×s(n-1)。 因为发声过程中声带和嘴唇的效应,使得高频共振峰的振幅低于低频共振峰的振幅,进行预加重的目的就是为了对信号进行平滑,提升高频部分,补偿声带和嘴唇的效应,平坦信号频谱,保持整个频带中的信噪比,以便于进行频谱分析或声道参数分析。

    3 端点检测

    端点检测结果

    图2 端点检测结果

    端点检测即从一段信号中检测出语音信号的起始点和结束点,在孤立词识别中,可以减少非实时系统中的大量计算。常见的端点检测方法有利用时域特征的音量、过零率,利用频域特征的频谱变异数、频谱的熵等。时域方法计算量小,实现简单,且足以满足一般应用。

    短时能量可以利用帧内数据的平方和进行计算。理论上有声语音的能量值较大,无声语音(如摩擦音)的过零率较高,可以通过计算短时能量大致判断出语音的端点,然后使用过零率找到语音端点的相对精确位置。实验时发现汉语语音通过能量特征已能较好地确定端点,此时通过过零率特征并不能进一步精化结果,因此系统只使用了能量参数。

    编程时当能量值大于开启阈值时确定为起始点,小于关闭阈值时确定为语音结束点。阈值大小根据实验情况确定。图2为汉语5发音的端点检测情况。

    4 MFCC特征提取

    数字语音信号经过以上的预加重处理和端点检测之后,将进行梅尔倒谱系数MFCC的计算。计算方法如下:

    1)分帧

    语音整体上是非平稳信号,但其特性在20ms的量级内基本保持不变。取10ms为一帧,为避免相邻帧间的过大变化,帧之间应设置重叠,选取帧移为帧长的一半。另外为了方便后面的FFT计算,这里的帧长取为2的整幂指数。

    2)加窗

    由于进行离散傅里叶变换时将时域信号进行了周期延拓,在两端一般会有不连续的现象,为了减少吉布斯效应,通常要进行加窗处理,弱化边缘信号。在语音信号处理中常用海明窗(hamming windows),在Matlab中有其实现函数。

    3)傅里叶变换

    语音的时域信号变化迅速,不易分析,而频域变化相对缓慢,因此对加窗后的信号进行快速傅里叶变换FFT,再折半舍弃对称部分后平方计算信号能量谱。

    4)三角带通滤波器

    梅尔频率滤波器组

    图3 梅尔频率滤波器组

    将每帧能量谱中的线性频谱刻度转化成符合人耳听觉特性的梅尔刻度后,将其通过如图3的一组N个三角形带通滤波器(N一般取20~30个,本系统取为24),计算通过每个频带的能量并取对数。

    其中梅尔刻度与线性频率的转换关系为:

    {\rm{Mel}}(f) = 2595*{\log _{10}}(1 + \frac{f}{{700}}) 

    5)离散余弦转换

    将上面得到的N=24个对数能量E_k 带入离散余弦转换公式,求出L阶的梅尔频率倒谱系数,这里L通常取12。离散余弦转换公式如下:

    {C_m} = \sum\limits_{k = 1}^N {{E_k}\cos \left( {m(k - \frac{1}{2})\frac{\pi }{N}} \right),m = 1,2...L}

    通过离散余弦转换,将能量集中在前面几项中,达到在减少判别参数提高运算速度的同时又不失其准确性的目的。

    6)差量倒谱参数

    很多文献中提到利用差量倒谱参数来对语音的动态特性参数进行描述,可以提高系统的识别能力。本系统实验发现使用差量倒谱系数后,系统的识别性能并未有明显提高,有些情况下甚至有所下降。综合考虑,本系统仅使用静态MFCC参数进行识别。

    5 训练与识别

    在特征匹配方面有动态时间规整(DTW)技术,有效地解决了语音信号的特征提取和不等长语音匹配问题。此外还有矢量量化(VQ)和隐马尔科夫模型(HMM)理论,但这些基于统计的识别技术都需要大量的语音材料来提取统计特征,实现也比较麻烦。相对而言,DTW实现简单,在特定人孤立词的识别方面也能够有足够的准确度,为本实验所采用的方法。

    动态时间规整是将时间规整和距离测度结合起来的一种非线性规整技术。算法的思想就是把未知量均匀地伸长或缩短,直到与参考模式的长度一致。在这一过程中,未知语音的时间轴要不均匀地扭曲或弯折,以使其特征与模型特征对正。

    DTW算法搜索路径示意图

    图4 DTW算法搜索路径示意图

    如图4,要找时间规整函数M= w(N),使测试矢量的时间轴N非线性地映射到模板的时间轴M上,并满足:

    D = \mathop {\min }\limits_{w(i)} \sum\limits_{i = 1}^M {d[T(i),} R(w(i))]

    式中,d是第i帧测试矢量T(i)和第w(i)帧模板矢量R(w(i))之间的距离(一般采用欧氏距离)。一般DTW采用逆向思路,从最后点开始,逆推到起始点,寻找其中的最优路径。在求解中除了要约束路径的起点和终点外,还可以约束斜率在0~2之间,使路径不至于过度倾斜,这样每一个格点向前向后都只有三种可能落点,以加快算法的计算速度。

    真正进行语音识别时,首先需要采集0~9的汉语语音信号,计算各自的MFCC参数并存储起来作为参考模板。进行识别时,将待识别信号的参数特征依次与模板特征进行DTW匹配,并从中选取距离最小的作为识别结果。

    四、Matlab的GUI实现

    最后采用Matlab的GUI工具箱搭建一个简单的用户界面,能够用前面介绍的原理进行汉语数字语音的识别,而且便于操作,方便使用。

    用户界面如图5所示,开始时用户要根据界面提示依次读出0~9的汉语读音,每次录音结束后,界面上会用两条竖线显示出端点检测的结果,因为有时候检测的端点是错误的,此时需要用户判断本次录音是否有效,选择“是,重读数字”或“否,往下进行”。10个样本数据采集完毕后,就可以录入语音进行识别,并在界面上显示出识别的结果。

    系统界面系统界面

    图5 系统界面

    参考文献

    [1]A.V..奥本海姆,R.W.谢弗,J.R.巴克.离散时间信号处理[M].刘树堂,黄建国译.西安:西安交通大学出版社,2001.

    [2]刘玄和,宋庭新.语音识别与控制应用技术[M].北京:科学出版社,2008

    [3]张培玲,成凌飞.基于MATLAB的汉语数字语音识别系统[J].机械管理开发,2011,122(4):205~207.

    [4]王华朋,杨洪臣.声纹识别特征MFCC的提取方法研究[J].中国人民公安大学学报(自然科学版),2008,55(1):28~30.

    [5]林常志.基于统计的语音识别方法分析报告.2003

    代码下载 (使用matlab版本:7.11.0 R2010b)

    下载本文

  • 相关阅读:
    Lucene学习总结之一:全文检索的基本原理
    Solr学习和总结(线下1)
    HBase学习系列
    Hadoop家族系列文章
    SQL on Hadoop系统的最新进展(1)
    【转】redis数据库入门教程(全面详细)+面试问题
    Redis(1.3)Redis的基本特性(事务、多数据库)
    (5.15)mysql高可用系列——mysql mha实践
    Redis(1.2)Redis的数据结构与基本操作
    mysql函数使用报错
  • 原文地址:https://www.cnblogs.com/cql/p/2936598.html
Copyright © 2011-2022 走看看