Files
matlab-python/Tilt/MediaDati_HDVR.m

127 lines
4.7 KiB
Matlab
Executable File

function [ACCdef_HDVR,MAGdef_HDVR,ARRAYdateHDVR,ACCdefRisHDVR,MAGdefRisHDVR] = MediaDati_HDVR(...
accHDVR,magHDVR,TimeHDVR,ris_acc_HDVR,ris_mag_HDVR,tolleranzaAcc,...
tolleranzaMag,NdatiMedia,FileName)
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'MediaDati_HDVR function started';
fprintf(fileID,fmt,text);
%% Accelerazione
[r,~]=size(accHDVR);
if NdatiMedia > r
NdatiMedia = r;
end
ACCdef_HDVR = smoothdata(accHDVR,'gaussian',NdatiMedia);
%% Matrice date
ARRAYdateHDVR = TimeHDVR;
%% Risultante acc
ACCdefRisHDVR = ris_acc_HDVR; % 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(ACCdefRisHDVR); % 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(ACCdefRisHDVR(i,j)-ACCdefRisHDVR(i-1,j)) > tolleranzaAcc || ...
ACCdefRisHDVR(i,j) < 0.9 || ACCdefRisHDVR(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_HDVR(Sp:Ep,Cax) = accHDVR(Sp:Ep,Cax); % ax
ACCdef_HDVR(Sp:Ep,Cay) = accHDVR(Sp:Ep,Cay); % ay
ACCdef_HDVR(Sp:Ep,Caz) = accHDVR(Sp:Ep,Caz); % az
cont = cont+1;
end
end
end
text = ['' num2str(cont) ' values of Tilt Link HD VR 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 HD VR accelerometer vector of '...
'gravity not subjected to mean process due to not calibrated values!'];
fprintf(fileID,fmt,text);
%% Campi magnetici
MAGdef_HDVR = smoothdata(magHDVR,'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(ACCdefRisHDVR); % 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(ACCdefRisHDVR(i,j)-ACCdefRisHDVR(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_HDVR(Sp:Ep,Cmx) = magHDVR(Sp:Ep,Cmx); % mx
MAGdef_HDVR(Sp:Ep,Cmy) = magHDVR(Sp:Ep,Cmy); % my
MAGdef_HDVR(Sp:Ep,Cmz) = magHDVR(Sp:Ep,Cmz); % mz
cont = cont+1;
end
if ACCdefRisHDVR(i,j) < 0.9 || ACCdefRisHDVR(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_HDVR(Sp:Ep,Cmx) = magHDVR(Sp:Ep,Cmx); % mx
MAGdef_HDVR(Sp:Ep,Cmy) = magHDVR(Sp:Ep,Cmy); % my
MAGdef_HDVR(Sp:Ep,Cmz) = magHDVR(Sp:Ep,Cmz); % mz
cont2 = cont2+1;
end
end
end
text = ['' num2str(cont) ' values of Tilt Link HD VR 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 HD VR magnetometer vector of '...
'gravity not subjected to mean process due to not calibrated accelerometer values!'];
fprintf(fileID,fmt,text);
%% Risultante campi magnetici
MAGdefRisHDVR = ris_mag_HDVR; % Non faccio la media, mi serve il dato come è per applicare i filtri
text = 'Average mean of Tilt Link HD VR data executed correctly. MediaDati_HD function ended';
fprintf(fileID,fmt,text);
fclose(fileID);
end