127 lines
4.7 KiB
Matlab
Executable File
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 |