function [amplitude,phase,timeDifference] = berechneAmpPhs(Simulationszeit,frequenz,sigInput,sigOutput)

tn = Simulationszeit;
f  = frequenz;
sn= sigOutput;
sn2= sigInput;

[stelle,stellePos,stelleNeg,anzNullPos,anzNullNeg] = berechneSchnittpunkte(sn,tn);

if sn(2) > 0
    anfangswert = 1;
else 
    anfangswert = 0;
end

[posMat,negMat,~,l] = berechneNullmatrizen(anfangswert,stelle);

if sn(2) > 0
    switcher = 2; %bei switcher = 2 -> positver wert
else
    switcher = 1; %bei switcher = 1 -> negativer wert
end

counterPos = 1;
counterNeg = 1;
allerErsterSchritt = 1;
for i = 1:length(l)
    if isEven(switcher) == 1 % erst positiv
        
        if  allerErsterSchritt == 1
            posMat(counterPos,1:l(i)) = sn(stelle(i):stelle(i+1)); 
            counterPos = counterPos + 1;
            switcher = switcher + 1;  
            allerErsterSchritt = allerErsterSchritt + 1;
        else        
            posMat(counterPos,1:l(i)) = sn(stelle(i)+1:stelle(i+1)); 
            counterPos = counterPos + 1;
            switcher = switcher + 1;
        end
        
    else % isEven(switcher) == 0 --> erst negativ
        
        if allerErsterSchritt == 1
           negMat(counterNeg,1:l(i)) = sn(stelle(i):stelle(i+1)); 
           counterNeg = counterNeg + 1;
           switcher = switcher + 1; 
           allerErsterSchritt = allerErsterSchritt + 1;
        else
           negMat(counterNeg,1:l(i)) = sn((stelle(i)+1):stelle(i+1));
           counterNeg = counterNeg + 1;
           switcher = switcher + 1;
        end
        
    end
end

% Amplituden ermitteln 
maxWertPos = zeros(1,length(posMat(:,1)));

for i = 1:length(posMat(:,1))
    maxWertPos(1,i) = max(posMat(i,:));
end

