matlab语音识别系统(源代码)最新版

合集下载

语音识别课程设计matlab

语音识别课程设计matlab

语音识别课程设计 matlab一、教学目标本课程的教学目标是使学生掌握语音识别的基本原理和MATLAB实现方法,培养学生运用语音识别技术解决实际问题的能力。

具体目标如下:1.知识目标:–了解语音识别的基本概念、发展历程和应用领域;–掌握语音信号处理的基本方法和MATLAB编程技巧;–理解语音特征提取、模式匹配和声学模型等关键技术;–熟悉常用的语音识别算法和MATLAB工具箱。

2.技能目标:–能够运用MATLAB进行语音信号的预处理、特征提取和识别;–具备搭建简单的语音识别系统的能力;–学会分析语音识别过程中的误差和优化方法;–能够阅读和理解相关的英文文献。

3.情感态度价值观目标:–培养学生对语音识别技术的兴趣和好奇心,激发创新精神;–培养学生团队合作意识和沟通交流能力;–使学生认识到语音识别技术在现实生活中的重要性和潜在价值。

二、教学内容本课程的教学内容主要包括以下几个部分:1.语音识别概述:介绍语音识别的定义、发展历程、应用领域和挑战;2.语音信号处理:讲解语音信号的预处理方法,如滤波、端点检测、语音增强等;3.语音特征提取:学习基于MATLAB的语音特征提取方法,如MFCC、PLP等;4.模式匹配与声学模型:探讨模板匹配、高斯混合模型和神经网络等声学模型;5.语音识别算法:介绍隐马尔可夫模型(HMM)、支持向量机(SVM)、深度学习等算法;6.MATLAB语音识别工具箱:学习MATLAB内置的语音识别工具箱,如HTK、SPTK等;7.实践项目:完成一个基于MATLAB的简单语音识别系统的设计和实现。

三、教学方法本课程采用多种教学方法相结合的方式,包括:1.讲授法:讲解基本概念、原理和方法,为学生提供系统的知识结构;2.案例分析法:分析典型的语音识别应用案例,使学生更好地理解实际应用;3.实验法:通过实验操作,让学生亲手实践,培养实际操作能力和问题解决能力;4.讨论法:学生进行小组讨论,激发创新思维和团队合作意识。

MATLAB在语音识别中的应用

MATLAB在语音识别中的应用

1.基于GUI的音频采集处理系统注:本实验是对“东、北、大、学、中、荷、学、院”孤立文字的识别!首先是GUI的建立,拖动所需控件,双击控件,修改控件的参数;主要有string Tag(这个是回调函数的依据),其中还有些参数如valuestyle也是需要注意的,这个在实际操作中不能忽视。

这里需要给说明一下:图中所示按钮都是在一个按钮组里面,都属于按钮组的子控件。

所以在添加回调函数时,是在按钮组里面添加的,也就是说右击三个按钮外面的边框,选择View Callback——SelectionChange,则在主函数中显示该按钮的回调函数:function uipanel1_SelectionChangeFcn(hObject,eventdata,handles)以第一个按钮“录音”为例讲解代码;下面是“播放”和“保存”的代码:以上就是语音采集的全部代码。

程序运行后就会出现这样的界面:点击录音按钮,录音结束后就会出现相应波形:点击保存,完成声音的保存,保存格式为.wav。

这就完成了声音的采集。

2.声音的处理与识别2.1打开文件语音处理首先要先打开一个后缀为.wav的文件,这里用到的不是按钮组,而是独立的按钮,按钮“打开”的回调函数如下:function pushbutton1_Callback(hObject,eventdata,handles)其中pushbutton1是“打开”按钮的Tag.在回调函数下添加如下代码:运行结果如图:2.2预处理回调函数如下:function pushbutton2_Callback(hObject,eventdata,handles)运行结果如图:2.3短时能量短时能量下的回调函数:function pushbutton3_Callback(hObject,eventdata,handles)其回调函数下的代码是:2.4端点检测这里要先声明一点,为了避免在以后的函数调用中,不能使用前面的变量,所以其实后面的函数都包含了前面的部分。

MATLAB-高级编程与工程应用-人脸识别-实验报告+源代码

MATLAB-高级编程与工程应用-人脸识别-实验报告+源代码

MATLAB高级编程与工程应用实验四图像处理第一章基础知识1、MATLAB 提供了图像处理工具箱,在命令窗口输入help images 可查看该工具箱内的所有函数。

