matlab语音识别系统

合集下载

使用MATLAB进行语音识别的基本原理

使用MATLAB进行语音识别的基本原理

使用MATLAB进行语音识别的基本原理语音识别是一种将人类语音转化为计算机可识别文本的技术。

它可以应用在语音识别系统、智能助手等多个领域,具有广泛的应用前景。

而MATLAB是一种功能强大的数学软件工具,提供了丰富的信号处理和模式识别函数,使得它成为进行语音识别的理想选择。

本文将介绍使用MATLAB进行语音识别的基本原理。

一、语音信号预处理在进行语音识别之前,需要对语音信号进行预处理。

预处理的目的是去除噪声、降低维度以及提取特征等。

其中,常用的预处理技术包括语音信号分帧、加窗、预加重以及语音信号归一化等。

语音信号分帧是将连续的语音信号分成若干短时帧,一般选择帧长为20-40毫秒。

然后对每一帧信号进行加窗操作,常用的窗函数有矩形窗、汉宁窗等,目的是减少频谱泄漏效应。

预加重是为了解决语音信号中的频率能量分布不均的问题。

预加重的思想是在进行傅里叶变换之前对语音信号进行高通滤波,增强高频部分的能量。

语音信号归一化是为了消除语音信号能量的差异性,一般使用均方根归一化或幅度归一化等方法,使得语音信号具有相似的能量特征。

二、特征提取在预处理之后,需要进行特征提取,以便将语音信号转化为计算机可识别的形式。

常用的特征提取方法包括线性预测分析(Linear Predictive Analysis, LPC)、梅尔频率倒谱系数(Mel-frequency Cepstral Coefficients, MFCC)等。

LPC是一种基于线性预测模型的方法,它假设语音信号是由前面的语音样本线性预测后产生的。

LPC通过提取语音信号的倒谱系数以及预测误差,将语音信号转化为一组具有较低维度的特征向量。

MFCC是一种基于梅尔刻度的频谱特征提取方法。

它模拟了人耳对声音的感知机制,通过将频率轴转换为梅尔刻度,进而使用离散余弦变换将频谱分析结果转化为梅尔频率倒谱系数,得到更加稳定和鲁棒的特征。

三、模型训练与分类在特征提取之后,需要进行模型训练与分类。

利用Matlab进行语音增强与语音识别的技术解析

利用Matlab进行语音增强与语音识别的技术解析

利用Matlab进行语音增强与语音识别的技术解析语音是人类最基本的交流工具之一,准确的语音信号处理可提升语音信号的质量,从而提高语音识别的准确率。

本文将结合Matlab的语音增强与语音识别技术,详细探讨语音增强与语音识别的原理和实现方法。

一、语音增强技术的原理与实现1.1 语音增强的意义与目标语音增强是指通过信号处理技术对语音信号进行去噪、增强,提升语音信号的清晰度和可听性,以改善语音通信质量。

在实际应用中,语音增强技术有助于提高语音识别的准确率,并且在语音通信、语音录音等领域也得到了广泛的应用。

1.2 语音增强的处理流程语音增强的处理流程通常包括预处理、特征提取和信号恢复三个步骤。

预处理阶段主要是对语音信号进行降噪和去除混响等操作,以减少背景噪音对语音分析的干扰。

特征提取阶段是将处理后的语音信号转换为特征向量,常用的特征提取方法包括短时能量、过零率和MFCC等。

最后一步是信号恢复,将特征向量转换回语音信号。

1.3 MatLab在语音增强中的应用MatLab是一种强大的数据处理和可视化工具,它提供了丰富的信号处理函数和工具箱,非常适合语音增强的实现。

例如,MatLab的Noise Reduction Toolbox提供了多种降噪算法,如噪声门限、频域滤波等,可以有效地降低语音背景噪音。

此外,MatLab还提供了多种滤波算法,如自适应滤波、非线性滤波等,可用于去除混响和残余噪声。

二、语音识别技术的原理与实现2.1 语音识别的意义与应用语音识别是将语音信号转化为文本或命令的过程,可以广泛应用于语音助手、语音导航、智能家居等领域。

准确的语音识别可以提高人机交互的效率和便利性。

2.2 语音识别的基本原理语音识别的基本原理是将语音信号转化为特征向量,并通过分类器将特征向量映射到对应的文本或命令。

常用的特征提取方法包括MFCC、倒谱系数、线性预测编码等。

