安卓平台说话人识别系统的实现

来源 :中国新通信 | 被引量 : 0次 | 上传用户:yyp0000
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】    本文在安卓平台上设计实现了基于GMM模型的说话人识别系统,完成了GMM模型参数的训练和识别过程。并基于TIMIT语料库,通过调整GMM阶数和测试人数,对基于GMM模型的说话人识别系统的时效性进行了验证分析。实验结果表明:①GMM模型的阶数越多,系统的识别时间越长;②测试人数越多,系统的识别时间越长。在GMM模型阶数不高以及使用人数不多的情况下,该说话人识别系统基本满足用户的使用需求。
  【关键词】    美尔频率倒谱系数    高斯混合模型    说话人识别    安卓
  引言:
  说话人识别,也叫声纹识别,是通过对说话人语音信号的分析处理来完成说话人的辨认或确认。随着嵌入式软硬件技术和无线通信领域的迅猛发展,语音输入和控制将成为手持移动设备和嵌入式系统最佳的交互方式,以声纹信息为特征的身份鉴别技术也越发显得重要。
  与基于PC机的说话人识别系统相比,虽然基于嵌入式设备的说话人识别系统在存儲容量、运算速度等方面都不及PC机,但是,基于嵌入式设备的说话人识别系统由于同时具备嵌入式系统本身的低功耗、便携性、可靠性,以及说话人识别技术的准确性、方便性、经济性等诸多优势[1],随着嵌入式软硬件技术和无线电通信技术的迅猛发展,基于嵌入式设备的说话人识别系统的优势越发彰显。
  一、说话人识别技术
  目前,说话人识别新技术接连不断出现,如GMM-UBM结构[2]与支持向量机(support vector machine,简称SVM) [3-4]结合技术、基于得分规整技术的HNORM、ZNORM和TNORM技术、潜伏因子分析(latent factor analysis,简称LFA)技术、大词汇表连续语音识别(large vocabulary continuous speech recognition,简称LVCSR)应用于说话人识别技术、话音信号中的高维信息使用、以及用于解决通道失配问题的SMS技术等等。然而,当今最出色的说话人识别系统依然是基于GMM模型的,尤其是基于UBM-MAP结构的。
  说话人识别的目的是识别出说话人的身份,其前提是需要提供说话人所讲的一段话,从而从该语音中提取能够反映说话人个性的特征参数,再分析和处理这些参数,最终甄别出说话人的身份。其实质是一个模式识别[5-6]的问题,基本原理是将待识别的说话人模型与现存模板库中的模型进行比较,根据概率似然度或某种距离来判定待识别的说话人是库中哪个说话人,或判断待识别的说话人究竟是不是所声称的那个说话人。说话人识别系统通常由语音信号预处理、说话人特征参数提取、模型参数训练、模式匹配和结果判决等几部分组成,其基本结构框图[7]如图1所示。此外,说话人识别系统还必须对判决阈值进行选择,从而达到较好的识别效果。
  一个完整的说话人识别系统的建立和应用可分为模型参数训练阶段和结果识别阶段[8]。
  模型训练框图如图2所示。
  结果识别框图如图3所示。
  本文语音加窗预处理使用的是汉明窗,采用美尔频率倒谱系数(Mel Frequency Cepstrum Coefficient,简称MFCC)[9-11]作为特征参数,采用高斯混合模型作为训练/识别模型。
  二、系统实现及实验结果分析
  2.1系统在安卓平台的实现
  2.1.1 软件开发环境
  软件开发环境如下:
  1.操作系统:Windows XP;
  2.开发环境:Eclipse 3.5;
  3.开发工具包:JDK1.6和Android 2.2 SDK。
  2.1.2 用户界面
  用户界面是使用安卓提供的GUI组件实现的,最终实现的效果如图4所示。
  训练部分:训练时,先设置特征向量和GMM模型参数,然后点击“选择语音文件”按钮选择训练语音文件,最后点击“建立模型”或“继续训练”按钮进行模型训练,并保存模型参数,模型训练流程如图5所示。
  识别时,同样需要先设置特征向量和GMM模型参数,然后点击“选择语音文件”选择待识别语音文件,最后点击“识别”按钮进行识别并输出匹配结果,识别流程如图6所示。
  2.1.3 语音数据
  语音数据提取主要实现由类WavReader(如图7所示)完成,用户选择语音文件后,在选择“建立模型”、“继续训练”或“识别”按钮时,主程序将语音文件路径传入类WavReader中,类WavReader则从语音文件中读取并返回语音数据。
  类WavReader的主要成员方法说明:
  1. public WavReader( String fileName )
  该方法用于实例化一个WavReader对象。其中,方法参数为待读取的语音文件路径。
  2. public int getSampleRate( )
  该方法用于获取wav文件的采样率。
  3. public int getNumSamples( )
  该方法用于获取wav文件数据点数,即语音数据采样点数。
  4. public double[] getSampleData( )
  该方法用于获取Wav文件语音数据,获取的语音数据长度为getNumSamples()的返回值。
  2.1.4 特征提取
  本文采用MFCC作为特征参数,先将语音的功率谱转换成Mel频率对应的功率谱,再进行滤波取对数,最后进行离散余弦变换的方法求取出来,其计算流程如图8所示。   特征提取的主要实现由类MFCC(如图9所示)完成,用户选择语音文件后,再次选择“建立模型”、“继续训练”或“识别”按钮时,主程序将读取出的语音采样数据与待提取特征矢量的相关参数传入类MFCC中,类MFCC则进行特征参数提取并返回特征矢量。
  类MFCC的主要成员方法说明:
  1. public MFCC(int sampleRate, int windowSize, int incSize, int
  numberCoefficients, int numberFilters)
  该方法用于实例化一个MFCC对象。其中,方法参数sampleRate为语音数据采样率;windowSize为一帧语音数据采样点数,即帧长;incSize为相邻两帧重叠点数,即帧移;numberCoefficients为MFCC参数维数;numberFilters为Mel尺度滤波器数。
  2. public float[][] melcepst(double input[])
  该方法用于从语音数据中提取MFCC特征参数。其中,方法参数input为从wav文件中提取出来的语音数据。
  3. private double[] hamming(int size)
  该方法用于产生汉明窗。其中,方法参数size为窗口长度。
  4. private double[][] enframe(double input[], double window[], int frameShift)
  该方法用于对语音数据进行分帧。其中,方法参数input为待分帧语音数据;window为帧长,也是加窗操作的汉明窗窗口长度;frameShift为帧移。
  5. private Map rfft(double input[][], int row, int column, int n, int dim)
  该方法用于计算语音信号的频谱,即进行短时傅里叶变换(DFT)。其中,方法参数input为分帧后的语音数据;row为分帧语音数据的列数;column為分帧语音数据的行数;n为FFT变换点数;dim为矩阵维数。
  6. private Map melbankm(int melChnNum, int fftSize, int fs, float fl, float fh)
  该方法用于计算Mel尺度滤波器系数。其中,方法参数melChnNum为Mel尺度滤波器数;fftSize为FFT长度;fs为采样率;fl为Mel滤波器的开始间隔;fh为Mel滤波器的结束间隔。
  7. private double[][] rdct(double x[][], int m, int k)
  该方法用于对Mel尺度滤波器输出的对数功率谱进行反离散余弦变换(DCT)。其中,方法参数x为滤波器输出的对数功率谱;m为FFT长度;k为帧长。
  2.1.5 模型训练/识别
  模型训练/识别的主要实现由类Gauss(如图10所示)完成,用户选择语音文件,及选择“建立模型”或“继续训练”后,主程序将读取出的语音采样数据与待提取特征矢量的相关参数传入类Gauss中,类Gauss则进行GMM模型参数估计。
  类Gauss的主要成员方法说明:
  1. public Map gaussmix(float x[][], float c, float l, int m0, String v0)
  该方法用于初始化GMM模型参数。其中,方法参数x为MFCC特征参数;c为最小方差的归一化数据;l的整数部分为最大迭代次数,小数部分为迭代终止阀值;m0为GMM混合数;v0为GMM初始方法设置。
  本函数采用K-均值聚类算法初始化GMM模型参数。
  2. public Map gaussmix(float x[][], float c, float l, float m0[][], float v0[][], float w0[])
  该方法用于估计GMM模型参数。其中,方法参数x为MFCC特征参数;c为最小方差的归一化数据;l的整数部分为最大迭代次数,小数部分为迭代终止阀值;m0为GMM模型的均值矩阵;v0为GMM模型的方差矩阵;w0为GMM模型的权重向量。
  本函数采用EM算法对GMM模型参数进行估算。
  3. public Map gaussmixp(float y[][], float m[][], float v[][], float w[])
  该方法用于计算对数似然度。其中,方法参数y为MFCC特征参数;m为GMM模型的均值矩阵;v为GMM模型的方差矩阵;w为GMM模型的权重向量。
  4. private Map gaussmix_train_diagonal(float xs[][], float m[][], float v[][],float w[],float c, float l, float sx0[], float mx0[])
  该方法用于估计GMM模型参数,协方差矩阵取对角阵。其中,方法参数xs为MFCC特征参数;m为GMM模型的均值矩阵;v为GMM模型的方差矩阵;w为GMM模型的权重向量;c为最小方差的归一化数据;l的整数部分为最大迭代次数,小数部分为迭代终止阀值;sx0和mx0为gaussmix( )方法内部使用变量。
  5. public Map kmeans(float d[][], int k, String x0, int l)
  该方法为K-均值聚类算法。其中,方法参数d为待分类的数据;k为GMM模型混合数;x0为初始化方法设置;l为最大迭代次数。   2.1.6 模型参数存取
  模型训练完成后,需將模型参数存储在SD卡中,在识别时从SD卡读出。模型参数存取的主要实现由类Matrix(如图11所示)完成。
  识别时,同样需要先设置特征向量和GMM模型参数,然后点击“选择语音文件”选择待识别语音文件,最后点击“识别”按钮进行识别并输出匹配结果,识别流程如图6所示。
  操作Matrix的主要方法说明:
  1. public void writeMatrix(Matrix matrix,String fileName)
  该方法用于将Matrix对象数据保存到文件中。其中,方法参数matrix为待写入的矩阵数据;fileName为待写入文件的文件名。
  2. public Matrix  readMatrix(String fileName)
  该方法用于从文件中读取Matrix对象数据。其中,方法参数fileName为待读取矩阵数据的文件名。
  估计出的GMM模型参数的存储、读取分别由函数writeMatrix()和readMatrix()来完成。
  2.1.7 权限声明
  要实现对SD卡的写入、删除,以及录音操作,需为应用程序添加相应操作权限。应用程序的操作权限需AndroidManifest.xml文件中添加,即在<manifest…/>元素里添加如下权限声明:
  1.添加写SD卡权限
  <uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
  2.添加SD卡文件删除权限
  <uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>
  3.添加录音权限
  <uses-permission android:name=”android.permission.RECORD_AUDIO”/>
  2.2 实验结果分析
  在安卓平台手机上进行说话人识别,时效性是影响系统性能的一个重要指标。实验从TIMIT语音库中随机选取20人的语音作为样本,分别从不同训练语音时长和不同测试人数对说话人识别系统的时效性进行了分析。
  2.2.1 实验环境
  识别系统的运行环境为LG P990手机,其主要配置如下:
  1. CPU:双核1GHz;
  2. RAM:512MB;
  3.操作系统:安卓 2.2。
  2.2.2 GMM模型的阶数对系统时效性的影响
  GMM模型的阶数不同,系统的识别时间也不相同,为了测试不同GMM模型的阶数对系统时效性的影响,本论文做了GMM模型阶数对系统时效性影响实验。
  实验条件如下:从TIMIT语音库中选取10人的10段语音作为样本数据,平均每段语音长4.5秒, 任选其中一段作为测试数据,在MFCC系数的维数为12,测试人数为10的情况下,分别用不同GMM模型阶数测试系统的识别时间,测试结果如表1所示:
  从实验结果可以看出,GMM模型的阶数越多,系统的识别时间越长。因此,为安卓平台手机选择一个合适的GMM模型阶数是很有必要的。一般来说,阶数的选择不易取得过高,但也不能太小,往往需要大量的实验数据来确定。
  2.2.3 测试人数对系统时效性的影响
  测试人数不同,系统的识别时间也不相同,为了测试不同人数对系统时效性的影响,本论文做了测试人数对系统时效性影响实验。
  实验条件如下:从TIMIT语音库中选取20人的20段语音作为样本数据,平均每段语音长4.5秒, 任选其中一段作为测试数据,在GMM模型的阶数为16,MFCC系数的维数为12的情况下,分别用不同人数测试系统的识别时间,测试结果如表2所示:
  从实验结果可以看出,测试人数越多,系统的识别时间越长。因此,在安卓平台手机上进行说话人识别,应限制使用人数,过长的系统识别时间是人们所不能接受的。
  四、结束语
  本文在Android平台上设计实现的基于GMM的说话人识别系统,并通过实验分析了不同模型参数以及不同人数对系统时效性的影响。实验结果表明,在GMM模型阶数不高以及使用人数不多的情况下,本文实现的说话人识别系统基本满足用户的使用需求。
  参  考  文  献
  [1]哈斯塔木嘎. 嵌入式Linux环境下与文本有关的说话人确认系统的实现[D]. 呼和浩特:内蒙古大学学位论文,2009:1-2.
  [2]周玥媛,孔钦. 基于 GMM-UBM 的声纹识别技术的特征参数研究[J].计算机技术与发展,2020,30(5):76-83.
  [3] Cortes C, Vapnik V. Support-Vector Networks[J]. Machine Learning, 1995,20(3):273-297.
  [4]李荟, 赵云敏. GMM-UBM和 SVM在说话人识别中的应用[J]. 计算机系统应用,2018,27(1):225-230.
  [5]齐敏,李大健,郝重阳. 模式识别导论[M]. 北京:清华大学出版社,2009:27-30.
  [6]孙即祥. 现代模式识别(第二版)[M]. 北京:高等教育出版社,2008:47.
  [7] Reynolds D A, Quatieri T F, Dunn R B. Speaker Verification Using Adapted Gaussian Mixture Model[J]. Digital Signal Processing,2000 (10):19-41.
  [8]陈强. 基于GMM的说话人识别系统研究与实现[D]. 武汉:武汉理工大学硕士学位论文,2010:31.
  [9]周萍 沈昊,郑凯鹏. 基于MFCC 与GFCC 混合特征参数的说话人识别[J]. 应用科学学报,2019,37(1):24-32.
  [10]邵央等. 基于MFCC和加权矢量量化的说话人识别系统[J]. 计算机工程与应用,2002(5):127-128.
  [11]蒋皓石. 基于矢量量化的说话人识别研究[D]. 长沙:国防科学技术大学硕士学位论文,2005:24-26.
