【语音识别】基于matlab GUI声纹识别(带面板)【含Matlab源码 537期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、案例简介

本文基于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特征,比较本次特征和训练库码本之间的欧氏距离。当小于某个阈值,我们认定本次说话的说话人及说话内容与训练码本库中的一致,配对成功。
在这里插入图片描述
4 测试实验
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到只有说话人及说话内容与码本库完全一致时才会显示“密码正确”,否则显示“密码错误”,实现了声纹锁的相关功能。

⛄二、部分源代码

function varargout = test4(varargin)
% TEST4 MATLAB code for test4.fig
% TEST4, by itself, creates a new TEST4 or raises the existing
% singleton*.
%
% H = TEST4 returns the handle to a new TEST4 or the handle to
% the existing singleton*.
%
% TEST4(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in TEST4.M with the given input arguments.
%
% TEST4(‘Property’,‘Value’,…) creates a new TEST4 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before test4_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to test4_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 test4

% Last Modified by GUIDE v2.5 07-Jan-2022 09:58:00

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @test4_OpeningFcn, …
‘gui_OutputFcn’, @test4_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 test4 is made visible.
function test4_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 test4 (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

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

% — Outputs from this function are returned to the command line.
function varargout = test4_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)
% 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)
global thk1 thk2 thk3
global tlc1 tlc2 tlc3
global tlyy1 tlyy2 tlyy3
global tqs1 tqs2 tqs3
global tyqc1 tyqc2 tyqc3
global startpos len

startpos=601;
len=399;
[s,fs]=audioread(‘训练样本hk1.wav’);
thk1= MFCC2par(s,fs);
thk1=thk1(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本hk2.wav’);
thk2= MFCC2par(s,fs);
thk2=thk2(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本hk3.wav’);
thk3= MFCC2par(s,fs);
thk3=thk3(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本lc1.wav’);
tlc1= MFCC2par(s,fs);
tlc1=tlc1(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本lc2.wav’);
tlc2= MFCC2par(s,fs);
tlc2=tlc2(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本lc3.wav’);
tlc3= MFCC2par(s,fs);
tlc3=tlc3(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本lyy1.wav’);
tlyy1= MFCC2par(s,fs);
tlyy1=tlyy1(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本lyy2.wav’);
tlyy2= MFCC2par(s,fs);
tlyy2=tlyy2(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本lyy3.wav’);
tlyy3= MFCC2par(s,fs);
tlyy3=tlyy3(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本qs1.wav’);
tqs1= MFCC2par(s,fs);
tqs1=tqs1(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本qs2.wav’);
tqs2= MFCC2par(s,fs);
tqs2=tqs2(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本qs3.wav’);
tqs3= MFCC2par(s,fs);
tqs3=tqs3(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本yqc1.wav’);
tyqc1= MFCC2par(s,fs);
tyqc1=tyqc1(startpos:startpos+len,1:12);

[s,fs]=audioread(‘训练样本yqc2.wav’);
tyqc2= MFCC2par(s,fs);
tyqc2=tyqc2(startpos:startpos+len,1:12);
function getmfcc= MFCC2par( x,fs)
%=========================================================
% 无去噪及端点检测
% Input:音频数据x,采样率fs
% Output:(N,M)大小的特征参数矩阵 其中N为分帧个数,M为特征维度
% 特征参数:M=24 倒谱系数12维,一阶差分12维
%=========================================================

%[x fs]=wavread(sound);
%取单声道信号
[~,etmp]=size(x);
if (etmp==2)
x=x(:,1);
end

%归一化mel滤波器组系数

bank=melbankm(24,256,fs,0,0.5,‘m’);%Mel滤波器的阶数为24,fft变换的长度为256,采样频率为8000Hz

bank=full(bank);

bank=bank/max(bank(😃);%[24*129]

%设定DCT系数

for k=1:12

n=0:23;

dctcoef(k,:)=cos((2n+1)kpi/(224));

end

%归一化倒谱提升窗口

w=1+6sin(pi[1:12]./12);

w=w/max(w);

%预加重滤波器

xx=double(x);

xx=filter([1-0.9375],1,xx);%预加重

xx=enframe(xx,256,80);%对x 256点分为一帧

%计算每帧的MFCC参数

for i=1:size(xx,1)

y=xx(i,:);%取一帧数据

s=y’.*hamming(256);

t=abs(fft(s));%fft快速傅立叶变换 幅度谱

t=t.^2; %能量谱

%对fft参数进行mel滤波取对数再计算倒谱
c1=dctcoeflog(bankt(1:129));%对能量谱滤波及DCT %t(1:129)对一帧的前128个数(帧移为128)

c2=c1.*w’;%归一化倒谱

%mfcc参数

m(i,:)=c2’;

end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

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

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值