一、声纹识别简介

本文基于Matlab设计实现了一个文本相关的声纹识别系统,可以判定说话人身份。
1 系统原理
a 声纹识别
这两年随着人工智能的发展,不少手机App都推出了声纹锁的功能。这里面所采用的主要就是声纹识别相关的技术。声纹识别又叫说话人识别,它和语音识别存在一点差别。

b 梅尔频率倒谱系数(MFCC)
梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)是语音信号处理中最常用的语音信号特征之一。
实验观测发现人耳就像一个滤波器组一样,它只关注频谱上某些特定的频率。人耳的声音频率感知范围在频谱上的不遵循线性关系,而是在Mel频域上遵循近似线性关系。
梅尔频率倒谱系数考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱中,然后转换到倒谱上。普通频率转换到梅尔频率的关系式为:

c 矢量量化(VectorQuantization)
本系统利用矢量量化对提取的语音MFCC特征进行压缩。
VectorQuantization (VQ)是一种基于块编码规则的有损数据压缩方法。事实上,在 JPEG 和 MPEG-4 等多媒体压缩格式里都有 VQ 这一步。它的基本思想是:将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失多少信息。
3 系统结构
本文整个系统的结构如下图:
3.1 训练过程
首先对语音信号进行预处理,之后提取MFCC特征参数,利用矢量量化方法进行压缩,得到说话人发音的码本。同一说话人多次说同一内容,重复该训练过程,最终形成一个码本库。
3.2 识别过程
在识别时,同样先对语音信号预处理,提取MFCC特征,比较本次特征和训练库码本之间的欧氏距离。当小于某个阈值,我们认定本次说话的说话人及说话内容与训练码本库中的一致,配对成功。

二、部分源代码

