Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
131
Tilt/MediaDati_TL.m
Executable file
131
Tilt/MediaDati_TL.m
Executable file
@@ -0,0 +1,131 @@
|
||||
% Questa routine calcola le medie (giornaliere o per intervalli definiti)
|
||||
% necessarie per le elaborazioni successive per i TiltLink
|
||||
% ACCdef contiene le medie per l'intervallo definito delle accelerazioni
|
||||
% ARRAYdate contiene le date e il tempo per ogni dato (per media
|
||||
% giornaliera, la data di quel giorno)
|
||||
|
||||
function [ACCdef,MAGdef,ARRAYdateTL,ACCdefRis,MAGdefRis_TL,TempDef_TL] = MediaDati_TL(...
|
||||
accTL,magTL,TimeTL,ris_acc,ris_mag,tempTL,tolleranzaAcc,...
|
||||
tolleranzaMag,NdatiMedia,FileName)
|
||||
|
||||
fileID = fopen(FileName,'a');
|
||||
fmt = '%s \r';
|
||||
text = 'MediaDati_TL function started';
|
||||
fprintf(fileID,fmt,text);
|
||||
|
||||
%% Accelerazione
|
||||
[r,~]=size(accTL);
|
||||
if NdatiMedia > r
|
||||
NdatiMedia = r;
|
||||
end
|
||||
ACCdef = smoothdata(accTL,'gaussian',NdatiMedia);
|
||||
|
||||
%% Matrice date
|
||||
ARRAYdateTL = TimeTL;
|
||||
|
||||
%% Risultante acc
|
||||
ACCdefRis = ris_acc; % Non faccio la media, mi serve il dato come è per applicare i filtri
|
||||
|
||||
% Applico un controllo importante! Se la risultante varia più di 0.01, NON
|
||||
% faccio la media dei dati attorno, che altrimenti ne sono condizionati!
|
||||
[r,c] = size(ACCdefRis); % Nodi in colonna, date in riga
|
||||
Win = NdatiMedia/2; % Individuo la finestra da NON mediare
|
||||
cont = 0; % Contatore
|
||||
cont2 = 0;
|
||||
for i = 2:r % data
|
||||
for j = 2:c % nodo
|
||||
% se il valore assoluto della differenza è maggiore della
|
||||
% tolleranza, NON faccio la media
|
||||
if abs(ACCdefRis(i,j)-ACCdefRis(i-1,j)) > tolleranzaAcc || ACCdefRis(i,j) < 0.9 || ACCdefRis(i,j) > 1.1
|
||||
Sp = i-Win; % Punto di partenza (date)
|
||||
if Sp <= 0
|
||||
Sp = 1;
|
||||
end
|
||||
if i+Win > r
|
||||
Ep = r;
|
||||
else
|
||||
Ep = i+Win; % Punto di arrivo (date)
|
||||
end
|
||||
Cax = 3*j-2;
|
||||
Cay = 3*j-1;
|
||||
Caz = 3*j;
|
||||
ACCdef(Sp:Ep,Cax) = accTL(Sp:Ep,Cax); % ax
|
||||
ACCdef(Sp:Ep,Cay) = accTL(Sp:Ep,Cay); % ay
|
||||
ACCdef(Sp:Ep,Caz) = accTL(Sp:Ep,Caz); % az
|
||||
cont = cont+1;
|
||||
end
|
||||
end
|
||||
end
|
||||
text = ['' num2str(cont) ' values of Tilt Link V accelerometer vector of gravity not subjected to mean process due to values with excessive variations!'];
|
||||
fprintf(fileID,fmt,text);
|
||||
text = ['' num2str(cont2) ' values of Tilt Link V accelerometer vector of gravity not subjected to mean process due to not calibrated values!'];
|
||||
fprintf(fileID,fmt,text);
|
||||
|
||||
%% Campi magnetici
|
||||
MAGdef = smoothdata(magTL,'gaussian',NdatiMedia);
|
||||
|
||||
% Applico un controllo importante! Se la risultante delle accelerazioni
|
||||
% varia più di 0.01, NON faccio la media dei dati di campo magnetico attorno,
|
||||
% che altrimenti ne sono condizionati!
|
||||
[r,c] = size(ACCdefRis); % Nodi in colonna, date in riga
|
||||
Win = NdatiMedia/2; % Individuo la finestra da NON mediare
|
||||
cont = 0;
|
||||
cont2 = 0;
|
||||
for i = 2:r % data
|
||||
for j = 2:c % nodo
|
||||
% se il valore assoluto della differenza è maggiore della
|
||||
% tolleranza, NON faccio la media
|
||||
if abs(ACCdefRis(i,j)-ACCdefRis(i-1,j)) > tolleranzaMag
|
||||
Sp = i-Win; % Punto di partenza (date)
|
||||
if Sp <= 0
|
||||
Sp = 1;
|
||||
end
|
||||
if i+Win > r
|
||||
Ep = r;
|
||||
else
|
||||
Ep = i+Win; % Punto di arrivo (date)
|
||||
end
|
||||
Cmx = 3*j-2;
|
||||
Cmy = 3*j-1;
|
||||
Cmz = 3*j;
|
||||
MAGdef(Sp:Ep,Cmx) = magTL(Sp:Ep,Cmx); % mx
|
||||
MAGdef(Sp:Ep,Cmy) = magTL(Sp:Ep,Cmy); % my
|
||||
MAGdef(Sp:Ep,Cmz) = magTL(Sp:Ep,Cmz); % mz
|
||||
cont = cont+1;
|
||||
end
|
||||
if ACCdefRis(i,j) < 0.9 || ACCdefRis(i,j) > 1.1 % Il nodo è fuori taratura!
|
||||
Sp = i-Win; % Punto di partenza (date)
|
||||
if Sp <= 0
|
||||
Sp = 1;
|
||||
end
|
||||
if i+Win > r
|
||||
Ep = r;
|
||||
else
|
||||
Ep = i+Win; % Punto di arrivo (date)
|
||||
end
|
||||
Cmx = 3*j-2;
|
||||
Cmy = 3*j-1;
|
||||
Cmz = 3*j;
|
||||
MAGdef(Sp:Ep,Cmx) = magTL(Sp:Ep,Cmx); % mx
|
||||
MAGdef(Sp:Ep,Cmy) = magTL(Sp:Ep,Cmy); % my
|
||||
MAGdef(Sp:Ep,Cmz) = magTL(Sp:Ep,Cmz); % mz
|
||||
cont2 = cont2+1;
|
||||
end
|
||||
end
|
||||
end
|
||||
text = ['' num2str(cont) ' values of Tilt Link V magnetometer vector not subjected to mean process due to accelerometers values with excessive variations!'];
|
||||
fprintf(fileID,fmt,text);
|
||||
text = ['' num2str(cont2) ' values of Tilt Link V magnetometer vector of gravity not subjected to mean process due to not calibrated accelerometer values!'];
|
||||
fprintf(fileID,fmt,text);
|
||||
|
||||
%% Risultante campi magnetici
|
||||
MAGdefRis_TL = ris_mag; % Non faccio la media, mi serve il dato come è per applicare i filtri
|
||||
|
||||
%% Temperatura
|
||||
TempDef_TL = tempTL; % Non faccio la media, mi serve il dato come è per applicare i filtri
|
||||
|
||||
text = 'Average mean of Tilt Link V data executed correctly. MediaDati_TL function ended';
|
||||
fprintf(fileID,fmt,text);
|
||||
fclose(fileID);
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user