【语音识别】基于matlab GUI智能语音识别门禁系统【含Matlab源码 596期】

一、简介

本文基于Matlab设计实现了一个文本相关的声纹识别系统,可以判定说话人身份。
1 系统原理
a.声纹识别
    这两年随着人工智能的发展,不少手机App都推出了声纹锁的功能。这里面所采用的主要就是声纹识别相关的技术。声纹识别又叫说话人识别,它和语音识别存在一点差别。
在这里插入图片描述
b.梅尔频率倒谱系数(MFCC)
梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)是语音信号处理中最常用的语音信号特征之一。
实验观测发现人耳就像一个滤波器组一样,它只关注频谱上某些特定的频率。人耳的声音频率感知范围在频谱上的不遵循线性关系,而是在Mel频域上遵循近似线性关系。
梅尔频率倒谱系数考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱中,然后转换到倒谱上。普通频率转换到梅尔频率的关系式为:
在这里插入图片描述
c.矢量量化(VectorQuantization)
本系统利用矢量量化对提取的语音MFCC特征进行压缩。
VectorQuantization (VQ)是一种基于块编码规则的有损数据压缩方法。事实上,在 JPEG 和 MPEG-4 等多媒体压缩格式里都有 VQ 这一步。它的基本思想是:将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失多少信息。
3 系统结构
本文整个系统的结构如下图:
  –训练过程
首先对语音信号进行预处理,之后提取MFCC特征参数,利用矢量量化方法进行压缩,得到说话人发音的码本。同一说话人多次说同一内容,重复该训练过程,最终形成一个码本库。
  –识别过程
在识别时,同样先对语音信号预处理,提取MFCC特征,比较本次特征和训练库码本之间的欧氏距离。当小于某个阈值,我们认定本次说话的说话人及说话内容与训练码本库中的一致,配对成功。
在这里插入图片描述
4 测试实验
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到只有说话人及说话内容与码本库完全一致时才会显示“密码正确”,否则显示“密码错误”,实现了声纹锁的相关功能。

二、源代码

function varargout = GUI(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @GUI_OpeningFcn, ...
                   'gui_OutputFcn',  @GUI_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{
    
    1})
    gui_State.gui_Callback = str2func(varargin{
    
    1});
end

if nargout
    [varargout{
    
    1:nargout}] = gui_mainfcn(gui_State, varargin{
    
    :});
else
    gui_mainfcn(gui_State, varargin{
    
    :});
end
% End initialization code - DO NOT EDIT


% --- Executes just before GUI is made visible.
function GUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.

% varargin   command line arguments to GUI (see VARARGIN)

% Choose default command line output for GUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = GUI_OutputFcn(hObject, eventdata, handles) 
% Get default command line output from handles structure
varargout{
    
    1} = handles.output;



% --- Executes on button press in trainrec.
function trainrec_Callback(hObject, eventdata, handles)
speaker_id = trainrec();
set(handles.train_current,'string','Hurraay,DONE!');
speaker_iden = sprintf('you re speaker number %d', speaker_id); 
% set(handles.speaker,'string',speaker_iden);
set(handles.access,'BackgroundColor','blue'); 
 set(handles.access,'string','YOU HAVE ACCESS, TRAIN COMMANDS NOW!'); 

% if access_ == 1 
% set(handles.access,'string','YOU HAVE ACCESS, TRAIN COMMANDS NOW!'); 
% else 
% set(handles.access,'string','YOU DONT HAVE ACCESS,SPEAKER NOT RECOGNIZED!'); 
% end
% --- Executes on button press in command.
function command_Callback(hObject, eventdata, handles)
 trai_pairs=30;
 out_neurons=5;
 hid_neurons=6;
 in_nodes=13;
 eata=0.1;emax=0.001;q=1;e=0;lamda=.7;  t=1;
 load backp.mat W V;
 recObj = audiorecorder;
 Fs=8000;
 Nseconds = 1;

while(1)
fprintf('say any word immediately after hitting enter');
input('');
recordblocking(recObj, 1);
x = getaudiodata(recObj);
[kk,g] = lpc(x,12);
Z=(kk);
 Z=double(Z);
 p1=max(Z);
 Z=Z/p1;