function varargout = GUI(varargin)
% GUI MATLAB code for GUI.fig
%      GUI, by itself, creates a new GUI or raises the existing
%      singleton*.
%
%      H = GUI returns the handle to a new GUI or the handle to
%      the existing singleton*.
%
%      GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI.M with the given input arguments.
%
%      GUI('Property','Value',...) creates a new GUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before GUI_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to GUI_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% Edit the above text to modify the response to help GUI% Last Modified by GUIDE v2.5 15-Mar-2021 17:37:45% Begin initialization code - DO NOT EDIT
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});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_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.
% 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 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)
% 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
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
fprintf('\n识别中...\n\n');
%加载训练好的GMM模型
load speakerData;
load speakerGmm;waveDir='trainning\';  %导入测试集
Test_speakerData = dir(waveDir);   %获取测试集中的结构体数据,这是一个char类型的结构体
Test_speakerData(1:2) = [];
Test_speakerNum=length(Test_speakerData);
Test_speakerNum
count=0;
%%%%%%%%%%%%%%%%for i=1:Test_speakerNum
%%%读取语音
[filename,filepath]=uigetfile('*.wav','选择音频文件');
set(handles.text1,'string',filepath)filep=strcat(filepath,filename);
[testing_data, fs]=audioread(filep);
sound(testing_data, fs);
save testing_data
load testing_data
y=testing_data
axes(handles.axes1)
plot(y);
xlabel('t');ylabel('幅值');
title('时域图');
%频域
%幅频图
N=length(y);
fs1=100;  %采样频率
n=0:N-1;
t=n/fs;   %时间序列
yfft =fft(y,N);
mag=abs(yfft);     %取振幅的绝对值
f=n*fs/N;    %频率序列
axes(handles.axes2)
plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('频域图');%相谱
A=abs(yfft);
ph=2*angle(yfft(1:N/2));
ph=ph*180/pi;
axes(handles.axes3);
plot(f(1:N/2),ph(1:N/2));
xlabel('频率/hz'),ylabel('相角'),title('数字0-9的相位谱');
% 绘制功率谱
Fs=1000;
n=0:1/Fs:1;
xn=y;
nfft=1024;
window=boxcar(length(n)); %矩形窗
noverlap=0; %数据无重叠
p=0.9; %置信概率
[Pxx,Pxxc]=psd(xn,nfft,Fs,window,noverlap,p);
index=0:round(nfft/2-1);
k=index*Fs/nfft;
plot_Pxx=10*log10(Pxx(index+1));
plot_Pxxc=10*log10(Pxxc(index+1));
axes(handles.axes4)
plot(k,plot_Pxx);
title('数字0-9的功率谱');axes(handles.axes5)
surf( speakerData(1).mfcc);  %绘制MFCC的三维图
title('第一个人语音的三维MFCC');   %第一个人说话的mfcc的特征   mfcc是指梅尔倒谱系数%绘制第一个人的MFCC的全部二维图
axes(handles.axes6)
for i=1:speakerNumfprintf('\n为第%d个语者%s训练GMM……', i,speakerData(i).name(1:end-4));[speakerGmm(i).mu, speakerGmm(i).sigm,speakerGmm(i).c] = gmm_estimate(speakerData(i).mfcc(:,5:12)',gaussianNum,20);  %转置正确endfprintf('\n');
save speakerGmm speakerGmm;   %保存样本GMM
% hObject    handle to pushbutton5 (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 pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
clc
close all
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.

【语音识别】基于matlab GUI声纹识别【含Matlab源码 1022期】相关推荐

  1. 【钟表识别】基于计算机视觉实现钟表时间识别含Matlab源码

    1 简介 基于计算机视觉实现钟表时间识别含Matlab源码​ 2 部分代码 function [time_clock]= read(filepath) I = imread(filepath); [e ...

  2. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  3. Android实现佩戴安全帽检测和识别(含Android源码)

    Android实现佩戴安全帽检测和识别(含Android源码) 目录 Android实现佩戴安全帽检测和识别(含Android源码) 1. 前言 2. 佩戴安全帽检测和识别的方法 (1)基于目标检测的 ...

  4. Opencv基于改进VGG19的表情识别系统(源码&Fer2013&教程)

    1.研究背景 在深度学习中,传统的卷积神经网络对面部表情特征的提取不充分以及计算参数量较大的问题,导致分类准确率偏低.因此,提出了一种基于改进的VGG19网络的人脸表情识别算法.首先,对数据进行增强如 ...

  5. 基于matlab的声纹识别技术(matlabR2021b版)

    文章目录 宏观理解 技术细节 声纹识别发展流程 传统方法 深度学习的方法 多看:声纹识别技术简介--化繁为简的艺术,深入浅出了解声纹识别. 宏观理解 1.困难在哪? 不同的人说话语音波形不同,但是相同 ...

  6. 基于Tensorflow实现声纹识别

    前言 本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,没有了解的可以查看这篇文章<基于Tensorflow实现声音分类>.基于这个知识基础之上,我们训练 ...

  7. [声纹识别]基于MFCC的声纹识别算法

    Mel频率倒谱系数(melfrequency cepstral coefficients,MFCC)是声音的短期功率谱的表示,基于非线性频谱上的对数功率谱的线性余弦变换.在自动语音识别领域,MFCC是 ...

  8. 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】

    ⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...

  9. 【水果识别】基于计算机视觉实现橙子数量识别含Matlab源码

    1 简介 在现实生活中成人识别水果是十分简易的但对于幼儿来说在没有实物之前是无法识别水果的,因此本文设计了一个简易水果识别系统为幼儿在电子设备上识别水果提供可能.本文通过matlab GUI设计了一个 ...

  10. 【车牌识别】基于模板匹配实现车牌识别含Matlab源码

    1 简介 车牌识别系统是计算机视觉与模式识别技术在智能交通里的重要研究课题之一.其功能是将运动中的汽车牌照从复杂背景中提取出来,并识别出车牌号码.车牌识别技术广泛应用于高速公路上的电子收费,日常的停车 ...

最新文章

  1. 【linux】Valgrind工具集详解(十五):Callgrind(性能分析图)
  2. 微生物分类学研究利器:模式微生物基因组数据库
  3. unity的vr场景怎么做_营销技巧逐渐失效,如何通过场景化营销重新赢回市场?...
  4. 华科计算机考研2022年分数线,2022年华中科技大学软件工程考研分数线、参考书、上岸前辈初复试经验...
  5. SQLServer常用的配置函数笔记
  6. 【学习Android NDK开发】Type Signatures(类型签名)
  7. Android 8.0 AutoFill自动填写框架实践
  8. 实现华为多屏协同--非华为电脑下载12.0.1.20华为电脑管家
  9. cad缩小了怎么还原_CAD的窗口突然不能缩小了怎么回事,应该怎么恢复
  10. H3C Comware V7新增的RBAC
  11. 某著名IT公司招聘Axapta/Navision(MBS)顾问
  12. BT5的 U盘启动 制作
  13. AI视频增强,提高视频画面的清晰度
  14. 【Docker学习笔记 七】深入理解Docker网络配置及微服务部署
  15. 微信公众号开发 微信被动回复,图文回复,图片回复
  16. 写点看Harvard CS50 公开课的感受
  17. TimeUnit类常用方法
  18. 关于JavaWeb JSP的思维导图
  19. 一款好看的秒表计时器
  20. 《荒漠甘泉》4月19日

热门文章

  1. Control-Tree
  2. pytest框架(三)
  3. ios:uibutton 中title 和image 共存那点事
  4. unity3D与网页的交互
  5. jupyter查看函数参数
  6. 20191004每日一句
  7. Atitit mysql 数据类型 5.7.9 目录 1.1. 数值类型 1 2. 字符串 2 3. 时间日期 2 4. 地理位置 2 5. 几何数据的存储,生成,分析,优化。 空间数据类型(存储)
  8. Atitit 机器学习算法分类 五大分类v5 t56.docx Atitit 机器学习算法分类 目录 1. 传统的机器学习算法 vs 深度学习 1 1.1. 传统的机器学习算法包括决策树、聚类、贝
  9. Atitit 软件知识点分类体系 分类 按照书籍的分类 学科分类 体系与基础部分 计算机体系结构 硬件接口技术(usb,agp,pci,div,hdmi) os操作系统 中间件 语言部分
  10. atitit.提升软件开发效率大的总结O5