分类器可以采用隐马尔可夫模型(HMM)、神经网络(NN)等算法,以实现对不同语音的分类和识别。

基于MATLAB的语音信号处理与识别系统设计与实现

基于MATLAB的语音信号处理与识别系统设计与实现

基于MATLAB的语音信号处理与识别系统设计与实现一、引言语音信号处理与识别是人工智能领域中的重要研究方向之一,随着深度学习和人工智能技术的不断发展,基于MATLAB的语音信号处理与识别系统设计与实现变得越来越受到关注。

本文将介绍如何利用MATLAB进行语音信号处理与识别系统的设计与实现。

二、MATLAB在语音信号处理中的应用MATLAB作为一种强大的科学计算软件,提供了丰富的工具箱和函数库,可以方便地进行语音信号处理。

在语音信号处理中,MATLAB可以用于语音信号的采集、预处理、特征提取、模型训练等各个环节。

通过MATLAB提供的工具,可以高效地对语音信号进行分析和处理。

三、语音信号处理流程1. 语音信号采集在语音信号处理系统中,首先需要对语音信号进行采集。

通过MATLAB可以实现对声音的录制和采集,获取原始的语音信号数据。

2. 语音信号预处理采集到的语音信号数据通常包含噪声和杂音,需要进行预处理以提高后续处理的准确性。

预处理包括去噪、降噪、滤波等操作,可以有效地净化语音信号数据。

3. 特征提取在语音信号处理中,特征提取是一个关键步骤。

通过MATLAB可以提取出语音信号的频谱特征、时域特征等信息,为后续的模式识别和分类打下基础。

4. 模型训练与识别利用MATLAB可以构建各种机器学习模型和深度学习模型,对提取出的特征进行训练和识别。

通过模型训练,可以实现对不同语音信号的自动识别和分类。

四、基于MATLAB的语音信号处理与识别系统设计1. 系统架构设计基于MATLAB的语音信号处理与识别系统通常包括数据采集模块、预处理模块、特征提取模块、模型训练模块和识别模块。

这些模块相互配合,构成一个完整的系统架构。

2. 界面设计为了方便用户使用,可以在MATLAB中设计用户友好的界面,包括数据输入界面、参数设置界面、结果展示界面等。

良好的界面设计可以提升系统的易用性和用户体验。

五、基于MATLAB的语音信号处理与识别系统实现1. 数据准备首先需要准备好用于训练和测试的语音数据集,包括正样本和负样本。

matlab语音识别系统(源代码)18676

matlab语音识别系统(源代码)18676

(威海)《智能仪器》课程设计题目: MATLAB实现语音识别功能班级:学号:姓名:同组人员:任课教师:完成时间:2012/11/3目录一、设计任务及要求 (1)二、语音识别的简单介绍语者识别的概念 (2)特征参数的提取 (3)用矢量量化聚类法生成码本 (3)的说话人识别 (4)三、算法程序分析函数关系 (4)代码说明 (5)函数mfcc (5)函数disteu (5)函数vqlbg (6)函数test (6)函数testDB (7)函数train (8)函数melfb (8)四、演示分析 (9)五、心得体会 (11)附:GUI程序代码 (12)一、设计任务及要求用MATLAB实现简单的语音识别功能;具体设计要求如下:用MATLAB实现简单的数字1~9的语音识别功能。

二、语音识别的简单介绍基于VQ的说话人识别系统,矢量量化起着双重作用。

在训练阶段,把每一个说话者所提取的特征参数进行分类,产生不同码字所组成的码本。

在识别(匹配)阶段,我们用VQ方法计算平均失真测度(本系统在计算距离d时,采用欧氏距离测度),从而判断说话人是谁。

语音识别系统结构框图如图1所示。

图1 语音识别系统结构框图语者识别的概念语者识别就是根据说话人的语音信号来判别说话人的身份。

语音是人的自然属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。

用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用电话网络还可实现远程客户服务等。

因此,近几年来,说话人识别越来越多的受到人们的重视。

与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。

因此,说话人识别的应用前景非常广泛:今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说话人识别的发展做出了贡献。

基于MATLAB的汉语数字语音识别系统

基于MATLAB的汉语数字语音识别系统
张 培 玲 , 凌 飞 成
( 河南理工大学 电气学院 , 河南 焦作 440) 5 0 0

