% Filtro che considera 2 deviazioni standard in una finestra centrata di % due settimane (una in avanti e una all'indietro) e mette a zero lo % spsotamento se è inferiore a tale valore % E' previsto un secondo filtro forfettario se lo spostamento è minore di % un determinato valore function [dNS,dEO,dZ] = filtro(dNS,dEO,dZ,Ndevst,Wdevst,FileName) fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'filtro function started'; fprintf(fileID,fmt,text); dNS = dNS'; dEO = dEO'; dZ = dZ'; calcoloNS = dNS; calcoloEO = dEO; calcoloZ = dZ; [r,c]=size(dNS); % riga date, colonna nodi filtroNS = zeros(r,c); filtroEO = zeros(r,c); filtroZ = zeros(r,c); finestra = Wdevst; N_dev_st = Ndevst; contN = 0; contE = 0; contZ = 0; for j = 1:c % nodi for i = 1:r if r <= finestra/2 - 0.5 varNS = 0; varEO = 0; varZ = 0; else if i <= finestra/2 - 0.5 varNS = calcoloNS(1:i+(finestra/2-0.5),j); varEO = calcoloEO(1:i+(finestra/2-0.5),j); varZ = calcoloZ(1:i+(finestra/2-0.5),j); elseif i >= (finestra/2+0.5) && i <= (r-(finestra/2-0.5)) varNS = calcoloNS((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j); varEO = calcoloEO((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j); varZ = calcoloZ((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j); elseif i > (r-(finestra/2-0.5)) varNS = calcoloNS((i-(finestra/2-0.5):r),j); varEO = calcoloEO((i-(finestra/2-0.5):r),j); varZ = calcoloZ((i-(finestra/2-0.5):r),j); end end % Nord Sud filtroNS(i,j) = N_dev_st*std(varNS); if abs(dNS(i,j)) <= filtroNS(i,j) if abs(dNS(i,j)) ~= 0 contN = contN+1; end dNS(i,j) = 0; end % Est Ovest filtroEO(i,j) = N_dev_st*std(varEO); if abs(dEO(i,j)) <= filtroEO(i,j) if abs(dEO(i,j)) ~= 0 contE = contE+1; end dEO(i,j) = 0; end % Z filtroZ(i,j) = N_dev_st*std(varZ); if abs(dZ(i,j)) <= filtroZ(i,j) if abs(dZ(i,j)) ~= 0 contZ = contZ+1; end dZ(i,j) = 0; end end end dNS = dNS'; dEO = dEO'; dZ = dZ'; textN = [num2str(contN) ' data filtered along North-South direction']; textE = [num2str(contE) ' data filtered along East-West direction']; textD = [num2str(contZ) ' data filtered along Down direction']; fprintf(fileID,fmt,textN); fprintf(fileID,fmt,textE); fprintf(fileID,fmt,textD); text = 'filtro function closed'; fprintf(fileID,fmt,text); fclose(fileID); end