% Deteccion de discontinuidades para funciones con ruido mediante el uso de wavelets (DB4) y umbral VISU.
%    cap1wavedetecnoiseu(x,f)
%    Entradas:
%         x  = nodos iniciales 
%         y  = f(x)
%     Salidas:
%         plots de la funcion y la localizacion de los saltos(-^)
% 
% Autor: José Jaime Noguera   +INFO: www.uv.es/anims/noguera

function cap1wavedetecnoiseu(x,f)

pasos=1;
m=length(x);
num=m;

alfa(pasos+1,:)=f(:)';

c(1)=(1+sqrt(3))/(4*sqrt(2));
c(2)=(3+sqrt(3))/(4*sqrt(2));
c(3)=(3-sqrt(3))/(4*sqrt(2));
c(4)=(1-sqrt(3))/(4*sqrt(2));
h(1)=c(4); h(2)=-c(3); h(3)=c(2); h(4)=-c(1);

hold on

 for j=pasos:-1:1
    m=m/2;   
    for i=1:m-1             
       beta(j,i)=h(1)*alfa(j+1,2*i-1)+h(2)*alfa(j+1,2*i)+h(3)*alfa(j+1,2*i+1)+h(4)*alfa(j+1,2*i+2);
    end     
 end
 
 %VISU-SHRINK
 desviacion=median(abs(beta(pasos,1:m-1)))/0.6745; %MAD/0.6745
 landa=desviacion*sqrt(2*log(num));
     i=1;
     while i<=m-1      
             if(abs(beta(1,i))>=landa)
                 if(abs(beta(1,i+1))>=landa)
                     plot([x(2*i+2),x(2*i+2)],[0.4,0.6],'^-r','LineWidth',2);
                     i=i+1;
                 elseif(abs(beta(1,i+1))<landa)                   
                     plot([x(2*i+1),x(2*i+1)],[0.4,0.6],'^-r','LineWidth',2); 
                     i=i+1;
                 end         
             end
             i=i+1;
     end 

plot(x, f,'k.','MarkerSize',5)               

axis([0 1 -0.1 1.1 ]);
set(gca,'Xtick',[0 .5 1], 'FontSize',15)
set(gca,'Ytick',[0 .5 1], 'FontSize',15)
box
hold off