要: 应用动 态时间规整 (T 为识别 算法, 用M C ( E 频率倒谱 系数) D W) 采 F CM L 为主要语音特 征参数 , 建立 了一 个汉
语数字语音识别 系统 , 中包括语音信号 的预 处理 、 其 特征 参数的提 取 、 别模板 的训练、 别匹配算 法; 识 识 同时 , 出利 提 用 MA L B图形用户界 面开发环境设计语音识 别 系统界 面 , TA 设计 简单 , 用方便 , 使 系统界 面友好 。
为 了体 现语 音 的动态 特性 及能 量对 语音 区分 的作 用 , 在 上述 语 音 特征 矢 量 中加 人 了一 阶差 分 MF C 还 C 及 其 一 阶能 量 和一 阶差分 能 量 , 中能量 参 数 用语 音 其
平 均能 量进 行 了归一 化 。
3 训 练 与识 别
路 径不 是 随 意选 择 的 , 因为任 何 一种 语 音 的发 音快 慢 都有 可 能变化 , 但是 其各 部分 的先后 次 序不 可能 改变 , 因此 所选 的路 径必 定是从 左 下角 出发 , 在右上 角结 束 ,

xk z ) / . (一 n (一 (e K. i ∑ )
尸 ) xkl (=l( 。 ).

( 1 )
( 2 )
其中 , 为 52 l 点。然后再求信号能量谱 , : 即 5 根据 ( ) ) 4 式进行频率弯折 , 在弯折后 的频率轴 上取等间隔滤波器组在频域对功率谱进行滤波.
4 对加窗后的语音信号进行 5 2 ) 1 点离散傅立叶变
换( F , : D T) 即
用过零率找到语音端点的相对精确位置 , 分解 出每一 个 语 音段 。 个实例见 图 2 其 中 5 , 表示无 声段 ,表示 有声 , 段 , 示 有 声 段 结束 后 的无 声 部 分 。从 图 中可 知 有 H表

Matlab在语音识别中的应用示例

Matlab在语音识别中的应用示例

Matlab在语音识别中的应用示例1. 引言语音识别是一项广泛应用于人机交互中的技术,其应用范围从智能助理到语音控制等众多领域。

而Matlab作为一种强大的数学建模与仿真工具,也在语音识别领域扮演着重要的角色。

本文将通过几个具体的应用示例,探讨Matlab在语音识别中的应用。

2. 语音信号的预处理语音信号的预处理对于后续的语音识别至关重要。

在Matlab中,我们可以使用数字滤波器对语音信号进行去噪和增强。

通过使用滤波器设计工具箱,我们可以根据语音信号的频谱特性,设计合适的数字滤波器。

另外,还可以利用Matlab中的时频分析工具对语音信号进行频谱分析,以了解信号的时域和频域特性。

3. 基于模板匹配的语音识别模板匹配是一种常见的语音识别方法,其基本思想是通过比较未知语音信号与预先录制的模板信号的相似度来进行识别。

在Matlab中,我们可以使用相关性分析函数corrcoef来计算两个语音信号的相关系数。

首先,我们需要将语音信号转化为MFCC(Mel频率倒谱系数),然后将其与预先录制的模板信号进行相关性分析。

通过设置阈值,我们可以判断未知语音信号是否匹配某个模板信号,从而进行语音识别。

4. 基于隐马尔可夫模型的语音识别隐马尔可夫模型(Hidden Markov Model, HMM)是一种常用的语音识别技术。

在Matlab中,我们可以使用HMM工具箱对语音信号进行建模和识别。

首先,我们需要根据不同的语音类别,建立对应的HMM模型。

然后,通过计算待识别语音信号与不同HMM模型的概率,选取概率最大的模型进行识别。

通过调整模型参数和训练样本,我们可以提高语音识别的准确率。

5. 基于深度学习的语音识别近年来,深度学习在语音识别领域取得了重大突破。

在Matlab中,我们可以使用深度学习工具箱进行语音信号的处理和特征提取。

深度学习网络(如卷积神经网络和循环神经网络)可以有效地学习语音信号的特征表示,提高语音识别的准确性。

Matlab技术语音识别应用

Matlab技术语音识别应用

Matlab技术语音识别应用Matlab技术在语音识别应用中的重要性语音识别是一种将人类语音转换为可被计算机理解和处理的技术。

近年来,随着人工智能和机器学习的快速发展,语音识别技术得到了广泛的应用和研究。

而Matlab作为一种强大的数学计算工具,也在语音识别应用中发挥着举足轻重的作用。