其他文献
依据BS7448断裂韧度试验标准,对应用于高压全焊接球阀的大壁厚窄间隙焊接接头进行了-46℃下的裂纹尖端张开位移(CTOD)试验,介绍了焊接方法、试件的制备、试验的程序等,对试件结果进行了分析。经过试验验证,焊接接头焊缝和热影响区的断裂韧性值均大于0.15mm,符合DNV验收标准。结果表明,在给定的焊接工艺下,A350LF2和A350LF6材质的焊接接头焊缝低温性能好,可以不进行焊后热处理,为高压全焊接球阀阀体环焊缝的焊接提供了理论依据。
无极绳连续牵引车系统中牵引梭车在重载爬坡过程中往往存在翘头现象,牵引梭车两个前轮脱离轨面,运输作业存在较大的脱轨风险,本文通过简化模型分析常规牵引车安全运行的坡度与载荷关系,提出新型牵引梭车在重载大坡度运行中的防翘头措施,为煤矿无极绳连续牵引车系统大坡度安全运输提供参考。
根据我国当前所拥有的建设基础设施的技术,可以发现水利水电工程边坡开挖及防护技术的研究非常重要。与此同时,在现实中施工时,水利水电工程边坡开挖及防护技术要与现在的时代发展相适应。除此之外,在现实中的施工过程中,了解施工的需要后,应用新兴的施工技术,同时让这些高新技术更好地为任何一种工程服务,作用于水利水电工程边坡开挖及防护技术会有非常显著的成效。由此可见,这将极其有助于高效率地解决现阶段水利水电工程中遇到的难题,并且提高施工效率,保证施工质量,进而降低工程的风险性。综上所述,本文将着重介绍关于水利水电工程边
柴油机油为内燃机提供润滑、防锈、清洗等多种保护,受到高温、剪切、金属催化、燃烧等多种工况作用,柴油机油会发生极其复杂的化学变化并逐步失去作用,对柴油机油失效规律研究,推进按质换油、科学延长油品使用寿命具有重要意义。本文应用时间序列ARMA模型建立了润滑油的失效模型,实践证明模型可较准确反映柴油机油的失效规律,对确定换油周期具有重要意义。
对于一个企业来说,无论规模大小,或是所从事的生产经营活动不同,都必须要使用到各种设备设施。而随着智能化、信息化的高速发展,设备也正朝着集成化、精细化的方向发展,越来越多的企业也开始面临设备维修难度大、维修成本高等难题。本文分析了设备点检的重要性,以陕西延长石油四川销售公司推行精细化的点检模式为例,着重介绍了如何科学的执行设备点检,以提升设备管理水平。
金属3D打印轻量化技术的应用越来越普遍,很大一部分原因在于轻量化设计可以极大的节约成本投入,减少不必要的资源浪费。轻量化技术应用于3D打印,可以使生产出来的产品重量更加轻便。本文论述了金属3D打印轻量化技术和SLM相结合的发展现状和趋势,对轻量化技术的设计标准进行了比较详细的阐释,并对相关的应用领域进行了简要说明。
本文提出了钻机液压站工作运行中存在液压系统温度过高的缺陷,阐述了根据钻机液压站特点、环境因素、运行温度、液压油容量等因素,在综合考虑下,研制了钻机组合液压站冷却装置,分析了组成结构、工作原理、性能指标与应用效果,为进一步设计和改进钻机的液压系统,降低钻机液压系统的故障率提供技术参考。
本文提出利用设备智慧运维系统完善设备管理流程,及时掌握设备状态,同时借助大数据分析,提高管理效率和决策水平,倒逼设备管理提升,培养和锻炼设备管理队伍,以提高设备全寿命周期的综合效益。
我国是一个农业大国,近年来,随着社会经济的发展以及科学技术的进步,我国的农业市场经济也在迅速发展,机械设计与机械制造工程都得到了全面的推广与应用。在迈向新型农业机械大国的道路上,我国农业生产的效率得到了显著提升,这得益于现代农业机械的发展,使得农业生产模式更加智能化与现代化,提高了农业生产质量与效率。本文从分析农业机械设计与制造的基础概念与基本特征入手,探讨了控制农业机械设计与制造质量的有效措施。
【摘要】 随着移动智能终端技术的不断成熟,应用领域越来越广泛,无论是工业生产还是日常生活,都带来了诸多便利。在电力通信管理方面,通过移动智能终端进行电力通信巡检,不仅可以降低人工巡检的工作量,而且还可以提升管理效率,让用户获得更优质的服务体验。鉴于此,本文对基于移动智能终端的电力通信巡检系统设计进行深入分析。  【关键词】 移动终端 电力通信 巡检系统 设计  引言:  城市化发展步伐不