% Eliminación de ruido mediante AP punto a punto eligiendo el stencil segun el minimo de la medida E_2
%   capelimina1escamcpapcone2(x,f,fsin,k,n)
%   Entradas
%      x    = nodos iniciales
%      f    = f(x)
%      fsin = f sin ruido
%      k    = grado para el polinomio de la AP
%      n    = tamaño del stencil
%   Salidas
%      Plot de la funcion con ruido, sin ruido y la reconstruccion
%      ECM y SNR segun varias combinaciones
%
% Autor: José Jaime Noguera.  +INFO: www.uv.es/anims/noguera

function capelimina1escamcpapcone2(x,f,fsin,k,n)
[mx,nx]=size(x);

      %Elijamos el minimo segun E_2
      for i=1:nx
         min=100000000;
         for l=i-n+1:i
            if(l>0 && l<nx-n+1)  % para las fronteras
               suma=0;
               coef=qk(x(l:l+n-1),f(l:l+n-1),k);
               [c1,c2]=size(coef);
               coef1=coef(c1:-1:1);
               for s=1:n
                   sum1=polyval(coef1,x(l+s-1));
                   suma=(sum1-f(l+s-1))^2+suma;
               end
               if(suma<min)
                  min=suma;
                  i1=l;
               end   
            end
         end   
             %La AMC con el stencil elegido
             coef=qk(x(i1:i1+n-1),f(i1:i1+n-1),k);
             coef1=coef(c1:-1:1);
             fa(i)=polyval(coef1,x(i));
      end
          
    %fr la reconstruccion
    %fsin la sin ruido , el ideal a reconstruir
    %fn la funcion original con ruido

    disp('Entre fr y fsin')
    error=mse(fsin,fa);
    error
 
    disp('Entre fr y fn')
    error=mse(f,fa);
    error
    
    disp('Entre fr y fn')
    error=calculosnr(fa,f);
    error
    
    disp('Entre fin y fr')
    error=calculosnr(fsin,fa);
    error
   
hold on
    
plot(x, f,'k.','LineWidth',5,'MarkerSize',5)   
plot(x, fsin,'--k','LineWidth',2) 
plot(x,fa,'-k','LineWidth',3);

%axis([0 1 -0.2 1.2 ]);
%set(gca,'Xtick',[ 0 0.5 1], 'FontSize',15)
%set(gca,'Ytick',[ 0 0.5 1], 'FontSize',15)

%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