一、声学模型的构建声学模型是语音识别系统中的一个重要组成部分。

它通过建立声学特征与文本之间的映射关系,实现对语音信号的识别和理解。

Matlab提供了丰富的工具箱和函数,可用于提取声学特征、训练和调优声学模型。

比如,使用Matlab中的音频处理工具箱,我们可以将语音信号转换为频域特征,例如梅尔频率倒谱系数(MFCC),这是一种常用的语音特征表示方法。

通过Matlab的训练和优化算法,我们可以构建高效准确的声学模型,提高语音识别的精度和性能。

二、语言模型的开发语言模型是指根据已有的语言数据,推断出言语的概率分布模型。

它可以用于解决音素和词汇的歧义问题,提高语音识别的准确性。

Matlab提供了强大的统计工具和机器学习算法,可以用于开发和优化语言模型。

例如,通过Matlab的自然语言处理工具箱,我们可以进行文本分析和处理,应用统计模型和概率算法,准确推断出不同词汇的概率分布。

这样,在语音识别过程中,可以将语言模型和声学模型结合,提高识别结果的可靠性和准确性。

三、噪声抑制和特征增强语音识别系统在现实应用中经常面临环境噪声和语音信号质量不佳的情况。

因此,噪声抑制和特征增强技术对于提高语音识别的性能非常重要。

Matlab提供了多种噪声抑制和语音增强算法,可以有效地减少环境噪声对语音信号的干扰,提高信号的质量。

例如,使用Matlab中的波形处理函数,我们可以对语音信号进行滤波和降噪,去除噪声成分。

另外,通过Matlab的频域分析工具和声学特征提取工具,可以对语音信号进行频谱平滑和特征增强处理,增加语音特征的可辨识度,提高语音识别的准确性。

Matlab在语音识别中的应用技巧

Matlab在语音识别中的应用技巧

Matlab在语音识别中的应用技巧一、引言语音识别是人工智能领域中的重要研究方向之一。

它的目标是使计算机能够听懂人类的语音并进行相应的处理。

如今,语音识别已广泛应用于语音助手、智能客服、语音翻译等领域,给人们的生活带来了很大的便利。

在语音识别的研究中,Matlab作为一种强大的计算工具,发挥着重要的作用。

本文将介绍一些Matlab在语音识别中的应用技巧。

二、语音信号的预处理在进行语音识别之前,首先需要对语音信号进行预处理。

预处理的目标是提取语音特征,并减少噪声的干扰。

Matlab提供了许多函数和工具箱来实现这些功能。

以下是一些常用的预处理技巧:1. 语音信号的分帧和加窗语音信号通常是一个连续的信号,在进行处理之前需要将其分成若干个帧,并对每个帧应用一个窗函数。

这样可以使语音信号在时间上局部化,并减少频谱泄漏。

2. 预加重预加重是对分帧后的每个帧进行加权处理,目的是强调高频部分,减少低频部分的能量。

这样可以提高语音信号的辨识度。

3. 噪声抑制在语音信号中常常存在各种噪声,如环境噪声、机器噪声等。

为提高语音识别的准确性,需要对噪声进行抑制处理。

Matlab提供了一些强大的降噪算法,如Spectral Subtraction、Wiener Filtering等。

三、语音特征提取语音特征提取是语音识别的核心步骤之一。

它的目标是从语音信号中提取能够区分不同语音的特征。

以下是一些常用的语音特征提取技巧:1. 短时能量短时能量是指语音信号每个帧的能量大小。

它可以用来检测语音的起止位置,并判断是否为有声音的帧。

2. 短时过零率短时过零率是指语音信号每个帧中过零点的个数。

它可以用来检测语音的浊音与清音,以及语音的发音速度。

3. 倒谱系数(MFCC)MFCC是一种非常常用的语音特征提取方法。

它通过对语音信号的梅尔频谱进行离散余弦变换得到,具有较好的鲁棒性和可区分性。

