THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Matlab, Mathematica, Octave, EngLab κλπ => Topic started by: Verminoz on September 21, 2009, 19:33:28 pm



Title: Συνάρτηση μεταφοράς στο MATLAB
Post by: Verminoz on September 21, 2009, 19:33:28 pm
Ψάχνω ψάχνω κι έχω μπερδευτεί, έστω ότι ορίζουμε μια συνάρτηση μεταφοράς στο MATLAB

h = tf( [5] , [1 2 10] );

με αυτό τον τρόπο η συνάρτηση μεταφοράς έχει οριστεί με βάση τη μεταβλητή Laplace "s". Πως μπορώ να πάρω το μέτρο ή την φάση της συνάρτησης μεταφοράς για κάποιο συγκεκριμένο s. Πχ. s=i*5;

Κανείς καμιά ιδέα; Γίνεται;

(Το μέτρο και η φάση υπολογίζονται από τις abs και angle αλλά πως παίρνω την τιμή της συνάρτησης μεταφοράς για κάποιο s έτσι ώστε να χρησιμοποιήσω τις abs και angle???)


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Megawatt on September 21, 2009, 19:58:18 pm
Επεξεργαζομαι την απαντηση ...ανεμενε...σκεφτομαι

Λοιπον, δεν βρηκα τις σημειωσεις που ηθελα, για να σε απαντησω ακριβως σε αυτο που ρωτας, αλλα βρηκα κατι αλλες που παιζουν με διαγραμμα Bode για το πλατος και την φαση. Τρεξε αυτο το προγραμμα, το οποιο κανει αντιστροφο μετασχηματισμο Laplace και βγαζει την συναρτηση σου ως προς τον χρονο + τα διαγραμματα πλατους και φασης ως προς την κυκλικη συχνοτητα ω(rad/sec).

Τρεξε το παρακατω προγραμμα:
Code:
numV=[5];%orizeis ton ari8miti tis SM
denV=[1 2 10];%orizeis ton paranomasti tis SM
poloi=roots(denV)%sou dinei toys poloys(diladi tis rizes tou paranomasti)
t=0:0.01:5;%orizeis to pedio toy xronou ston antistrofo metasximatismo
uV=1*stepfun(t,0);%endiaferesai gia bhmatikh apokrisi platoys 1
yV=lsim(numV,denV,uV,t)%antistrofos metasximatismos Laplace
plot(t,yV)
grid on%sou dinei plegma stin grafiki
figure(2)%diathreis to sxima x tis bhmatikis apokrisis
bode(numV,denV)%dinei to diagramma platoys kai fasis
%*******************
%*******************
[R,P,K]=residue(numV,denV)%anaptysei se merika klasmata: R1/s-P1 + R2/s-P2

