📄 vad_fq_snr.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 功能:实现语音活动检测
% 算法实现:可参见文献
% 输入参数说明:语音信号,一帧信号的长度
% 返回参数说明:语音是否活动的标志
% 作者:姜莎
% 日期:2006.08.24
% 修改日期:2006.10.09
% 参考文献:sohn, "A voice activity detector employing soft decision based noise spectrum adaptation"
% 特殊说明:初始值采用第一帧信号的fft的值的模的平方做初始能量,并加上小的初始定值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
signal= wavread('speech02.wav');
L=128; %一帧信号的长度
N=floor(length(signal)./L); %信号总的帧长
input_signal=signal(1:L.*N);
%采用第一帧信号的fft的值模的平方做lambda的初始值
firstframe = input_signal(1:L);
fftfirstframe = fft(firstframe);
lambda = ones(L,1).*(abs(fftfirstframe).^2);
lambda0 = ones(L,1).*((100./(2.^15)).^2); %避免在静音的时候出现snr无穷大的情况
beta = lambda+lambda0; %计算信噪比所采用的背景噪声的能量
%=================================
% snrbuffer = zeros(10,1);
snrthr=5;
% snrtempcnt=0;
%=================================
snr = zeros(N,1);
snrtemp=zeros(N,1);
proratio = 10; %语音和噪声的概率比probabilityratio,给定为10
for i = 1 : N
signalframe = input_signal((i-1).*L+1 : i.*L);
framesigfft = fft(signalframe);
snr = (1./L).*sum(abs(framesigfft).^2./beta);
snrtemp(i) = snr;
if i <= 20
speechactive(i) = 1;
else
if speechactive(i-1)==1
if snrtemp(i) > snrthr
speechactive(i) = 1;
else
logi = (snrtemp(i-19 : i-1) > snrthr);
if sum(logi) >= 3
speechactive(i) =1;
else
speechactive(i) = 0;
end
end
else
if (snrtemp(i) > snrthr && snrtemp(i-1) > snrthr)
speechactive(i) = 1;
else
speechactive(i) = 0;
end
end
end
if speechactive(i) == 0
lambda =(1./(1+snr.*proratio)).*abs(framesigfft).^2+(snr.*proratio/(1+snr.*proratio)).*lambda;
beta = lambda + lambda0;
%=================================
% if snrtemp(i) <=10
% snrtempthr=snrtemp(i);
% end
% for j=1:19
% snrbuffer(j+1) = snrbuffer(j);
% snrbuffer(j)=snrtempthr;
% end
% snrmax=max(snrbuffer(1:20));
% snrtempcnt=snrtempcnt+1;
% if mod(snrtempcnt,20)==0
% if snrmax>=5
% snrthr=snrmax;
% end
% end
%=================================
end
end
%==========================
figure;
plot([1:1:L.*N],input_signal);
hold on
plot([1:L:L.*N],speechactive.*0.2,'r');
%==========================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -