ΨΗΦΙΑΚΗ ΕΠΕΞΕΡΓΑΣΙΑ ΣΗΜΑΤΩΝ ΕΡΓΑΣΤΗΡΙΑΚΟΣ ΟΔΗΓΟΣ Εργαστηριακή Άσκηση 9 Σχεδίαση Ψηφιακών Φίλτρων FIR Διδάσκων Δρ. Μιχάλης Παρασκευάς Επίκουρος Καθηγητής Μάρτιος 2014
Έκδοση: 2.0 Επιμέλεια και συντελεστής δημιουργίας εργαστηριακού οδηγού: Βασιλική Γ. Χαϊνά Υποψηφία Πτυχιούχος Μηχανικός Πληροφορικής Τ.Ε., ΤΕΙ Δυτικής Ελλάδας. Ναύπακτος 2014 Όλο το περιεχόμενο του παρόντος εργαστηριακού οδηγού (εργαστηριακές ασκήσεις, λύσεις ασκήσεων) υπάγεται σε άδεια χρήσης Creative Commons Attribution Non Commercial Share Alike Greece 3.0. Η άδεια χρήσης όλου του περιεχομένου του εργαστηριακού οδηγού, μπορεί να βρεθεί στη σελίδα: http://creativecommons.org/licenses/by-nc-sa/3.0/gr. ii
Πίνακας περιεχομένων Εργαστηριακή Άσκηση 10 1. Σκοπός της Άσκησης... 3 2. Εισαγωγή... 3 3. Προαπαιτούμενα... 3 4. Σχεδίαση Ψηφιακών Φίλτρων (FIR)... 3 4.1 Ορισμός Φίλτρων (FIR)... 5 4.2 Σχεδίαση FIR Φίλτρων με τη χρήση Παραθύρων... 5 5. Άλυτες Ασκήσεις... 11 6. Βιβλιογραφία Σύνδεσμοι... 12
1. Σκοπός της Άσκησης Σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση των φοιτητών με το σχεδιασμό Φίλτρων FIR διακριτού χρόνου (Ψηφιακών Φίλτρων) στο MATLAB. 2. Εισαγωγή Στη γενική του μορφή, ένα ψηφιακό φίλτρο είναι ένα σύστημα το οποίο θα λάβει μια είσοδο στη μορφή ενός σήματος διακριτού χρόνου και θα παράγει μια έξοδο πάλι στη μορφή ενός σήματος διακριτού χρόνου. Με τα ψηφιακά φίλτρα είναι δυνατόν να προσεγγίσουμε τις ιδανικές προδιαγραφές με οποιαδήποτε επιθυμητή ακρίβεια. Αντίστοιχη ιδιότητα δεν διαθέτουν στην πράξη τα αναλογικά που πρέπει να υλοποιήσουν πολύπλοκα κυκλώματα με απροσδιόριστα αποτελέσματα. Τα ψηφιακά φίλτρα έχουν μεγάλη ευελιξία στο σχεδιασμό τους σε σχέση με τα αναλογικά, που περιορίζονται στην υλοποίηση των κλασσικών φίλτρων. 3. Προαπαιτούμενα Διάλεξη θεωρίας 12. 4. Σχεδίαση Ψηφιακών Φίλτρων (FIR) Η βασική ιδέα πίσω από το σχεδιασμό FIR φίλτρων, είναι η κατάλληλη επιλογή ενός ιδανικού φίλτρου και η περικοπή της κρουστικής απόκρισης ώστε να γίνει FIR. Αν θεωρήσουμε ένα ιδανικό φίλτρο γραμμικής φάσης με εύρος ζώνης ω c < π jaω jaω 1 e, ω ωc H ( e ) = όπου ωc ονομάζεται η συχνότητα αποκοπής του 0, ω π φίλτρου. Η κρουστική απόκριση του φίλτρου αυτού είναι η sin[ ωc ( n a)] h ( n) =, n = 0, ± 1, ± 2, ± 3,..., π ( n a) και είναι άπειρης διάρκειας. Υλοποίηση κρουστικής απόκρισης του φίλτρου στο Matlab function [h,n]=i_lp(wc,n) % wc είναι η συχνότητα αποκοπής a=(n-1)/2; m=[0:1:(n-1)]; n=m-a+eps; h=sin(wc*n)./(pi*n); Σημείωση: Το m.file να έχει το ίδιο όνομα με τη συνάρτηση. Στο παράδειγμα μας θα είναι i_lp.m 2
Παράδειγμα 1 Να υπολογίσετε και να σχεδιάσετε την κρουστική απόκριση για Ν=21 και συχνότητα αποκοπής 0.25π Κώδικας Matlab Αποτέλεσμα [h,n]=i_lp(0.25*pi,21); stem(n,h); title('κρουστική Απόκριση'); Σημείωση: Χρησιμοποιούμαι την παραπάνω συνάρτηση i_lp Για το παράδειγμα 1, δημιουργούμε ένα νέο m-file, γράφουμε τον κώδικα και το αποθηκεύουμε στο φάκελο που έχουμε αποθηκεύσει και το i_lp.m. Τρέχουμε το αρχείο και εμφανίζεται το αποτέλεσμα. 4.1 Ορισμός Φίλτρων (FIR) Φίλτρα FIR (Finite Impulse Response) των οποίων η κρουστική απόκριση είναι πεπερασμένη. y ( n) = M 1 k= 0 b x( n k) = k M 1 k= 0 h( k) x( n k) H ( k) = M 1 k= 0 h( k) z k Η απόκριση συχνότητας ενός αιτιατού FIR Φίλτρου N τάξης, είναι H ( ω ) = M 1 k= 0 h( k) e jωk Και η σχεδίαση ενός τέτοιου φίλτρου FIR, περιλαμβάνει την αναζήτηση εκείνων των συντελεστών h (n), που οδηγούν σε μία απόκριση συχνότητας τέτοια ώστε να ικανοποιούνται οι προδιαγραφές του φίλτρου. 3
4.2 Σχεδίαση FIR Φίλτρων με τη χρήση Παραθύρων Εάν (n) είναι η κρουστική απόκριση ενός ιδανικού φίλτρου επιλογής συχνοτήτων, h jω lω με γραμμική φάση, H ( e ) = A( e ) e j( aω β ) Η συνάρτηση παραθύρου δίνετε από τη σχέση: h( n) = h ( n) w( n) όπου w (n) είναι η συνάρτηση παραθύρου πεπερασμένου μήκους, που ισούται με το 0 έξω από το διάστημα 0 n N και όπου είναι συμμετρική ως προς το ενδιάμεσο σημείο w( n) = w( N n). Η απόκριση συχνότητας που υλοποιείται από το FIR Φίλτρο είναι: π jω 1 jω jω 1 jθ j( ω θ ) H ( e ) = H ( e ) W( e ) = H ( e ) W( e ) θ 2π 2π π όπου ορίζει μια περιοδική συνέλιξη και μας δίνει μια απόκριση συχνότητας που είναι πιο λεία, ως προς την H (ω). Για να υλοποιήσουμε ένα FIR φίλτρο πρέπει: ' α) Να προσεγγίσουμε την h (n) με μια ακολουθία h ( n) πεπερασμένης διάρκειας Ν με τη βοήθεια ενός παραθύρου. ' 1 β) Να μετατοπίσουμε χρονικά την h ( n) κατά n 0 = N δείγματα, 2 ' h( n) = h ( n n0 ), ώστε h ( n) = 0, n < 0, για να είναι φίλτρο αιτιατό. Αυτό είναι ισοδύναμο με το να θεωρήσουμε a = n0. Στον ακόλουθο πίνακα αναφέρονται οι πιο γνωστές συναρτήσεις παραθύρου: Τύπος Παραθύρου Ορθογώνιο Hanning Blackman Συνάρτηση 1, 0 n < N w( n) = 0, αλλού 2πn 0.5 0.5cos( ), 0 n < N w( n) = N 0, αλλού 2πn 4πn 0.42 0.5cos( ) + 0.08cos( ), 0 n < N w( n) = N N 0, αλλού Πίνακας 1: Μερικοί κοινοί τύποι συναρτήσεων Παραθύρου 4
Τα παράθυρα αυτά δίνονται αντίστοιχα από το Matlab με τις εντολές: W=boxcar(N) w=rectwin(l) w = hann(l) w = blackman(n) Παράδειγμα 2 Ας δούμε την επίδραση του μήκους παραθύρου N σε ένα FIR φίλτρο με ωc = 0. 25π και χρήση τετραγωνικού (ορθογώνιου) παραθύρου. Σημείωση: Χρησιμοποιούμε την παραπάνω συνάρτηση i_lp Για το παράδειγμα 2, δημιουργούμε ένα νέο m-file, γράφουμε τον κώδικα και το αποθηκεύουμε στο φάκελο που έχουμε αποθηκεύσει και το i_lp.m. Τρέχουμε το αρχείο και εμφανίζεται το αποτέλεσμα. Κώδικας Matlab wc=0.25*pi; N=11; n=0:1:n-1; w_tet=(boxcar(n))'; h=h.*w_tet; H=freqz(h,1,fr); figure subplot(121) semilogy(fr,abs(h)) subplot(122) plot(fr,abs(h)) plot(fr,abs(h)) N=21; n=0:1:n-1; w_tet=(boxcar(n))'; h=h.*w_tet; H=freqz(h,1,fr); subplot(121) hol on semilogy(fr,abs(h),'c') subplot(122) hol on plot(fr,abs(h),'c') N=31; n=0:n-1; w_tet=(boxcar(n))'; h=h.*w_tet; H=freqz(h,1,fr); subplot(121) semilogy(fr,abs(h),'r') subplot(122) plot(fr,abs(h),'r') 5
Αποτέλεσμα Παρατηρούμε ότι : α) Η συχνότητα των λοβών αυξάνει με το N. β) Το πλάτος του πρώτου λοβού παραμένει σχεδόν σταθερό. Παράδειγμα 3 Ας δούμε τώρα τις αποκρίσεις του κατωπερατού φίλτρου που προκύπτει για N = 21 και για τα παράθυρα τετραγωνικό (ορθογώνιου) και Hanning. Σημείωση: Χρησιμοποιούμε την παραπάνω συνάρτηση i_lp Για το παράδειγμα 3, δημιουργούμε ένα νέο m-file, γράφουμε τον κώδικα και το αποθηκεύουμε στο φάκελο που έχουμε αποθηκεύσει και το i_lp.m. Τρέχουμε το αρχείο και εμφανίζεται το αποτέλεσμα. Κώδικας Matlab wc=0.25*pi; N=21; n=0:1:n-1; w_tet=(boxcar(n))'; h=h.*w_tet; [H,w]=freqz(h,1,fr); figure subplot(1,2,1); semilogy(fr,abs(h)) subplot(1,2,2); plot(fr,abs(h)) N=21; n=0:1:n-1; w_han=(hann(n))'; h=h.*w_han; [H,w]=freqz(h,1,fr); subplot(1,2,1) hol on semilogy(fr,abs(h), 'r') subplot(1,2,2) hol on plot(fr,abs(h), 'r') 6
Αποτέλεσμα Παρατηρούμε ότι : α) οι λοβοί και στα δύο έχουν πλάτος πολύ μικρότερο για το παράθυρο Hanning. β) Η διέλευση από την περατή στη μη περατή ζώνη γίνεται πολύ πιο γρήγορα στην περίπτωση του τετραγωνικού παραθύρου. Αυτό είναι αποτέλεσμα του μεγαλύτερου εύρους που έχει ο κυρίως λοβός του μετασχηματισμού Fourier του παραθύρου Hanning. Παράδειγμα 4 Έστω ότι έχουμε ένα σήμα αποτελούμενο από ένα άθροισμα 2 συνημίτονων με συχνότητες 30, 50 και ενός ημιτόνου με συχνότητα 60. Θέλουμε ένα φίλτρο που να κόβει τις συχνότητες μεγαλύτερες από 40 Hz. Σημείωση: Χρησιμοποιούμαι την παραπάνω συνάρτηση i_lp Για το παράδειγμα 4, δημιουργούμε ένα νέο m-file, γράφουμε τον κώδικα και το αποθηκεύουμε στο φάκελο που έχουμε αποθηκεύσει και το i_lp.m. Τρέχουμε το αρχείο και εμφανίζεται το αποτέλεσμα. Κώδικας Matlab fs=300; n=0:1/fs:0.2; x=cos(2*pi*30*n)+cos(2*pi*50*n)+sin(2*pi*60*n); wc=pi*40/(fs/2); N=21; n=0:1:n-1; w_tet=(boxcar(n))'; h=h.*w_tet; y=filter(h,1,x); Xw=freqz(x,1,fr); Hw=freqz(h,1,fr); Yw=freqz(y,1,fr); subplot(311) plot(fr,abs(xw)) subplot(312) plot(fr,abs(hw)) subplot(313) plot(fr,abs(yw)) 7
Αποτέλεσμα 5. Άλυτες Ασκήσεις 1. Να υπολογίσετε και να σχεδιάσετε την κρουστική απόκριση για Ν=32 και συχνότητα αποκοπής 0.15π. 2. Ποια η επίδραση του μήκους παραθύρου N = 4, N = 8, N = 16, N = 32 σε ένα FIR φίλτρο με ωc = 0. 6π και χρήση τετραγωνικού (ορθογώνιου) παραθύρου. 3. Σας δίνετε ένα σήμα x( n) = sin(0.1π n) + sin(0.5πn) και n = 0 : 300. Με βάση τη διαδικασία που παρουσιάσαμε κατασκευάστε FIR φίλτρο το οποίο να προσεγγίζει ιδανικό με συχνότητα αποκοπής ωc = 0. 3π. Το φίλτρο να έχει μήκος N = 21 και για την κατασκευή του να χρησιμοποιηθεί το τετραγωνικό (ορθογώνιο) παράθυρο. α) Υπολογίστε την έξοδο του φίλτρου για είσοδο x (n). β) Τυπώστε με ημιλογαριθμικά (με semilogy) την απόκριση συχνοτήτων του φίλτρου γ) Τυπώστε γραμμικά (με plot) το φάσμα του σήματος εισόδου και το φάσμα του σήματος εξόδου στην ίδια γραφική παράσταση (με hol on) δ) Τυπώστε ημιλογαριθμικά το φάσμα του σήματος εισόδου και το φάσμα του σήματος εξόδου 8
6. Βιβλιογραφία Σύνδεσμοι [1] MATLAB Programming for Engineers (Stephen J. Chapman), 4η έκδοση, 2007 [2] Avance Engineering Mathematics with MATLAB (Dean G. Duffy), 3η έκδοση, 2010 [3] Matlab for Beginners: A Gentle Approach (Peter I. Kattan), 2008 [4] Mastering MATLAB (Duane C. Hanselman & Bruce L. Littlefiel), 1η έκδοση, Prentice Hall, 2011 [5] Matlab: A Practical Introuction to Programming an Problem Solving (Stormy Attaway), 3η έκδοση, 2013 [6] Essential Matlab for Engineers an Scientists (Brian Hahn, Dan Valentine), 5η έκδοση, 2013 [7] http://www.mathworks.com [8] http://people.sc.fsu.eu/~%20jburkart/html/matlab_graphics/matlab_graphics.html [9] http://ctms.engin.umich.eu/ctms/inex.php?aux=basics_matlab#16 [10] http://www.mathworks.com/help/matlab/ref/stem.html [11] http://www.matlab-cookbook.com/ [12] http://www.mathworks.com/moler/chapters.html [13] http://en.wikibooks.org/wiki/matlab_programming 9