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

上传人:tbuqq 文档编号:4972150 上传时间:2020-01-22 格式:PDF 页数:18 大小:855.13KB
返回 下载 相关 举报
matlab语音识别系统(源代码)最新版DOC.pdf_第1页
第1页 / 共18页
matlab语音识别系统(源代码)最新版DOC.pdf_第2页
第2页 / 共18页
matlab语音识别系统(源代码)最新版DOC.pdf_第3页
第3页 / 共18页
matlab语音识别系统(源代码)最新版DOC.pdf_第4页
第4页 / 共18页
matlab语音识别系统(源代码)最新版DOC.pdf_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《matlab语音识别系统(源代码)最新版DOC.pdf》由会员分享,可在线阅读,更多相关《matlab语音识别系统(源代码)最新版DOC.pdf(18页珍藏版)》请在三一文库上搜索。

1、目录 一、设计任务及要求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 实现简单的语音识别功能; 具体设计要求如下:

2、 用 MATLAB 实现简单的数字 19 的语音识别功能。 二、语音识别的简单介绍 基于 VQ的说话人识别系统,矢量量化起着双重作用。在训练阶段,把每一个 说话者所提取的特征参数进行分类,产生不同码字所组成的码本。 在识别 (匹配) 阶段,我们用 VQ方法计算平均失真测度 ( 本系统在计算距离d 时,采用欧氏距离 测度) ,从而判断说话人是谁。 语音识别系统结构框图如图1 所示。 图 1 语音识别系统结构框图 2.1 语者识别的概念 语者识别就是根据说话人的语音信号来判别说话人的身份。语音是人的自然 属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的 语音都带有强烈的个人色

3、彩,这就使得通过分析语音信号来识别说话人成为可 能。 用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征, 不会丢失或遗忘; 语音信号的采集方便, 系统设备成本低; 利用电话网络还可实 现远程客户服务等。因此,近几年来,说话人识别越来越多的受到人们的重视。 与其他生物识别技术如指纹识别、 手形识别等相比较, 说话人识别不仅使用方便, 而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中, 是唯一可以用作远程验证的识别技术。因此,说话人识别的应用前景非常广泛: 今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说 话人识别的发展做出了贡献。说话人

4、识别技术是集声学、语言学、计算机、信息 处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。 在吃力语音 信号的时候如何提取信号中关键的成分尤为重要。语音信号的特征参数的好坏直 接导致了辨别的准确性。 2 2.2 特征参数的提取 对于特征参数的选取,我们使用mfcc 的方法来提取。 MFCC 参数是基于人的 听觉特性利用人听觉的屏蔽效应,在Mel 标度频率域提取出来的倒谱特征参数。 MFCC 参数的提取过程如下: 1. 对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱 分布信息。 设语音信号的 DFT为: 10 ,)()( 1 1 2 NkenxkX N n N nkj

5、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

6、.5/),(3) 01 M m Smn mm nN MFCC 系数个数通常取 2030,常常不用 0 阶倒谱系数, 因为它反映的是频谱能 量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取 20 阶倒谱系数。 2.3 用矢量量化聚类法生成码本 我们将每个待识的说话人看作是一个信源,用一个码本来表征。码本是从该 说话人的训练序列中提取的MFCC 特征矢量聚类而生成。 只要训练的序列足够长, 可认为这个码本有效地包含了说话人的个人特征,而与讲话的内容无关。 本系统采用基于分裂的LBG的算法设计 VQ码本,(1,2,) k XkK 为训练序 列,B为码本。 具体实现过程如下: 1.

7、 取提取出来的所有帧的特征矢量的型心(均值) 作为第一个码字矢量 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 个码字的码书,转。否则,转下一步。 量化失真量和: ( )

8、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) 三、

9、算法程序分析 在具体的实现过程当中, 采用了 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

10、 码本)与测试 录音(提供 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(

11、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:n

12、2, :).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位说话

13、者与模板语音信号不匹配, 不符合要 求!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, testd

14、ir, 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 函数 trai

15、n - 该函数就是对音频进行训练,也就是提取特征参数 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); % 计算 MFCCs 提取特征特征,返回值是 Mel 倒谱系数,是一个log 的 dct 得到的 codei = vqlbg(v, k); % 训练 VQ码本通

16、过矢量量化,得到原说 话人的 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(

17、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的格式 ,

18、 放在一个文件夹中 , 作为一个检测的数据库 . 然后对检测者实行识 别, 系统给出提示是哪个数字. 在第二个功能中 , 实时的录取一段说话人的声音作为模板, 提取 mfcc 特征 参数, 随后紧接着进行遇着识别 , 也就是让其他人再说相同的话, 看是否是原说话 者. 实验过程及具体功能如下 : 先打开 Matlab 使 Current Directory为录音及程序所所在的文件夹 再打开文件“ enter .m”,点 run 运行,打开 enter 界面,点击“进入”按 钮进入系统。(注:文件包未封装完毕,目前只能通过此方式打开运行。) (如下 图 figure1 ) figure1 9 在

19、对数据库中已有的语者进行识别模块: 选择载入语音库语音个数; 点击语音库录制模版进行已存语音信息的提取; 点击录音 -test进行现场录音; 点击语者判断进行判断数字,并显示出来。 在实时语者识别模块 : 点击实时录制模板上的“录音-train”按钮 , 是把新语者的声音以wav格 式存放在”实时模板”文件夹中, 接着点击“实时录制模板” ,把新的模板提取 特征值。随后点击实时语者识别模板上的“录音-train”按钮 , 是把语者的声音 以 wav格式存放在”测试”文件夹中, 再点击“实时语者识别”,在对测得的声音 提取特征值的同时,和实时模板进行比对,然后得出是否是实时模板中的语者。 另外面

20、板上的播放按钮都是播放相对应左边录取的声音。 想要测量多次,只要接着录音,自动保存,然后程序比对音频就可以。 退出只要点击菜单File/Exit,退出程序。 10 程序运行截图: (fig.2 )运行后系统界面 五、心得体会 实验表明,该系统能较好地进行语音的识别, 同时,基于矢量量化技术( )的语音识别系统具有分类准确,存储数据少, 实时响应速度快等综合性能好 的特点 矢量量化技术在语音识别的应用方面,尤其是在孤立词语音识别系统中得到 很好的应用,特别是有限状态矢量量化技术,对于语音识别更为有效。 通过这次课程设计,我对语音识别有了更加形象化的认识,也强化了MATLAB 的应用,对将来的学习

21、奠定了基础。 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(CA

22、LLBACK,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 untit

23、led2_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 GUIDEs Tools menu. Choose “GUI allows only one % instance to run (singleton)“. % % See also: GUIDE

24、, 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_

25、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 % - E

26、xecutes 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 us

27、er 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); %

28、 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

29、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_Cal

30、lback(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.p

31、opupmenu3,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

32、% 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=u

33、igetfile() 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 %

34、 - 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, han

35、dles) % 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 i

36、n 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 (

37、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= 请速度录音 ?

38、 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,SamplesPe

39、rTrigger); 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(hObjec

40、t, 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(

41、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 define

42、d 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

43、); 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

44、,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)

45、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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


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