四、语音识别算法语音识别算法是进行语音识别的核心部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(威海)《智能仪器》课程设计题目: MATLAB实现语音识别功能班级:学号:姓名:同组人员:任课教师:完成时间:2012/11/3目录一、设计任务及要求 (1)二、语音识别的简单介绍2.1语者识别的概念 (2)2.2特征参数的提取 (3)2.3用矢量量化聚类法生成码本 (3)2.4VQ的说话人识别 (4)三、算法程序分析3.1函数关系 (4)3.2代码说明 (5)3.2.1函数mfcc (5)3.2.2函数disteu (5)3.2.3函数vqlbg (6)3.2.4函数test (6)3.2.5函数testDB (7)3.2.6 函数train (8)3.2.7函数melfb (8)四、演示分析 (9)五、心得体会 (11)附:GUI程序代码 (12)一、设计任务及要求用MATLAB实现简单的语音识别功能;具体设计要求如下:用MATLAB实现简单的数字1~9的语音识别功能。

二、语音识别的简单介绍基于VQ的说话人识别系统,矢量量化起着双重作用。

在训练阶段,把每一个说话者所提取的特征参数进行分类,产生不同码字所组成的码本。

在识别(匹配)阶段,我们用VQ方法计算平均失真测度(本系统在计算距离d时,采用欧氏距离测度),从而判断说话人是谁。

语音识别系统结构框图如图1所示。

图1 语音识别系统结构框图2.1语者识别的概念语者识别就是根据说话人的语音信号来判别说话人的身份。

语音是人的自然属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。

用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用网络还可实现远程客户服务等。

因此,近几年来,说话人识别越来越多的受到人们的重视。

与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。

因此,说话人识别的应用前景非常广泛:今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说话人识别的发展做出了贡献。

说话人识别技术是集声学、语言学、计算机、信息处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。

在吃力语音信号的时候如何提取信号中关键的成分尤为重要。

语音信号的特征参数的好坏直接导致了辨别的准确性。

2.2特征参数的提取对于特征参数的选取,我们使用mfcc的方法来提取。

MFCC参数是基于人的听觉特性利用人听觉的屏蔽效应,在Mel标度频率域提取出来的倒谱特征参数。

MFCC 参数的提取过程如下:1. 对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱分布信息。

