
%============= Eingaben ====================================
Messung=handles.Messdaten;

%

%Wert, nach dem als erstes gesucht werden soll (Erste Position im Raster)
    hsuchwert=handles.suchwert;
%Entfernung der Messpunkte
    hinkrement=handles.inkrement;
%Zulässige Positionsabweichung zur Erkennung
    htoleranz=handles.toleranz;
%Umrechnungsfaktor V-> °C
    hU=handles.U;       
%Position des IR-Sensors im Bezug zum Festlager
    hPos_IR=325;
%Position der Mutter im Bezug zum Festlager
    hPos_n=215;
%===========================================================


%% Suche

hposition=1;
h=1;

%Vorherige 30. Spalte Löschen, falls vorhanden
if size(Messung,2)==30
    Messung(:,30)=[];
end

hstartwert=hsuchwert;
%Schreibe in die 30. Zeile die Positionsnummer, falls diese im Raster
%liegt und dies für mindestens 2 Werte gilt
while(hsuchwert<1021)
    while(h<length(Messung))
        %Raster = Suchwert +/- Toleranz
        if     (Messung(h,29)<(hsuchwert+htoleranz))&& (Messung(h,29)>(hsuchwert-htoleranz))&& (Messung((h+1),29)<(hsuchwert+htoleranz))&& (Messung((h+1),29)>(hsuchwert-htoleranz))
                             
                        Messung(h,30)=hposition;
                        Messung(h+1,30)=hposition;
          
        end
        
        h=h+1;
    end
    h=1;
    hsuchwert=hsuchwert+hinkrement;
    hposition=hposition+1;
    
    
    
end

%% Filter
%============= Beschreibung ================================
% Filtert die Positionen der Messfahren aus der Hauptmatrix und sortiert
% diese nach den Messpositionen und Messzyklen
% erzeugt am Ende die Matrix Messfahrt_Positionen
%
%===========================================================



%Hilfsvariablen
hj=1;
hpos=1;
hfahrt=1;
hn=1;

hMessfahrt_Positionen=zeros(1,1,1);
hMessfahrt_Temperaturen=zeros(1,1,1);

while(hj<(length(Messung)+1))
    
   %Taster 1-4 
   if (Messung(hj,30)==25); hTaster3(hn,hfahrt)=Messung(hj,6); hTaster4(hn,hfahrt)=Messung(hj,7); end
   %if (Messung(hj,30)==0);  Taster1h(hn,hfahrt)=Messung(hj,4); Taster2h(hn,hfahrt)=Messung(hj,5); end
    
    if     (Messung(hj,30)==hpos)
        hMessfahrt_Positionen(hn,hpos,hfahrt)=(Messung(hj,29));
        hMessfahrt_Temperaturen(hn,hpos,hfahrt)=(Messung(hj,3)*hU);%Aus mV °C;
        hn=hn+1;
        
        
        if(Messung(hj+1,30)==0)
            hpos=hpos+1;
            hn=1;
            if(hpos>((1060-hstartwert)/hinkrement))
                hpos=1;
                hfahrt=hfahrt+1;
                
            end
            
            
        end
    end
    hj=hj+1;
end
%% Positionen, Taster und Temperaturen Mitteln und Verlagerung/Delata T Bestimmen

hpos=60;

%Mitteln und in 2-Dimensionale Matrix umwandeln 
Verschiebungen_GM=mean(hMessfahrt_Positionen(3:6,:,1));
Temperaturen=mean(hMessfahrt_Temperaturen(1:7,:,1));
for h=2:37
Verschiebungen_GM=[Verschiebungen_GM;mean(hMessfahrt_Positionen(3:6,:,h))];
Temperaturen=[Temperaturen;mean(hMessfahrt_Temperaturen(1:7,:,h))];
end

% Von den Ist Positionen die Sollwerte abziehen, damit man Verlagerungen erhält
for h=1:25
        Verschiebungen_GM(:,h)=Verschiebungen_GM(:,h)-hpos;
        hpos=hpos+40;
end

%  Herausrechnen Geometrischer Fehler 
SSF=Verschiebungen_GM(1,:);

for h=1:length(Verschiebungen_GM(:,1))
    
Verschiebungen_GM(h,:)=Verschiebungen_GM(h,:)-SSF;

end

%Delta der Temperaturwerte bestimmen
hT0=Temperaturen(1,:);
DeltaT=Temperaturen;

for h=1:size(DeltaT)
DeltaT(h,:)=DeltaT(h,:)-hT0;
end

%=====Taster=========
 Taster3=zeros(size(hTaster3,2),1);
 Taster4=zeros(size(hTaster4,2),1);

for h=1:size(hTaster3,2)
   Taster3(h,1)=mean(hTaster3(1:6,h))/10;%Mitteln und umrechnen
   Taster4(h,1)=mean(hTaster4(1:6,h))/10;%Mitteln und umrechnen