for p=1:trai_pairs
    
    z=transpose(Z(p,:));
%  calculate output
   y=(tansig(V*(z)));
   o=(tansig(W*(y)));
   break
end
  
    b=o(1);
    c=o(2);
    d=o(3);
    e=o(4);
    f=o(5);
    a= max(o);
    if (b==a )
        display('AHEAD');
        set(handles.ahead,'BackgroundColor','green'); 
        set(handles.command,'string','Ahead'); 
        pause(2);
    elseif (c== a)
        display('STOP');
        set(handles.stop,'BackgroundColor','green'); 
        set(handles.command,'string','Stop'); 
        pause(2);
    elseif (d== a)
        display('BACK');
        set(handles.back,'BackgroundColor','green'); 
        set(handles.command,'string','Back'); 
        pause(2);
    elseif (e==a)
        display('LEFT');
        set(handles.left,'BackgroundColor','green'); 
        set(handles.command,'string','Left'); 
        pause(2);
    elseif (f==a)
        display('RIGHT');
        set(handles.right,'BackgroundColor','green'); 
        set(handles.command,'string','Right');
        pause(2);
    end
    set(handles.ahead,'BackgroundColor','white'); 
set(handles.left,'BackgroundColor','white'); 
set(handles.right,'BackgroundColor','white'); 
set(handles.stop,'BackgroundColor','white'); 
set(handles.back,'BackgroundColor','white'); 

    
end
function traincommands()
Fs=8000;
Nseconds = 1;
samp=6;
words=5;
recObj = audiorecorder;
aheaddir = 'C:\Users\Rezetane\Desktop\HRI Proj\Speech-Recognition-master\data\train_commands\ahead\';   
backdir = 'C:\Users\Rezetane\Desktop\HRI Proj\Speech-Recognition-master\data\train_commands\back\';   
stopdir = 'C:\Users\Rezetane\Desktop\HRI Proj\Speech-Recognition-master\data\train_commands\stop\';   
rightdir = 'C:\Users\Rezetane\Desktop\HRI Proj\Speech-Recognition-master\data\train_commands\right\';   
leftdir = 'C:\Users\Rezetane\Desktop\HRI Proj\Speech-Recognition-master\data\train_commands\left\';   
s_right = numel(dir([rightdir '*.wav']));    

for i= 1:1:samp
   
filename = sprintf('%ss%d.wav', aheaddir, i); 
fprintf('Reading %ss%d ',aheaddir,i);
[x,Fs] = audioread(filename);
[s(i,:),g] = lpc(x,12); 
end

for i= (samp+1):1:2*samp
    
filename = sprintf('%ss%d.wav', stopdir, i- samp); 
fprintf('Reading %ss%d ',stopdir,i);
[x,Fs] = audioread(filename);
[s(i,:),g] = lpc(x,12);
%plot(s(i,:));
end
 
for i= (2*samp+1):1:3*samp
filename = sprintf('%ss%d.wav', backdir, i-2*samp); 
fprintf('Reading %ss%d ',backdir,i);
[x,Fs] = audioread(filename);
[s(i,:),g] = lpc(x,12);
end

for i= (3*samp+1):1:4*samp
filename = sprintf('%ss%d.wav', leftdir, i-3*samp); 
fprintf('Reading %ss%d ',leftdir,i);
[x,Fs] = audioread(filename);
[s(i,:),g] = lpc(x,12);
end

for i= (4*samp+1):1:5*samp
    
filename = sprintf('%ss%d.wav', rightdir, i- 4*samp); 
fprintf('Reading %ss%d ',rightdir,i);
[x,Fs] = audioread(filename);
[s(i,:),g] = lpc(x,12);
end

S=zeros(1,13);
for i=1:1:samp
    S=cat(1,S,s(i,:));
    S=cat(1,S,s(samp+i,:));
    S=cat(1,S,s(2*samp+i,:));
    S=cat(1,S,s(3*samp+i,:));
    S=cat(1,S,s(4*samp+i,:));
end
S(1,:)=[];
save speechp.mat S
trai_pairs=30; % 48 samples
out_neurons=5; % no of words
hid_neurons=6; %matka
in_nodes=13; %features are 13
eata=0.1;emax=0.001;q=1;e=0;lamda=.7;  t=1;


