function [TimeRSNHR,angRSNHR,tempRSNHR,ErrRSNLinkHR] = defDatiRSNHR(DatiRSNLinkHR,... ErrRSNLinkHR,rRSNHR,IDcentralina,DTcatena,Ndatidespike,NuovoZeroRSNHR,FileName) fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'defDatiRSNHR function started'; fprintf(fileID,fmt,text); [r,c] = size(DatiRSNLinkHR); Ncorr = 0; % Elimino gli eventuali Not a Number for a = 2:r for b = 1:c check = isnan(DatiRSNLinkHR(a,b)); if check == 1 DatiRSNLinkHR(a,b) = DatiRSNLinkHR(a-1,b); ErrRSNLinkHR(a,b) = 1; Ncorr = Ncorr+1; end end end text = ['' num2str(Ncorr) ' NaN of RSN Link HR corrected by defDatiRSNHR function']; fprintf(fileID,fmt,text); TimeRSNHR = DatiRSNLinkHR(:,1); % data angRSNHR = zeros(r,rRSNHR*2); % dati angolari tempRSNHR = zeros(r,rRSNHR); % temperatura del nodo per la calibrazione p = 2; % passo s = 1; for i = 1:rRSNHR angRSNHR(:,s:s+1) = DatiRSNLinkHR(:,p:p+1); s = s+2; tempRSNHR(:,i) = DatiRSNLinkHR(:,p+2); p = p+3; end s = 1; Num_Dati = Ndatidespike; % numero di dati per il despike if Num_Dati > r Num_Dati = r; end % il despike NON viene eseguito per l'ultimo dato disponibile for i = 1:rRSNHR % despiking accelerometri angRSNHR(1:end-1,s) = filloutliers(angRSNHR(1:end-1,s),'linear','movmedian',Num_Dati); angRSNHR(1:end-1,s+1) = filloutliers(angRSNHR(1:end-1,s+1),'linear','movmedian',Num_Dati); s = s+2; end %% !!! Controllo che le ampolle non siano fuori scala (32768) AmpolleUpdate = ['' IDcentralina '-' DTcatena '-Ampolle.csv']; [rC,cC] = size(angRSNHR); if NuovoZeroRSNHR == 1 && isfile(AmpolleUpdate) == 1 Dati = csvread(AmpolleUpdate); [rD,~] = size(Dati); num = 1; cont = 1; if rD ~= 0 for j = 1:rC for ii = 1:cC segno1 = 0; for a = 2:rD if TimeRSNHR(j,1) == Dati(a,1) segno1 = sign(Dati(a-1,ii+1)); % segno del valore alla data precedente break end end if segno1 == 0 if j == 1 else segno1 = sign(angRSNHR(j-1,ii)); % segno del valore alla data precedente end end segno2 = sign(angRSNHR(j,ii)); % segno del valore alla data successiva if segno2 ~= segno1 % se i due segni sono diversi if abs(angRSNHR(j,ii)) > 15000 if segno1 == 1 angRSNHR(j,ii) = 32768 + (32768 + angRSNHR(j,ii)); % Fondo scala positivo elseif segno1 == -1 angRSNHR(j,ii) = -32768 + (-32768 + angRSNHR(j,ii)); % Fondo scala negativo end text = ['RSN Link HR was out of range on node ' mat2str(cell2mat(NodoRSNLinkHR(num,2))) '']; fprintf(fileID,fmt,text); end end cont = cont+1; if cont == 3 cont = 1; num = num+1; end end cont = 1; num = 1; end indice = 1; for j=1:rC if Dati(end,1) == TimeRSNHR(j,1) indice = j+1; break end end else indice = []; end else indice = 1; end if isempty(indice) == 0 datiHR = [TimeRSNHR(indice:end,1) angRSNHR(indice:end,:)]; dat=isempty(datiHR); if dat==0 if NuovoZeroRSNHR == 1 && isfile(AmpolleUpdate) == 1 delete(AmpolleUpdate); end csvwrite(AmpolleUpdate,datiHR); end end text = 'Data of RSN Link HR defined correctly. defDatiRSNHR function closed'; fprintf(fileID,fmt,text); fclose(fileID); end