目录
1.算法仿真效果
matlab2022a仿真结果如下:
短时能量法
短时自相关法
对比:
2.MATLAB源码
0004..................................................................
function [voiceseg,vsl,SF,NF,amp,zcr]=vad_TwoThr(x,wlen,inc,NIS)
x=x(:); % 把x转换成列数组
maxsilence = 15; % 初始化
minlen = 5;
status = 0;
count = 0;
silence = 0;
y=enframe(x,wlen,inc)'; % 分帧
fn=size(y,2); % 帧数
% amp=sum(y.^2); % 求取短时平均能量
amp=STEn(x,wlen,inc); % 求取短时平均能量
% zcr1=zc2(y,fn); % 计算短时平均过零率
zcr=STZcr(x,wlen,inc); % 计算短时平均过零率
ampth=mean(amp(1:NIS)); % 计算初始无话段区间能量和过零率的平均值
zcrth=mean(zcr(1:NIS));
amp2=2*ampth; amp1=4*ampth; % 设置能量和过零率的阈值
zcr2=2*zcrth;
%开始端点检测
xn=1;
for n=1:fn
switch status
case {0,1} % 0 = 静音, 1 = 可能开始
if amp(n) > amp1 % 确信进入语音段
x1(xn) = max(n-count(xn)-1,1);
status = 2;
silence(xn) = 0;
count(xn) = count(xn) + 1;
elseif amp(n) > amp2 | ... % 可能处于语音段
zcr(n) > zcr2
status = 1;
count(xn) = count(xn) + 1;
else % 静音状态
status = 0;
count(xn) = 0;
x1(xn)=0;
x2(xn)=0;
end
case 2, % 2 = 语音段
if amp(n) > amp2 & ... % 保持在语音段
zcr(n) > zcr2
count(xn) = count(xn) + 1;
else % 语音将结束
silence(xn) = silence(xn)+1;
if silence(xn) < maxsilence % 静音还不够长,语音尚未结束
count(xn) = count(xn) + 1;
elseif count(xn) < minlen % 语音长度太短,认为是静音或噪声
status = 0;
silence(xn) = 0;
count(xn) = 0;
else % 语音结束
status = 3;
x2(xn)=x1(xn)+count(xn);
end
end
case 3, % 语音结束,为下一个语音准备
status = 0;
xn=xn+1;
count(xn) = 0;
silence(xn)=0;
x1(xn)=0;
x2(xn)=0;
end
end
el=length(x1);
if x1(el)==0, el=el-1; end % 获得x1的实际长度
if x2(el)==0 % 如果x2最后一个值为0,对它设置为fn
fprintf('Error: Not find endding point!\n');
x2(el)=fn;
end
SF=zeros(1,fn); % 按x1和x2,对SF和NF赋值
NF=ones(1,fn);
for i=1 : el
SF(x1(i):x2(i))=1;
NF(x1(i):x2(i))=0;
end
speechIndex=find(SF==1); % 计算voiceseg
voiceseg=findSegment(speechIndex);
vsl=length(voiceseg);
3.算法概述
基音检测是语音信号处理中的一个重要环节,主要用于确定语音信号中基音周期,这对于语音识别、语音合成、声音美化等领域具有重要意义。基音周期通常对应于声门振动的频率,与说话人的性别、年龄以及情绪等因素紧密相关。
3.1 短时能量法
短时能量法基于这样一个事实:在基音周期内,声带的振动会导致能量的周期性变化。在基音周期的峰值附近,能量较高,而在周期的谷值附近,能量较低。因此,通过分析信号的能量变化,可以估计出基音周期。
3.2 短时自相关法
短时自相关法利用了语音信号在基音周期内的相似性。当一个周期结束时,信号往往会与下一个周期开始的部分相似,这一特性在自相关函数中体现为周期性的峰值。
在实际应用中,短时能量法和短时自相关法往往联合使用,以互补各自的不足。短时能量法对于噪声鲁棒性较好,但可能因信号的动态范围变化而产生误差;而短时自相关法对于周期性的捕捉更为精确,但在噪声环境下易受干扰。结合二者,可以通过能量阈值来筛选自相关函数中的峰值,或者利用能量变化指导自相关峰值的选择,从而提高基音检测的稳定性和准确性。
4.部分参考文献
[1]冯康,时慧琨.语音信号基音检测的现状及展望[J].微机发展, 2004, 14(3):5.DOI:10.3969/j.issn.1673-629X.2004.03.032.
[1]马莎莎,戴曙光,穆平安.基于短时能量的循环AMDF基音检测算法[J].计算机仿真, 2014, 31(7):5.DOI:10.3969/j.issn.1006-9348.2014.07.063.
5.程序内容,运行方法和源码获取
5.1 程序包括
matlab程序,WAV测试样本,说明文档
5.2 运行方法
1.在matlab的左侧的当前文件夹窗口;
2.先运行算法1和算法2两个文件夹里面的程序,然后再运行compared;
5.3 源码获取
step1.打开博客主页的左侧推广栏查看,或扫博客文章底部信息
step2.然后用电脑打开网页链接,输入文章标题搜索