function [x2,y2,yComp,area,max_ex,min_ex,mediana_ex,...
        media_ex,desv_ex,xmax_loc_ex,...
        ymax_loc_ex,xmin_loc_ex,...
        ymin_loc_ex]=porcion_caract(x,y,x0,x1,tasa_muestreo,N,metodo)

%Función que me proporciona una serie de cálculos básicos, pero para
%un intervalo concreto de valores. Las operaciones que se van a realizar es
%el area, maximo, minimo, media, mediana, desviacion, maximos y minimos
%locales.
%los valores de entrada son: los datos originales, los extremos, la tasa de
%muestreo, el orden con el queremo aproximar y el metodo que usamos para
%calcular el area.
		
x2   = [];		   %Variables donde almacenamos las muestras entre las
y2   = [];		   %que queremos trabajar
cad1 = '+';        %Cadenas que usamos en la concatenacion para la creacion del polinomio
cad2 = '*x.^';
f    = '';         %Almacenamos el polinomio
area = 0;
yComp= [];

%Calculamos los puntos a los que corresponden los extremos. Hemos
%redondeado para obtener los puntos donde hemos muestreado
i = round(x0/tasa_muestreo+1);
j = round(x1/tasa_muestreo+1);

x2 = x(i:j);
y2 = y(i:j);

if(metodo==2)
    %USAMOS EL METODO DE LA APROXIMACION DE SIMPSON
    %para calcular el polinomio de interpolacion necesitamos un orden, este
    %siempre debe ser un orden de magnitud menor que la longitud del vector
    %para obtener los resultados mas reales. El problema que presenta esto es
    %que si tenemos muchos puntos para aproximar el orden se nos haria muy
    %elevado y no es idoneo por lo que vamos a usar como maximo el orden 7.
    % Si se tiene menos puntos que el orden introducido por el usuario, no
    % tiene sentido tomar el orden introducido por el usuario, sino la longitud
    % del vector que contiene los puntos que queremos caracterizar menos 1
    if ((length(x2)-1)<N)              
        num = length(x2)-1;              
    else                
        num = N;
    end
    
    p = polyfit(x2,y2,num);         
    
    %una vez obtenido los coeficientes del polinomio, creamos el polinomio de
    %interpolacion. Para ello concatenamos una serie de cadenas
    for i=1:num                   
        aux1 = strcat(num2str(p(i)));
        f = strcat(f,aux1);
        aux2 = strcat(cad2,num2str(num-i+1));
        f = strcat(f,aux2);
        f = strcat(f,cad1);    
    end
    f = strcat(f,num2str(p(num+1)));
    %Convertimos la funcion a inline
    F = inline(f); 
    area = quad(F,x0,x1);
    
    % Comprobacion de la funcion que entra en quad
    yComp = [];
    yComp = F(x2);

else
    %USAMOS EL METODO DE LA APROXIMACION TRAPEZOIDAL  17-8
    %Vamos localizando los minimos entre los extremos introducidos por el
    %usuario y entre estos aplicamos trapz -aproximacion trapezoidal-
    h = [];                       %localizamos los minimos en el intervalo
    h = imregionalmin(y2);        %1 en el sitio donde existe el minimo
    
    posicionMin=[];               %Vector con la posicion de los minimos
    posicionMin=find(h);
    long=length(posicionMin);
    
    %Se suuma el area de la region entre 2 minimos consecutivos
    for i=1:(long-1)
        area=area + trapz(x2(posicionMin(i):posicionMin(i+1)),...
            y2(posicionMin(i):posicionMin(i+1)));
    end
end


%Una vez calculado el áea pasamos a realizar los mismos calculos para su
%caracterizacion general. Hemos introducido los correspondientes datos y
%como numero de canal 1 porque solo se realizara para el canal concreto que
%introduzca el usuario.
[max_ex,min_ex,mediana_ex,...
        media_ex,desv_ex,xmax_loc_ex,...
        ymax_loc_ex,xmin_loc_ex,ymin_loc_ex]=caract_general(x2,y2,1,0);
    
