image thumbnail

eogui – a software to analyze electro-oculogram (EOG) recordings

by

 

10 Aug 2011 (Updated )

detects blinks and saccadic eye movements in EOG recordings

grobsuche.m
function [len,x,y,artefakt,blinkflg] = grobsuche(sig1,sig2,sig1diff,sig2diff,posi,parameter)
% $Id: grobsuche.m 9 2004-12-13 18:19:19Z maik $
% sucht das Ende eines mglichen Ereignisses (Grob)

    % init Ausgabeparameter      
    len = 1;        % min lnge
	artefakt{1} = 0;   % bisher keine Artefakt 
    artefakt{2} = 'ok';   % bisher keine Artefakt 
    x=0;            % bisher keine Sakkaden im 1. Kanal
    y=0;            % bisher keine Sakkaden im 2. Kanal
    blinkflg=0;        % bisher kein Blink (die Mglichkeit) gefunden
    
    % init Laufzeitparameter
    blink.found.flg = 0;    % wurde bisher ein Blink erkannt ?
	blink.such.flg = 0;     % Blinksuchmodus    
    fin_flg=0;              % Ereignisende noch nicht erreicht   
	sakk.x.flg = 0;         %keine Sakkade in X Kanal zur Zeit
	sakk.y.flg = 0;         %keine Sakkade in Y Kanal zur Zeit
    
    
    position=posi;
    maxpos=length(sig1);
    blinkflg=0;
    
    while(fin_flg==0) % die Hauptschleife
        position=position+1;    
        
        % prfe auf Dateiende
        if(position+parameter.plateaufenster>maxpos)
            artefakt{1}=4;                      % Fehlercode
            artefakt{2}='Dateiende erreicht';   % Fehlertext            
            return;
        end

                
        dx=  sig1(position+parameter.plateaufenster)-sig1(position);
        dy= sig2(position+parameter.plateaufenster) -sig2(position);
                
        %******************************************************************
        %*  X Sakkaden untersuchen               
        %******************************************************************                
        if(sakk.x.flg==1)
            %---------------------------------------------------------------
            %       zur Zeit befindet sich die Routine in einer X Sakkade
            %---------------------------------------------------------------
            if (abs(dx) < parameter.x.schwellwert)
                sakk.x.flg = 0;     % Rauschschwelle unterschritten? dann ist X Sakkade beendet                
            else
                if( sign(dx) ~= sgn.org.x) % hat sich die Richtung verndert ? dann Artefakt
                    artefakt{1}=3;                      % Fehlercode
                    artefakt{2}='Richtungswechsel in Sakkade (Kanal1)';   % Fehlertext
                    len=leseartefakt(sig1,sig2,position,parameter)-posi;            
                    return;
                end % Richtungsprfung               
            end                                   
        else            
            %---------------------------------------------------------------
            %       zur Zeit befindet sich die Routine nicht in einer X Sakkade
            %--------------------------------------------------------------
                if(abs(dx) > parameter.x.schwellwert)                    
                    sakk.x.flg = 1;     %hier beginnt eine X Sakkade
                    sgn.org.x = sign(dx);
                    x=1;    % fr die Ausgabe, X Sakkade gefunden.
                end
        end % in einer x sakkade
        

        
        %******************************************************************
        %*  Y Sakkaden untersuchen               
        %******************************************************************        
        if(sakk.y.flg==1)
            
            %---------------------------------------------------------------
            %       zur Zeit befindet sich die Routine in einer X Sakkade
            %---------------------------------------------------------------        
            
            
            if (abs(dy) < parameter.y.schwellwert)
                sakk.y.flg = 0;     % Rauschschwelle unterschritten? dann ist Y Sakkade beendet                
            else                                
                
                if( sign(dy) ~= sgn.org.y) % hat sich die Richtung verndert ?                    
                    if(~blinkflg)                        
                        artefakt{1}=3;                      % Fehlercode
                        artefakt{2}='Richtungswechsel in Sakkade (Kanal2)';   % Fehlertext
                        len=leseartefakt(sig1,sig2,position,parameter)-posi;            
                        return;
                    else
                        sakk.y.flg = 0;
                    end;
                end % Richtungswechsel gefunden
            end % in Y Sakkade
             
        else
            %---------------------------------------------------------------
            %       zur Zeit befindet sich die Routine nicht in einer Y Sakkade
            %---------------------------------------------------------------        
            if (abs(dy) > parameter.y.schwellwert)
                sakk.y.flg = 1;
                sgn.org.y = sign(dy);
                y=1;
                if(dy >0) % Aufwrtsbewegung -> Blink mglich
                    blinkflg=1;
                end
            end            
        end % in einer y sakkade
        
        
        %******************************************************************
        %*  Abbruch prfen              
        %******************************************************************        
        if ((sakk.x.flg | sakk.y.flg)==0) % wenn in keiner x und keiner y sakkade, mgliches ende            
            fin_flg=1;                        
        end                     
    end % Hauptschleife
    

    
    
    position=position+round(parameter.plateaufenster/2);
    len=position-posi;
    
    %prfe ob AD Bereich ok ist.
    idx=find(abs(sig1diff(posi:position)) >parameter.x.maxspeedlowpass);
    if ~isempty(idx)
        artefakt{1}=1;                      % Fehlercode
        artefakt{2}='Kanal 1 auerhalb des AD Bereichs';   % Fehlertext                                                          
        len=leseartefakt(sig1,sig2,posi+idx(1),parameter)-posi;            
        return;
    end

    idx=find(abs(sig2diff(posi:position)) >parameter.y.maxspeedlowpass);
    if ~isempty(idx)
        artefakt{1}=2;                      % Fehlercode
        artefakt{2}='Kanal 1 auerhalb des AD Bereichs';   % Fehlertext                                            
        len=leseartefakt(sig1,sig2,posi+idx(1),parameter)-posi;            
        return;              
    end
    
    
    
    

    
    

Contact us