Sistema massa-molla-smorzatore a due gradi di libertà

REDpulsaR
Come da titolo sto lavorando su un S-M-S a 2 gradi di libertà,sottoposto a due forzanti sinusoidali (applicate rispettivamente alla prima e alla seconda massa).
Dopo aver ottenuto mediante simulink la time-history delle variabili (ovvero le coordinate lagrangiane relative a spostamento e velocità rispettivamente per la prima e seconda massa del sistema),avrei bisogno di determinare i grafici di ampiezza e fase (Bode) del sistema.
E' possibile ottenerli direttamente da simulink continuando a lavorare sul modello già determinato?
Diversamente mediante foglio di lavoro Matlab,come posso ottenere i diagrammi di Bode tenendo conto delle due forzanti?
(Per intenderci io saprei ottenerli nel caso di una sola forzante,i dubbi sorgono appunto del dover implementare la seconda).
Vi ringrazio in anticipo per la disponibilità :wink:.

Risposte
cyd1
il modo piu immediato che mi viene in mente è calcolare la fdt del sistema.
in generale sarà descritto da un sistema del tipo
$m ddot(x) = F_X - k_x x - beta_x dot(x)$
$m ddot(y) = F_y - k_y y - beta_y dot(y)$

trasformi con laplace e a meno di errori di calcolo
$s^2 x - dot(x)(0) - s x(0) = F_x/m - k_x/m x - beta_x/m s x + beta_x/m x(0)$
$s^2 y - dot(y)(0) - s y(0) = F_y/m - k_y/m y - beta_y/m s y + beta_y/m y(0)$

risolvi in funzione di x e y
$x = (dot(x)(0) + (s + beta_x/m) x(0) )/(s^2 + beta_x/m s + k_x/m) + 1/m F_x/(s^2 + beta_x/m s + k_x/m)$
$y = (dot(y)(0) + (s + beta_y/m) y(0) )/(s^2 + beta_y/m s + k_y/m) + 1/m F_y/(s^2 + beta_y/m s + k_y/m)$

consideri solo la risposta forzata e hai la fdt
$x/F_x = 1/m 1/(s^2 + beta_x/m s + k_x/m)$
$y/F_y = 1/m 1/(s^2 + beta_y/m s + k_y/m)$

puoi tracciare i diagrammi di bode a mano, sono solo due poli oppure con matlab
s=tf('s')
Gx = 1/m/(s^2 + beta_x/m s + k_x/m)
Gy=1/m/(s^2 + beta_y/m s + k_y/m)

figure(1);bode(Gx,Gy);grid on

sonoqui_1
Per la linearità non dovrebbe essere che entrambe le funzioni $x(t)$ ed $y(t)$ dipendono dalle singole forzanti applicate sulle masse e che quindi la soluzione può essere trovata come somma delle soluzioni ottenute "accendendo" le forzanti una alla volta?

cyd1
certo ma x e y sono due variabili di stato indipendenti

REDpulsaR
Cyd grazie per la risposta molto dettagliata,ma il mio dubbio è un altro in realtà. Non dovrei specificare anche i due ingressi sinusoidali (con rispettive ampiezze e pulsazioni) e quindi tenerne conto nel calcolare i diagrammi di bode?

Io avevo pensato anche ad un altro modo di ottenere la soluzione (confermatemi per favore che alla fine si ottiene lo stesso risultato ottenuto da Cyd). Io avrei determinato le matrici di stato del sistema (chiamiamole A,B,C,D) poi avrei usato il seguente codice:

sys=ss(A,B,C,D);
G=tf(sys);
bode(G)

Ora i miei dubbi sorgono appunto qui,non doveri specificare anche la forma delle forzanti? (Perchè procedendo così è come se non si tenesse proprio conto della loro forma sinusoidale,tanto potrebbero essere un gradino,tanto una costante).
Mi è capitato a volte di risolvere problemi in cui specificavo la pulsazione all'interno del comando bode,
bode(G,w) (però appunto la forzante sinusoidale era singola).

Se volessi simulare il sistema,nel caso di singola forzante procederei così:

sys=ss(A,B,C,D);
t=linspace(0,100,10000);
u=A*sin(w*t);
y=lsim(sys,u,t,[cond. iniziali]);
figure(1);
plot(t,y)

Nel caso in esame ora con due forzanti procedere come segue sarebbe corretto?

sys=ss(A,B,C,D);
t=linspace(0,100,10000);
u1=A1*sin(w1*t);
u2=A2*sin(w2*t);
y=lsim(sys,u1,u2,t,[cond. iniziali]);
%Matlab 'capisce' da se qual'è la prima e la seconda forzante? in base all'ordine in cui sono specificate nel comando%
figure(1);
plot(t,y)

