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;