设语音信号的DFT 为:10,)()(112-≤≤=∑-=-N k en x k X N n N nk j a π(1)其中式中x(n)为输入的语音信号,N 表示傅立叶变换的点数。

2. 再求频谱幅度的平方,得到能量谱。

3. 将能量谱通过一组Mel 尺度的三角形滤波器组。

我们定义一个有M 个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,3,···,M本系统取M=100。

4. 计算每个滤波器组输出的对数能量。

N 12a m k 1S(m)ln(|(k)|H (k)),0m M 1X -==≤≤-∑ (2)其中m H (k)为三角滤波器的频率响应。

5. 经过离散弦变换(DCT )得到MFCC 系数。

10C(n)()cos((0.5/)),(3)01M m S m n m m n N π-==-≤≤-∑MFCC 系数个数通常取20—30,常常不用0阶倒谱系数,因为它反映的是频谱能量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取20阶倒谱系数。

2.3用矢量量化聚类法生成码本我们将每个待识的说话人看作是一个信源,用一个码本来表征。

码本是从该说话人的训练序列中提取的MFCC 特征矢量聚类而生成。

只要训练的序列足够长,可认为这个码本有效地包含了说话人的个人特征,而与讲话的容无关。

本系统采用基于分裂的LBG 的算法设计VQ 码本,(1,2,,)k X k K =⋅⋅⋅为训练序列,B 为码本。

具体实现过程如下:1. 取提取出来的所有帧的特征矢量的型心(均值)作为第一个码字矢量B1。

2. 将当前的码本Bm 根据以下规则分裂,形成2m 个码字。

)1()1({εε-=+=-+m m m m B B B B (4) 其中m 从1变化到当前的码本的码字数,ε是分裂时的参数,本文ε=0.01。

3. 根据得到的码本把所有的训练序列(特征矢量)进行分类,然后按照下面两个公式计算训练矢量量化失真量的总和[]n D 以及相对失真(n 为迭代次数,初始n=0,[1]D -=∞,B 为当前的码书),若相对失真小于某一阈值ε,迭代结束,当前的码书就是设计好的2m 个码字的码书,转5。

否则,转下一步。

量化失真量和:()1min (,)Kn k k D d X B ==∑ (5)相对失真:(1)||n nn D D D-- (6) 4. 重新计算各个区域的新型心,得到新的码书,转3。

5. 重复2 ,3 和4步,直到形成有M 个码字的码书(M 是所要求的码字数),其中D0=10000。

2.4 VQ 的说话人识别设是未知的说话人的特征矢量1{,,}T X X K ,共有T 帧是训练阶段形成的码书,表示码书第m 个码字,每一个码书有M 个码字。

再计算测试者的平均量化失真D ,并设置一个阈值,若D 小于此阈值,则是原训练者,反之则认为不是原训练者。

∑=≤≤=11]min[/1),(j Mm m j T D B x d (7) 三、 算法程序分析在具体的实现过程当中,采用了matlab 软件来帮助完成这个项目。

在matlab 中主要由采集,分析,特征提取,比对几个重要部分。

以下为在实际的操作中,具体用到得函数关系和作用一一列举在下面。

3.1函数关系主要有两类函数文件Train.m 和Test.m在Train.m 调用Vqlbg.m 获取训练录音的vq 码本,而Vqlbg.m 调用mfcc.m 获取单个录音的mel 倒谱系数,接着mfcc.m 调用Melfb.m---将能量谱通过一组Mel 尺度的三角形滤波器组。

在Test.m 函数文件中调用Disteu.m 计算训练录音(提供vq 码本)与测试录音(提供mfcc )mel 倒谱系数的距离,即判断两声音是否为同一录音者提供。

Disteu.m 调用mfcc.m 获取单个录音的mel 倒谱系数。

mfcc.m 调用Melfb.m---将能量谱通过一组Mel 尺度的三角形滤波器组。

3.2具体代码说明3.2.1函数mffc:function r = mfcc(s, fs)---m = 100;n = 256;l = length(s);nbFrame = floor((l - n) / m) + 1; %沿-∞方向取整for i = 1:nfor j = 1:nbFrameM(i, j) = s(((j - 1) * m) + i); %对矩阵M赋值endendh = hamming(n); %加 hamming 窗,以增加音框左端和右端的连续性M2 = diag(h) * M;for i = 1:nbFrameframe(:,i) = fft(M2(:, i)); %对信号进行快速傅里叶变换FFTendt = n / 2;tmax = l / fs;m = melfb(20, n, fs); %将上述线性频谱通过Mel 频率滤波器组得到Mel 频谱,下面在将其转化成对数频谱n2 = 1 + floor(n / 2);z = m * abs(frame(1:n2, :)).^2;r = dct(log(z)); %将上述对数频谱,经过离散余弦变换(DCT)变换到倒谱域,即可得到Mel 倒谱系数(MFCC参数)3.2.2函数disteu---计算测试者和模板码本的距离function d = disteu(x, y)[M, N] = size(x); %音频x赋值给【M,N】[M2, P] = size(y); %音频y赋值给【M2,P】if (M ~= M2)error('不匹配!') %两个音频时间长度不相等endd = zeros(N, P);if (N < P)%在两个音频时间长度相等的前提下copies = zeros(1,P);for n = 1:Nd(n,:) = sum((x(:, n+copies) - y) .^2, 1);endelsecopies = zeros(1,N);for p = 1:Pd(:,p) = sum((x - y(:, p+copies)) .^2, 1)';end%%成对欧氏距离的两个矩阵的列之间的距离endd = d.^0.5;3.2.3函数vqlbg---该函数利用矢量量化提取了音频的vq码本function r = vqlbg(d,k)e = .01;r = mean(d, 2);dpr = 10000;for i = 1:log2(k)r = [r*(1+e), r*(1-e)];while (1 == 1)z = disteu(d, r);[m,ind] = min(z, [], 2);t = 0;for j = 1:2^ir(:, j) = mean(d(:, find(ind == j)), 2);x = disteu(d(:, find(ind == j)), r(:, j));for q = 1:length(x)t = t + x(q);endendif (((dpr - t)/t) < e)break;elsedpr = t;endendend3.2.4函数testfunction finalmsg = test(testdir, n, code)for k = 1:n % read test sound file of each speaker file = sprintf('%ss%d.wav', testdir, k);[s, fs] = wavread(file);v = mfcc(s, fs); % 得到测试人语音的mel倒谱系数distmin = 4; %阈值设置处% 就判断一次,因为模板里面只有一个文件d = disteu(v, code{1}); %计算得到模板和要判断的声音之间的“距离”dist = sum(min(d,[],2)) / size(d,1); %变换得到一个距离的量%测试阈值数量级msgc = sprintf('与模板语音信号的差值为:%10f ', dist);disp(msgc);%此人匹配if dist <= distmin %一个阈值,小于阈值,则就是这个人。

相关文档
最新文档