per bode si potrebbe procedere in maniera analoga?
bode(G,w1,w2)

Scusate se sono stato un pò prolisso ma ho cercato di chiarire bene i miei dubbi ;) grazie mille!

sonoqui_1
Dal problema mi sembra di capire che ci siano due masse, collegate agli estremi di una molla. Se queste due masse sono vincolate a scorrere su una curva ad esempio, i gradi di libertà sono due.
è questo il caso?

REDpulsaR
No sono praticamente due sistemi massa molla smorzatore in serie diciamo,con due molle,due smorzatori (se mi spiegate come postare delle immagini potrei mettere uno disegno).
Ora riguardando la risoluzione di Cyd mi sono accorto che effettivamente non sono esattamente quelle le equazioni dinamiche del sistema (diciamo che mi ero soffermato più sulla parte di matlab),perchè ogni massa 'risente' del moto dell'altra. (L'ideale sarebbe riuscire a postare un'immagine).

REDpulsaR
Ecco questo è il sistema in esame con le rispettive equazioni che lo descrivono.
[img][/img]

cyd1
ah avevo capito tutt'altro sistema...
comunque il ragionamento non cambia, trovi le equazioni e le fdt.

no non devi includere la forzante quando fai i diagrammi. non avrebbe molto senso.
I diagrammi di bode servono a vedere in condizioni di linearità come reagisce il sistema per eccitazioni alle diverse frequenze, quindi è una funzione propria del sistema che diagrammi e che serve a vedere la reazione alle diverse forzanti per frequenze differenti.

nel tuo caso se $G|_(s=jomega)=G(j omega)$ è la fdt allora ad una sinusoide a frquenza $omega_f$ e ampiezza $A$ il sistema risponde con una sinusoide di ampiezza $|G(jomega_f)|*A$ e fase $omega_f *t + f a s e (G(jomega_f))$

ps. ci sono molti modi equivalenti per vedere i diagrammi su matlab quindi penso vada bene

REDpulsaR
Ti ringrazio sei stato davvero molto chiaro! ;)

Quindi direi che come la soluzione che ho proposto io è corretta.
Il sistema in esame avendo due forzanti dovrebbe rispondere con un ampiezza ∣∣G(jωf)∣∣⋅(A1+A2) e fase ωf⋅t+fase(G(j(ωf1+wf2))?

Per quanto riguarda il mio dubbio circa il comando lsim per poter simulare l'intero sistema sottoposto alle forzanti,la mia idea è corretta o si deve procedere diversamente?

sys=ss(A,B,C,D);
t=linspace(0,100,10000);
u1=A1*sin(w1*t);
u2=A2*sin(w2*t);
y=lsim(sys,u1,u2,t,[cond. iniziali]);
%Matlab 'capisce' da se qual'è la prima e la seconda forzante? in base all'ordine in cui sono specificate nel comando%
figure(1);
plot(t,y)

Grazie ancora ;)

cyd1
eh no,
se le due forzanti hanno frequenza diversa la risposta sarà
$(A_1 + |G(jomega_1)|) * sin (omega_1 t + praticamente ogni volta che hai un ingresso (una forzante) con un contenuto armonico definito vai a vedere sul diagramma di bode a quanto corrisponde l'ampiezza e la fase a tali frequenze e l'uscita sarà la sovrapposizione della risposta in frequenza alle singole componenti frequenziali della forzante

è il principio di sovrapposizione, immaginariamente prendi l'ingresso lo sviluppi in serie di fourier e ottieni un ingresso che è la sommadi vari termini a frequenza diversa. per il principio di sovrapposizione la risposta sarà la somma della risposta alle singole componenti. e come la calcoli la risposta alle singole componenti? beh se il sistema è lineare semplicemnte come sopra.

per quanto riguarda matlab cosi su due piedi non so dirti se vda bene.. conosco poco il linguaggio

sonoqui_1
Per il sistema considerato non mi sembra di questa forma la soluzione. La forzante applicata su una massa genera un contributo al moto anche dell'altra massa, quindi per ogni forzante ci sono due funzioni di trasferimento che forniscono ampiezza e fase del moto di entrambe le masse. Complessivamente ci sono quattro funzioni di trasferimento.

cyd1
si, non è la soluzione era il concetto.

REDpulsaR
Scusate ma nell'ultimo passaggio mi sono perso,che la forzante applicata su una massa generi un contributo al moto anche dell'altra mi sembra evidente,ma non capisco come si debbano ottenere 4 funzioni di trasferimento (nel caso quali sarebbero?). La funzione di trasferimento che descrive il sistema e i diagrammi di bode della stessa non sono quelli che ottengo mediante i comandi che seguono?

sys=ss(A,B,C,D); %essendo le matrici di stato quelli calcolate precedentemente e indicate nella foto%
G=tf(sys);
bode(G)

a questo punto la soluzione non dovrebbe essere proprio quella indicata da Cyd dove le ampiezze e le fasi delle due sinusoidi le leggo dai diagrammi di Bode per le due frequenze differenti?

Ad ogni modo ci tengo a ringraziavi davvero,perchè mi state aiutando a colmare delle gravi lacuna che ho scoperto di avere circa i digrammi di Bode ;)!

