ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Τµήµα Επιστήµης Υπολογιστών HY-5: Εφαρµοσµένα Μαθηµατικά για Μηχανικούς Εαρινό Εξάµηνο 7-8 ιδάσκοντες : Γ. Στυλιανού, Γ. Καφεντζής Πέµπτη Σειρά Ασκήσεων - Bonus Ασκήσεις Ηµεροµηνία Ανάθεσης : 3/3/8 Ηµεροµηνία Παράδοσης : 7/4/8, 6: Οι παρακάτω ασκήσεις είναι bonus, + µονάδες η καθεµία στο ϐαθµό αυτής της σειράς ασκήσεων (δηλ. µπορείτε να πάρετε µέχρι /9 σε αυτή τη σειρά.) [ ] Ασκηση - Κρουστική Απόκριση Εστω η κρουστική απόκριση h(t) ίση µε h(t) = e t u( t + 4) + e t u(t 5) () Βρείτε τις σταθερές A, B τέτοιες ώστε e (t τ), τ < A h(t τ) = e (t τ), τ > B, A τ B () [ ] Ασκηση - Συµβολικός Μετασχηµατισµός Laplace Στην προηγούµενη σειρά ασκήσεων είδατε πως µπορεί κανείς να υπολογίσει και να χρησιµοποιήσει το µετασχ. Fourier αριθµητικά και συµβολικά στο MATLAB. Ας δούµε εδώ πως µπορούµε να χρησιµοποιήσουµε το συµβολικό υπολογισµό για να ϐρούµε µετασχηµατισµούς Laplace. Το MATLAB παρέχει τις συναρτήσεις laplace, ilaplace οι οποίες µπορούν να σας δώσουν τους αντίστοιχους µετασχηµατισµούς σε κλειστή µορφή. Γνωρίζουµε ότι e at u(t) X(s) =, R{s} > a (3) a + s για a R. Ο παρακάτω κώδικας ϐρίσκει το µετασχ. Laplace του παραπάνω σήµατος. syms t a; a = ; x = exp(-a*t)*heaviside(t); X = laplace(x) % Symbolic variables % A value for a % Our signal in time % Laplace Transform Το MATLAB µας απαντά ότι X = /(s + ) που είναι και το σωστό αποτέλεσµα. Σηµειώστε ότι οι συναρτήσεις laplace, ilaplace υπολογίζουν το µετασχ. Laplace για αιτιατά σή- µατα µόνο. Άρα για σήµατα του τύπου x(t) = e t u( t), η απάντηση που ϑα πάρετε ϑα είναι µηδέν. Παραδώστε κώδικα MATLAB που υπολογίζει τους µετασχηµατισµούς Laplace των παρακάτω σηµάτων :
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων i. x(t) = u(t ) ii. x(t) = e t u(t ) iii. x(t) = e 3t cos(πt)u(t) iv. x(t) = δ(t ) (χρησιµοποιήστε τη συνάρτηση dirac) v. x(t) = (e t + e 3t )u(t) Συµπεριλάβετε στον κωδικά σας την απάντηση που σας δίνει το MATLAB. Χρησιµοποιήστε τη συνάρτηση simplify για να απλοποιήσετε τις απαντήσεις που παίρνετε. Γράψτε τις παρατηρήσεις σας. [ ] Ασκηση - Συνέλιξη στο MATLAB Εχουµε συζητήσει τη συνέλιξη συνεχούς χρόνου στη ϑεωρία, και δουλέψατε µερικά παραδείγµατα στην Άσκηση αυτής της σειράς. Ας δούµε σε αυτήν την άσκηση το πως σχεδιάζουµε και επιβεβαιώνουµε τα αποτελέσµατα στο MATLAB. Υπάρχουν µερικά σηµεία που χρειάζονται προσοχή όσον αφορά την αναπαρασταση σηµάτων συνεχούς χρόνου σε ένα περιβάλλον διακριτού χρόνου, οπως το MATLAB, και αυτά ϑα συζητήσουµε πριν πάµε στην εφαρµογή. Υπενθυµίζεται ότι η συνέλιξη είναι µια πράξη που σχετιζει την είσοδο ενός συστήµατος, x(t), µε την κρουστική απόκριση του συστήµατος, h(t), και την έξοδο y(t), και δίνεται από τη σχέση y(t) = x(t) h(t) = Ας δούµε δυο χαρακτηριστικά παραδείγµατα. (αʹ) Εστω λοιπόν ότι έχουµε δυο σηµατα συνεχούς χρόνου, τα x(t) = cos x(τ)h(t τ)dτ (4) ( πt ), 5 t 5 (5) και ( t h(t) = rect (6) ) ) όπου Arect( t T είναι ένα συµµετρικό τετραγωνικό παράθυρο µε πλάτος A και διάρκεια T, από T/ ) ως T/ s. Άρα το σήµα rect( t είναι ενα συµµετρικό τετραγωνικό παραθυρο µε διάρκεια s (από ως s) και πλάτος. Θυµάστε ότι το MATLAB αναγνωρίζει όλες τις µεταβλητές του ως πίνακες. Οπότε ολα τα δεδοµένα που ϑα εισάγουµε ϑα είναι µορφής πινάκων, και συγκεκριµένα, διανυσµάτων (πινάκων N x ή xn). Παρακάτω δίνεται κώδικας για τη σχεδίαση των σηµάτων στο MATLAB: ts =.; % Sampling step tx = -5:ts:5; % Time vector for x(t) x = cos(pi * tx/ ); % x(t) th = -:ts:; % Time vector for h(t) h = *rectpuls(th/); % h(t) subplot(); plot(tx, x); % Plot x(t) xlabel( ); % Make plot pretty :-) ylabel( ); % Make plot pretty :-) title( x(t) ); % Make plot pretty :-)
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων 3 subplot(); plot(th, h); % Plot h(t) xlabel( ); % Make plot pretty :-) ylabel( ); % Make plot pretty :-) title( h(t) ); % Make plot pretty :-) Το αποτέλεσµα ϕαινεται στο Σχήµα. x(t).5 -.5 - -5-4 -3 - - 3 4 5 h(t).5.5 - -.5 - -.5.5.5 Σχήµα : Σήµατα Παραδειγµατος (α). Μερικές παρατηρήσεις στον παραπάνω κώδικα... (αʹ) Η πρώτη γραµµή µας καθορίζει το πόσο συχνά παίρνουµε δείγµατα από το συνεχές σήµα, για να το αναπαραστήσουµε στο MATLAB. Οπως γνωριζετε, ένα σήµα συνεχούς χρόνου ορίζεται κάθε χρονική στιγµή, οι οποίες ειναι άπειρες το πλήθος, ακόµα και σε ένα κλειστο διάστηµα όπως π.χ. το [, ]. Προφανώς δεν µπορούµε να αναπαραστησουµε όλες αυτές τις τιµές. Πρεπει να διαλέξουµε κάποιες. Εδώ, στην πρώτη γραµµή επιλέγουµε το ϐήµα µε το οποίο ϑα παίρνουµε τιµές από τα σήµατα µας. Το ϐηµα εδώ ειναι. s, το οποίο στην περίπτωση µας είναι αρκετό το ϐήµα αυτό εξαρτάται από το συχνοτικό περιεχόµενο των σηµάτων, όπως ϑα δείτε προς το τελος του µαθήµατος. (ϐʹ) Στη δευτερη και τέταρτη γραµµή, ορίζουµε τα πεδία ορισµού των σηµάτων. Το th δεν ειναι ανάγκη να ειναι διαφορετικό από το tx, όµως το tx δε ϑα µπορούσε να είναι ίδιο µε το th, γιατι το x(t) ορίζεται στο [ 5, 5]. Επίσης, το h(t) έχει διάρκεια από ως, οπότε η επιλογή του διαστήµατος [, ] µας δίνει µερικά µηδενικά εκατέρωθεν του παλµού. (γʹ) Η συνάρτηση rectpuls υλοποιεί έναν τετραγωνικό παλµό διάρκειας δευτερολέπτου και πλάτους, στο όρισµα-άξονα που του δίνεται. Η κλήση που κάνουµε εδώ, *rectpuls(th/), ϕτιάχνει ένα τετραγωνικό παράθυρο διάρκειας δευτερολέπτων, και πλάτους. Ας πούµε οτι ϑέλουµε να κάνουµε συνέλιξη αυτών των δυο σηµάτων. Το ολοκλήρωµα της συνέλιξης δινεται ως y(t) = x(t) h(t) = x(τ)h(t τ)dτ (7) Η συνέλιξη υλοποιείται στο MATLAB µε τη συνάρτηση conv. Η συνάρτηση αυτή όµως υλοποιεί τη συνέλιξη για σήµατα διακριτού χρόνου. Η Σχέση (7) όµως είναι σχέση συνεχούς χρόνου. Θα πρέπει
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων 4 να τη µετατρεψουµε σε µια κάπως πιο ϐολική, διακριτή µορφή, ώστε να χρησιµοποιήσουµε την έτοιµη συνάρτηση που µας δινει το MATLAB. Μπορει να δειχθεί οτι η Σχέση (7) µπορει να προσεγγιστεί από τη σχέση y(kt ) = x(kt ) h(kt ) = lim T T + i= x(it )h((k i)t ) (8) όπου kt είναι ακέραιες χρονικές στιγµές ανά T δευτερόλεπτα. Αυτή η προσέγγιση πρέπει να σας ϑυµίζει το ολοκλήρωµα Riemann - την είδαµε και στη ϑεωρία Fourier - και είναι όλο και πιο ακριβής όσο το T γίνεται όλο και πιο µικρό. Η συνάρτηση conv υλοποιεί ακριβώς το άθροισµα που ϕαινεται παραπάνω (χωρίς τη σταθερά T ). Άρα η συνέλιξη των δυο σηµάτων ϑα δινεται από τον παρακάτω κώδικα : ts =.; tx = -5:ts:5; x = cos(pi * tx/ ); th = -:ts:; h = *rectpuls(th/); % Sampling step == T % Time vector for x(t) % x(t) % Time vector for h(t) % h(t) subplot(3); plot(tx, x); % Plot x(t) xlabel( ); ylabel( ); title( x(t) ); subplot(3); plot(th, h); % Plot h(t) xlabel( ); ylabel( ); title( h(t) ); ty = -7:ts:7; y = ts*conv(x,h); % Convolution time vector [tx+th, tx+th] % This is the width property of convolution % Convolution approximation y(t) subplot(33); plot(ty, y); % Plot y(t) xlabel( ); ylabel( ); title( Convolution! ); Το αποτέλεσµα ϕαινεται στο Σχήµα. Αν λύσουµε ϑεωρητικά τη συνέλιξη ϑα δούµε ότι έχουµε πέντε περιπτώσεις, οι οποίες ϕαίνονται στο Σχήµα 3. Αν λύσετε στο χαρτί σας την παραπάνω συνέλιξη, ϑα ϐρείτε ότι, t < 6, y(t) = 4 π (cos(πt/) + ), 6 t < 4, 8 π cos(πt/), 4 t 4, 4 π (cos(πt/) + ), 4 < t 6, t > 6 (9) Ας σχεδιάσουµε αυτό το σήµα στο MATLAB. είτε το Σχήµα 4. Ο κώδικας που παράγει το Σχήµα 4 δίνεται παρακάτω : t = -6:ts:-4; x = (4/pi)*(cos(pi*t/) + ); t3 = -4:ts:4; x3 = (8/pi)*(cos(pi*t3/)); % Case time vector % Case signal % Case 3 time vector % Case 3 signal
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων 5 x(t) - -5-4 -3 - - 3 4 5 h(t) - -.5 - -.5.5.5 Convolution! 5-5 -8-6 -4-4 6 8 Σχήµα : Σήµατα και Συνέλιξη Παραδειγµατος (α). Case Case Case 3 Case 4 Case 5 τ τ τ τ τ Σχήµα 3: Περιπτώσεις Συνέλιξης Παραδειγµατος (α). t4 = 4:ts:6; % Case 4 time vector x4 = (4/pi)*(cos(pi*t4/) + ); % Case 4 signal t_zero = -7:ts:-6; % Zero time vector: case t_zero = 6:ts:7; % Zero time vector: case 5 x_zero = zeros(, length(t_zero)); % Zero signal for case x_zero = zeros(, length(t_zero)); % Zero signal for case 5 plot(t, x, t3, x3, t4, x4, t_zero, x_zero, t_zero, x_zero);
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων 6 3 Convolution by hand - Case - Case3 Case4-3 Zero Case -8-6 -4-4 6 8 Zero Case5 Σχήµα 4: Συνέλιξη Παραδειγµατος (α) - Θεωρητικό αποτέλεσµα xlabel( ); ylabel( ); title( Convolution by hand ); legend( Case, Case3, Case4, Zero Case, Zero Case5 ); Παρατηρήστε οτι το ϑεωρητικό αποτέλεσµα του Σχήµατος 4 και το αποτέλεσµα της συνάρτησης conv του Σχήµατος είναι ίδια! (κι ας µην πολυ-ϕαίνεται λόγω κλίµακας) :-) (ϐʹ) Εστω ότι έχουµε δυο σήµατα συνεχούς χρόνου και άπειρης διάρκειας, τα x(t) = u(t) () και h(t) = u(t ) () όπου u(t) είναι η γνωστη σας ϐηµατική συνάρτηση. Προφανώς, τα σήµατα αυτά είναι άπειρα στο χρόνο, οπότε δε γίνεται να τα αναπαραστήσουµε µε ακρίβεια στο MATLAB. Θα αναπαρασταθούν µέχρι ένα συγκεκριµένο χρονικό σηµείο της επιλογής µας. Ας σχεδιάσουµε αυτά τα σήµατα στο MATLAB ως εχουν : ts =.; tx = -5:ts:; x = heaviside(tx); th = -5:ts:; h = *heaviside(th - ); % Up to seconds % x(t) = u(t) % Up to seconds again % h(t) = u(t-) plot(tx, x, th, h); % Plot xlabel( ); ylabel( ); grid; title( Signals of Example (b) ); axis([-5 3]); % Rescale the axis of the figure % (prettier graph :-) ) legend( u(t), u(t-) ); Η συνάρτηση heaviside υλοποιεί µια ϐηµατική συνάρτηση, ανάλογα µε το ορισµα που της δίνεται. Η συνάρτηση axis προσαρµόζει τα όρια των αξόνων στο σχήµα. Στο Σχήµα 5 ϕαίνεται το αποτέλεσµα του παραπάνω κώδικα. Τώρα, η συνέλιξη των δυο αυτών σηµάτων ϑα δινεται ως ty = -:ts:; % Time vector for y(t) y = ts*conv(x,h); % Convolution (size [-,])
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων 7 3.5 Signals of Example (b) u(t) u(t-).5.5-5 5 Σχήµα 5: Σήµατα Παραδειγµατος (ϐ). y = y(:length(ty)); % Keep only meaningful result ([-,]) plot(tx, x, th, h, ty, y); % Plot xlabel( ); ylabel( ); title( Signals of Example (b) ); legend( u(t), u(t-), Convolution ); Το αποτέλεσµα ϕαίνεται στο Σχήµα 6. Προσέξτε στον παραπάνω κώδικα το εξής : το διάνυσµα που 6 4 Signals of Example u(t) u(t-) Convolution 8 6 4 - -8-6 -4-4 6 8 Σχήµα 6: Σήµατα και Συνέλιξη Παραδειγµατος (ϐ). αντιπροσωπεύει τον άξονα του χρόνου, ty, για τη συνέλιξη, y(t), δεν υπακούει στην ιδιότητα του εύρους που γνωριζετε και που είδαµε και στο προηγούµενο παράδειγµα. Ποιά ιδιότητα ήταν αυτή ; Αυτή που
Εφαρµοσµένα Μαθηµατικά για Μηχανικούς - 7-8/Πέµπτη Σειρά Ασκήσεων 8 λέει οτι ένα πεπερασµένης διάρκειας σηµα x(t), που ειναι µη µηδενικό στο [a, b], οταν συνελίσσεται µε ένα άλλο πεπερασµένης διάρκειας σήµα h(t), που ειναι µη µηδενικό στο [c, d], τότε το αποτέλεσµά τους (η συνέλιξη δηλαδη) ειναι µη µηδενικό στο [a + c, b + d]. Εδώ, ορίσαµε και τα δυο σήµατά µας στο [ 5, ], παρ ολο που δεν είναι πεπερασµένα - ϑεωρητικά - οπως είπαµε. Αντί όµως να πάρουµε ως άξονα χρονου ty για τη συνέλιξη το [, ], πήραµε το [, ]! Γιατί ; Η απάντηση είναι ότι σε τέτοιες περιπτώσεις, όπου αναπαριστούµε άπειρης διάρκειας - ϑεωρητικά - σήµατα στο MATLAB, πρεπει να ελέγχουµε/γνωρίζουµε µέχρι ποιό χρονικό σηµείο τα αποτελέσµατά µας έχουν νόηµα (συµπίπτουν δηλαδή µε αυτά της ϑεωρίας). Εν προκειµένω, ξέρουµε ότι µετά τη χρονική στιγµή sec, το σηµα µας ϑεωρείται (από το MATLAB) ότι µηδενίζεται, πράγµα που δε συµβαίνει στη ϑεωρία. Οπότε ό,τι αποτέλεσµα παίρνουµε µετά από το ο δευτερόλεπτο, δεν έχει ισχύ! Θεωρούµε ότι η γραφική παράσταση της συνέλιξης από το ο δευτερόλεπτο και µετά συνεχίζεται επ άπειρον στο µοτίβο που είχε ως εκείνη τη χρονική στιγµή (στο παράδειγµά µας, η ευθεία συνεχίζει να ανεβαίνει ως το άπειρο). Προσέξτε οτι η γραµµή y = y(:length(ty)); % Keep only meaningful result ([-,]) αποθηκεύει στο διάνυσµα y τα στοιχεια του διανύσµατος y από το πρώτο ως τον αριθµό που ισούται µε το µήκος του άξονα ty που έχουµε επιλέξει. Η συνάρτηση length µας επιστρέφει το µήκος ενός διανύσµατος (δηλ. πόσα στοιχεία περιέχει). Επειδή η συνάρτηση conv µας επιστρεφει την πλήρη συνέλιξη, ϑεωρώντας ότι τα σηµατά µας µηδενίζονται µετα το ο δευτερόλεπτο, πρέπει εµείς να κρατήσουµε τα στοιχεία του y που έχουν νόηµα. Αυτό κάνουµε στην παραπάνω γραµµή. Ας λύσουµε τη συνέλιξη αναλυτικά (µε αλγεβρικό κι όχι γραφικό τρόπο, για συντοµία), να δούµε αν συµπίπτουν τα αποτελέσµατα µας. Θα ειναι y(t) = x(t) h(t) = x(τ)h(t τ)dτ = u(τ)u(t τ )dτ () Παρατηρούµε οτι και Οπότε, από κοινού, Άρα το ολοκλήρωµά µας γίνεται Προφανώς, για t, y(t) =. {, t τ > τ < t, u(t τ ) =, αλλού {, τ >, u(τ) =, αλλού {, < τ < t, u(τ)u(t τ ) =, αλλού y(t) = = τ t u(τ)u(t τ )dτ = t dτ (3) (4) (5) = (t ) = t 4, για t >. (6) Είδατε οτι κάποιες ϕορές δεν είναι απαραιτητο να διαχωρίζουµε περιπτώσεις µε σχήµατα για τη συνέλιξη, αν και σιωπηλά κάναµε κάτι τέτοιο µε µαθηµατικά. Μπορειτε να δείτε, τέλος, οτι το αποτέλεσµά µας ειναι το ίδιο µε αυτό που µας έδωσε η συνάρτηση conv (η t 4 περνάει από τα σηµεία (, ), (, 6) που περνά και η ευθεία του Σχήµατος 6). Παραδώστε κώδικα MATLAB που εκτελεί και απεικονίζει τις συνελίξεις της Ασκησης (του ϕυλλαδίου µε τις υποχρεωτικές ασκήσεις) - παραδώστε τυπωµένα και τα αποτελέσµατα. Νέα λέξη! :-)