欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PDF文档下载
     

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

    • 资源ID:4972150       资源大小:855.13KB        全文页数:18页
    • 资源格式: PDF        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    目录 一、设计任务及要求1 二、语音识别的简单介绍 2.1 语者识别的概念2 2.2特征参数的提取3 2.3用矢量量化聚类法生成码本3 2.4VQ 的说话人识别4 三、算法程序分析 3.1 函数关系.4 3.2代码说明5 3.2.1函数 mfcc5 3.2.2函数 disteu 5 3.2.3函数 vqlbg .6 3.2.4 函数 test 6 3.2.5 函数 testDB7 3.2.6 函数 train 8 3.2.7函数 melfb 8 四、演示分析.9 五、心得体会.11 附:GUI 程序代码12 1 一、设计任务及要求 用 MATLAB 实现简单的语音识别功能; 具体设计要求如下: 用 MATLAB 实现简单的数字 19 的语音识别功能。 二、语音识别的简单介绍 基于 VQ的说话人识别系统,矢量量化起着双重作用。在训练阶段,把每一个 说话者所提取的特征参数进行分类,产生不同码字所组成的码本。 在识别 (匹配) 阶段,我们用 VQ方法计算平均失真测度 ( 本系统在计算距离d 时,采用欧氏距离 测度) ,从而判断说话人是谁。 语音识别系统结构框图如图1 所示。 图 1 语音识别系统结构框图 2.1 语者识别的概念 语者识别就是根据说话人的语音信号来判别说话人的身份。语音是人的自然 属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的 语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可 能。 用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征, 不会丢失或遗忘; 语音信号的采集方便, 系统设备成本低; 利用电话网络还可实 现远程客户服务等。因此,近几年来,说话人识别越来越多的受到人们的重视。 与其他生物识别技术如指纹识别、 手形识别等相比较, 说话人识别不仅使用方便, 而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中, 是唯一可以用作远程验证的识别技术。因此,说话人识别的应用前景非常广泛: 今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说 话人识别的发展做出了贡献。说话人识别技术是集声学、语言学、计算机、信息 处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。 在吃力语音 信号的时候如何提取信号中关键的成分尤为重要。语音信号的特征参数的好坏直 接导致了辨别的准确性。 2 2.2 特征参数的提取 对于特征参数的选取,我们使用mfcc 的方法来提取。 MFCC 参数是基于人的 听觉特性利用人听觉的屏蔽效应,在Mel 标度频率域提取出来的倒谱特征参数。 MFCC 参数的提取过程如下: 1. 对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱 分布信息。 设语音信号的 DFT为: 10 ,)()( 1 1 2 NkenxkX N n N nkj a (1) 其中式中 x(n) 为输入的语音信号, N表示傅立叶变换的点数。 2. 再求频谱幅度的平方,得到能量谱。 3. 将能量谱通过一组Mel尺度的三角形滤波器组。 我们定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近), 采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,3,· · · ,M 本系统取 M=100 。 4. 计算每个滤波器组输出的对数能量。 N 1 2 am k1 S(m)ln(|(k) | H(k), 0mM1 X (2) 其中 m H (k) 为三角滤波器的频率响应。 5. 经过离散弦变换( DCT )得到 MFCC 系数。 1 0 C(n)()cos(0.5/),(3) 01 M m Smn mm nN MFCC 系数个数通常取 2030,常常不用 0 阶倒谱系数, 因为它反映的是频谱能 量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取 20 阶倒谱系数。 2.3 用矢量量化聚类法生成码本 我们将每个待识的说话人看作是一个信源,用一个码本来表征。码本是从该 说话人的训练序列中提取的MFCC 特征矢量聚类而生成。 只要训练的序列足够长, 可认为这个码本有效地包含了说话人的个人特征,而与讲话的内容无关。 本系统采用基于分裂的LBG的算法设计 VQ码本,(1,2,) k XkK 为训练序 列,B为码本。 具体实现过程如下: 1. 取提取出来的所有帧的特征矢量的型心(均值) 作为第一个码字矢量 B1。 2. 将当前的码本 Bm 根据以下规则分裂,形成 2m 个码字。 3 )1( )1( mm mm BB BB (4) 其中 m从 1 变化到当前的码本的码字数,是分裂时的参数,本文 =0.01。 3. 根据得到的码本把所有的训练序列( 特征矢量 ) 进行分类,然后按照下面 两个公式计算训练矢量量化失真量的总和 n D以及相对失真 (n为迭代次数, 初始 n=0, 1 D=,B为当前的码书 ) ,若相对失真小于某一阈值 ,迭代结束,当前 的码书就是设计好的 2m 个码字的码书,转。否则,转下一步。 量化失真量和: ( ) 1 min(,) K n k k Dd XB(5) 相对失真: (1) | nn n DD D (6) 4. 重新计算各个区域的新型心,得到新的码书,转3。 5. 重复 , 和步, 直到形成有 M个码字的码书 (M 是所要求的码字数 ) , 其中 D0=10000 。 2.4 VQ 的说话人识别 设是未知的说话人的特征矢量 1 , T XX, 共有 T帧是训练阶段形成的码书, 表示码书第 m个码字,每一个码书有 M个码字。再计算测试者的平均量化失真D, 并设置一个阈值,若D小于此阈值,则是原训练者,反之则认为不是原训练者。 1 1 min/1 ),( j Mm mj TD Bxd (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 尺度的三角形滤波器组。 4 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:n for j = 1:nbFrame M(i, j) = s(j - 1) * m) + i); %对矩阵 M赋值 end end h = hamming(n); %加 hamming 窗,以增加音框左端和右端的连续性 M2 = diag(h) * M; for i = 1:nbFrame frame(:,i) = fft(M2(:, i); %对信号进行快速傅里叶变换FFT end t = 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('不匹配! ') % 两个音频时间长度不相等 end d = zeros(N, P); if (N distmin msg = sprintf('第%d位说话者与模板语音信号不匹配, 不符合要 求!n', k); finalmsg = ' 此位说话者不符合要求 !' % 界面显示语句,可随意 设定 disp(msg); end end 3.2.5 函数 testDB 这个函数实际上是对数据库一个查询, 根据测试者的声音 , 找相应的文件 , 并且给 出是谁的提示 function testmsg = testDB(testdir, n, code) nameList='1','2','3','4','5','6','7','8','9' ; % 这个是我们要识别的 9个数 for k = 1:n % 数据库中每一个说话人的特征 file = sprintf('%ss%d.wav', testdir, k); % 找出文件的路径 s, fs = wavread(file); v = mfcc(s, fs); % 对找到的文件取 mfcc变换 distmin = inf; k1 = 0; for l = 1:length(code) d = disteu(v, codel); dist = sum(min(d,2) / size(d,1); if dist distmin distmin = dist;%这里和 test 函数里面一样但多了一个具体语 者的识别 7 k1 = l; end end msg=nameListk1 msgbox(msg); end 3.2.6 函数 train - 该函数就是对音频进行训练,也就是提取特征参数 function code = train(traindir, n) k = 16; % number of centroids required for i = 1:n % 对数据库中的代码形成码本 file = sprintf('%ss%d.wav', traindir, i); disp(file); s, fs = wavread(file); v = mfcc(s, fs); % 计算 MFCC's 提取特征特征,返回值是 Mel 倒谱系数,是一个log 的 dct 得到的 codei = vqlbg(v, k); % 训练 VQ码本通过矢量量化,得到原说 话人的 VQ码本 end 3.2.7 函数 melfb - 确定矩阵的滤波器 function m = melfb(p, n, fs) f0 = 700 / fs; fn2 = floor(n/2); lr = log(1 + 0.5/f0) / (p+1); % convert to fft bin numbers with 0 for DC term bl = n * (f0 * (exp(0 1 p p+1 * lr) - 1); 直接转换为 FFT的数字模型 b1 = floor(bl(1) + 1; b2 = ceil(bl(2); b3 = floor(bl(3); b4 = min(fn2, ceil(bl(4) - 1; pf = log(1 + (b1:b4)/n/f0) / lr; fp = floor(pf); pm = pf - fp; r = fp(b2:b4) 1+fp(1:b3); c = b2:b4 1:b3 + 1; v = 2 * 1-pm(b2:b4) pm(1:b3); m = sparse(r, c, v, p, 1+fn2); 8 四、演示分析 我们的功能分为两部分 : 对已经保存的9 个数字的语音进行辨别和实时的 判断说话人说的是否为一个数. 在前者的实验过程中 , 先把 9 个数字的声音保存 成 wav的格式 , 放在一个文件夹中 , 作为一个检测的数据库 . 然后对检测者实行识 别, 系统给出提示是哪个数字. 在第二个功能中 , 实时的录取一段说话人的声音作为模板, 提取 mfcc 特征 参数, 随后紧接着进行遇着识别 , 也就是让其他人再说相同的话, 看是否是原说话 者. 实验过程及具体功能如下 : 先打开 Matlab 使 Current Directory为录音及程序所所在的文件夹 再打开文件“ enter .m”,点 run 运行,打开 enter 界面,点击“进入”按 钮进入系统。(注:文件包未封装完毕,目前只能通过此方式打开运行。) (如下 图 figure1 ) figure1 9 在对数据库中已有的语者进行识别模块: 选择载入语音库语音个数; 点击语音库录制模版进行已存语音信息的提取; 点击录音 -test进行现场录音; 点击语者判断进行判断数字,并显示出来。 在实时语者识别模块 : 点击实时录制模板上的“录音-train”按钮 , 是把新语者的声音以wav格 式存放在”实时模板”文件夹中, 接着点击“实时录制模板” ,把新的模板提取 特征值。随后点击实时语者识别模板上的“录音-train”按钮 , 是把语者的声音 以 wav格式存放在”测试”文件夹中, 再点击“实时语者识别”,在对测得的声音 提取特征值的同时,和实时模板进行比对,然后得出是否是实时模板中的语者。 另外面板上的播放按钮都是播放相对应左边录取的声音。 想要测量多次,只要接着录音,自动保存,然后程序比对音频就可以。 退出只要点击菜单File/Exit,退出程序。 10 程序运行截图: (fig.2 )运行后系统界面 五、心得体会 实验表明,该系统能较好地进行语音的识别, 同时,基于矢量量化技术( )的语音识别系统具有分类准确,存储数据少, 实时响应速度快等综合性能好 的特点 矢量量化技术在语音识别的应用方面,尤其是在孤立词语音识别系统中得到 很好的应用,特别是有限状态矢量量化技术,对于语音识别更为有效。 通过这次课程设计,我对语音识别有了更加形象化的认识,也强化了MATLAB 的应用,对将来的学习奠定了基础。 11 附:GUI 程序代码 function varargout = untitled2(varargin) % UNTITLED2 M-file for untitled2.fig % UNTITLED2, by itself, creates a new UNTITLED2 or raises the existing % singleton*. % % H = UNTITLED2 returns the handle to a new UNTITLED2 or the handle to % the existing singleton*. % % UNTITLED2('CALLBACK',hObject,eventData,handles,.) calls the local % function named CALLBACK in UNTITLED2.M with the given input arguments. % % UNTITLED2('Property','Value',.) creates a new UNTITLED2 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before untitled2_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to untitled2_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose “GUI allows only one % instance to run (singleton)“. % % See also: GUIDE, GUIDATA, GUIHANDLES % Copyright 2002-2003 The MathWorks, Inc. % Edit the above text to modify the response to help untitled2 % Last Modified by GUIDE v2.5 08-Jun-2010 23:58:57 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', untitled2_OpeningFcn, . 'gui_OutputFcn', untitled2_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', ); 12 if nargin end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end % End initialization code - DO NOT EDIT % - Executes just before untitled2 is made visible. function untitled2_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to untitled2 (see VARARGIN) % Choose default command line output for untitled2 handles.output = hObject; % Update handles structure guidata(hObject, handles); axes(findobj('tag', 'axes13'); imshow('3.jpg'); axes(findobj('tag', 'axes12'); imshow('1.jpg'); % UIWAIT makes untitled2 wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line. function varargout = untitled2_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout1 = handles.output; % - Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Channel_Str=get(handles.popupmenu3,'String'); Channel_Number=str2double(Channel_Strget(handles.popupmenu3,'Value') ); global moodle; moodle = train(' 模版 ',Channel_Number) %? y?óó ?ò?DD ìáè ?±? 13 % - Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handglobal data1; global moodle ; test(' 测试 ',1,moodle)% êê±ó ?ò?ì2a % - function Open_Callback(hObject, eventdata, handles) % hObject handle to Open (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) filename,pathname=uigetfile('') file=get(handles.edits,filename,pathname) y,f,b=wavread(file); % - function Exit_Callback(hObject, eventdata, handles) % hObject handle to Exit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) exit % - function About_Callback(hObject, eventdata, handles) % hObject handle to About (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) H= ' 语者识别 ' helpdlg(H,'help text') % - function File_Callback(hObject, eventdata, handles) % hObject handle to File (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - function Edit_Callback(hObject, eventdata, handles) % hObject handle to Edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % 14 - function Help_Callback(hObject, eventdata, handles) % hObject handle to Help (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) msg= ' 请速度录音 ?' msgbox(msg) clear global data1; %global dataDN1; AI = analoginput('winsound'); chan = addchannel(AI,1:2); duration = 3; %1 second acquisition set(AI,'SampleRate',8000) ActualRate = get(AI,'SampleRate'); set(AI,'SamplesPerTrigger',duration*ActualRate) set(AI,'TriggerType', 'Manual') blocksize = get(AI,'SamplesPerTrigger'); Fs = ActualRate; start(AI) trigger(AI) data1,time,abstime,events = getdata(AI); fname=sprintf('E:Matlab语音识别系统实时模版 s1.wav') %dataDN1=wden(data1,'heursure','s','one',5,'sym8');denoise wavwrite(data1,fname) msgbox(fname) % - Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global data1; %global dataDN1; sound(data1) %sound(dataDN1) axes(handles.axes1)%set to plot at axes1 plot(data1); %plot(dataDN1); xlabel(' 训练采样序列 ' ),ylabel(' 信号幅 ' ); 15 %xlabel('?á· 2é?ùDòá D'),ylabel('sym8D?2¨?oó ?D?o?·ù '); grid on ; clear % - Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) msg= ' 请速度录音 ?' msgbox(msg) clear global data2; %global dataDN2; AI = analoginput('winsound'); chan = addchannel(AI,1:2); duration = 3; %1 second acquisition set(AI,'SampleRate',8000) ActualRate = get(AI,'SampleRate'); set(AI,'SamplesPerTrigger',duration*ActualRate) set(AI,'TriggerType', 'Manual') blocksize = get(AI,'SamplesPerTrigger'); Fs = ActualRate; start(AI) trigger(AI) data2,time,abstime,events = getdata(AI); fname=sprintf('E:Matlab语音识别系统测试 s1.wav') %dataDN1=wden(data1,'heursure','s','one',5,'sym8');denoise wavwrite(data2,fname) msgbox(fname) % - Executes on button press in pushbutton10. function pushbutton10_Callback(hObject, eventdata, handles) % hObject handle to pushbutton10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global data2; %global dataDN2; sound(data2) %sound(dataDN2) axes(handles.axes2)%set to plot at axes1 plot(data2); %plot(dataDN2); xlabel(' 测试采样序列 ' ),ylabel(' 信号幅 ' ); %xlabel('2aê?2é?ùDòá D'),ylabel('sym8D?2¨?oó ?D?o?·ù ');% grid on ; 16 clear % - Executes on button press in pushbutton11. function pushbutton11_Callback(hObject, eventdata, handles) % hObject handle to pushbutton11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global moodle ; testDB(' 测试 ',1,moodle) % - Executes on button press in pus

    注意事项

    本文(matlab语音识别系统(源代码)最新版DOC.pdf)为本站会员(tbuqq)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开