Η βηματικη αποκριση και τα διαγραμματα Bode ειναι:
(http://www.thmmy.gr/smf/index.php?action=dlattach;topic=34841.0;attach=37863)

Στο σχημα σημειωνω την συχνοτητα που ψαχνεις, τα 5rad/s :P
(http://www.thmmy.gr/smf/index.php?action=dlattach;topic=34841.0;attach=37865)


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Verminoz on September 21, 2009, 21:49:04 pm
bump!


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Megawatt on September 24, 2009, 05:33:49 am
Λοιπον.
Δεν ξερω αν εχει νοημα μια τετοια ωρα η απαντηση μου, αλλα .... καλιο αργα παρα αργοτερα :D

Να ναι καλα ο fugi που με τις απαντησεις του εδω στο φορουμ αλλα σε αλλον πινακα, καταλαβα τι πρεπει να κανεις. Η μαγκια ολη ειναι στους τελεστες ./ και .^ που κανουν πραξεις στοιχειο με στοιχειο.

Τρεξε αυτο το προγραμμα.
Σαν 1ος τροπος επαναλαμβανεται η πανω αναλυση με εντολη bode που βγαζει τα διαγραμματα πλατους και φασης.
Ο 2ος τροπος, περιγραφει αυτο που ρωτας.
Εδω θα δεις οτι εχεις την δυνατοτητα δινοντας την τιμη στο w=5 να βρεις το πλατος και την φαση για s=5i που θες.
Στο command window του Matlab, τοτε θα παρεις τις παρακατω τιμες για το πλατος και την φαση

amp =

    0.2774 (δηλαδη -11.1394dB)

phase =

 -146.3099
 
Τα διαγραμματα που προκυπτουν απεικονιζουν με μια τελεια τις παραπανω τιμες.


Αν θες αποκριση συχνοτητας, απλώς πανε στην γραμμη 19 και βαλε σε σχολιο το %w=5;. Τοτε πανε στην γραμμη 18 και βγαλε απο το σχολιο την εντολη %w=[0.01:0.01:10]

% **** 1oς τροπος: *******
%Αντικαθιστουμε το jω με s και χρησιμοποιούμε την εντολή bode()
% όπως περιγράφεται παραπάνω.
clear all
num=[5];
den=[1 2 10];
sys=tf(num,den);
bode(sys) %τωρα στο command window του Matlamb εχεις την μορφη της ΣΜ
% **** 2oς τροπος: *******
%%Ο δεύτερος τρόπος είναι οταν δεν μπορώ να απομονώσω το jω. Τοτε δεν γίνεται
% να χρησιμοποιήσουμε την bode. Οπότε πάμε με τον ορισμό με την εντολή freqresp()
% ο οποίος όμως δεν συνίσταται τόσο σε αρχάριους
% αλλά σε επιτρέπει να πάρεις τον έλεγχο στα χέρια σου.
% Τωρα, για χαρην παραδειγματος, επειδη η ΣΜ ειναι εκφρασμενη με s, αντικαθιστω
% οπου s το jω. Ετσι προκυπτει η συναρτηση h που γραφω παρακατω
figure
k=5;
%w=[0.01:0.01:10] % το εύρος συχνοτήτων
w=5;% βγαζεις απο το σχολιο την συχνοτητα αυτη προκειμενου να βρεις για s=5i
h=k./(-1*w.^2+2*j.*w+10)
%προσεξε τον τελεστή ".*" και "./"  είναι απαραίτητος για να κάνουμε πράξεις
%στοιχείο με στοιχείο.
amp=abs(h)
phase_rad=angle(h)%tin dinei se rad
phase=rad2deg(phase_rad)%metatrepei ta rad se degrees
dB_amp=20*log10(amp) %μετατρεπει σε dB το πλατος
plot(w,amp)
%grid
xlabel('w(rad/s)')
ylabel('platos')
title('Diagramma platoys')
figure
plot(w,phase)
%grid
xlabel('w(rad/s)')
ylabel('fasi')
title('Diagramma fasis')


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Verminoz on September 24, 2009, 05:43:24 am
χαχα, ευχαριστώ για τις απαντήσεις megawatt. Ντάξει κατάλαβα τι παίζει αλλά είναι λίγο αστείο το πως δεν υπάρχει ένας ευθύς (και άρα σύντομος) τρόπος να κάνεις κάτι το τόσο απλό. Μπορείς να υπολογίσεις πόλους/μηδενικά, να φέρεις τη ΣΜ στην μορφή πόλων-μηδενικών, να τη σπάσεις σε κλάσματα, να κάνεις διαγράμματα bode, niquist κι ένα σωρό άλλα, να υπολογίσεις βηματικές αποκρίσεις, κρουστικές αποκρίσεις αλλά ΔΕ μπορείς να βρεις την τιμή της ΣΜ για μια συχνότητα :D


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Megawatt on September 24, 2009, 05:45:17 am
οντως!
:D :D


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: stratis on September 24, 2009, 13:08:58 pm
Ρε παιδιά, πολύ απλό είναι. Αν η συνάρτηση μεταφοράς έχει τον αριθμητή num, τον παρονομαστή den και το s, τότε η τιμή h που ψάχνεις είναι:

h = polyval(num,s)./polyval(den,s);

Υπάρχει και η συνάρτηση freqs(num,den,ω) που όπως θα δεις στη βοήθεια του Matlab κάνει αυτήν ακριβώς την πράξη. Ντάξει δε χρησιμοποιείς κατευθείαν την tf αλλά νομίζω είναι πολύ απλό.

 :)


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Verminoz on September 24, 2009, 13:22:43 pm
το θέμα είναι τι γίνεται όταν έχεις μια συνάρτηση μεταφοράς που έχει προκύψει από άλλες διαδικασίες και δεν την έχεις εισάγει εσύ απευθείας. Μπορείς να την σπάσεις σε πολυώνυμο αριθμητή και πολυωνυμο παρονομαστή; Αν ναι τότε βολεύει η μέθοδος σου :)


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: stratis on September 24, 2009, 13:43:43 pm
το θέμα είναι τι γίνεται όταν έχεις μια συνάρτηση μεταφοράς που έχει προκύψει από άλλες διαδικασίες και δεν την έχεις εισάγει εσύ απευθείας. Μπορείς να την σπάσεις σε πολυώνυμο αριθμητή και πολυωνυμο παρονομαστή; Αν ναι τότε βολεύει η μέθοδος σου :)

