matlab语音识别系统源代码版
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高级编程与工程应用实验二语音处理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的汉语数字语音识别系统

( 河南理工大学 电气学院 , 河南 焦作 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的人脸识别源程序

基于MATLA酌人脸识别源程序1•色彩空间转换function [r,g]=rgb_RGB(Ori_Face)R=0ri_Face(:,:,1);G=0ri_Face(:,:,2);B=Ori_Face(:,:,3);R1=im2double(R); % 将uint8 型转换成double型G1=im2double(G);B1=im2double(B);RGB=R1+G1+B1;row=size(Ori_Face, 1); %行像素column=size(Ori_Face,2); %列像素for i=1:rowfor j=1:columnrr(i,j)=R1(i,j)/RGB(i,j);gg(i,j)=G1(i,j)/RGB(i,j);endendrrr=mean(rr);r=mean(rrr);ggg=mean(gg);g=mean(ggg); 2•均值和协方差皮肤库\2・jpg');[r2,g2]=rgb_RGB(t2);皮肤库\3・jpg');[r3,g3]=rgb_RGB(t3);皮肤库\4・jpg');[r4,g4]=rgb_RGB(t4);皮肤库\5・jpg');[r5,g5]=rgb_RGB(t5);皮肤库\6・jpg');[r6,g6]=rgb_RGB(t6);皮肤库\7・jpg');[r7,g7]=rgb_RGB(t7);皮肤库\8・jpg');[r8,g8]=rgb_RGB(t8);皮肤库\9・jpg');[r9,g9]=rgb_RGB(t9);皮肤库\10・jpg');[r10,g10]=rgb_RGB(t10); 皮肤库\11・jpg');[r11,g11]=rgb_RGB(t11); 皮肤库\12・jpg');[r12,g12]=rgb_RGB(t12); 皮肤库\13・jpg');[r13,g13]=rgb_RGB(t13); 皮肤库\14・jpg');[r14,g14]=rgb_RGB(t14); 皮肤库\15・jpg');[r15,g15]=rgb_RGB(t15); 皮肤库\16・jpg');[r16,g16]=rgb_RGB(t16); 皮肤库\17・jpg');[r17,g17]=rgb_RGB(t17); 皮肤库\18・jpg');[r18,g18]=rgb_RGB(t18); 皮肤库\19・jpg');[r19,g19]=rgb_RGB(t19); 皮肤库\20・jpg');[r20,g20]=rgb_RGB(t20); 皮肤库\21・jpg');[r21,g21]=rgb_RGB(t21);皮肤库\24・jpg');[r24,g24]=rgb_RGB(t24);皮肤库\25・jpg');[r25,g25]=rgb_RGB(t25);皮肤库\26・jpg');[r26,g26]=rgb_RGB(t26);皮肤库\27・jpg');[r27,g27]=rgb_RGB(t27); r=cat(1,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18, r19,r20,r21,r22,r23,r24,r25,r26,r27);g=cat(1,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11,g12,g13,g14,g15,g16,g17,g1 8,g19,g20,g21,g22,g23,g24,g25,g26,g27);m=mean([r,g])n=cov([r,g])3•求质心function [xmean, ymean] = center(bw)bw=bwfill(bw,'holes');area = bwarea(bw);[m n] =size(bw);bw=double(bw);xmean =0; ymean = 0;for i=1:m,for j=1:n,xmean = xmean + j*bw(i,j);ymean = ymean + i*bw(i,j);end;end;if(area==0)xmean=0;ymean=0;elsexmean = xmean/area;ymean = ymean/area;xmean = round(xmean);ymean = round(ymean);end4.求偏转角度function [theta] = orient(bw,xmean,ymean) [m n] =size(bw); bw=double(bw);a = 0;b = 0;c = 0;for i=1:m,for j=1:n,a = a + (j - xmean)A2 * bw(i,j);b = b + (j - xmean) * (i - ymean) * bw(i,j);c = c + (i - ymean)A2 * bw(i,j);end;end;b = 2 * b;theta = atan(b/(a-c))/2;theta = theta*(180/pi); % 从幅度转换到角度5.找区域边界function [left, right, up, down] = bianjie(A)[m n] = size(A);left = -1;right = -1;up = -1;down = -1;for j=1:n,for i=1:m,if (A(i,j) ~= 0)left = j;break;end;end;if (left ~= -1) break;end;end;for j=n:-1:1,for i=1:m,if (A(i,j) ~= 0)right = j;break;end;end;if (right ~= -1) break; end;end;for i=1:m,for j=1:n,if (A(i,j) ~= 0)up = i;break;end;end;if (up ~= -1) break;end;end;for i=m:-1:1,for j=1:n,if (A(i,j) ~= 0)down = i;break;end;end;if (down ~= -1)break;end;end;6.求起始坐标function newcoord = checklimit(coord,maxval)newcoord = coord;if (newcoord<1)newcoord=1;end;if (newcoord>maxval)newcoord=maxval;end;7•模板匹配function [ccorr, mfit, RectCoord]mobanpipei(mult. frontalmodel,ly,wx,cx, cy, angle) frontalmodel=rgb2gray(frontalmodel);model_rot = imresize(frontalmodel,[ly wx],'bilinear'); % 调整模板大小model_rot = imrotate(model_rot,angle,'bilinear'); %旋转模板[l,r,u,d] = bianjie(model_rot); % 求边界坐标bwmodel_rot=imcrop(model_rot,[l u (r-l) (d-u)]); % 选择模板人脸区域[modx,mody] =center(bwmodel_rot); % 求质心[morig, norig] = size(bwmodel_rot);%产生一个覆盖了人脸模板的灰度图像mfit = zeros(size(mult));mfitbw = zeros(size(mult));[limy, limx] = size(mfit);%计算原图像中人脸模板的坐标startx = cx-modx;starty = cy-mody;endx = startx + norig-1;endy = starty + morig-1;startx = checklimit(startx,limx);starty = checklimit(starty,limy);endx = checklimit(endx,limx);endy = checklimit(endy,limy);for i=starty:endy,for j=startx:endx,mfit(i,j) = model_rot(i-starty+1,j-startx+1);end;end;ccorr = corr2(mfit,mult) % 计算相关度[l,r,u,d] = bianjie(bwmodel_rot);sx = startx+l;sy = starty+u;RectCoord = [sx sy (r-1) (d-u)]; % 产生矩形坐标8.主程序clear;[fname,pname]=uigetfile({'*・jpg';'* .bmp';'* ・tif';'* ・gif'},'Please choose a color picture・・・');%返回打开的图片名与图片路径名[u,v]=size(fname);y=fname(v); % 图片格式代表值switch ycase 0errordlg('You Should Load Image File First ・・・','Warning ・・・');case{'g';'G';'p';'P';'f';'F'}; % 图片格式若是JPG/jpg、BMP/bmp、TIF/tif 或者GIF/gif,才打开I=cat(2,pname,fname);Ori_Face=imread(l);subplot(2,3,1),imshow(Ori_Face);otherwiseerrordlg('You Should Load Image File First ・・・','Warning ・・・'); endR=Ori_Face(:,:,1);G=Ori_Face(:,:,2);B=Ori_Face(:,:,3);R1=im2double(R); % 将uint8 型转换成double型处理G1=im2double(G);B1=im2double(B);RGB=R1+G1+B1;m=[ 0・4144,0.3174]; % 均值n=[0・0031,-0・0004;-0・0004,0.0003]; % 方差row=size(Ori_Face,1); % 行像素数column=size(Ori_Face,2); % 列像素数for i=1:rowfor j=1:columnif RGB(i,j)==0rr(i,j)=0;gg(i,j)=0;elserr(i,j)=R1(i,j)/RGB(i,j);% rgb归一化gg(i,j)=G1(i,j)/RGB(i,j);x=[rr(i,j),gg(i,j)];p(i,j)=exp((-0・5)*(x-m)*inv(n)*(x-m)'); % 皮肤概率服从高斯分布endendendsubplot(2,3,2);imshow(p); % 显示皮肤灰度图像low_pass=1/9*ones(3);image_low=filter2(low_pass, p); % 低通滤波去噪声subplot(2,3,3);imshow(image」ow);%自适应阀值程序previousSkin2 = zeros(i,j);changelist =[];for threshold = 0・55:-0.1:0.05two_value = zeros(i,j);two_value(find(image_low>threshold)) = 1;change = sum(sum(two_value - previousSkin2));changelist = [changelist change];previousSkin2 = two_value;end[C, I] = min(changelist);optimalThreshold = (7-1)* 0.1two_value = zeros(i,j);two_value(find(image_low>optimalThreshold))= 1; %二值化subplot(2,3,4);imshow(two_value); % 显示二值图像我的照片人脸模板.jpg'); %读入人脸模板照片FaceCoord=[|;imsourcegray=rgb2gray(Ori_Face); % 将原照片转换为灰度图像[L,N]=bwlabel(two_value,8); % 标注二值图像中连接的部分丄为数据矩阵,N为颗粒的个数for i=1:N,[x,y]=find(bwlabel(two_value)==i); % 寻找矩阵中标号为i 的行和列的下标bwsegment = bwselect(two_value,y,x,8); % 选择出第i 个颗粒numholes = 1-bweuler(bwsegment,4); % 计算此区域的空洞数if (numholes >= 1) % 若此区域至少包含一个洞,则将其选出进行下一步运算RectCoord = -1;[m n] = size(bwsegment);[cx,cy]=center(bwsegment);%求此区域的质心bwnohole=bwfill(bwsegment,'holes'); % 将洞圭寸住(将灰度值赋为1)justface = uint8(double(bwnohole)・* double(imsourcegray));%只在原照片的灰度图像中保留该候选区域angle = orient(bwsegment,cx,cy); %求此区域的偏转角度bw = imrotate(bwsegment, angle, 'bilinear');bw = bwfill(bw,'holes');[l,r,u,d] =bianjie(bw);wx = (r - l +1); % 宽度ly = (d - u + 1); % 高度wratio = ly/wx % 高宽比if ((0 ・8v=wratio)&(wratiov=2))%如果目标区域的高度/宽度比例大于0・8且小于2.0,则将其选出进行下一步运算S=ly*wx; %计算包含此区域矩形的面积A=bwarea(bwsegment); %计算此区域面积if (A/S>0.35)[ccorr,mfit, RectCoord] =mobanpipei(justface,frontalmodel,ly,wx, cx,cy, angle);end if (ccorr>=0.6)mfitbw=(mfit>=1);invbw = xor(mfitbw,ones(size(mfitbw)));source_with_hole = uint8(double(invbw) double(imsourcegray));final_image = uint8(double(source_with_hole) double(mfit));subplot(2,3,5);imshow(final_image); % 显示覆盖了模板脸的灰度图像imsourcegray = final_image;subplot(2,3,6);imshow(Ori_Face); % 显示检测效果图end;if (RectCoord ~= -1)FaceCoord = [FaceCoord; RectCoord];endendendend%在认为是人脸的区域画矩形[numfaces x] = size(FaceCoord);for i=1:numfaces,hd = rectangle('Position',FaceCoord(i,:));set(hd, 'edgecolor', 'y');end人脸检测是人脸识别、人机交互、智能视觉监控等工作的前提。
基于 matlab 的人脸识别系统的设计与实现代码大全

基于matlab的人脸识别系统的设计与实现1.1题目的主要研究内容(1)工作的主要描述主要绍了人脸图像识别中所应用matlab对图像进行预处理,应用该工具箱对图像进行经典图像处理,通过实例来应用matlab图像处理功能,对某一特定的人脸图像处理,进而应用到人脸识别系统。
本文在总结分析人脸识别系统中几种常用的图像预处理方法基础上,利用matlab实现了一个集多种预处理方法于一体的通用的人脸图像预处理仿真系统,将该系统作为图像预处理模块可嵌入在人脸识别系统中,并利用灰度图像的直方图比对来实现人脸图像的识别判定。
其中涉及到图像的选取,脸部定位,特征提取,图像处理和识别几个过程。
人脸识别技术系统主要可分为四个组成部分,分别为人脸图像采集及检测、人脸图像预处理、人脸图像特征提取以及匹配与识别。
(2)系统流程图开始人脸图像采集及检测人脸图像预处理人脸图像特征提取匹配与识别结束1.2题目研究的工作基础或实验条件(1)硬件环境PC机(2)软件环境:matlab1.3数据集描述人脸图像采集:人脸图像信息都能通过摄像镜头采集记录下来,比如不同位置、不同表情、静态图像、动态图像等方面都能得到很好的采集。
当目标在采集设备拍摄的范围内时,采集设备会自动搜索并采集目标的人脸图像。
但摄取的图像可以是真人,也可以是人脸的图片或者为了相对简单,可以不考虑通过摄像头来摄取头像,而是直接给定要识别的图像;人脸检测:在实际中主要应用于人脸识别的预处理,即在采集到的图像中准确定位出人脸的位置。
人脸图像中包含的模式特征非常丰富,如模板特征、结构特征、直方图特征、颜色特征等。
人脸检测就是挑出这其中有用的特征信息,并利用这些特征来实现人脸识别。
在本次的模式识别系统的设计中,选取的图片都是大小相等的,其尺寸为180mm*200mm,方便于系统的识别,定位人脸的位置和面部的器官。
在测试集中选取了10张图片,训练集中选取了20张图片,利用matlab软件进行人脸识别,匹配两张相同的图片。
MATLAB下的基于HMM模型的语音识别技术的实现

M ATL AB 下 的 基 于 HM M 模 型 的 语 音 识 别 技 术 的 实 现
The R e i a i n fSpee alz t o o ch Rec ognii ton Technol ogy Ba ed s on M M n A TLA B H i M
CL n C umbe : 39 r TP 1
Doc ume ntc de: o A
Ari I 1 3 tde D: 00 -01 ( 01 4 01 -0 07 2 1 —0 7 3
1引言
语音识别技术 为人们提供一种 更 便 的人机界面 , 使人与 计算机之间 、 人与人之间的通信更加方便 、 。随着对语音识 快捷
2语音 识 别 技 术概 述
语 音识 别 属 于 模 式识 别 范 畴 ,它 与 人 的 认 知 过 程 一 样 , 其 过 程 分 为训 练 和 识 别 两 个 阶段 。 在 训 练 阶 段 , 音 识 别 系统 对 语
输入 的语音信号进行学习。学 习结 束后 , 把学 习内容组成语 音
模 型 库 存 储 起 来 ; 识 别 阶段 , 据 当前 输 入 的待 识 别 语 音 信 在 根 号, 在语 音模 型 库 中查 找 相 应 的词 义 或 语 义 。
别 技 术 深入 的研 究 , 已经 发展 成 为 一 门跨 越 多 领 域 的 综 合 学 它 科, 它 声 学 、 言 学 、 理 学 、 号 处 理 、 T 智 能 、 式 识 别 、 语 心 信 人 模
词条 的统计模 型 , 然后从待识别语音信 号中提取特征 , 与这些
模 型 进行 配 , 过 比较 匹配 分 数 以获 得 识 别 结果 。通 过 大 量 通 的语 音 , 能 够 获 得 一 个 稳 健 的统 计 模 型 , 够 适 应 实 际 语 音 就 能
matlab语音识别系统(源代码)最新版

具体实现过程如下:
1.取提取出来的所有帧的特征矢量的型心(均值)作为第一个码字矢量Bio
2.将当前的码本Bm根据以下规则分裂,形成2m个码字。
BmBm(l)
Bm Bra(1 )
(4)
其中m从1变化到当前的码本的码字数,e是分裂时的参数,本文e =0.01
3.根据得到的码本把所有的训练序列(特征矢量)进行分类,然后按照下面两
Xa (k) X (n) e s 0 k N 1 (1)
nl
其中式中x(n)为输入的语音信号,N表示傅立叶变换的点数。
2•再求频谱幅度的平方,得到能量谱。
3.
器组。
我们定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤 波器为三角滤波器,
4.计算每个滤波器组输出的对数能量。
XI
mat I ab语音识别系统(源代 码)
最新版
冃录
一、设计任务及要求
二、语音识别的简单介绍
语者识别的概念
特征参数的提取
用矢量量化聚类法生成码本
2.1
2.2
2.3
.4
3.2
代码说明
3.2.1
函数mfcc■-
3.2.2
函数disteu
3.2.3
函数vqlbg
3.2.4函数test-
3.2.5函数testDB
k = 16;%number of centroids required
for i = l:n%对数据库中的代码形成码本
file=sprintfC%ss%d. wav*, traindir, i) ; disp(file);
[s, fs] = wavread(file):v二mfee(s, fs): %
基于MATLAB的特定人语音识别软件开发与设计

基于MATLAB的特定人语音识别软件开发与设计本文将详细介绍基于MATLAB的特定人语音识别软件的开发与设计,从数据采集、数据预处理、特征提取、训练模型以及测试评估等方面进行介绍。
同时,本文还会对该软件的实时性、准确性、稳定性进行分析并进行改进优化。
一、数据采集数据采集是语音识别系统开发的第一步,也是最为关键的一步。
采集到的数据质量将直接影响后续的预处理、特征提取以及模型训练。
在采集数据时,应该尽可能保证采集设备的统一性,以便后续的数据处理与模型训练。
同时,采集的语音数据应具有较高的覆盖率和多样性,以便让模型具有更好的泛化能力。
二、数据预处理在数据预处理阶段,需要对采集到的语音数据进行一系列的预处理操作,例如去除背景噪音、去除重复数据、平衡数据分布等。
这些操作有助于提高预处理的效果,从而提高后续的特征提取以及模型训练的准确度。
三、特征提取特征提取是语音识别系统中最为复杂的一步,其目的是将原始的语音信号转化为易于处理的数学特征。
在特征提取中,需要使用一些特征提取算法,例如短时傅里叶变换、梅尔倒谱系数、线性预测系数等。
这些算法可以大大减少语音信号的冗余信息,提取出信号的主要特征,从而提高模型的分类准确度。
四、训练模型在模型训练中,需要选择适当的模型算法以及调整算法的超参数。
在语音识别中,常用的模型算法有隐马尔可夫模型、深度神经网络、循环神经网络等。
训练模型的过程中,需要使用一些评估指标,例如准确率、召回率、F1值等,以评估模型的优劣。
同时,在训练过程中,需要使用一些技巧,例如交叉验证、正则化、学习率衰减等,以优化模型的泛化能力。
五、测试评估在模型训练完成后,需要使用测试数据对模型进行评估。
在测试评估中,需要使用一些评估指标,例如准确率、召回率、误判率等,以评估模型的性能。
同时,还需要针对测试结果进行分析,从而找出模型存在的问题并进行改进优化。
六、实时性、准确性、稳定性改进优化在实际应用中,需要保证语音识别系统的实时性、准确性以及稳定性,否则无法满足用户需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、设计任务及要求 (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语音是人的自然语者识别就是根据说话人的语音信号来判别说话人的身份。
每个人的属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可如语音是人的固有的特征,能。
用语音来鉴别说话人的身份有着许多独特的优点,利用电话网络还可实系统设备成本低;不会丢失或遗忘;语音信号的采集方便,现远程客户服务等。
因此,近几年来,说话人识别越来越多的受到人们的重视。
说话人识别不仅使用方便,手形识别等相比较,与其他生物识别技术如指纹识别、而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。
因此,说话人识别的应用前景非常广泛:不同领域中的进步都对说今天,说话人识别技术已经关系到多学科的研究领域,话人识别的发展做出了贡献。
说话人识别技术是集声学、语言学、计算机、信息在吃力语音应用需求将十分广阔。
处理和人工智能等诸多领域的一项综合技术,语音信号的特征参数的好坏直信号的时候如何提取信号中关键的成分尤为重要。
接导致了辨别的准确性。
12.2特征参数的提取对于特征参数的选取,我们使用mfcc的方法来提取。
MFCC参数是基于人的听觉特性利用人听觉的屏蔽效应,在Mel标度频率域提取出来的倒谱特征参数。
MFCC参数的提取过程如下:1. 对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱分布信息。
设语音信号的DFT为:?nkj21N???(1)1?x(n)e?,0?k?NX(k)Na1n?其中式中x(n)为输入的语音信号,N表示傅立叶变换的点数。
2. 再求频谱幅度的平方,得到能量谱。
尺度的三角形滤波器组。
3. 将能量谱通过一组Mel我们定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),M,··采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,3,·本系统取M=100。
4. 计算每个滤波器组输出的对数能量。
N?1?2(k)),X(k)|S(m)?ln(H|ma(2)1?k0?m?M?1其中为三角滤波器的频率响应。
(k)H m5. 经过离散弦变换(DCT)得到MFCC系数。
M?1??n(m?0.5/(m)cos(m)),(3)C(n)?S0?m1??N0?n MFCC系数个数通常取20—30,常常不用0阶倒谱系数,因为它反映的是频谱能量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取20阶倒谱系数。
2.3用矢量量化聚类法生成码本我们将每个待识的说话人看作是一个信源,用一个码本来表征。
码本是从该说话人的训练序列中提取的MFCC特征矢量聚类而生成。
只要训练的序列足够长,可认为这个码本有效地包含了说话人的个人特征,而与讲话的内容无关。
X(k?1,2,???,K)为训练序本系统采用基于分裂的LBG码本,的算法设计VQ k列,B 为码本。
具体实现过程如下:1. 取提取出来的所有帧的特征矢量的型心(均值)作为第一个码字矢量B1。
2. 将当前的码本Bm根据以下规则分裂,形成2m个码字。
2??)?(1B?B mm(4){??)1?B?B(mm其中m从1变化到当前的码本的码字数,ε是分裂时的参数,本文ε=0.01。
3. 根据得到的码本把所有的训练序列(特征矢量)进行分类,然后按照下面[n]D 以及相对失真(n为迭代次数,两个公式计算训练矢量量化失真量的总和初始[?1]=∞,B为当前的码书)n=0,,若相对失真小于某一阈值ε,迭代结束,当前D的码书就是设计好的2m个码字的码书,转5。
否则,转下一步。
量化失真量和:K?)n()(5),BDd(?X min k1?k相对失真:(n?1)n DD?||(6)n D 4. 重新计算各个区域的新型心,得到新的码书,转3。
5. 重复2,3和4步,直到形成有M个码字的码书(M是所要求的码字数),其中D0=10000。
2.4 VQ的说话人识别设是未知的说话人的特征矢量共有T帧是训练阶段形成的码书,,},,X{X T1表示码书第m个码字,每一个码书有M个码字。
再计算测试者的平均量化失真D,并设置一个阈值,若D小于此阈值,则是原训练者,反之则认为不是原训练者。
d(x,B)? 7)(]DT min[?1/mj1?j1?m?M三、算法程序分析在具体的实现过程当中,采用了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尺度的三角形滤波器组。
33.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:P4d(:,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); %变换得到一个距离的量5%测试阈值数量级msgc = sprintf('与模板语音信号的差值为:_x0010_f ', dist);disp(msgc);%此人匹配if dist <= distmin %一个阈值,小于阈值,则就是这个人。