P.S. Per quanto riguarda il mio quesito precedente circa la simulazione del sisteama con le due forzanti la mia soluzione ho potuto riscontrare essere coretta,solo che i due ingressi dopo essere stati definiti devono essere inseriti in un unico vettore ed è solo questo a dover essere utilizzato come parametro del comando lsim (ed effettivamente è abbastanza logico).
A scopo informativo indico la procedura di seguito:

sys=ss(A,B,C,D);
t=linspace(0,100,10000); %vettore dei tempi%
u1=A1*sin(w1*t);
u2=A2*sin(w2*t);
U=[u1;u2]; %vettore degli ingressi%
x0=[x01 x02 x03 x04]' %vettore condizioni iniziali%
y=lsim(sys,U,t,x0);
figure(1);
plot(t,y)

sonoqui_1
Le quattro funzioni di trasferimento sono quelle due che, a regime, applicata una forzante su una massa di una certa ampiezza, permettono di determinare ampiezza e fase degli spostamenti sulle due masse, e quelle due che, applicata una forzante su un'altra massa, permettono di determinare ampiezza e fase degli spostamenti sulle due masse.

REDpulsaR
Ahhh tu con 4 intedevi 2 per l'ampizza e due per la fase! Questo si lo sapevo, dal tuo messaggio avevo pensato dovessero essere 4 coppie di funzioni di trasferimento,ogni coppia comprendente una per l'ampiezza e l'altra per la fase.

Quindi per concludere,una volta ottenuti i diagrammi di bode del sistema (numericamente,mediante matlab)

sys=ss(A,B,C,D);
G=tf(sys);
bode(G)

leggo al variare della frequenza della forzante da questo diagramma il valore di ampiezza e fase e sommo le sinusoidi con questi valori per ottenere l'andamento del sistema in uscita.

Analiticamente,invece risolvendo il sistema di equazioni,si ottengono appunto 2 coppie di funzioni i trasferimento una per ampiezza e una per la fase (partendo dal presupposto che essendo le forzanti armoniche le soluzioni a regime avranno la forma x(t)=Xe^iwt,sostituendo e risolvendo il sistema ottengo le suddette FDT). Ottenute queste funzioni ne potrei tracciare l'andamento nel tempo magari mediante il comando plot(t,y).

Il ragionamento fatto fin qui è corretto?

cyd1
4 fdt si riferiscono a
uscita1 realtivo a forzante1
uscita1 realtivo a forzante2
uscita2 realtivo a forzante1
uscita2 realtivo a forzante2

e ognuna è una funzione complessa a cui è associato un modulo e una fase

REDpulsaR
Ok ma alla fine l'uscita finale diciamo, del sistema è la due ovvero quella relativa alla seconda massa,quindi dovendo io studiare il moto a valle del sistema è quella la parte che mi interessa. E dunque in questo caso la soluzione a valle del moto non è appunto quella che tu avevi proposto all'inizio,ovvero:

(A1*|G(jω1)|)⋅sin(ω1t+
dove la G è appunto quella che ottengo numericamente con i comando G=tf(sys), e la cui ampiezza e fase la leggo dai diagrammi ottenuti mediante il comando bode(G).
A me interessa il campo di moto complessivo del sistema,a valle,relativo alla seconda coordinata lagrangiana x2 e non x1.

REDpulsaR
Questi sono i diagrammi di Bode ottenuti mediante il metodo che ho indicato precedentemente.
http://i39.tinypic.com/xol0zb.jpg
Sono indicate 4 uscite ovvero le 2 velocità e i due spostamenti,rispettivamente per la massa 1 e la 2. Non capisco però perchè compaiano due colonne di grafici,indicate rispettivamente con ln(1) e ln(2).

REDpulsaR
ah giusto dovrebbero essere l'una relativa alla prima forzante e l'altra relativa alla seconda forzante,ed infatti tutto combacia con quanto avete detto voi.

Tornando alla risoluzione analitica che proponevo precedentemente,in questo modo ottengo le FDT dell'ampiezza per gli spostamenti e che posso diagrammare nel tempo mediante comando plot. Se volessi ottenere invece le ampiezze della velocità ,la forma della soluzione da ricercare non dovrebbe essere più x(t)=Xe^iwt bensì la sua derivata rispetto al tempo,a questo punto procederei come nel caso dello spostamento. Giusto?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.