Συνέλιξη Κρουστική απόκριση Το εργαστήριο αυτό ασχολείται με τα «διασημότερα συστήματα στην επεξεργασία σήματος. Αυτά δεν είναι παρά τα γραμμικά χρονικά αμετάβλητα (ΓΧΑ) συστήματα. Ένα τέτοιο σύστημα μπορεί να περιγραφεί από την κρουστική του απόκριση (impulse response). Η κρουστική απόκριση ενός ΓΧΑ συστήματος είναι η έξοδός του όταν η είσοδος είναι το μοναδιαίο δείγμα, συμβολίζεται δε συνήθως με h(n). Συνήθως το σήμα h(n) αποτελείται από περισσότερους του ενός μη μηδενικούς όρους, παρότι το μοναδιαίο δείγμα που βάλαμε στην είσοδο έχει μόνο ένα μη μηδενικό όρο. Αυτό σημαίνει ότι το σύστημα έχει μνήμη αφού διεγέρθηκε τη χρονική στιγμή μηδέν και «αποκρίθηκε και τις επόμενες χρονικές στιγμές. Η κρουστική απόκριση είναι σημαντική διότι αν τη γνωρίζουμε μπορούμε να υπολογίσουμε την έξοδο του συστήματος οποιαδήποτε κι αν είναι η είσοδος σ αυτό. Ο υπολογισμός αυτός ονομάζεται συνέλιξη (ή συγκερασμός) και δίνεται, ουσιαστικά και συμβολικά, από την παρακάτω σχέση: y(n) = + k= x(k)h(n k) = x(n) h(n) όπου x(n) η είσοδος, y(n) η έξοδος και h(n) η κρουστική απόκριση του συστήματος. Η εντολή στο Octave/MATLAB για τη συνέλιξη δύο σημάτων είναι η conv. Κατά συνέπεια αν x είναι το διάνυσμα που παριστάνει την είσοδο στο σύστημα και h το διάνυσμα που παριστάνει την κρουστική του απόκριση, η έξοδος του συστήματος μπορεί να υπολογιστεί μέσω της y=conv(h,x) ή ισοδύναμα μέσω της y=conv(x,h) αφού η πράξη του συγκερασμού είναι αντιμεταθετική. Παράδειγμα: x=[1 2 0 3]; h=[1 2 2 1]; n=0:3; y=conv(x,h); subplot(311); stem(n,x); subplot(312); stem(n,h); subplot(313); stem(n,y); 1
H τελευταία εντολή προκάλεσε σφάλμα που οφείλεται στο ότι το διάνυσμα y έχει περισσότερα από τέσσερα στοιχεία που έχει το διάνυσμα n. Από τη θεωρία γνωρίζουμε ότι αν το διάνυσμα x έχει πλήθος όρων N και το διάνυσμα h έχει πλήθος όρων M τότε το διάνυσμα y θα έχει πλήθος όρων N+M-1. Στη συγκεκριμένη περίπτωση δηλαδή το y έχει μήκος 4+4-1=7 όρων. Για να μπορέσουμε να έχουμε αποτέλεσμα δίνουμε stem(0:6,y). Αν η ακολουθία όμως έχει άπειρους μη μηδενικούς όρους πώς θα υπολογίσουμε μια συνέλιξη; Σ αυτή την περίπτωση χρησιμοποιούμε τον εναλλακτικό τρόπο περιγραφής των ΓΧΑ συστημάτων με τη βοήθεια εξισώσεων διαφορών δηλαδή εξισώσεων της μορφής: α k y(n k) = k=0 β m x(n m) H πληροφορία που βρίσκεται στους ίσως άπειρους όρους της h(n) έχει περιέλθει στους πεπερασμένους το πλήθος συντελεστές α k και β m. Μάλιστα αν υποθέσουμε ότι α 0 = 1 τότε προκύπτει: y(n) = α k y(n k) + k=1 β m x(n m) Δηλαδή για οποιοδήποτε ΓΧΑ σύστημα μπορεί κανείς να βρει μια τέτοια εναλλακτική αναπαράσταση μόνο που δυστυχώς οι αριθμοί M και N δεν θα είναι κατ ανάγκη πεπερασμένοι! Αναγκαστικά λοιπόν περιοριζόμαστε στα συστήματα που έχουν πεπερασμένη αναπαράσταση σε εξίσωση διαφορών και ευτυχώς αυτά είναι πολλά και μας αρκούν στις εφαρμογές μας. Η περιγραφή ενός συστήματος με τον τρόπο αυτό επιτρέπει ακόμα και σε κάποιον ο οποίος δεν γνωρίζει την έννοια της συνέλιξης να κατανοήσει την λειτουργία του συστήματος. «Διαβάζοντας» τη σχέση, «διαβάζουμε» το τι κάνει το σύστημα. Για παράδειγμα το y(0) είναι το: y(0) = α k y( k) + k=1 β m x( m) Παρατηρούμε ότι για να είναι δυνατός ο υπολογισμός απαιτείται η γνώση, εκτός της παρούσας τιμής της εισόδου x(0), και των τιμών x( 1),, x( M) καθώς και των y( 1),, y( N). Ο απαραίτητος προσδιορισμός των ποσοτητών αυτών λέγεται προσδιορισμός αρχικών συνθηκών. To Octave/MATLAB θέτει τις ποσότητες αυτές ίσες με το μηδέν εκτός και αν του πούμε να κάνει κάτι διαφορετικό. Αυτή η υπόθεση είναι αρκετά συνηθισμένη διότι αντιστοιχεί σε ένα σύστημα το οποίο βρίσκεται σε ηρεμία (y( 1) = = y( N) = 0) και το οποίο διεγείρεται από ένα αιτιατό σήμα (x( 1) = = x( N) = 0). Η συνάρτηση του Octave/MATLAB που εκτελεί τον υπολογισμό της εξόδου ενός συστήματος με βάση την εξίσωση διαφορών είναι η filter. Η γενική κλήση της έχει την μορφή y=filter(b,a,x) όπου: y=[y(0) y(1)... y(n)] το διάνυσμα με τις τιμές της εξόδου που μας επιστρέφει η συνάρτηση 2
x=[x(0) x(1)... x(n)] το διάνυσμα με τις τιμές της εισόδου που παρέχουμε στην συνάρτηση b=[b0 b1... bm] το διάνυσμα των συντελεστών όπως φαίνονται στην σχετική διαφοροεξίσωση. a=[a0 a1... an] το διάνυσμα των συντελεστών όπως φαίνονται στην σχετική διαφοροεξίσωση. Επειδή συνήθως a 0 = 1 έχουμε ότι a=[1 a1... an] Ας δούμε τώρα την εφαρμογή της filter με ένα παράδειγμα. Έστω ότι έχουμε ένα σύστημα με εξίσωση διαφορών y(n) y(n 1) + 0.9y(n 2) = x(n) Ζητάμε να υπολογίσουμε τους όρους της κρουστικής απόκρισής του για το χρονικό παράθυρο n=0:100. Έχουμε λοιπόν:» a=[1-1 0.9];» b=1;» n=0:100;» x=n==0; % Κατασκευή της δ(n)» h=filter(b,a,x);» stem(n,h); Πρέπει να παρατηρήσουμε ότι το συγκεκριμένο σύστημα έχει κρουστική απόκριση απείρων όρων, είναι δηλαδή όπως λέμε ένα σύστημα IIR (Infinite Impulse Response). Αυτό συμβαίνει εξαιτίας της ύπαρξης των όρων y(n-1) και y(n-2) στη διαφοροεξίσωση. Ακόμα δηλαδή και όταν το x(n) «πεθάνει», δηλαδή μηδενιστεί, η ύπαρξη των όρων αυτών εξασφαλίζει την παραγωγή νέων, μη μηδενικών y(n) (οι όροι αυτού μπορεί να τείνουν στο μηδέν, αλλά αυτό είναι μία άλλη ιστορία). Όποτε υπάρχουν τέτοιου είδους όροι στη διαφοροεξίσωση η κρουστική απόκριση του συστήματος είναι άπειρη. Αξίζει να κάνουμε στο σημείο αυτό και μία παρατήρηση αποκλειστικά για τη filter. Ήδη αναφέραμε ότι τα διανύσματα εισόδου-εξόδου είναι τα: x=[x(0) y=[y(0) x(1)... x(n)] y(1)... y(n)] Τα διανύσματα αυτά είναι του ίδιου μήκους. Με τη filter δηλαδή όσα στοιχεία βάζουμε στην συνάρτηση τόσα εξάγουμε απ αυτή. Αυτό συμβαίνει διότι ο υπολογισμός του y(n) βασίζεται μόνο στη γνώση του και του «παρελθόντος» του, πληροφορία που επίσης περιλαμβάνει τις μηδενικές αρχικές συνθήκες (x(- 1)=x(-2)=x(-M)=0 ). Καθ όλα λογικό αφού το σύστημα είναι αιτιατό κι επομένως δεν μπορεί να ξέρει τι υπάρχει σε μελλοντικά δείγματα εισόδου. Η διαφορά με την conv είναι ότι η τελευταία απαιτεί και τα δύο σήματα να έχουν πεπερασμένη διάρκεια. Ουσιαστικά θεωρεί όχι μόνο μηδενικά στην είσοδο πριν τη στιγμή μηδέν αλλά και μετά τη στιγμή. Το αποτέλεσμα είναι να υπολογίζει τους συντελεστές του γινομένου των πολυωνύμων k h(k)z k και n k=0 x(k)z k, κάτι που είναι 3
ακριβώς η συνέλιξη h k όταν όμως η είσοδος είναι μηδέν εκτός του διαστήματος 0 k n. Το συμπέρασμα δηλαδή είναι ότι με χρήση της filter το MATLAB προχωρά τους υπολογισμούς τόσο μακριά όσο του επιτρέπουν τα δεδομένα εισόδου που έχει λάβει. Ας μελετήσουμε τώρα το σύστημα με εξίσωση διαφορών y(n) 1.1y(n 1) + 0.5y(n 2) + 0.3y(n 4) = 0.5x(n) 0.2x(n 1) Για το σύστημα αυτό ζητάμε: α) Την κρουστική του απόκριση στο χρονικό παράθυρο n=0:10 β) Τον υπολογισμό της εξόδου για είσοδο την x=[5 1 1 1 0 0 1 1 1 0] με χρήση τόσο της conv όσο και της filter. α)» n=0:10;» a=[1-1.1 0.5 0 0.3];» b=[0.5-0.2];» d=n==0;» h=filter(b,a,d);» stem(n,h) b) Έχοντας λοιπόν υπολογίσει την κρουστική απόκριση η έξοδος του συστήματος θα υπολογίζεται με την βοήθεια της: y1=conv(h,x); Επειδή το διάνυσμα h έχει μήκος 11 όρων και το x μήκος 10 όρων το διάνυσμα y1 θα έχει μήκος 11+10-1=20 όρων. Μπορούμε όμως να υπολογίσουμε την έξοδο του συστήματος και με την εντολή: y2=filter(b,a,x); Επειδή το x έχει μήκος 10 όρων, το y2, σύμφωνα με όσα εξηγήσαμε παραπάνω, θα έχει μήκος 10 όρων επίσης. Με την κλήση αυτή δηλαδή υπολογίζουμε 10 όρους της εξόδου του συστήματος. Εμείς όμως θα θέλαμε να δούμε 20 όρους της εξόδου. Για να το κάνουμε αυτό θα πρέπει να προσθέσουμε μηδενικά στο x έτσι ώστε συνολικά να διαθέτει 20 όρους. Αν το x διαθέτει 20 όρους, τότε και το y2 θα διαθέτει 20 όρους. Η πρόσθεση μηδενικών στο x δίνει στη filter την επιπλέον πληροφορία που χρειάζεται για να συνεχίσει τους υπολογισμούς της περαιτέρω. Ένας εύκολος τρόπος για να προσθέσουμε τα απαιτούμενα μηδενικά είναι με την εντολή x(20)=0; Μπορούμε τώρα να δώσουμε την εντολή y2=filter(b,a,x) 4
και να πάρουμε το ζητούμενο αποτέλεσμα. Στη συνέχεια θα τυπώσουμε τα δύο εξαγόμενα προκειμένου να τα συγκρίνουμε: subplot(211) stem(0:19,y1) subplot(212) stem(0:19,y2) Αυτό είναι ένα περίεργο αποτέλεσμα!!! Υπολογίσαμε την έξοδο του ίδιου συστήματος, στο ίδιο σήμα εισόδου με δύο διαφορετικούς, αλλά απολύτως ισοδύναμους, τρόπους. Θα περιμέναμε λοιπόν να μην υπάρχει διαφορά στο εξαγόμενο. Σε αντίθεση βλέπουμε ότι υπάρχει ταύτιση στα δύο αποτελέσματα αλλά μόνο όσον αφορά στους 11 πρώτους όρους. Το αποτέλεσμα το οποίο προκύπτει από τη χρήση της filter (το y2 δηλαδή) είναι το απόλυτα σωστό. Το y1 είναι εν μέρει εσφαλμένο. Αν παρατηρήσουμε το σύστημα μας, θα διαπιστώσουμε ότι αυτό έχει κρουστική απόκριση απείρου μήκους. Εμείς όμως κάναμε προσέγγιση (δεν μπορούσαμε να κάνουμε και αλλιώς) και χρησιμοποιήσαμε 11 μόνο όρους όταν υπολογίσαμε την κρουστική απόκριση του συστήματος. Άρα με την μέθοδο αυτή 11 όροι της εξόδου θα υπολογιστούν με «απόλυτη ακρίβεια» αλλά στους υπόλοιπους θα υπάρχει σφάλμα. Μ άλλα λόγια, η conv θεώρησε όπως είπαμε ότι το σύστημα έχει πεπερασμένης διάρκειας κρουστική απόκριση, μήκους 11. Το συμπέρασμα δηλαδή είναι ότι σε IIR συστήματα αν επιχειρήσουμε να υπολογίσουμε την έξοδο με βάση την κρουστική απόκριση θα έχουμε οπωσδήποτε σφάλμα εξαιτίας της προσέγγισης που κάνουμε κατά τον προσδιορισμό του πλήθους των όρων αυτής. Γι αυτό και η αναπαράσταση με εξίσωση διαφορών (και η χρήση της filter) είναι ο καλύτερος τρόπος σ αυτά τα συστήματα. Τι γίνεται στα συστήματα FIR; Μα τότε η κρουστική απόκριση ταυτίζεται με τους συντελεστές της εξίσωσης διαφορών. 5