% Funzione che definisce accelerazioni, dati magnetici, temperature, date e % livello della batteria per i nodi di tipo Klino Link function [TimeKL,ang_KL,temp_KL,ErrKlinoLink] = defDatiKL(DatiKlinoLink,... ErrKlinoLink,NodoKlinoLink,MEMS,Ndatidespike,rKL,FileName) fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'defDatiKL function started'; fprintf(fileID,fmt,text); [r,c] = size(DatiKlinoLink); Ncorr = 0; % Elimino gli eventuali Not a Number for a = 2:r for b = 1:c check = isnan(DatiKlinoLink(a,b)); if check == 1 DatiKlinoLink(a,b) = DatiKlinoLink(a-1,b); ErrKlinoLink(a,b-1) = 1; Ncorr = Ncorr+1; end end end text = [num2str(Ncorr) ' NaN of Klino Link corrected by defDatiKL function']; fprintf(fileID,fmt,text); [r,c]=size(DatiKlinoLink); TimeKL = DatiKlinoLink(:,1); % data div = (c-1)/rKL; if strcmp(NodoKlinoLink(1,4),'ADC') == 1 || strcmp(NodoKlinoLink{1,4} ,'null') == 1 || ... isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1 ang_KL = zeros(r,rKL*3); % dati angoli p = 4; % passo elseif strcmp(NodoKlinoLink{1,4} ,'Gradi') == 1 if div == 3 ang_KL = zeros(r,rKL*2); p = 3; % passo else ang_KL = zeros(r,rKL*3); p = 4; % passo end end temp_KL = zeros(r,rKL); % temperatura del nodo per la calibrazione s = 1; for i = 1:rKL if strcmp(NodoKlinoLink(1,4),'ADC') == 1 || strcmp(NodoKlinoLink{1,4} ,'null') == 1 ... || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1 ang_KL(:,s) = DatiKlinoLink(:,2+(i-1)*p); ang_KL(:,s+1) = DatiKlinoLink(:,3+(i-1)*p); ang_KL(:,s+2) = DatiKlinoLink(:,4+(i-1)*p); s = s+3; temp_KL(:,i) = DatiKlinoLink(:,5+(i-1)*p); [rT,~] = size(temp_KL); if MEMS == 2 for j = 1:rT if temp_KL(j,i) > 200 temp_KL(j,i) = temp_KL(j,i) - 256; % Correzione della temperatura dei nuovi MEMS end end end elseif strcmp(NodoKlinoLink{1,4} ,'Gradi') ang_KL(:,s) = DatiKlinoLink(:,2+(i-1)*p); ang_KL(:,s+1) = DatiKlinoLink(:,3+(i-1)*p); if div == 3 s = s+2; else ang_KL(:,s+2) = DatiKlinoLink(:,4+(i-1)*p); s = s+3; end temp_KL(:,i) = DatiKlinoLink(:,4+(i-1)*p); end end s = 1; Num_Dati = Ndatidespike; % numero di dati per il despike if Num_Dati > r Num_Dati = r; end for i = 1:rKL % despiking ang_KL(1:end-1,s) = filloutliers(ang_KL(1:end-1,s),'linear','movmedian',Num_Dati); ang_KL(1:end-1,s+1) = filloutliers(ang_KL(1:end-1,s+1),'linear','movmedian',Num_Dati); if strcmp(NodoKlinoLink(1,4),'ADC') == 1 || strcmp(NodoKlinoLink{1,4} ,'null') == 1 ... || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1 ang_KL(1:end-1,s+2) = filloutliers(ang_KL(1:end-1,s+2),'linear','movmedian',Num_Dati); s = s+3; elseif strcmp(NodoKlinoLink{1,4} ,'Gradi') if div == 3 s = s+2; else ang_KL(1:end-1,s+2) = filloutliers(ang_KL(1:end-1,s+2),'linear','movmedian',Num_Dati); s = s+3; end end end text = 'Data of Klino Link defined correctly, defDatiKL function closed'; fprintf(fileID,fmt,text); fclose(fileID); end