168 lines
5.1 KiB
Matlab
Executable File
168 lines
5.1 KiB
Matlab
Executable File
% Funzione che converte i dati grezzi in dati di accelerazione usando i
|
|
% valori delle calibrazioni per i RSN Link
|
|
% accRSN raccoglie le accelerazioni
|
|
|
|
function [accRSN,ris_acc,tempRSN] = conv_grezziRSN(rRSN,accRSN,...
|
|
tempRSN,DCalRSNTot,MEMS,FileName)
|
|
|
|
text = 'conv_grezziRSN function started';
|
|
fileID = fopen(FileName,'a');
|
|
fmt = '%s \r';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
if MEMS == 2 % RSN Link 1.0
|
|
gainX = DCalRSNTot(:,1);
|
|
caX = DCalRSNTot(:,2);
|
|
intX = DCalRSNTot(:,3);
|
|
caASSX = DCalRSNTot(:,4);
|
|
intASSX = DCalRSNTot(:,5);
|
|
gainY = DCalRSNTot(:,6);
|
|
caY = DCalRSNTot(:,7);
|
|
intY = DCalRSNTot(:,8);
|
|
caASSY = DCalRSNTot(:,9);
|
|
intASSY = DCalRSNTot(:,10);
|
|
gainZ = DCalRSNTot(:,11);
|
|
caZ = DCalRSNTot(:,12);
|
|
intZ = DCalRSNTot(:,13);
|
|
% caASSZ = DCalRSNTot(:,14); --> non necessari
|
|
% intASSZ = DCalRSNTot(:,15); --> non necessari
|
|
caT = DCalRSNTot(:,16);
|
|
intT = DCalRSNTot(:,17);
|
|
|
|
[righeREL,~] = size(accRSN);
|
|
angREL_RSN = zeros(righeREL,rRSN*2);
|
|
|
|
%% Accelerometri
|
|
cont = 1;
|
|
cn = 1;
|
|
% Contatore dei nodi, corregge le accelerazioni con le calibrazioni
|
|
for ii=1:3*rRSN
|
|
if cont==1
|
|
accRSN(:,ii) = accRSN(:,ii)*gainX(cn)+(tempRSN(:,cn)*caX(cn)+intX(cn));
|
|
cont = cont+1;
|
|
elseif cont==2
|
|
accRSN(:,ii) = accRSN(:,ii)*gainY(cn)+(tempRSN(:,cn)*caY(cn)+intY(cn));
|
|
cont = cont+1;
|
|
else
|
|
accRSN(:,ii) = accRSN(:,ii)*gainZ(cn)+(tempRSN(:,cn)*caZ(cn)+intZ(cn));
|
|
cont = 1;
|
|
cn = cn+1;
|
|
end
|
|
end
|
|
|
|
% Calcolo e correggo angoli relativi in base al segno dell'asse Z
|
|
cont = 1;
|
|
contACC = 1;
|
|
for ii=1:3*rRSN
|
|
if cont==1 % X
|
|
angREL_RSN(:,contACC) = real(asind(accRSN(:,ii))); %calcolo angolo relativo
|
|
if angREL_RSN(:,contACC)>0 %check quando angolo relativo > 0
|
|
if accRSN(:,ii+2)<0 % check quando asse z < 0 --> il montante si è capovolto!
|
|
angREL_RSN(:,contACC) = 180 - angREL_RSN(:,contACC);
|
|
end
|
|
elseif angREL_RSN(:,ii)<0 %check quando angolo relativo < 0
|
|
if accRSN(:,ii+2)<0 % check quando asse z < 0 --> il montante si è capovolto!
|
|
angREL_RSN(:,contACC) = -180 - angREL_RSN(:,contACC);
|
|
end
|
|
end
|
|
cont = cont+1;
|
|
contACC = contACC+1;
|
|
elseif cont==2 % Y
|
|
angREL_RSN(:,contACC) = real(asind(accRSN(:,ii))); %calcolo angolo relativo
|
|
if angREL_RSN(:,contACC)>0 %check quando angolo relativo > 0
|
|
if accRSN(:,ii+1)<0 % check quando asse z < 0 --> il montante si è capovolto!
|
|
angREL_RSN(:,contACC) = 180 - angREL_RSN(:,contACC);
|
|
end
|
|
elseif angREL_RSN(:,ii)<0 %check quando angolo relativo < 0
|
|
if accRSN(:,ii+1)<0 % check quando asse z < 0 --> il montante si è capovolto!
|
|
angREL_RSN(:,contACC) = -180 - angREL_RSN(:,contACC);
|
|
end
|
|
end
|
|
cont = cont+1;
|
|
contACC = contACC+1;
|
|
else
|
|
cont = 1;
|
|
end
|
|
end
|
|
|
|
% Calcolo angoli assoluti
|
|
cont = 1;
|
|
cn = 1;
|
|
for ii=1:2*rRSN
|
|
if cont==1
|
|
accRSN(:,ii) = angREL_RSN(:,ii)*caASSX(cn)+intASSX(cn);
|
|
cont = cont+1;
|
|
elseif cont==2
|
|
accRSN(:,ii) = angREL_RSN(:,ii)*caASSY(cn)+intASSY(cn);
|
|
cont = cont+1;
|
|
else
|
|
cont = 1;
|
|
cn = cn+1;
|
|
end
|
|
end
|
|
|
|
%% Conversione delle temperature
|
|
[rT,~] = size(tempRSN);
|
|
T_RSN = zeros(rT,1);
|
|
|
|
for t = 1:rRSN
|
|
T_RSN(:,t) = tempRSN(:,t)*caT(t,1) + intT(t,1);
|
|
end
|
|
|
|
%% Risultanti
|
|
[rAcc,cAcc] = size(accRSN);
|
|
ris_acc = zeros(rAcc,cAcc/3); % matrice risultante accelerazioni
|
|
|
|
clear i
|
|
clear ii
|
|
clear cont
|
|
clear cn
|
|
cont = 1; % contatore
|
|
cn = 0;
|
|
n = 1;
|
|
|
|
%% Calcolo della risultante
|
|
for ii = 1:cAcc % colonne
|
|
if n == 4
|
|
n = 1;
|
|
end
|
|
for i = 1:rAcc % righe
|
|
ris_acc(i,cont) = (accRSN(i,cn*3+1)^2+accRSN(i,cn*3+2)^2+accRSN(i,cn*3+3)^2)^0.5;
|
|
end
|
|
if n == 3
|
|
cn = cn+1;
|
|
cont = cont+1;
|
|
end
|
|
n = n+1;
|
|
end
|
|
elseif MEMS == 3 % Murata
|
|
%% Risultanti
|
|
[rAcc,cAcc] = size(accRSN);
|
|
ris_acc = zeros(rAcc,cAcc/3); % matrice risultante accelerazioni
|
|
cont = 1; % contatore
|
|
cn = 0;
|
|
n = 1;
|
|
|
|
%% Calcolo della risultante
|
|
for ii = 1:cAcc % colonne
|
|
if n == 4
|
|
n = 1;
|
|
end
|
|
for i = 1:rAcc % righe
|
|
ris_acc(i,cont) = (sind(accRSN(i,cn*3+1))^2+sind(accRSN(i,cn*3+2))^2+sind(accRSN(i,cn*3+3))^2)^0.5;
|
|
end
|
|
if n == 3
|
|
cn = cn+1;
|
|
cont = cont+1;
|
|
end
|
|
n = n+1;
|
|
end
|
|
else
|
|
ris_acc = [];
|
|
end
|
|
|
|
text = 'Raw Data of RSN Link converted into physycal units correctly. conv_grezziRSN function ended';
|
|
fprintf(fileID,fmt,text);
|
|
fclose(fileID);
|
|
|
|
end |