load speechp.mat S

p1=max(max(S));
s=S/p1;

Z= double(s);

dummy=[1 -1 -1 -1 -1;
   -1 1 -1 -1 -1;
   -1 -1 1 -1 -1;
   -1 -1 -1 1 -1;
   -1 -1 -1 -1 1];
   
t=trai_pairs/out_neurons;
D=dummy;
for i= 1:1:5
    D=cat(1,D,dummy);
end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【特征提取】基于matlab小波变换的音频水印嵌入提取【含Matlab源码 053期】
【语音处理】基于matlab GUI语音信号处理【含Matlab源码 290期】
【语音采集】基于matlab GUI语音信号采集【含Matlab源码 291期】
【语音调制】基于matlab GUI语音幅度调制【含Matlab源码 292期】
【语音合成】基于matlab GUI语音合成【含Matlab源码 293期】
【语音加密】基于matlab GUI语音信号加密解密【含Matlab源码 295期】
【语音增强】基于matlab小波变换的语音增强【含Matlab源码 296期】
【语音识别】基于matlab GUI语音基频识别【含Matlab源码 294期】
【语音增强】基于matlab GUI维纳滤波之语音增强【含Matlab源码 298期】
【语音处理】基于matlab GUI语音信号处理【含Matlab源码 299期】
【信号处理】基于matlab的语音信号频谱分析仪【含Matlab源码 325期】
【调制信号】基于matlab GUI数字调制信号仿真【含Matlab源码 336期】
【情感识别】基于matlab BP神经网络的语音情感识别【含Matlab源码 349期】
【语音隐写】基于matlab小波变换的量化音频数字水印【含Matlab源码 351期】
【特征提取】基于matlab音频水印嵌入与提取【含Matlab源码 350期】
【语音去噪】基于matlab低通和自适应滤波去噪【含Matlab源码 352期】
【情感识别】基于matlab GUI语音情感分类识别【含Matlab源码 354期】
【基础处理】基于matlab语音信号的预处理【含Matlab源码 364期】
【语音识别】基于matlab 傅立叶变换0-9的数字语音识别【含Matlab源码 384期】
【语音识别】基于matlab GUI DTW的0-9数字语音识别【含Matlab源码 385期】
【语音播放】基于matlab GUI MP3设计【含Matlab源码 425期】
【语音处理】基于人耳掩蔽效应的语音增强算法信噪比计算【含Matlab源码 428期】
【语音去噪】基于matlab谱减法去噪【含Matlab源码 429期】
【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】
【语音隐写】基于matlab LSB语音隐藏【含Matlab源码 431期】
【语音识别】基于matlab男女声识别【含Matlab源码 452期】
【语音处理】基于matlab语音加噪和降噪处理【含Matlab源码 473期】
【语音去噪】基于matlab最小二乘法(LMS)自适应滤波器【含Matlab源码 481期】
【语音增强】基于matlab谱减法、最小均方和维纳滤波语音增强【含Matlab源码 482期】
【通信】基于matlab GUI数字频带(ASK、PSK、QAM)调制仿真 【含Matlab源码 483期】
【信号处理】基于matlab心电信号ECG滤波处理【含Matlab源码 484期】
【语音播报】基于matlab语音播报【含Matlab源码 507期】
【信号处理】基于matlab小波变换脑电信号特征提取【含Matlab源码 511期】
【语音处理】基于matlab GUI双音多频(DTMF)信号检测【含Matlab源码 512期】
【语音隐写】基于matlab LSB实现语音信号的数字水印【含Matlab源码 513期】
【语音增强】基于matlab匹配滤波器的语音识别【含Matlab源码 514期】
【语音处理】基于matlab GUI语音时域频域频谱图分析【含Matlab源码 527期】
【语音去噪】基于matlab LMS、RLS算法语音去噪【含Matlab源码 528期】
【语音去噪】基于matlab LMS谱减法语音去噪【含Matlab源码 529期】
【语音去噪】基于matlab 软阈值、硬阈值、折中阈值语音去噪【含Matlab源码 530期】
【语音识别】基于matlab特定人的语音识别分辨【含Matlab源码 534期】
【语音去噪】基于matlab小波软阈值语音降噪【含Matlab源码 531期】
【语音去噪】基于matlab小波硬阈值语音降噪【含Matlab源码 532期】
【语音识别】基于matlab MFCC和SVM的特定人性别识别【含Matlab源码 533期】
【语音识别】基于MFCC的GMM语音识别【含Matlab源码 535期】
【语音识别】基于matlab VQ特定人孤立词语音识别【含Matlab源码 536期】
【语音识别】基于matlab GUI声纹识别【含Matlab源码 537期】
【采集读写】基于matlab语音采集与读写【含Matlab源码 538期】
【语音编辑】基于matlab语音编辑【含Matlab源码 539期】
【语音模型】基于matlab语音信号数学模型【含Matlab源码 540期】
【语音响度】基于matlab语音声强与响度【含Matlab源码 541期】
【情感识别】基于matlab K近邻分类算法的语音情感识别【含Matlab源码 542期】
【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】
【情感识别】基于神经网络的语音情感识别【含Matlab源码 544期】
【声源定位】基于matlab不同空间谱估计的声源定位算法比较【含Matlab源码 545期】
【声源定位】基于matlab不同信噪比下的麦克风接收信号【含Matlab源码 546期】
【声源定位】基于matlab单声源双麦克风的房间冲激响应【含Matlab源码 547期】
【声源定位】基于matlab广义互相关的声源定位【含Matlab源码 548期】
【声源定位】基于matlab阵列流形矩阵的信号显示【含Matlab源码 549期】
【特征提取】基于matlab共振峰估计【含Matlab源码 550期】
【特征提取】基于matlab基音周期估计【含Matlab源码 551期】
【特征提取】基于matlab语音端点检测【含Matlab源码 552期】
【语音编码】基于matlab ADPCM编解码【含Matlab源码 553期】
【语音编码】基于matlab LPC编解码【含Matlab源码 554期】
【语音编码】基于matlab PCM编解码【含Matlab源码 555期】
【语音分析】基于matlab倒谱分析与MFCC系数计算【含Matlab源码 556期】
【语音分析】基于matlab线性预测系数对比 【含Matlab源码 557期】
【语音分析】基于matlab语音短时频域分析【含Matlab源码 558期】
【语音分析】基于matlab语音短时时域分析【含Matlab源码 559期】
【语音分析】基于matlab语音线谱对转换【含Matlab源码 560期】
【语音合成】基于matlab比例重叠相加法的信号分帧与还原【含Matlab源码 561期】
【语音合成】基于matlab线性预测共振峰检测和基音参数的语音合成【含Matlab源码 562期】
【语音合成】基于matlab线性预测系数和基音参数的语音合成【含Matlab源码 563期】
【语音合成】基于matlab线性预测系数和预测误差的语音合成【含Matlab源码 564期】
【语音合成】基于matlab语音信号变速【含Matlab源码 565期】
【语音合成】基于matlab语音信号的变调【含Matlab源码 566期】
【语音合成】基于matlab重叠存储法的信号分帧与还原【含Matlab源码 567期】
【语音合成】基于matlab重叠相加法的信号分帧与还原【含Matlab源码 568期】
【语音去噪】基于matlab 改进谱减法语音去噪【含Matlab源码 569期】
【语音去噪】基于matlab基本维纳滤波算法语音去噪【含Matlab源码 570期】
【语音去噪】基于matlab谱减法语音去噪【含Matlab源码 571期】
【语音去噪】基于matlab先验信噪比的维纳滤波算法语音去噪【含Matlab源码 572期】
【语音识别】基于matlab动态时间规整(DTW)的孤立字语音识别【含Matlab源码 573期】
【语音识别】基于matlab高斯混合模型(GMM)的说话人识别【含Matlab源码 574期】
【语音识别】基于matlab矢量量化(VQ)的说话人识别【含Matlab源码 575期】
【语音识别】基于matlab隐马尔可夫模型(HMM)的孤立字语音识别【含Matlab源码 576期】
【语音隐藏】基于matlab LSB语音信息隐藏【含Matlab源码 577期】
【语音识别】基于matlab的脑电波睡眠监测【含Matlab源码 595期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/115054253