%   p = IdentificaPatron(patrones,QRS,umbral,n_patrones)
%
%   Esta función identifica el patrón al que corresponde un complejo QRS
%   dado. En el caso de que el QRS no corresponda a ningún tipo de patrón 
%   perteneciente al conjunto de patrones, la función devuelve p=0
%   
%   Parámetros de entrada
%       patrones [matriz]:   conjunto de patrones de QRS organizados en filas
%       QRS [vector]:        QRS actual 
%
%   Parámetro de entrada opcional:
%       umbral [real]:       umbral de correlación para la comparación de patrones (entre 0 y 1)
%       n_patrones: Número máximo de patrones a generar
%       
%   Parámetro de salida
%       p [entero]:          índice correspondiente al tipo de patrón identificado
%

function p = IdentificaPatron(patrones,senyal,umbral,n_patrones)
% Si no se mete umbral por defecto es 0.9 
% Si no se mete n_patrones por defecto son 8
%% Parámetros opcionales
if nargin < 3
    umbral = 0.9;
elseif nargin < 4
    umbral = umbral;
    n_patrones = 8;         
else
    umbral = umbral;
    n_patrones = n_patrones;
end

%% Obtención del patron (OBTENCIÓN POR CORRELACIÓN)
if (isempty(patrones) && (size(patrones,1) < n_patrones))
% Los patrones son actualizados en la función "ClasificaSenyal".
    p = 0;  % No corresponde con ninguno de los patrones que hay
else
    for n=1:1:size(patrones,1)
        cof(n) = corr(patrones(n,:)',senyal'); % Calcula la correlación entre el patron y el QRS 
    end
    [max_cof,pos_max] = max(cof);
    if max_cof >= umbral
        p = pos_max;  % Posición del patrón con el que corresponde
    elseif size(patrones,1) >= n_patrones
        p = pos_max;  % Asigna ese complejo al tipo de máxima covarianza 
                      % (mayor similitud morfológica)
    else
        p = 0; % No corresponde con ningún patron existente
    end
end 
end

