《2022年matlab语音识别系统.pdf》由会员分享,可在线阅读,更多相关《2022年matlab语音识别系统.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、matlab 语音识别系统智能仪器课程设计题目: 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 函数 mfcc5 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
2、、7 函数 melfb 8四、演示分析、9五、心得体会、11 附:GUI 程序代码12一、设计任务及要求用 MATLAB 实现简单的语音识别功能; 具体设计要求如下 : 用 MATLAB 实现简单的数字 19 的语音识别功能。二、语音识别的简单介绍(威海)精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 9 页 - - - - - - - - - - matlab 语音识别系统基于 VQ的说话人识别系统 , 矢量量化起着双重作用。在训练阶段, 把每一个说话者所提取的特征参数进行分类, 产生不同码
3、字所组成的码本。在识别( 匹配)阶段, 我们用 VQ方法计算平均失真测度 (本系统在计算距离d 时, 采用欧氏距离测度), 从而判断说话人就是谁。语音识别系统结构框图如图1 所示。图 1 语音识别系统结构框图2、1 语者识别的概念语者识别就就是根据说话人的语音信号来判别说话人的身份。语音就是人的自然属性之一 , 由于说话人发音器官的生理差异以及后天形成的行为差异, 每个人的语音都带有强烈的个人色彩, 这就使得通过分析语音信号来识别说话人成为可能。用语音来鉴别说话人的身份有着许多独特的优点, 如语音就是人的固有的特征, 不会丢失或遗忘 ; 语音信号的采集方便 , 系统设备成本低 ; 利用电话网络
4、还可实现远程客户服务等。因此, 近几年来 , 说话人识别越来越多的受到人们的重视。与其她生物识别技术如指纹识别、手形识别等相比较, 说话人识别不仅使用方便, 而且属于非接触性 , 容易被用户接受 , 并且在已有的各种生物特征识别技术中, 就是唯一可以用作远程验证的识别技术。因此, 说话人识别的应用前景非常广泛: 今天, 说话人识别技术已经关系到多学科的研究领域, 不同领域中的进步都对说话人识别的发展做出了贡献。说话人识别技术就是集声学、语言学、计算机、信息处理与人工智能等诸多领域的一项综合技术, 应用需求将十分广阔。在吃力语音信号的时候如何提取信号中关键的成分尤为重要。语音信号的特征参数的好坏
5、直接导致了辨别的准确性。2、2 特征参数的提取对于特征参数的选取 , 我们使用 mfcc 的方法来提取。MFCC 参数就是基于人的听觉特性利用人听觉的屏蔽效应, 在 Mel 标度频率域提取出来的倒谱特征参数。MFCC 参数的提取过程如下 : 1、 对输入的语音信号进行分帧、加窗, 然后作离散傅立叶变换 , 获得频谱分布信息。设语音信号的 DFT为: 10,)()(112NkenxkXNnNnkja(1) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 9 页 - - - - - - - - -
6、 - matlab 语音识别系统其中式中 x(n) 为输入的语音信号 ,N 表示傅立叶变换的点数。2、 再求频谱幅度的平方 , 得到能量谱。3、 将能量谱通过一组Mel尺度的三角形滤波器组。我们定义一个有M个滤波器的滤波器组 (滤波器的个数与临界带的个数相近), 采用的滤波器为三角滤波器, 中心频率为 f(m),m=1,2,3, ,M本系统取 M=100 。4、 计算每个滤波器组输出的对数能量。N 12amk1S(m)ln(|(k) | H(k),0mM1X(2) 其中mH(k)为三角滤波器的频率响应。5、 经过离散弦变换 (DCT)得到MFCC 系数。10C(n)()cos(0.5/),(3
7、)01MmS mn mmnN MFCC 系数个数通常取 2030, 常常不用 0阶倒谱系数 , 因为它反映的就是频谱能量, 故在一般识别系统中 , 将称为能量系数 , 并不作为倒谱系数 , 本系统选取 20 阶倒谱系数。2、3 用矢量量化聚类法生成码本我们将每个待识的说话人瞧作就是一个信源, 用一个码本来表征。码本就是从该说话人的训练序列中提取的MFCC 特征矢量聚类而生成。只要训练的序列足够长, 可认为这个码本有效地包含了说话人的个人特征, 而与讲话的内容无关。本系统采用基于分裂的LBG的算法设计 VQ码本,(1,2,)kXkK为训练序列,B 为码本。具体实现过程如下 : 1、 取提取出来的
8、所有帧的特征矢量的型心( 均值)作为第一个码字矢量 B1。2、 将当前的码本 Bm 根据以下规则分裂 , 形成2m 个码字。)1()1(mmmmBBBB (4) 其中 m从 1 变化到当前的码本的码字数, 就是分裂时的参数 , 本文 =0、01。3、 根据得到的码本把所有的训练序列( 特征矢量 ) 进行分类 , 然后按照下面两个公式计算训练矢量量化失真量的总与nD以及相对失真 (n 为迭代次数 , 初始n=0,1D=,B为当前的码书 ), 若相对失真小于某一阈值, 迭代结束 , 当前的码书就就是设计好的 2m 个码字的码书 , 转。否则 , 转下一步。量化失真量与 : 精品资料 - - - 欢
9、迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 9 页 - - - - - - - - - - matlab 语音识别系统( )1min(,)KnkkDd XB (5) 相对失真 : (1)|nnnDDD (6) 4、 重新计算各个区域的新型心, 得到新的码书 , 转 3。5、重复 , 与步 , 直到形成有 M个码字的码书 (M就是所要求的码字数 ),其中 D0=10000 。 2 、4 VQ的说话人识别设就是未知的说话人的特征矢量1,TXXK, 共有 T 帧就是训练阶段形成的码书, 表示码书第 m个码字 , 每一个
10、码书有 M个码字。再计算测试者的平均量化失真 D,并设置一个阈值 , 若 D小于此阈值 , 则就是原训练者 , 反之则认为不就是原训练者。11min/1),(jMmmjTDBxd (7) 三、算法程序分析在具体的实现过程当中 , 采用了 matlab 软件来帮助完成这个项目。 在 matlab中主要由采集 , 分析, 特征提取 , 比对几个重要部分。 以下为在实际的操作中 , 具体用到得函数关系与作用一一列举在下面。3、1 函数关系主要有两类函数文件Train 、m与 Test 、m 在 Train 、m调用 Vqlbg、m获取训练录音的vq 码本, 而 Vqlbg、m调用 mfcc、m获取单
11、个录音的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;
12、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赋值精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 9 页 - - - - - - - - - - matlab 语音识别系统end end h = hamming(n); %加 hamming 窗, 以增加音框左端与右端的连续性M2 = diag(h)
13、 * 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 函数 di
14、steu - 计算测试者与模板码本的距离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 P)%在两个音频时间长度相等的前提下 copies = zeros(1,P); for n = 1:N d(n,:) = sum(x(:, n+copies) - y) 、2, 1); end else copies = zeros(1,N);
15、for p = 1:P d(:,p) = sum(x - y(:, p+copies) 、2, 1); end% 成对欧氏距离的两个矩阵的列之间的距离end d = 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); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5
16、 页,共 9 页 - - - - - - - - - - matlab 语音识别系统 while (1 = 1) z = disteu(d, r); m,ind = min(z, , 2); t = 0; for j = 1:2i r(:, j) = mean(d(:, find(ind = j), 2); x = disteu(d(:, find(ind = j), r(:, j); for q = 1:length(x) t = t + x(q); end end if (dpr - t)/t) e) break; else dpr = t; end end end 3、2、4 函数 te
17、st function finalmsg = test(testdir, n, code) for k = 1:n % read test sound each speaker file = sprintf(%ss%d、wav, testdir, k); s, fs = wavread(file); v = mfcc(s, fs); % 得到测试人语音的 mel 倒谱系数distmin = 4; %阈值设置处 % 就判断一次 , 因为模板里面只有一个文件 d = disteu(v, code1); %计算得到模板与要判断的声音之间的“距离” dist = sum(min(d,2) / size
18、(d,1); %变换得到一个距离的量 %测试阈值数量级 msgc = sprintf(与模板语音信号的差值为 :%10f , dist); disp(msgc); %此人匹配 if dist distmin msg = sprintf(第%d位说话者与模板语音信号不匹配, 不符合要求!n, k); finalmsg = 此位说话者不符合要求 !; % 界面显示语句 , 可随意精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 9 页 - - - - - - - - - - matlab 语音识别系
19、统设定 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); % 对找到的
20、文件取 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 函数里面一样但多了一个具体语者的识别 k1 = l; end end msg=nameListk1 msgbox(msg); end 3、2、6 函数 train - 该函数就就是对音频进行训练, 也就就是提取特征参数function code = train(traindir, n) k =
21、 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码本通过矢量量化 , 得到原说话人的 VQ码本end 四、演示分析我们的功能分为两部分 : 对已经保存的9 个数字的语音进行
22、辨别与实时的判断说话人说的就是否为一个数、在前者的实验过程中, 先把 9 个数字的声音保精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 9 页 - - - - - - - - - - matlab 语音识别系统存成 wav的格式 , 放在一个文件夹中 , 作为一个检测的数据库、 然后对检测者实行识别, 系统给出提示就是哪个数字、在第二个功能中 , 实时的录取一段说话人的声音作为模板, 提取 mfcc 特征参数, 随后紧接着进行遇着识别 , 也就就是让其她人再说相同的话, 瞧就是否就是原说话者、
23、实验过程及具体功能如下 : 先打开 Matlab 使 Current Directory为录音及程序所所在的文件夹再打开文件“ enter 、m ”, 点 run 运行, 打开 enter 界面, 点击“进入”按钮进入系统。 ( 注: 文件包未封装完毕, 目前只能通过此方式打开运行。)( 如下图figure1) figure1 在对数据库中已有的语者进行识别模块: 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 9 页 - - - - - - - - - - matlab 语音识别系统选择载入
24、语音库语音个数; 点击语音库录制模版进行已存语音信息的提取; 点击录音 -test进行现场录音 ; 点击语者判断进行判断数字, 并显示出来。在实时语者识别模块 : 点击实时录制模板上的“录音-train”按钮 , 就是把新语者的声音以wav格式存放在”实时模板”文件夹中, 接着点击“实时录制模板”, 把新的模板提取特征值。随后点击实时语者识别模板上的“录音-train”按钮 , 就是把语者的声音以 wav格式存放在”测试”文件夹中, 再点击“实时语者识别” , 在对测得的声音提取特征值的同时, 与实时模板进行比对, 然后得出就是否就是实时模板中的语者。另外面板上的播放按钮都就是播放相对应左边录取的声音。想要测量多次 , 只要接着录音 , 自动保存 , 然后程序比对音频就可以。退出只要点击菜单 , 退出程序。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 9 页 - - - - - - - - - -