Μπορείς. Αν sys η συνάρτηση μεταφοράς, τότε o αριθμητής είναι sys.num{1} και ο παρονομαστής sys.den{1}. Άρα τελικά αυτό που κάνεις είναι: 

h = polyval(sys.num{1},s)./polyval(sys.den{1},s);  ;)


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Megawatt on September 26, 2009, 03:02:21 am
Την sys.num δεν την καταλαβα. Ειναι εντολη στο matlab? (τωρα γραφω απο αλλο πισι που δεν εχει ματλαμπ για να το δοκιμασω). Και επιστρεφει τον αριθμητη της "συνθετης" ΣΜ ?




Ο ασχετος με το matlab που προσπαθει να το μαθει καπως :P



Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: stratis on September 26, 2009, 04:01:59 am
Την sys.num δεν την καταλαβα. Ειναι εντολη στο matlab? (τωρα γραφω απο αλλο πισι που δεν εχει ματλαμπ για να το δοκιμασω). Και επιστρεφει τον αριθμητη της "συνθετης" ΣΜ ?


Από τη σελίδα της mathworks

To create MIMO transfer functions, specify the numerator and denominator of each SISO entry. In this case:
  • num and den are cell arrays of row vectors with as many rows as outputs and as many columns as inputs.
  • The row vectors num{i,j} and den{i,j} specify the numerator and denominator of the transfer function from input j to output i (with the SISO convention).

Έτσι για ένα σύστημα μιας εισόδου και μιας εξόδου, γράφοντας π.χ. sys.num{1} παίρνεις τον αριθμητή της συνάρτησης μεταφοράς. Περισσότερα εδώ:

http://www.mathworks.com/access/helpdesk/help/toolbox/control/index.html?/access/helpdesk/help/toolbox/control/ref/tf.html&http://www.google.gr/search?hl=el&rlz=1C1GGLS_enGR291GR303&q=matlab+transfer+function+object+numberator&btnG=%CE%91%CE%BD%CE%B1%CE%B6%CE%AE%CF%84%CE%B7%CF%83%CE%B7&meta= (http://www.mathworks.com/access/helpdesk/help/toolbox/control/index.html?/access/helpdesk/help/toolbox/control/ref/tf.html&http://www.google.gr/search?hl=el&rlz=1C1GGLS_enGR291GR303&q=matlab+transfer+function+object+numberator&btnG=%CE%91%CE%BD%CE%B1%CE%B6%CE%AE%CF%84%CE%B7%CF%83%CE%B7&meta=)


Title: Re: Συνάρτηση μεταφοράς στο MATLAB
Post by: Megawatt on September 26, 2009, 08:42:26 am
ωραιος :)