PROGRAMMI MATLAB
RIDUZIONE DEI DATI
Nelle pagine che seguono vengono riportati i programmi MatLab che sono stati
scritti per la riduzione dei dati, ed in particolare:
1. Programma per ricavare le sollecitazioni nel sistema di riferimento
dinamometro a partire dai segnali provenienti dai ponti estensimetrici, facendo
uso della matrice di calibrazione sperimentale.
%Script per il calcolo delle forze dato il vettore voltaggi (v_eff) e la matrice di %calibrazione (A) con il metodo dei minimi quadrati:
% f e' il vettore che minimizza la seguente differenza: % (v_eff-A*f)^2
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
%!!!!!!!!!!!!!!!NB=le forze ottenute sono in N e i momenti in Nm!!!!!!!!!!!!!!!!!!! %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! load A.txt; load volts.txt; load tara.txt; v = (volts-tara).*1000; v_eff = mean(v,1).'; B=A'*A; c=A'*v_eff; f=inv(B)*c;
save forze.txt f -ascii -tabs;
2. Prima stesura del programma per ricavare la matrice di rigidezza generalizzata
e le componenti della forza radiale nel sistema di riferimento laboratorio a
partire dai segnali provenienti dai ponti estensimetrici.
%Calcolo delle componenti di forza e momento laterali (X ed Y) agenti sull'induttore/pompa %secondo quanto suggerito su FESTIP:
% F = F_0+A*e %Dove:
% F_0=componente stazionaria delle forze % A = matrice di rigidezza [2x2]
% e = vettore eccentricità nel sistema di riferimento fisso (Laboratorio) %Ed in maniera del tutto analoga:
% M = M_0+A_M*eps load data.txt;
load dry.txt; %NOTA:il vettore da prendere è quello corrispondente alle velocità ed % ed eccentricità usate!!!!
load buoy.txt; %vettore della spinta di galleggiamento
%a seconda di come vengono acquisiti i dati, fare qui media della storia %temporale dei carichi!!!
data_eff = data_av-(dry+buoy);
T_c = ; %assegnare tempo di un "ciclo"
m = ; %T_c = m*T (T =(2pi/OMEGA) con OMEGA vel.ang. albero motore) n = ; %T_c = abs(n)*tau (tau =(2pi/omega) con omega vel.ang. di whirl !in modulo!) N = ; %numero di punti tra 0 e T_c
OMEGA = ; omega = ;
%CALCOLO DELLE FORZE F_X F_Y
%Inizializzazione dei coefficienti dello sviluppo in serie di Fourier %utili al calcolo di F_0 e A a_0Fx = 0; a_0Fy = 0; a_mFx = 0; a_mFy = 0; a_2mFx = 0; a_2mFy = 0; a_mnFx = 0; a_mnFy = 0; a_m_nFx = 0; a_m_nFy = 0; a_n_mFx = 0; a_m_nFy = 0; b_mFx = 0; b_mFy = 0; b_2mFx = 0; b_2mFy = 0; b_mnFx = 0; b_mnFy = 0; b_m_nFx = 0; b_m_nFy = 0; b_n_mFx = 0; b_n_mFy = 0;
%Calcolo dei coefficienti dello sviluppo in serie di Fourier for i=1:N
if i=1 | i=N
a_0Fx = a_0Fx+0.5*data(i,j); %dove j è la riga (colonna?) di data relativa ad F_x!!!! a_0Fy = a_0Fy+0.5*data(i,k); %dove k è la riga (colonna?) di data relativa ad F_y!!!! a_mFx = a_mFx+0.5*(data(i,j)*cos(OMEGA*i*Dt)); a_mFy = a_mFy+0.5*(data(i,k)*cos(OMEGA*i*Dt)); a_2mFx = a_2mFx+0.5*(data(i,j)*cos(2*OMEGA*i*Dt)); a_2mFy = a_2mFy+0.5*(data(i,k)*cos(2*OMEGA*i*Dt)); a_mnFx = a_mnFx+0.5*(data(i,j)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_mnFy = a_mnFy+0.5*(data(i,k)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_m_nFx = a_m_nFx+0.5*(data(i,j)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_m_nFy = a_m_nFy+0.5*(data(i,k)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_n_mFx = a_n_mFx+0.5*(data(i,j)*cos(2*((n-m)/m)*OMEGA*i*Dt)); a_n_mFy = a_n_mFy+0.5*(data(i,k)*cos(2*((n-m)/m)*OMEGA*i*Dt)); b_mFx = b_mFx+0.5*(data(i,j)*sin(OMEGA*i*Dt)); b_mFy = b_mFy+0.5*(data(i,k)*sin(OMEGA*i*Dt)); b_2mFx = b_2mFx+0.5*(data(i,j)*sin(2*OMEGA*i*Dt)); b_2mFy = b_2mFy+0.5*(data(i,k)*sin(2*OMEGA*i*Dt)); b_mnFx = b_mnFx+0.5*(data(i,j)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_mnFy = b_mnFy+0.5*(data(i,k)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_m_nFx = b_m_nFx+0.5*(data(i,j)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_m_nFy = b_m_nFy+0.5*(data(i,k)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_n_mFx = b_n_mFx+0.5*(data(i,j)*sin(2*((n-m)/m)*OMEGA*i*Dt)); b_n_mFy = b_n_mFy+0.5*(data(i,k)*sin(2*((n-m)/m)*OMEGA*i*Dt)); else
a_0Fx = a_0Fx+data(i,j); a_0Fy = a_0Fy+data(i,k); a_mFx = a_mFx+(data(i,j)*cos(OMEGA*i*Dt)); a_mFy = a_mFy+(data(i,k)*cos(OMEGA*i*Dt)); a_2mFx = a_2mFx+(data(i,j)*cos(2*OMEGA*i*Dt)); a_2mFy = a_2mFy+(data(i,k)*cos(2*OMEGA*i*Dt)); a_mnFx = a_mnFx+(data(i,j)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_mnFy = a_mnFy+(data(i,k)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_m_nFx = a_m_nFx+(data(i,j)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_m_nFy = a_m_nFy+(data(i,k)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_n_mFx = a_n_mFx+(data(i,j)*cos(2*((n-m)/m)*OMEGA*i*Dt)); a_n_mFy = a_n_mFy+(data(i,k)*cos(2*((n-m)/m)*OMEGA*i*Dt)); b_mFx = b_mFx+(data(i,j)*sin(OMEGA*i*Dt)); b_mFy = b_mFy+(data(i,k)*sin(OMEGA*i*Dt)); b_2mFx = b_2mFx+(data(i,j)*sin(2*OMEGA*i*Dt)); b_2mFy = b_2mFy+(data(i,k)*sin(2*OMEGA*i*Dt)); b_mnFx = b_mnFx+(data(i,j)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_mnFy = b_mnFy+(data(i,k)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_m_nFx = b_m_nFx+(data(i,j)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_m_nFy = b_m_nFy+(data(i,k)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_n_mFx = b_n_mFx+(data(i,j)*sin(2*((n-m)/m)*OMEGA*i*Dt)); b_n_mFy = b_n_mFy+(data(i,k)*sin(2*((n-m)/m)*OMEGA*i*Dt)); end; end; a_0Fx = a_0Fx/N; a_0Fy = a_0Fy/N; a_mFx = a_mFx/N; a_mFy = a_mFy/N; a_2mFx = a_2mFx/N; a_2mFy = a_2mFy/N; a_mnFx = a_mnFx/N; a_mnFy = a_mnFy/N; a_m_nFx = a_m_nFx/N; a_m_nFy = a_m_nFy/N; a_n_mFx = a_n_mFx/N; a_n_mFy = a_n_mFy/N; b_mFx = b_mFx/N; b_mFy = b_mFy/N; b_2mFx = b_2mFx/N; b_2mFy = b_2mFy/N; b_mnFx = b_mnFx/N; b_mnFy = b_mnFy/N; b_m_nFx = b_m_nFx/N; b_m_nFy = b_m_nFy/N; b_n_mFx = b_n_mFx/N; b_n_mFy = b_n_mFy/N;
%Calcolo di F_0 (componente stazionaria) F_0x = 0.5*(b_mFx-a_mFy);
F_0y = 0.5*(a_mFx+b_mFy); F_0(1) = F_0x;
save F_0.txt F_0 -ascii -tabs;
%Calcolo di A (matrice di rigidezza generalizzata)
%NOTA:NON HO CAPITO XCHE'MA NELLA TESI DI MENONI LO SVILUPPO IN SERIE %DI FOURIER COMINCIA CON UN TERMINE a_0/2,INVECE CHE a_0...
%Qualora si decidesse di adottare uno sviluppo con a_0,moltiplicare tutti %i termini del tipo a_0F per due!!!!!!!!!!!!!!!!!!!!
if n=0 A_XX = 0.5*(b_mFx-a_mFy); A_XY = 0; A_YX = 0.5*(a_mFx+b_mFy); A_YY = 0; else if n=m A_XX = 0.5*(a_0Fx+b_2mFx-a_2mFy); A_XY = 0.5*(-a_0Fy+a_2mFx+b_2mFy); A_YX = 0.5*(a_0Fy+a_2mFx+b_2mFy); A_YY = 0.5*(a_0Fx+a_2mFy-b_2mFx); else if n=-m A_XX = 0.5*(a_0Fx+b_2mFx-a_2mFy); A_XY = 0.5*(a_0Fy-a_2mFx-b_2mFy); A_YX = 0.5*(a_0Fy+a_2mFx+b_2mFy); A_YY = 0.5*(-a_0Fx-a_2mFy+b_2mFx); else if abs(n)<m A_XX = 0.5*(b_mnFx+b_m_nFx-a_mnFy-a_m_nFy);
A_XY = 0.5*(b_mnFy+a_mnFx-b_m_nFy-a_m_nFx); %*Corretto al 10/10/2003 A_YX = 0.5*(a_mnFx+a_m_nFx+b_mnFy+b_m_nFy); A_YY = 0.5*(a_mnFy-a_m_nFy+b_m_nFx-b_mnFx); else A_XX = 0.5*(b_mnFx+b_n_mFx-a_mnFy+a_n_mFy); A_XY = 0.5*(a_n_mFx+a_mnFx-b_n_mFy+b_mnFy); A_YX = 0.5*(a_mnFx-a_n_mFx+b_mnFy+b_n_mFy); A_YY = 0.5*(-b_mnFx+a_mnFy+b_n_mFx+a_n_mFy); end; end; end; end;
A_RD(1,1) = A_XX; A_RD(1,2) = A_XY; A_RD(2,1) = A_YX; A_RD(2,2) = A_YY; save A_RD.txt A_RD -ascii -tabs;
%Calcolo di F_RD for i=1:N
F_RDx(i) = A_XX*cos(n/m*OMEGA*i*Dt)+A_XY*sin(n/m*OMEGA*i*Dt); F_RDy(i) = A_YX*cos(n/m*OMEGA*i*Dt)+A_YY*sin(n/m*OMEGA*i*Dt); end;
save F_RDx.txt F_RDx -ascii -tabs; save F_RDy.txt F_RDy -ascii -tabs;
for i=1:N t(i)=i*Dt; end; figure plot(t,F_RDx,'r-'); title('Componente Rotodinamica F_X'); figure plot(t,F_RDy,'b-');
title('Componente Rotodinamica F_Y'); %CALCOLO DEI MOMENTI M_X M_Y
%Inizializzazione dei coefficienti di Fourier utili al calcolo di M_0 e AM a_0Mx = 0; a_0My = 0; a_mMx = 0; a_mMy = 0; a_2mMx = 0; a_2mMy = 0; a_mnMx = 0; a_mnMy = 0; a_m_nMx = 0; a_m_nMy = 0; a_n_mMx = 0; a_n_mMy = 0; b_mMx = 0; b_mMy = 0; b_2mMx = 0; b_2mMy = 0; b_mnMx = 0; b_mnMy = 0; b_m_nMx = 0; b_m_nMy = 0; b_n_mMx = 0; b_n_mMy = 0;
%Calcolo dei coefficienti dello sviluppo in serie di Fourier for i=1:N
if i=1 | i=N
a_0Mx = a_0Mx+0.5*data(i,h); %dove h è la riga di data relativa ad M_x!!!! a_0My = a_0My+0.5*data(i,l); %dove l è la riga di data relativa ad M_y!!!! a_mMx = a_mMx+0.5*(data(i,h)*cos(OMEGA*i*Dt)); a_mMy = a_mMy+0.5*(data(i,l)*cos(OMEGA*i*Dt)); a_2mMx = a_2mMx+0.5*(data(i,h)*cos(2*OMEGA*i*Dt)); a_2mMy = a_2mMy+0.5*(data(i,l)*cos(2*OMEGA*i*Dt)); a_mnMx = a_mnMx+0.5*(data(i,h)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_mnMy = a_mnMy+0.5*(data(i,l)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_m_nMx = a_m_nMx+0.5*(data(i,h)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_m_nMy = a_m_nMy+0.5*(data(i,l)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_n_mMx = a_n_mMx+0.5*(data(i,h)*cos(2*((n-m)/m)*OMEGA*i*Dt)); a_n_mMy = a_n_mMy+0.5*(data(i,l)*cos(2*((n-m)/m)*OMEGA*i*Dt)); b_mMx = b_mMx+0.5*(data(i,h)*sin(OMEGA*i*Dt)); b_mMy = b_mMy+0.5*(data(i,l)*sin(OMEGA*i*Dt)); b_2mMx = b_2mMx+0.5*(data(i,h)*sin(2*OMEGA*i*Dt));
b_2mMy = b_2mMy+0.5*(data(i,l)*sin(2*OMEGA*i*Dt)); b_mnMx = b_mnMx+0.5*(data(i,h)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_mnMy = b_mnMy+0.5*(data(i,l)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_m_nMx = b_m_nMx+0.5*(data(i,h)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_m_nMy = b_m_nMy+0.5*(data(i,l)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_n_mMx = b_n_mMx+0.5*(data(i,h)*sin(2*((n-m)/m)*OMEGA*i*Dt)); b_n_mMy = b_n_mMy+0.5*(data(i,l)*sin(2*((n-m)/m)*OMEGA*i*Dt)); else a_0Mx = a_0Mx+data(i,h); a_0My = a_0My+data(i,l); a_mMx = a_mMx+(data(i,h)*cos(OMEGA*i*Dt)); a_mMy = a_mMy+(data(i,l)*cos(OMEGA*i*Dt)); a_2mMx = a_2mMx+(data(i,h)*cos(2*OMEGA*i*Dt)); a_2mMy = a_2mMy+(data(i,l)*cos(2*OMEGA*i*Dt)); a_mnMx = a_mnMx+(data(i,h)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_mnMy = a_mnMy+(data(i,l)*cos(2*((m+n)/m)*OMEGA*i*Dt)); a_m_nMx = a_m_nMx+(data(i,h)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_m_nMy = a_m_nMy+(data(i,l)*cos(2*((m-n)/m)*OMEGA*i*Dt)); a_n_mMx = a_n_mMx+(data(i,h)*cos(2*((n-m)/m)*OMEGA*i*Dt)); a_n_mMy = a_n_mMy+(data(i,l)*cos(2*((n-m)/m)*OMEGA*i*Dt)); b_mMx = b_mMx+(data(i,h)*sin(OMEGA*i*Dt)); b_mMy = b_mMy+(data(i,l)*sin(OMEGA*i*Dt)); b_2mMx = b_2mMx+(data(i,h)*sin(2*OMEGA*i*Dt)); b_2mMy = b_2mMy+(data(i,l)*sin(2*OMEGA*i*Dt)); b_mnMx = b_mnMx+(data(i,h)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_mnMy = b_mnMy+(data(i,l)*sin(2*((m+n)/m)*OMEGA*i*Dt)); b_m_nMx = b_m_nMx+(data(i,h)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_m_nMy = b_m_nMy+(data(i,l)*sin(2*((m-n)/m)*OMEGA*i*Dt)); b_n_mMx = b_n_mMx+(data(i,h)*sin(2*((n-m)/m)*OMEGA*i*Dt)); b_n_mMy = b_n_mMy+(data(i,l)*sin(2*((n-m)/m)*OMEGA*i*Dt)); end; end; a_0Mx = a_0Mx/N; a_0My = a_0My/N; a_mMx = a_mMx/N; a_mMy = a_mMy/N; a_2mMx = a_2mMx/N; a_2mMy = a_2mMy/N; a_mnMx = a_mnMx/N; a_mnMy = a_mnMy/N; a_m_nMx = a_m_nMx/N; a_m_nMy = a_m_nMy/N; a_n_mMx = a_n_mMx/N; a_n_mMy = a_n_mMy/N; b_mMx = b_mMx/N; b_mMy = b_mMy/N; b_2mMx = b_2mMx/N; b_2mMy = b_2mMy/N; b_mnMx = b_mnMx/N; b_mnMy = b_mnMy/N; b_m_nMx = b_m_nMx/N; b_m_nMy = b_m_nMy/N; b_n_mMx = b_n_mMx/N; b_n_mMy = b_n_mMy/N;
%Calcolo di M_0 (componente stazionaria) M_0x = 0.5*(b_mMx-a_mMy);
M_0y = 0.5*(a_mMx+b_mMy); M_0(1) = M_0x;
M_0(2) = M_0y;
save M_0.txt M_0 -ascii -tabs;
%Calcolo di AM (matrice di rigidezza generalizzata)
%VEDERE NOTA ALLEGATA AL PARAGRAFO DEDICATO ALLE FORZE!!!! if n=0 AM_XX = 0.5*(b_mMx-a_mMy); AM_XY = 0; AM_YX = 0.5*(a_mMx+b_mMy); AM_YY = 0; else iM n=m AM_XX = 0.5*(a_0Mx+b_2mMx-a_2mMy); AM_XY = 0.5*(-a_0My+a_2mMx+b_2mMy); AM_YX = 0.5*(a_0My+a_2mMx+b_2mMy); AM_YY = 0.5*(a_0Mx+a_2mMy-b_2mMx); else iM n=-m AM_XX = 0.5*(a_0Mx+b_2mMx-a_2mMy); AM_XY = 0.5*(a_0My-a_2mMx-b_2mMy); AM_YX = 0.5*(a_0My+a_2mMx+b_2mMy); AM_YY = 0.5*(-a_0Mx-a_2mMy+b_2mMx); else iM abs(n)<m AM_XX = 0.5*(b_mnMx+b_m_nMx-a_mnMy-a_m_nMy); AM_XY = 0.5*(b_mnMy+a_mnMx-b_m_nMy-a_m_nMx); AM_YX = 0.5*(a_mnMx+a_m_nMx+b_mnMy+b_m_nMy); AM_YY = 0.5*(a_mnMy-a_m_nMy+b_m_nMx-b_mnMx); else AM_XX = 0.5*(b_mnMx+b_n_mMx-a_mnMy+a_n_mMy); AM_XY = 0.5*(a_n_mMx+a_mnMx-b_n_mMy+b_mnMy); AM_YX = 0.5*(a_mnMx-a_n_mMx+b_mnMy+b_n_mMy); AM_YY = 0.5*(-b_mnMx+a_mnMy+b_n_mMx+a_n_mMy); end; end; end; end;
AM_RD(1,1) = AM_XX; AM_RD(1,2) = AM_XY; AM_RD(2,1) = AM_YX; AM_RD(2,2) = AM_YY; save AM_RD.txt AM_RD -ascii -tabs;
%Calcolo di M_RD for i=1:N
M_RDx(i) = AM_XX*cos(n/m*OMEGA*i*Dt)+AM_XY*sin(n/m*OMEGA*i*Dt); M_RDy(i) = AM_YX*cos(n/m*OMEGA*i*Dt)+AM_YY*sin(n/m*OMEGA*i*Dt); end;
save M_RDx.txt M_RDx -ascii -tabs; save M_RDy.txt M_RDy -ascii -tabs; figure
plot(t,M_RDx,'r-');
title('Componente Rotodinamica M_X'); figure
plot(t,M_RDb,'b-');
title('Componente Rotodinamica M_Y');