function[Minmm,PicosR,RR] = WavHilbFilt_Detecta_QRS_Experimento01_v2(Matin,AmostraIni,sfreq,Lwin,Lgap1,Lgap2,batimento_anterior,UltBloco,IdIter)

global Fam kernelx
global limiar
global Nbatmin Nbatmax vetor_eg

%[Nder,Nsamp]=size(Matin);
Nsamp = length(Matin);
Nder = 1;
Fam=sfreq;
Mout = [];
Minmm = [];

Medias_On = [];
Medias_Off = [];



for ider = 1:Nder
    
    

    %exame = Matin(ider,1:Nsamp);
    exame = Matin(1:Nsamp);
    
    
%     sinalf = FiltroECGWandering_Wavelet3(exame,sfreq);
%     
    % sinalf2 = FiltroECGMuscular3_WaveletFs250(exame,sfreq);
%     sinalf2 = FiltroECGMuscular_WaveletFs256_TesteArduino_1nivel(exame,sfreq,'db7');
%     if length(sinalf2) < length(sinalf)
%         sinalf2 = [sinalf2 sinalf(end)];
%     end
        
%    sinalf2 = exame;
    
    
%    exame = sinalf2;
    ECG = exame;
    Fam = sfreq;
    
    
    T0 = length(exame);  
    Int0 = exame;

   
    if sfreq <= 128
        SetEscala = [1 2];
    else SetEscala = [4 8 16];
    end

%    SetEscala = [1 2 4 8];
    desvio_pontos_fid = [];
    desvio_picos_R1 = [];


    Nbatmin = floor(5*T0/Fam);
    Nbatmax = round(90*T0/Fam);
    vetFPLimiar = [];
    
    for valorEscala = 1:length(SetEscala)
    
    
        picos_R1=[];
        [Wavelet_Filha,XW] = CHAPEU_MEXICANO(SetEscala(valorEscala));
        FInt0 = FiltFiltJP(Int0,Wavelet_Filha);
               
        dFInt0 = FInt0(2:end) - FInt0(1:end-1);
    
        ZdFInt0 = Transf_Hilbert2(dFInt0);
        
        EnvInt0 = abs(ZdFInt0);
        
        
        [picos_R1,desvio_pfid,FPlimiarEscala] = Det_PrBat2_Detecta_QRS_Experimento01(EnvInt0,Int0,ider);
        IBB = picos_R1(2:end)-picos_R1(1:end-1);
        desvio_picos_R1(valorEscala) = std(IBB);
        desvio_pontos_fid(valorEscala) = desvio_pfid;
        desvio_pontos_fid(valorEscala) = std(IBB)*desvio_pfid;
        vetFPLimiar(valorEscala) = FPlimiarEscala;
        IBB = 0;
            
    end
    
    if desvio_pontos_fid(1) < 0 | desvio_pontos_fid(1) > 0
        testeteste=0;
    else desvio_pontos_fid(1) = inf;
    end
        
        
    EscalaSel = [];
    valorRef1 = 1;
    valorRef = desvio_pontos_fid(1);
    EscalaSel = 1;
    for valorEscala = valorRef1(1)+1:length(SetEscala)
        if desvio_pontos_fid(valorEscala) < valorRef 
            valorRef = desvio_pontos_fid(valorEscala);
            EscalaSel = valorEscala;
        end
    end
    
    STD_R(ider) = desvio_pontos_fid(EscalaSel);

    FPlimiarEscala = vetFPLimiar(EscalaSel);
    
    
    EscalaSel = SetEscala(EscalaSel);

    
    
    Wavelet_Filha = CHAPEU_MEXICANO(EscalaSel);


    FInt0 = FiltFiltJP(Int0,Wavelet_Filha);
        
    dFInt0 = FInt0(2:end) - FInt0(1:end-1);
    
    ZdFInt0 = Transf_Hilbert2(dFInt0);
        
    EnvInt0 = abs(ZdFInt0);
    
    Mout = [Mout;EnvInt0];
    Minmm = [Minmm;exame];
    
    
       
end

% if Lgap1 == 0
%     close(figure(1));
%     figure(1);plot((1:length(exame))/sfreq,exame);
%     EscalaSel
%     hold on;
%     plot((1:length(EnvInt0))/sfreq,EnvInt0,'r');
%     keyboard;
%     close(figure(1));
% end




    
    Sout = sum(Mout);
    [picos_R1,desvio_pfid,FPlimiarEscala] = Det_PrBat2_Detecta_QRS_Experimento01(Mout(1:end),Minmm(1:Nsamp),0);
    
    picos_uteis = find(picos_R1 > Lgap1 & picos_R1 <= Lwin + Lgap1 + round(0.005*sfreq) & picos_R1 > round(0.005*sfreq + batimento_anterior));
    
    picos_R1u = picos_R1(picos_uteis);
    
    PicosR = picos_R1u;
    if length(PicosR) == 0
        keyboard;
    end
   
%     close(figure(1));
%     figure(1);plot((1:length(exame))/sfreq,exame);
%     EscalaSel
%     hold on;
%     plot((1:length(EnvInt0))/sfreq,EnvInt0,'r');
%     plot(picos_R1/sfreq,exame(picos_R1),'ro');
%     keyboard;
%     close(figure(1));
    
    

    
    
 
    
    
    
picos_R1u = PicosR;
    
if IdIter > 0 
        RR = [picos_R1u(1)-batimento_anterior picos_R1u(2:end)-picos_R1u(1:end-1)];
else RR = picos_R1u(2:end) - picos_R1u(1:end-1);
end
    
    
picos_R1u = picos_R1u - Lgap1;

PicosR = picos_R1u;

 
if UltBloco == 0
    Minmm = Minmm(Lgap1+1:Lwin+Lgap1);
    Mout = Mout(Lgap1+1:Lwin+Lgap1);
else Minmm = Minmm(Lgap1+1:end);
     Mout = Mout(Lgap1+1:end);
end
    
    
