www.pudn.com > mel_endpointdetection.rar > mel_endpoint.m
function out=mel_endpoint(data)
data=double(data);
%data=filter([1 -0.9375], 1, data);
data=data/max(data);
xe=enframe(data,128,40);
L=128;
w1=window(@hamming,L);
[m,n]=size(xe);
xw=zeros(m,n);
for i=1:m
xw(i,:)=xe(i,:).*w1';
xf(i,:)=fft(xw(i,:),128);
end
y=melfilterbankm(20,128,8000);
for i=1:m
for j=1:20
xs(i,j)=sum(abs(xf(i,1:64)).*y(j,1:64));
end
end
%medial filter
for i=2:m-1
for j=1:20
xx(i,j)=1/3*(xs((i-1),j)+xs(i,j)+xs(i+1,j));
end
end
xx(1,:)=1/3*xs(1,:);
xx(m,:)=1/3*xs(m,:);
%减去噪音后的能量
for i=1:m-1
for j=1:20
noise_freq(j)=1/5*(xx(5,j)+xx(1,j)+xx(2,j)+xx(3,j)+xx(4,j));
X(i,j)=xx(i,j)-noise_freq(j);
% if X(i,j)<0
% X(i,j)=0;
%end
end
end
%the total energy of the almost pure speech signal at the ith band as en(i);
en=sum(X);
%sort band and find usefull band
[S,ind]=sort(en);
%%%%%%%%%%%%%%%%%%%plot
[d,c]=meshgrid(1:20,1:m-1);
figure,mesh(c,d,X);
figure ,contour(c,d,X,12);
out=X;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%rms energy
%x_rms=abs(log10(sqrt(sum(xw.^2')/n)));
x_rms=sqrt(sum(xw.^2')/n);
temp_rms(1)=x_rms(1);
temp_rms(m+2)=x_rms(m);
temp_rms(2:m+1)=x_rms(1:m);
fx_rms= 1/3*(temp_rms(1:m)+temp_rms(2:m+1)+temp_rms(3:m+2));
noise_time=sum(fx_rms(1:5)')';
T=fx_rms-noise_time;