【语音判别】基于matlab双门限法判别语音信号【含Matlab源码 1720期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【语音判别】基于matlab双门限法判别语音信号【含Matlab源码 1720期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、短时能量简介
1 基本概念
双门限法最初是基于短时平均能量和短时平均过零率而提出的,其原理是汉语的韵母中有元音,能量较大,所以可以从短时平均能量中找到韵母,而声母是辅音,它们的频率较高,相应的短时平均过零率较大,所以用这两个特点找出声母和韵母,等于找出完整的汉语音节。双门限法是使用二级判决来实现的。
2 第一级判决
①根据在语音短时能量包络线上选取的一个较高阈值(门限)T2(图中以虚水平线表示)进行一次粗判,就是高于该T2阈值肯定是语音(即在CD段之间肯定是语音),而语音起止点应位于该阈值与短时能量包络交点所对应的时间点之外(即在CD段之外)。
②在平均能量上确定一个较低的阈值(门限)T(图中以实水平线表示),并从C点往左、从D点往右搜索,分别找到短时能量包络与阈值T:相交的两个点B和E,于是BE段就是用双门限法根据短时能量所判定的语音段的起止点位置。
3 第二级判决
以短时平均过零率为准,从B点往左和从E点往右搜索,找到短时平均过零率低于某个阈值(门限)T3的两点A和F(图中T3以水平虚线表示),这便是语音段的起止点。
根据这两级判决,求出了语音的起始点位置A和结束点位置F。但考虑到语音发音时单词之间的静音区会有一个最小长度表示发音间的停顿,就是在小于阈值T3满足这样一个最小长度后才判断为该语音段结束,实际上相当于延长了语音尾音的长度,如图6-1-1中在语音波形图上标出语音的起止点分别为A和F+(从图中看出终止点位置为F,而实际处理中延长到F+)。
在端点检测的具体运行中,首先是对语音分帧(第2章已做过介绍),在分帧基础上方能求出短时平均能量和短时平均过零率, 然后逐帧地依阈值进行比较和判断。
三、部分源代码
clear all; clc; close all;
filedir=[]; % 指定文件路径
filename='s.wav'; % 指定文件名
fle=[filedir filename] % 构成路径和文件名的字符串
[x,fs]=audioread(fle); % 读入数据文件
x=x/max(abs(x)); % 幅度归一化
N=length(x); % 取信号长度
time=(0:N-1)/fs; % 计算时间
pos = get(gcf,'Position'); % 作图
set(gcf,'Position',[pos(1), pos(2)-100,pos(3),(pos(4)-200)]);
plot(time,x,'k');
title('男声“蓝天,白云,碧绿的大海”的端点检测');
ylabel('幅值'); axis([0 max(time) -1 1]); grid;
xlabel('时间/s');
wlen=200; inc=80; % 分帧参数
IS=0.1; overlap=wlen-inc; % 设置IS
NIS=fix((IS*fs-wlen)/inc +1); % 计算NIS
fn=fix((N-wlen)/inc)+1; % 求帧数
frameTime=frame2time(fn, wlen, inc, fs);% 计算每帧对应的时间
[voiceseg,vsl,SF,NF]=vad_ezm1(x,wlen,inc,NIS); % 端点检测
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]宋云飞,姜占才,魏中华.基于MATLAB GUI的语音处理界面设计[J].科技信息. 2013,(02)
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/123027418
- 点赞
- 收藏
- 关注作者
评论(0)