end

 Taster3(:,1)=Taster3(:,1)-Taster3(1,1);%Abzug der Ausgangsspannung
 Taster4(:,1)=Taster4(:,1)-Taster4(1,1);%Abzug der Ausgangsspannung
 
%% Inkrementelle Verschiebung bestimmen
Verschiebungen_GM_i=Verschiebungen_GM;

%  Von jedem Wert die vorherigen Verschiebungen subtrahieren 
h=length(Verschiebungen_GM(1,:));
while (h>1)
        Verschiebungen_GM_i(:,h)=Verschiebungen_GM_i(:,h)-Verschiebungen_GM_i(:,h-1);
h=h-1;
end

% erstes Stück normieren
Verschiebungen_GM_i(:,1)=Verschiebungen_GM_i(:,1)/7.4;

%% Werte von GM und IR in Kongruenz Bringen
Verschiebungen_GM2=Verschiebungen_GM;


hinterpol=mod(hPos_IR-hPos_n,hinkrement); %um wieviel muss interpoliert werden?
hvers=(hPos_IR-hPos_n-hinterpol)/hinkrement; %wieviele ganze Schritte verschieben?

hVerschiebungen_GM=zeros(0,0);
hVerschiebungen_GM_i=zeros(0,0);

for h=1:(size(Verschiebungen_GM,2)-hvers) %verschiebung um die ganzen Schritte
hVerschiebungen_GM(:,h)=Verschiebungen_GM(:,h+hvers);
hVerschiebungen_GM_i(:,h)=Verschiebungen_GM_i(:,h+hvers);
end

%ab hier lineare Interpolation
for h=1:(size(hVerschiebungen_GM,1)) %Zeilen durchschalten
for hj=1:(size(hVerschiebungen_GM,2)-1)  %Spalten durchschalten
    
ha=hVerschiebungen_GM_i(h,hj+1); %nächster Wert
hb=hVerschiebungen_GM_i(h,hj); %aktueller Wert
ha2=hVerschiebungen_GM(h,hj+1); %nächster Wert
hb2=hVerschiebungen_GM(h,hj); %aktueller Wert
    
    hVerschiebungen_GM_i(h,hj)=hb+(ha-hb)/hinkrement*(hinterpol); %linear Interpolieren
    hVerschiebungen_GM(h,hj)=hb2+(ha2-hb2)/hinkrement*(hinterpol); %linear Interpolieren
end
end
Verschiebungen_GM=hVerschiebungen_GM;
Verschiebungen_GM_i=hVerschiebungen_GM_i(:,1:22);


%DeltaT in der MItte der Abschnitte
for hi =2:23
DeltaT_mid(:,hi-1)=(DeltaT(:,hi)+DeltaT(:,hi-1))/2;
end

%he=size(Verschiebungen_GM,2);

    %DeltaT=DeltaT(:,1:he);



%% Fitting von GM_i und IR
%erste Korrelationsmethode Fit=zeros(size(Verschiebungen_GM_i,2)-1,2);%leere Matrix erstellen (23 Zeilen, 2 Spalten)
Fit2=zeros(size(Verschiebungen_GM_i,2)-1,1);%leere Matrix erstellen (23 Zeilen, 1 Spalte)

for h=1:size(Verschiebungen_GM_i,2)
   %% Variante1
    %erste Korrelationsmethode hp=polyfit(DeltaT_mid(:,h),Verschiebungen_GM_i(:,h),1); %fit von Temperaturen zu Verschiebungen 1=grad des Polynoms
    %erste Korrelationsmethode Fit(h,:)=hp;
    
   %% Variante2
    [hcf_, hgoodness] = fit( DeltaT_mid(:,h),Verschiebungen_GM_i(:,h), 'a*x', 'StartPoint', 0); 
    hp=coeffvalues(hcf_);
      
    
    Fit2(h,1)=hp;
    
    Bestimmtheitsmass(h,1)=hgoodness.rsquare; %für fit()
    
end
%% Ende
%Hilfsvariablen, die mit h Beginnen Löschen
clear -regexp ^h

%% Variablen für GUI zugänglich machen

handles.Temperaturen=Temperaturen;
handles.DeltaT=DeltaT;
handles.SSF=SSF;
handles.Verschiebungen_GM=Verschiebungen_GM;
handles.Verschiebungen_GM_i=Verschiebungen_GM_i;
handles.Taster3=Taster3;
handles.Taster4=Taster4;
handles.DeltaT_mid=DeltaT_mid;
handles.Fit2=Fit2;
handles.Bestimmtheitsmass=Bestimmtheitsmass;
guidata(Messdaten_Aufbereitung,handles);