请阅读并大致了解这些函数的基本功能。

大致了解。

2、利用MATLAB 提供的Image file I/O 函数分别完成以下处理:(a)以测试图像的中心为圆心,图像的长和宽中较小值的一半为半径画一个红颜色的圆;分析:直接利用半径条件,满足条件的点将红色元素置为255,绿色和蓝色元素置为0,于是得到如下图像:源代码:load('hall_color.mat');%首先获得三原数组R = hall_color(:,:,1);G = hall_color(:,:,2);B = hall_color(:,:,3);%将圆上的点改为红色for i = 1:120for j = 1:168a = abs(i - 60.5);b = abs(j - 84.5);d = sqrt(a ^ 2 + b ^ 2);if(abs(d - 60) < 0.5)R(i,j) = 255;G(i,j) = 0;B(i,j) = 0;endendend%生成新的矩阵hall_color1(:,:,1) = R;hall_color1(:,:,2) = G;hall_color1(:,:,3) = B;imshow(hall_color1);(b)将测试图像涂成国际象棋状的“黑白格”的样子,其中“黑”即黑色,“白”则意味着保留原图。

用一种看图软件浏览上述两个图,看是否达到了目标。

分析:首先设置标记flag在进行循环,对不同方格实行颜色更改就行。

效果:源代码:clear all;load('hall_color.mat');R = hall_color(:,:,1);G = hall_color(:,:,2);B = hall_color(:,:,3);flag = 1;for i = 1:8flag = mod((flag + 1),2);for j = 1:8if(flag == 1)for m = 15*(i - 1) + 1:15*ifor n = 21*(j - 1) + 1:21*jR(m,n) = 0;G(m,n) = 0;B(m,n) = 0;endendendflag = mod((flag + 1),2);endendword格式-可编辑-感谢下载支持hall_color1(:,:,1) = R;hall_color1(:,:,2) = G;hall_color1(:,:,3) = B;imshow(hall_color1);用看图软件打开成功:第二章图像压缩编码1、图像的预处理是将每个像素灰度值减去128 ,这个步骤是否可以在变换域进行?请在测试图像中截取一块验证你的结论。

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 高级编程与工程应用 语音处理 实验报告+源代码

清华大学电子工程系MATLAB高级编程与工程应用实验二语音处理1.2.1(1)给定e(n) 假设e(n) 是输入信号,s(n) 是输出信号,上述滤波器的传递函数是什么?如果a1 = 1.3789,a2 = 0.9506 ,上述合成模型的共振峰频率是多少?用zplane ,freqz ,impz 分别绘出零极点图,频率响应和单位样值响应。

用filter 绘出单位样值响应,比较和impz 的是否相同。

分析:上述滤波器的传递函数是:H=11−1.3789z−1+0.9506z−2可以求出传递函数的极点为p = 0.6895 ±0.6894 i由此可以计算出模拟频率为Ω = pi/4,又因为T = 1/8000s,则可以得到共振峰频率f = 1000Hz。

使用zplane函数画出零极点图如下:使用freqz函数画出频率响应如下:使用impz函数画出单位样值响应如下:最后使用filter函数画出其单位样值响应如下:编写文件sounds_2_1.m,画出所有图像如下,可以直接比较filter函数和impz函数画出的单位样值响应几乎是一模一样的:sounds_2_1.m:clear;clc;close all;b = 1;a = [1,-1.3789,0.9506];n = [0:1:50];freqz(b,a); %画出频率响应图figure; %新建画布subplot(3,1,1);zplane(b,a); %画出零极点图subplot(3,1,2);impz(b,a,n); %利用impz函数画出单位样值响应subplot(3,1,3);x = (n == 0);stem(n,filter(b,a,x)); %利用filter函数画出单位样值响应(3)运行该程序到27 帧时停住,用(1)中的方法观察零极点图。

添加代码如下:运行程序得到零极点图如下:(4) 在循环中添加程序:对每帧语音信号s(n) 和预测模型系数fa i g ,用filter 计算激励信号e(n) 。

如何使用MATLAB进行语音信号处理与识别

如何使用MATLAB进行语音信号处理与识别

如何使用MATLAB进行语音信号处理与识别引言:语音信号处理与识别是一项应用广泛的领域,它在语音通信、语音识别、音频压缩等方面发挥着重要作用。

在本文中,我们将介绍如何使用MATLAB进行语音信号处理与识别。

