Files
matlab-python/ATD/filtro_RL.m

98 lines
2.9 KiB
Matlab
Executable File

% Filtro che considera N deviazioni standard in una finestra centrata di
% input dati (una in avanti e una all'indietro) e mette a zero lo
% spostamento se è inferiore a tale valore
% E' previsto un secondo filtro forfettario se lo spostamento è minore di
% un determinato valore
function [dX_RL,dY_RL,dZ_RL,text4] = filtro_RL(dX_RL,dY_RL,dZ_RL,Ndevst,Wdevst)
dX_RL = dX_RL';
dY_RL = dY_RL';
dZ_RL = dZ_RL';
calcoloX_RL = dX_RL;
calcoloY_RL = dY_RL;
calcoloZ_RL = dZ_RL;
[r,c] = size(dX_RL); % riga date, colonna nodi
filtroX = zeros(r,c);
filtroY = zeros(r,c);
filtroZ = zeros(r,c);
N_dev_st = Ndevst;
finestra = Wdevst;
contX = 0;
contY = 0;
contZ = 0;
for j = 2:c % nodi
for i = (finestra/2+0.5):(r-(finestra/2-0.5)) % date
% X
var = calcoloX_RL((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j);
filtroX(i,j) = N_dev_st*std(var);
if abs(dX_RL(i,j))<filtroX(i,j)
dX_RL(i,j) = 0;
contX = contX+1;
end
% Y
var = calcoloY_RL((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j);
filtroY(i,j) = N_dev_st*std(var);
if abs(dY_RL(i,j))<filtroY(i,j)
dY_RL(i,j) = 0;
contY = contY+1;
end
% Z
var = calcoloZ_RL((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j);
filtroZ(i,j) = N_dev_st*std(var);
if abs(dZ_RL(i,j))<filtroZ(i,j)
dZ_RL(i,j) = 0;
contZ = contZ+1;
end
end
for i = (r-(finestra/2-1.5)):r % date
var = zeros(finestra-1,1); % Prolungo l'ultimo dato per il trend che non ho
delta = r-i+1;
% X
var(1:delta,1) = calcoloX_RL(i:end,j);
var(delta+1:end-1) = calcoloX_RL(end,j);
filtroX(i,j) = N_dev_st*std(var);
filtroX(end,j) = filtroX(end-1,j);
if abs(dX_RL(i,j))<filtroX(i,j)
dX_RL(i,j) = 0;
contX = contX+1;
end
% Y
var(1:delta,1) = calcoloY_RL(i:end,j);
var(delta+1:end-1) = calcoloY_RL(end,j);
filtroY(i,j) = N_dev_st*std(var);
filtroY(end,j) = filtroY(end-1,j);
if abs(dY_RL(i,j))<filtroY(i,j)
dY_RL(i,j) = 0;
contY = contY+1;
end
% Z
var(1:delta,1) = calcoloZ_RL(i:end,j);
var(delta+1:end-1) = calcoloZ_RL(end,j);
filtroZ(i,j) = N_dev_st*std(var);
filtroZ(end,j) = filtroZ(end-1,j);
if abs(dZ_RL(i,j))<=filtroZ(i,j)
dZ_RL(i,j) = 0;
end
end
end
dX_RL(1:(finestra/2-1.5),:) = 0;
dY_RL(1:(finestra/2-1.5),:) = 0;
dZ_RL(1:(finestra/2-1.5),:) = 0;
dX_RL = dX_RL';
dY_RL = dY_RL';
dZ_RL = dZ_RL';
text4 = ['' num2str(contX) ' X data, ' num2str(contY) ' Y data, ' num2str(contZ) ...
' Z data, data filtered for Radial Link - Statistic filter!'];
end