for i = 1:(length(maxWertPos) - 1)
    
   if maxWertPos(i) > maxWertPos(i+1)
       diff = abs(maxWertPos(i) - maxWertPos(i+1));     % differenz aus amplituden bilden
       a = (maxWertPos(i) - (maxWertPos(i)*0.99));
       if diff < a
           %Wenn die Differenz klein genug ist, Maximalwert an der Stelle 
           % i = "amp";
           amp = maxWertPos(i);
           [~,stelleAmp] = max(sn==amp);    % an welcher Stelle "[1,?]" steht
                                            % diese Amplitude im
                                            % Signalvektor?
           tAmp = tn(stelleAmp);        % zugehörige Zeit im Zeitvektor suchen 

                for k = 1:length(anzNullPos)

                    if anzNullPos(1,k) > tAmp
                        tM = anzNullPos(1,k);
                        break
                    else
                        k = k + 1;
                    end                   
                end
                [~,spalte_tM] = max(anzNullPos==tM);

                for k = 1:length(anzNullNeg)

                    if anzNullNeg(1,k) > tAmp
                        tR = anzNullNeg(1,k);
                        break
                    else
                        k = k + 1;
                    end    
                end
                [~,spalte_tR] = max(anzNullNeg==tR);
                
                
                for k = 1:length(stelleNeg)

                    if stelleNeg(1,k) == spalte_tR
                            if k == 1           % wenn das signal sofort eingeschwungen ist,
                                spalte_tL = 1;  % steht in "stelleNeg" als erster negativer
                                break           % Nulldurchgang die Spaltenzahl für 0s. Die 
                            else                % brauche ich aber um tL zu bestimmen, was dann
                                spalte_tL = stelleNeg(1,k-1); % einfach Null ist. Deshalb die Abfrage für k == 1
                                break
                            end                          
                    else
                        k = k + 1;
                    end

                end
                tL = tn(1,spalte_tL);
               
               % Berechnen der Flächen durch integrieren in den Grenzen von
               % tL,tM,tR
               flaechePos = abs(trapz(tn(spalte_tL:spalte_tM),sn(spalte_tL:spalte_tM)));
               flaecheNeg = abs(trapz(tn(spalte_tM:spalte_tR),sn(spalte_tM:spalte_tR)));

               diffFlaeche = abs(flaechePos - flaecheNeg);  % Diff der Flächen bilden
               
                    if flaechePos > flaecheNeg
                        if diffFlaeche < (flaechePos - (flaechePos * 0.99))
                            amplitude = amp;
                            tOut = tM;
                            break
                        else
                            i  = i + 1;
                        end
                    else%flaecheNeg > flaechePos
                        if diffFlaeche < (flaecheNeg - (flaecheNeg * 0.99))
                            amplitude = amp;
                            tOut = tM;
                            break
                        else
                            i = i + 1;
                        end
                    end
                        
           
       else
           i = i + 1;
       end
   else% maxWertPos(i+1) > maxWertPos(i) 
       diff = abs(maxWertPos(i) - maxWertPos(i+1));
       b = (maxWertPos(i+1) - (maxWertPos(i+1)*0.99));
       if diff < b
           %Wenn die Differenz klein genug ist, Maximalwert an der Stelle 
           % i+1 = "amp";
           amp = maxWertPos(i+1);
           [~,stelleAmp] = max(sn==amp);    % an welcher Stelle "[1,?]" steht
                                            % diese Amplitude im
                                            % Signalvektor?
           tAmp = tn(stelleAmp);        % zugehörige Zeit im Zeitvektor suchen 
           
               % + anzNullPos = [0 0 0 0 2.43s 0 0 3.12s ...0] --> alle
               %   positives Nulldurchgänge enthalten
               % + Zeit tR raussuchen! ein "positiver nulldurchgang" nach
               % tAmp
                for k = 1:length(anzNullPos)                   
                    if anzNullPos(1,k) > tAmp
                        tR = anzNullPos(1,k);
                        break
                    else
                        k = k + 1;
                    end              
                end
                [~,spalte_tR] = max(anzNullPos==tR);% Spaltennummer von tR
                
                % stellePos = [3332 4992 ...] --> alle positiven
                % Nulldurchgänge hintereinander ohne Nullen ABER nur deren 
                % Position im Zeitvektor!
                for k = 1:length(stellePos)                 
                    if stellePos(k) == spalte_tR    % Wenn Spaltennummer von tR erreicht ist,
                        spalte_tL = stellePos(k-1); % setzte: spaltennummer von tL = stellePos(k-1)
                        break
                    else
                        k = k + 1;
                    end    
                end
                tL = anzNullPos(1,spalte_tL);       % tL berechnen: nur dessen Spalte angeben!
                
                % das gleiche Prozedere nochmal zur Berechnung der Zeit und
                % Spaltennummern von tM und tM_hilfe!! Skizze!!
                for k = 1:length(anzNullNeg)
                    if anzNullNeg(1,k) > tAmp
                        tM_hilfe = anzNullNeg(k);
                        break
                    else
                        k = k + 1;
                    end                   
                end
                [~,spalte_tM_hilfe] = max(anzNullNeg==tM_hilfe);

                for k = 1:length(stelleNeg)    
                    if stelleNeg(k) == spalte_tM_hilfe
                        spalte_tM = stelleNeg(k-1);
                        break
                    else
                        k = k + 1;
                    end    
                end
                tM = anzNullNeg(1,spalte_tM);
               
               % Berechnen der Flächen durch integrieren in den Grenzen von
               % tL,tM,tR
               flaechePos = trapz(tn(spalte_tM:spalte_tR),sn(spalte_tM:spalte_tR));
               flaecheNeg = trapz(tn(spalte_tL:spalte_tM),sn(spalte_tL:spalte_tM));

               diffFlaeche = abs(flaechePos - flaecheNeg);  % Diff der Flächen bilden
               
                    if flaechePos > flaecheNeg
                        if diffFlaeche < (flaechePos - (flaechePos * 0.99))
                            amplitude = amp;
                            tOut = tR;
                            break
                        else
                            i  = i + 1;
                        end
                    else%flaecheNeg > flaechePos
                        if diffFlaeche < (flaecheNeg - (flaecheNeg * 0.99))
                            amplitude = amp;
                            tOut = tR;
                            break
                        else
                            i = i + 1;
                        end
                    end
                    
       else
           i = i + 1;
       end
   end
   
end

% Phasenverschiebung berechnen
tAmplitude = tAmp;

% Nulldurchgänge des Eingangssignals
[~,stellePosInput,~,anzNullPosInput,~] = berechneSchnittpunkte(sn2,tn);

for i = 1:length(anzNullPosInput)
    if anzNullPosInput(1,i) > tOut
        tIn_hilfe = anzNullPosInput(1,i);
        break
    else
        i = i + 1;
    end
end
[~,spalte_tIn_hilfe] = max(anzNullPosInput==tIn_hilfe);

for i = 1:length(stellePosInput)
    if stellePosInput(1,i) == spalte_tIn_hilfe
        spalte_tIn = stellePosInput(1,i-1);
        break
    else
        i = i + 1;
    end   
end
tIn = anzNullPosInput(1,spalte_tIn);

% Zeitdifferenz berechnen 
timeDifference = tOut - tIn;
phase = -1*180 * 2 * f * timeDifference;