286 lines
11 KiB
Matlab
Executable File
286 lines
11 KiB
Matlab
Executable File
% Funzione che ricostrusice i segmenti di pertinenza e la profondità dello
|
|
% spostamento relativo. In output si ha
|
|
% SpeTuL = segmento di pertinenza dei nodi di tipo Tunnel Link
|
|
% SpeRL = segmento di pertinenza dei nodi di tipo Radial Link
|
|
|
|
function [SpeTuL,SpeRL,SpeTLH,PsTLH,SpeTLHRH,PsTLHRH,SpePCL,SpePCLHR]...
|
|
= schemaSP(yesTuL,yesRL,yesTLH,yesTLHRH,yesPCL,yesPCLHR,...
|
|
NodoTunnelLink,NodoRadialLink,NodoTiltLinkH,NodoTiltLinkHRH,...
|
|
NodoPreConvLink,NodoPreConvLinkHR,rTuL,rRL,rTLH,rTLHRH,rPCL,rPCLHR,...
|
|
catena,FileName)
|
|
|
|
% Apro file di testo
|
|
fileID = fopen(FileName,'a');
|
|
fmt = '%s \r';
|
|
text = 'schemaSP function started';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
Nodi = [cell2mat(catena(:,3)) cell2mat(catena(:,2)) cell2mat(catena(:,1))];
|
|
|
|
%% Tunnel Link
|
|
if yesTuL == 1
|
|
% Definizione dei segmenti di pertinenza dei singoli accelerometri
|
|
% SpeTuL = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
|
|
NodiTuL = cell2mat(NodoTunnelLink(:,2:3));
|
|
% Costruisco il segmento di pertinenza
|
|
spe0 = 0; % segmento di pertinenza dell'ancora
|
|
spe1 = ((NodiTuL(1,2) + NodiTuL(2,2))/2); % segmento di pertinenza del primo nodo
|
|
if rTuL>2
|
|
spe2 = zeros(rTuL-2,1);
|
|
for i = 2:(rTuL-1)
|
|
media1 = NodiTuL(i,2) + NodiTuL(i-1,2)/2;
|
|
media2 = NodiTuL(i,2) + NodiTuL(i+1,2)/2;
|
|
spei = media2 - media1;
|
|
spe2(i-1,1) = spei;
|
|
end
|
|
else
|
|
spe2 = [];
|
|
end
|
|
spelast = (NodiTuL(rTuL,2)-(NodiTuL(rTuL-1,2)+NodiTuL(rTuL,2))/2)*2; % segmento di pertinenza dell'ultimo nodo
|
|
SpeTuL = [spe0; spe1; spe2; spelast];
|
|
text = 'Segments of relevance of Tunnel Link defined correctly';
|
|
fprintf(fileID,fmt,text);
|
|
else
|
|
% Non ci sono nodi Tunnel Link
|
|
SpeTuL = [];
|
|
text = 'Segments of relevance of Tunnel Link not defined';
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
|
|
%% Radial Link
|
|
if yesRL == 1
|
|
% Definizione dei segmenti di pertinenza dei singoli accelerometri
|
|
% SpeRL = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
|
|
NodiRL = cell2mat(NodoRadialLink(:,2:3));
|
|
% Costruisco il segmento di pertinenza
|
|
spe0 = 0; % segmento di pertinenza dell'ancora
|
|
spe1 = ((NodiRL(1,2) + NodiRL(2,2))/2); % segmento di pertinenza del primo nodo
|
|
if rRL>2
|
|
spe2 = zeros(rRL-2,1);
|
|
for i = 2:(rRL-1)
|
|
media1 = NodiRL(i,2) + NodiRL(i-1,2)/2;
|
|
media2 = NodiRL(i,2) + NodiRL(i+1,2)/2;
|
|
spei = media2 - media1;
|
|
spe2(i-1,1) = spei;
|
|
end
|
|
else
|
|
spe2 = [];
|
|
end
|
|
spelast = (NodiRL(rRL,2)-(NodiRL(rRL-1,2)+NodiRL(rRL,2))/2)*2; % segmento di pertinenza dell'ultimo nodo
|
|
SpeRL = [spe0; spe1; spe2; spelast];
|
|
text = 'Segments of relevance of Radial Link defined correctly';
|
|
fprintf(fileID,fmt,text);
|
|
else
|
|
% Non ci sono nodi Radial Link
|
|
SpeRL = [];
|
|
text = 'Segments of relevance of Radial Link not defined';
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
|
|
%% Tilt Link H
|
|
if yesTLH == 1
|
|
% Definizione dei segmenti di pertinenza dei singoli accelerometri
|
|
% SpeTLH = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
|
|
% PsTLH = Posizione dello spostamento
|
|
NodiTLH = cell2mat(NodoTiltLinkH(:,2:3));
|
|
% Costruisco il segmento di pertinenza
|
|
spe0 = 0; % segmento di pertinenza dell'ancora
|
|
spe1 = (NodiTLH(1,2) + NodiTLH(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
|
|
if rTLH > 2
|
|
spe2 = zeros(rTLH-2,1);
|
|
for i = 2:(rTLH-1)
|
|
media1 = (abs(NodiTLH(i,2)) + abs(NodiTLH(i-1,2)))/2;
|
|
media2 = (abs(NodiTLH(i,2)) + abs(NodiTLH(i+1,2)))/2;
|
|
spei = media2 - media1;
|
|
spe2(i-1,1) = spei; % li considero positivi
|
|
end
|
|
else
|
|
spe2 = [];
|
|
end
|
|
% segmento di pertinenza dell'ultimo nodo
|
|
spelast = (NodiTLH(end,2)-((NodiTLH(rTLH-1,2)+NodiTLH(rTLH,2)))/2)*2;
|
|
SpeTLH = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
|
|
|
|
% Calcolo la posizione dello spostamento relativo
|
|
ps0 = NodiTLH(1,2); % posizione dell'ancora
|
|
if spe1 <= 1
|
|
ps1 = NodiTLH(1,2)+spe1; % la posizione del primo nodo TLH è data da
|
|
else
|
|
ps1 = cell2mat(NodoTiltLinkH(1,3))+0.5;
|
|
end
|
|
ps2 = zeros(rTLH-1,1);
|
|
for j = 2:rTLH
|
|
if j == 2
|
|
if SpeTLH(j+1,1) <= 1
|
|
psj = ps1 + SpeTLH(j+1,1);
|
|
else
|
|
psj = cell2mat(NodoTiltLinkH(j,3))+0.5;
|
|
end
|
|
% la posizione a cui il nodo j di tipo Tilt Link H rileva lo spostamento è data dalla
|
|
% somma fra il suo segmento di pertinenza e la posizione a cui rileva lo spostamento
|
|
% il nodo precedente
|
|
psPrec = psj;
|
|
% mi serve come appoggio per il calcolo della posizione dello spostamento del nodo successivo
|
|
else
|
|
if SpeTLH(j+1,1) <= 1
|
|
psj = psPrec + SpeTLH(j+1,1);
|
|
else
|
|
psj = cell2mat(NodoTiltLinkH(j,3))+0.5;
|
|
end
|
|
psPrec = psj;
|
|
end
|
|
ps2(j-1,1) = psj;
|
|
end
|
|
PsTLH = [ps0; ps1; ps2];
|
|
text = 'Segments of relevance of Tilt Link H defined correctly';
|
|
fprintf(fileID,fmt,text);
|
|
for i = 2:rTLH+1
|
|
if SpeTLH(i) > 1
|
|
SpeTLH(i) = 1;
|
|
end
|
|
end
|
|
else
|
|
% Non ci sono nodi Tilt Link H
|
|
SpeTLH = [];
|
|
PsTLH = [];
|
|
text = 'Segments of relevance of Tilt Link H not defined';
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
|
|
%% Tilt Link HR H
|
|
if yesTLHRH == 1
|
|
% Definizione dei segmenti di pertinenza delle ampolle
|
|
% PsTLHRH = posizione dello spostamento
|
|
NodiTLHRH = cell2mat(NodoTiltLinkHRH(:,2:3));
|
|
% Costruisco il segmento di pertinenza
|
|
spe0 = 0; % segmento di pertinenza dell'ancora
|
|
spe1 = (NodiTLHRH(1,2) + NodiTLHRH(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
|
|
if rTLHRH > 2
|
|
spe2 = zeros(rTLHRH-2,1);
|
|
for i = 2:(rTLHRH-1)
|
|
media1 = (abs(NodiTLHRH(i,2)) + abs(NodiTLHRH(i-1,2)))/2;
|
|
media2 = (abs(NodiTLHRH(i,2)) + abs(NodiTLHRH(i+1,2)))/2;
|
|
spei = media2 - media1;
|
|
spe2(i-1,1) = spei; % li considero positivi
|
|
end
|
|
else
|
|
spe2 = [];
|
|
end
|
|
% segmento di pertinenza dell'ultimo nodo
|
|
spelast = (NodiTLHRH(end,2)-((NodiTLHRH(rTLH-1,2)+NodiTLHRH(rTLHRH,2)))/2)*2;
|
|
SpeTLHRH = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
|
|
|
|
% Calcolo la posizione dello spostamento relativo
|
|
ps0 = Nodi(1,2); % posizione dell'ancora
|
|
if spe1 <= 1
|
|
ps1 = Nodi_HRH(1,2)+spe1; % la posizione del primo nodo TLHRH è data da ancora + segmento di pertinenza del primo nodo
|
|
else
|
|
ps1 = cell2mat(NodoTiltLinkHRH(1,3))+0.5;
|
|
end
|
|
ps2 = zeros(rTLHRH-1,1);
|
|
for j = 2:rTLHRH
|
|
if j == 2
|
|
if SpeTLHRH(j+1,1) <= 1
|
|
psj = ps1 + SpeTLHRH(j+1,1);
|
|
else
|
|
psj = cell2mat(NodoTiltLinkHRH(j,3))+0.5;
|
|
end
|
|
% la posizione a cui il nodo j di tipo Tilt Link H rileva lo spostamento è data dalla
|
|
% somma fra il suo segmento di pertinenza e la posizione a cui rileva lo spostamento
|
|
% il nodo precedente
|
|
psPrec = psj;
|
|
% mi serve come appoggio per il calcolo della posizione dello spostamento del nodo successivo
|
|
else
|
|
if SpeTLHRH(j+1,1) <= 1
|
|
psj = psPrec + SpeTLHRH(j+1,1);
|
|
else
|
|
psj = cell2mat(NodoTiltLinkHRH(j,3))+0.5;
|
|
end
|
|
psPrec = psj;
|
|
end
|
|
ps2(j-1,1) = psj;
|
|
end
|
|
PsTLHRH = [ps0; ps1; ps2];
|
|
for i = 2:rTLHRH+1
|
|
if SpeTLHRH(i) > 1
|
|
SpeTLHRH(i) = 1;
|
|
end
|
|
end
|
|
text = 'Segments of relevance of Tilt Link HR H defined correctly';
|
|
fprintf(fileID,fmt,text);
|
|
else
|
|
% Non ci sono nodi Tilt Link HR H
|
|
SpeTLHRH = [];
|
|
PsTLHRH = [];
|
|
text = 'Segments of relevance of Tilt Link HR H not defined';
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
|
|
%% PreConv Link
|
|
if yesPCL == 1
|
|
% Definizione dei segmenti di pertinenza dei singoli accelerometri
|
|
% SpePCL = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
|
|
NodiPCL = cell2mat(NodoPreConvLink(:,2:3));
|
|
% Costruisco il segmento di pertinenza
|
|
spe0 = 0; % segmento di pertinenza dell'ancora
|
|
spe1 = (NodiPCL(1,2) + NodiPCL(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
|
|
if rPCL > 2
|
|
spe2 = zeros(rPCL-2,1);
|
|
for i = 2:(rPCL-1)
|
|
media1 = (abs(NodiPCL(i,2)) + abs(NodiPCL(i-1,2)))/2;
|
|
media2 = (abs(NodiPCL(i,2)) + abs(NodiPCL(i+1,2)))/2;
|
|
spei = media2 - media1;
|
|
spe2(i-1,1) = spei; % li considero positivi
|
|
end
|
|
else
|
|
spe2 = [];
|
|
end
|
|
% segmento di pertinenza dell'ultimo nodo
|
|
spelast = (NodiPCL(end,2)-((NodiPCL(rPCL-1,2)+NodiPCL(rPCL,2)))/2)*2;
|
|
SpePCL = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
|
|
text = 'Segments of relevance of PreConv Link defined correctly';
|
|
fprintf(fileID,fmt,text);
|
|
else
|
|
% Non ci sono nodi PreConv Link
|
|
SpePCL = [];
|
|
text = 'Segments of relevance of PreConv Link not defined';
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
|
|
%% Pre Conv Link HR
|
|
if yesPCLHR == 1
|
|
% Definizione dei segmenti di pertinenza delle ampolle
|
|
NodiPCLHR = cell2mat(NodoPreConvLinkHR(:,2:3));
|
|
% Costruisco il segmento di pertinenza
|
|
spe0 = 0; % segmento di pertinenza dell'ancora
|
|
spe1 = (NodiPCLHR(1,2) + NodiPCLHR(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
|
|
if rPCLHR > 2
|
|
spe2 = zeros(rPCLHR-2,1);
|
|
for i = 2:(rPCLHR-1)
|
|
media1 = (abs(NodiPCLHR(i,2)) + abs(NodiPCLHR(i-1,2)))/2;
|
|
media2 = (abs(NodiPCLHR(i,2)) + abs(NodiPCLHR(i+1,2)))/2;
|
|
spei = media2 - media1;
|
|
spe2(i-1,1) = spei; % li considero positivi
|
|
end
|
|
else
|
|
spe2 = [];
|
|
end
|
|
% segmento di pertinenza dell'ultimo nodo
|
|
spelast = (NodiPCLHR(end,2)-((NodiPCLHR(rPCLHR-1,2)+NodiPCLHR(rPCLHR,2)))/2)*2;
|
|
SpePCLHR = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
|
|
|
|
text = 'Segments of relevance of PreConv Link HR defined correctly';
|
|
fprintf(fileID,fmt,text);
|
|
else
|
|
% Non ci sono nodi PreConv Link HR
|
|
SpePCLHR = [];
|
|
text = 'Segments of relevance of PreConv Link HR not defined';
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
|
|
%% Chiudo Testo
|
|
text = 'schemaSP function ended';
|
|
fprintf(fileID,fmt,text);
|
|
fclose(fileID);
|
|
|
|
end |