首先,我们将讨论语音信号的特征提取,然后介绍常用的语音信号处理方法,最后简要概述语音信号的识别技术。

一、语音信号的特征提取语音信号的特征提取是语音信号处理与识别的重要一环。

在MATLAB中,我们可以通过计算音频信号的频谱特征、时域特征以及声学特征等方式来进行特征提取。

其中,最常见的特征提取方法是基于傅里叶变换的频谱分析方法,比如短时傅里叶变换(STFT)和梅尔频谱倒谱系数(MFCC)。

1. 频谱特征:频谱特征主要包括功率谱密度(PSD)、频谱包络、谱熵等。

在MATLAB中,我们可以使用fft函数来计算信号的频谱,使用pwelch函数来计算功率谱密度,使用spectrogram函数来绘制语谱图等。

2. 时域特征:时域特征主要包括幅度特征、能量特征、过零率等。

在MATLAB中,我们可以使用abs函数来计算信号的幅度谱,使用energy函数来计算信号的能量,使用zcr函数来计算信号的过零率等。

3. 声学特征:声学特征主要包括基频、共振频率等。

在MATLAB中,我们可以通过自相关函数和Cepstral分析等方法来计算声学特征。

二、语音信号处理方法语音信号处理方法主要包括降噪、去除回声、语音增强等。

在MATLAB中,我们可以通过滤波器设计、自适应噪声抑制和频谱减法等方法来实现这些功能。

1. 降噪:降噪通常包括噪声估计和降噪滤波两个步骤。

在MATLAB中,我们可以使用统计模型来估计噪声,然后使用Wiener滤波器或者小波阈值法来降噪。

2. 去除回声:回声是语音通信中的常见问题,我们可以使用自适应滤波器来抑制回声。

在MATLAB中,我们可以使用LMS算法或者NLMS算法来实现自适应滤波。

3. 语音增强:语音增强通常包括增加语音信号的声音清晰度和提高语音的信噪比。

语音识别的matlab实现

语音识别的matlab实现

语音识别的MATLAB实现声控小车结题报告小组成员:关世勇吴庆林一、项目要求:声控小车是科大华为科技制作竞赛命题组的项目,其要求是编写一个语言识别程序并适当改装一个小型机动车,使之在一个预先不知道具体形状的跑道上完全由声控来完成行驶比赛。

跑道上可以有坡面,坑,障碍等多种不利条件,小车既要具有较快的速度,也要同时具有较强的灵活性,能够克服上述条件。

二、项目分析:由于小车只要求完成跑道上的声控行驶,所以我们可以使用简单的单音命令来操作,如“前”、“后”、“左”、“右”等。

由于路面有各种不利条件,而且规则要求小车尽可能不越过边线,这就决定了我们的小车不能以较高的速度进行长时间的快速行驶。

所以我们必须控制小车的速度和行进距离。

由于外界存在噪声干扰,所以我们必须对噪声进行处理以减小其影响。

鉴于上诉各种要求,我们决定对购买的遥控小车进行简单改造,使用PC机已有的硬件条件编写软件来完成语音的输入,采集,处理和识别,以实现对小车的控制。

三、解决思路与模块:整个程序大致可划分为三个模块,其结构框图如下图所示:整个程序我们在Visual C++ 环境下编写。

四、各模块的实现:1 声音的采集:将声音信号送入计算机,我们利用了声卡录音的低层操作技术,即对winmm.lib进行API调用。

具体编程时这一部分被写在一个类中(Soundin类)。

在构造函数中设定包括最大采样率(11025),数据缓存(作为程序一次性读入的数据,2048),声卡本身所带的一些影响采样数据等的各种参数;调用API函数waveInGetNumDevs(返回UNIT,参数为空)检察并打开声音输入设备,即声卡;并进而使用waveInGetDevCaps得到声卡的容量(在waveInCaps中存有该数据,对其进行地址引用,从DWORD dwFormats得到最大采样率、声道数和采样位);创建一个叫WaveInThreadEvent的事件对象,并赋予一个Handle,叫m_WaveInEvent,开始利用线程指针m_WaveInThread调用自定义的线程WaveInThreadProc;对结构WAVEFORMATEX中WaveInOpen开始提供录音设备。

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

matlab语音识别系统(源代码)最新版目录一、设计任务及要求 (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 ,共有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 %一个阈值,小于阈值,则就是这个人。

相关文档
最新文档