function [ACCdef_HD,ANGdef_HD,MAGdef_HD,ARRAYdateHD,ACCdefRisHD,MAGdefRisHD] = MediaDati_HD(...
    accHD,angHD,magHD,TimeHD,ris_acc_HD,ris_mag_HD,tolleranzaAcc,...
    tolleranzaMag,NdatiMedia,FileName)

fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'MediaDati_HD function started';
fprintf(fileID,fmt,text);

%% Accelerazione
[r,~]=size(accHD);
if NdatiMedia > r
    NdatiMedia = r;
end
ACCdef_HD = smoothdata(accHD,'gaussian',NdatiMedia);

% Angoli
ANGdef_HD = smoothdata(angHD,'gaussian',NdatiMedia);

%% Matrice date
ARRAYdateHD = TimeHD;

%% Risultante acc
ACCdefRisHD = ris_acc_HD; % 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(ACCdefRisHD); % 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(ACCdefRisHD(i,j)-ACCdefRisHD(i-1,j)) > tolleranzaAcc || ACCdefRisHD(i,j) < 0.9 || ACCdefRisHD(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_HD(Sp:Ep,Cax) = accHD(Sp:Ep,Cax); % ax
            ACCdef_HD(Sp:Ep,Cay) = accHD(Sp:Ep,Cay); % ay
            ACCdef_HD(Sp:Ep,Caz) = accHD(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_HD = smoothdata(magHD,'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(ACCdefRisHD); % 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(ACCdefRisHD(i,j)-ACCdefRisHD(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_HD(Sp:Ep,Cmx) = magHD(Sp:Ep,Cmx); % mx
            MAGdef_HD(Sp:Ep,Cmy) = magHD(Sp:Ep,Cmy); % my
            MAGdef_HD(Sp:Ep,Cmz) = magHD(Sp:Ep,Cmz); % mz
            cont = cont+1;
        end
        if ACCdefRisHD(i,j) < 0.9 || ACCdefRisHD(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_HD(Sp:Ep,Cmx) = magHD(Sp:Ep,Cmx); % mx
            MAGdef_HD(Sp:Ep,Cmy) = magHD(Sp:Ep,Cmy); % my
            MAGdef_HD(Sp:Ep,Cmz) = magHD(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
MAGdefRisHD = ris_mag_HD; % 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