103 lines
3.4 KiB
Matlab
Executable File
103 lines
3.4 KiB
Matlab
Executable File
% 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
|