ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Τµήµα Επιστήµης Υπολογιστών HY-370: Ψηφιακή Επεξεργασία Σήµατος Χειµερινό Εξάµηνο 017 ιδάσκοντες : Γ Στυλιανού - Γ Καφεντζής εύτερο Εργαστήριο Σηµείωση : Για ϐοήθεια σχετικά µε τις εντολές/συναρτήσεις MATLAB γράψτε : doc εντολή/συνάρτηση στο Command Window του MATLAB Ασκηση 1 - Μετασχηµατισµός Fourier ιακριτού Χρόνου Ας προσπαθήσουµε να προσοµοιώσουµε το µετασχ Fourier διακριτού χρόνου σε διάφορα σήµατα στο MATLAB Ξέρουµε στη ϑεωρία, λοιπόν, πώς να υπολογίζουµε ένα µετασχ Fourier διακριτού χρόνου Οµως όπως γνωρίζετε, ο µετασχ Fourier είναι συνεχής συνάρτηση του ω, άρα ορίζεται σε άπειρα σηµεία του άξονα ω Αυτό αποτελεί ένα µικρό πρόβληµα για την αναπαράστασή του στο MATLAB, το οποίο καλείστε να ξεπεράσετε σε αυτό το εργαστήριο Η άσκηση αυτή απαιτεί την κατανόησή σας, καθώς ο κώδικας που καλείστε να γράψετε είναι ελάχιστος I Ας ϑυµηθούµε τον ορισµό : X(e jω ) = + n= x[n]e jωn (1) Θα χρειαστεί να δειγµατοληπτήσουµε τις συναρτήσεις e jωn ως προς τη συνεχή µεταβλητή ω, αφού είναι αδύνατο να έχουµε στον υπολογιστή µας άπειρες τιµές (οσες δηλ απαιτούνται στο διάστηµα ( π, π]) Αυτό σηµαίνει ότι ϑα υπολογίσουµε το µετασχ Fourier µόνο σε ορισµένες συχνότητες, και όχι σε κάθε ω ( π, π] Επίσης, πρακτικά το παραπάνω άθροισµα ϑα είναι πεπερασµένο (ξανά, δεν µπορούµε να αθροίσουµε από ως + ), κι έστω ότι ο υπολογισµός χρησιµοποιεί N σηµεία του σήµατος στο χρόνο Με ϐάση αυτά µπορούµε να προσεγγίσουµε το µετασχ Fourier ως X(e jωkn ) x[n]e jω kn () n=<n> µε το συµβολισµό < N > να δηλώνει ότι αθροίζουµε N συνεχόµενα σηµεία και το συµβολισµό ω k να δηλώνει µερικές τιµές της συχνότητας ω στο διάστηµα ( π, π] Εστω οτι διαµερίζουµε το διάστηµα ( π, π] οµοιόµορφα ανά ω - ϑα δείτε παρακάτω πως γίνεται αυτό - και προκύπτουν K + 1 τιµές συχνότητας στο διάστηµα αυτό : χονδρικά, K από αυτές ϑα ϐρίσκονται στο διάστηµα ( π, 0), άλλες K ϑα ϐρίσκονται στο διάστηµα (0, π], και µια ϑα ϐρίσκεται κοντά στο ω = 0 είξαµε στις διαλέξεις ότι ένας απλός και διαισθητικός τρόπος να υλοποιήσουµε το άθροισµα αυτό είναι µε τον παρακάτω κώδικα : a = 09; n = 0:100; x = aˆn; dw = 001; w = -pi:dw:pi; X = zeros(size(w)); % For example % Time vector % x[n] = aˆn u[n] % Frequency resolution % Sampled frequency vector % (empty) DTFT vector L = length(n); % (gives L = 101) for i = 1:L % Summing over all time n X = X + x(i)*exp(-j*w*n(i)); end
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο Ο τρόπος αυτός είναι αρκετά διαισθητικός αλλά όχι ο ϐέλτιστος δυνατός - για την ακρίβεια, είναι ιδιαίτερα αργός σε περιβάλλοντα όπως το MATLAB, λόγω του ϐρόχου επανάληψης Καλείστε να συµπληρώσετε τη δοσµένη συνάρτηση mydtft η οποία υπολογίζει το µετασχ Fourier διακριτού χρόνου µε διαφορετικό τρόπο από τον παραπάνω, και την οποία ϑα χρησιµοποιήσετε παρακάτω Η κλήση της ϑα γίνεται ως ακολούθως : [X, w] = mydtft(x, n); µε x και n το διάνυσµα που αντιπροσωπεύει το σήµα διακριτού χρόνου και το διάνυσµα µε τις τιµές διακριτού χρόνου που αντιστοιχούν στο σήµα, αντίστοιχα Τα διανύσµατα X και w ϑα περιέχουν το µετασχ Fourier διακριτού χρόνου και τον άξονα των συχνοτήτων ω k αντίστοιχα, δηλ τις τιµές συχνότητες στις οποίες υπολογίσαµε το µετασχ Fourier Η υλοποίησή της γίνεται πιο γρήγορα και αποδοτικά µε χρήση πινάκων Για το τελευταίο, προσέξτε ότι ο µετασχ Fourier διακριτού χρόνου X µπορεί να γραφεί ως το γινόµενο X = x T E (3) των πινάκων x( 1) x N 1 = x(0) x(1) που περιέχει τις τιµές του σήµατος διακριτού χρόνου διάρκειας N δειγµάτων και E N (K+1) = e jω Kn e jω (K 1)n e jω 0n e jω K 1n e jω Kn (4) (5) τον περίφηµο πίνακα Fourier, µε ω i, i = K,, K την i οστή τιµή της συχνότητας που έχει προκύψει από τη διαµέριση Ο εκθέτης T δηλώνει το ανάστροφο διάνυσµα Παρατηρήστε ότι σε κάθε στήλη του πίνακα E υπάρχει ένα µιγαδικό εκθετικό σήµα µιας συγκεκριµένης συχνότητας, για τις χρονικές τιµές n που έχουµε ορίσει Ετσι, ϑα έχουµε K + 1 στήλες, όσες και οι διαφορετικές συχνότητες που διαµερίζουµε το διάστηµα ( π, π] Αντίθετα, ϑα έχουµε N γραµµές, αφού η µεταβλητή n δηλώνει το χρόνο και έχουµε N τέτοιες τιµές Τέλος, παρατηρήστε ότι το γινόµενο x T E ϑα πρέπει να σας δώσει ένα µιγαδικό διάνυσµα διάστασης 1 (K +1), σύµφωνα µε τους κανόνες της Γραµµικής Άλγεβρας Κάθε τιµή του διανύσµατος αυτού ϑα είναι η τιµή του µετασχ Fourier διακριτού χρόνου για κάθε µια από τις ω i συχνότητες! Για να εξασκηθείτε λίγο µε την υλοποίηση αυτή : (αʹ) Σχεδιάστε στο χαρτί σας τα περιεχόµενα του πίνακα E αν έχετε τα παρακάτω στοιχεία : και παραδώστε τα στην αναφορά σας (ϐʹ) Υπολογίστε στο χαρτί σας το γινόµενο X = x T E αν έχετε ότι ω = [ π/, π/3, π/6, 0, π/6, π/3, π/] T (6) n = [0, 1,, 3] T (7) x = [1, 0, 1, ] T (8) µε την τιµή 1 να αντιστοιχεί στη χρονική στιγµή n = 0 Οι τιµές του διανύσµατος αποτελούν το µετασχ Fourier του σήµατος x[n] στις συχνότητες ω παραπάνω! Παραδωστε το διάνυσµα X που ϐρήκατε στην αναφορά σας
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 3 Ο κώδικας της Ϲητούµενης συνάρτησης mydtftm είναι σχεδόν έτοιµος και σας δίνεται σε ξεχωριστό script στα αρχεία του εργαστηρίου αυτού Λείπει µόνο µια γραµµή για να τρέξει σωστά, την οποία καλείστε να συµπληρώσετε : το γινόµενο της Σχέσης (3) Οταν γράψετε σωστά τη συνάρτηση, εκτελέστε το αρχείο checkmydtftm για να την ελέγξετε Το script αυτό υπολογίζει το ϕάσµα πλάτους και ϕάσης του σήµατος x[n] = (1/) n u[n] (9) του οποίου γνωρίζετε το µετασχ Fourier από τη ϑεωρία Αν όλα πάνε καλά, ϑα πάρετε την εικόνα του Σχήµατος 1 Σχήµα 1: Ελεγχος για τη συνάρτηση µετασχ Fourier που ϕτιάξατε II Τώρα ας υλοποιήσουµε την αντίστροφη σχέση, δηλ τον αντίστροφο µετασχ Fourier διακριτού χρόνου Οπως ξέρετε, ο τελευταίος δίνεται ως x[n] = 1 π X(e jω )e jωn dω (10) π π και δοθέντος ενός µετασχ Fourier X(e jω ), µας συνθέτει το σήµα διακριτού χρόνου x[n] αθροίζοντας (ολοκλη- ϱώνοντας) µιγαδικά εκθετικά σήµατα συχνότητας ω ( π, π] µε συντελεστή X(e jω ) Παρατηρήστε ότι εδώ έχουµε ένα ολοκλήρωµα αντί για ένα άθροισµα Το ολοκλήρωµα γίνεται πάνω σε µια συνεχή µεταβλητή dω, άρα πρέπει να κάνουµε ξανά τις υποθέσεις που κάναµε στο προηγούµενο ερώτηµα Η προσέγγιση αυτή ονοµάζεται άθροισµα Riemann, και πρακτικά µας λέει ότι ένα τέτοιο ολοκλήρωµα µπορεί να προσεγγιστεί ως x[n] = 1 π lim ω 0 k=1 L X(e j ω k )e j ωkn ω (11) είτε τις οµοιότητες των Σχέσεων (10, 11) Ο δείκτης k απλά αριθµεί τις διαφορετικές συχνότητες ω k που χρησιµοποιούµε είξαµε στις διαλέξεις ότι µπορούµε να υλοποιήσουµε το ολοκλήρωµα του αντίστροφου µετασχ Fourier µέσω του αθροίσµατος Riemann ως : a = 09; n = 0:100; dw = 001; w = -pi:dw:pi; X = 1/(1 - a*exp(-j*w)); % For example % Time vector % Frequency resolution % Sampled frequency vector % DTFT vector
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 4 L = length(w); % (gives L = 69) xsynth = zeros(size(n)); % (empty) time domain signal for i = 1:L % Summing over all frequencies w xsynth = xsynth + (dw/(*pi))*x(i)*exp(j*w(i)*n); end Καλείστε να συµπληρώσετε τη δοσµένη συνάρτηση myidtft η οποία υπολογίζει τον αντίστρ µετασχ Fourier διακριτού χρόνου, την οποία ϑα χρησιµοποιήσετε παρακάτω Η κλήση της ϑα γίνεται ως ακολούθως : x = myidtft(x, w, n); µε X, w, και n το διάνυσµα που αντιπροσωπεύει το µετασχ Fourier του σήµατος διακριτού χρόνου, το διάνυσµα µε τις τιµές συχνότητας που ο τελευταίος έχει υπολογιστεί, και το διάνυσµα του διακριτού χρόνου, αντίστοιχα Το διάνυσµα x ϑα περιέχει το σήµα διακριτού χρόνου x[n] Η υλοποίησή της γίνεται πιο γρήγορα και αποδοτικά ξανά µε χρήση πινάκων, όπως προηγουµένως Αυτή τη ϕορά, προσέξτε ότι ο αντίστροφος µετασχ Fourier διακριτού χρόνου x µπορεί να γραφεί ως το γινόµενο των πινάκων x = ω π XT E inv (1) X(e jω i ) X M 1 = X(e j0 ) X(e jω i ) που περιέχει τις τιµές του µετασχ Fourier διάρκειας M δειγµάτων και e jω Kn e jω (K 1)n EM N inv = e jω K 1n e jω Kn τον περίφηµο πίνακα αντίστροφου Fourier, µε ω i, i = K,, K την i οστή τιµή της συχνότητας που έχετε Παρατηρήστε ότι σε κάθε γραµµή του πίνακα E inv υπάρχει ένα µιγαδικό εκθετικό σήµα µιας συγκεκριµένης συχνότητας, για τις χρονικές τιµές n που έχουµε ορίσει Ετσι, ϑα έχουµε M γραµµές, όσες και οι διαφορετικές συχνότητες που διαµερίζουµε το διάστηµα ( π, π] (αυτές που αριθµήσαµε ως K + 1 στο προηγουµενο ερωτηµα) Αντίθετα, ϑα έχουµε N στήλες, αφού η µεταβλητή n δηλώνει το χρόνο και έχουµε N τέτοιες τιµές Τέλος, παρατηρήστε ότι το γινόµενο X T E inv ϑα πρέπει να σας δώσει ένα (ϑεωρητικά, πραγµατικό) διάνυσµα διάστασης 1 N, σύµφωνα µε τους κανόνες της Γραµµικής Άλγεβρας Κάθε τιµή του διανύσµατος αυτού ϑα είναι η τιµή του σήµατος x[n] στο χρόνο για τις αντίστοιχες τιµές του διανύσµατος n! Ο κώδικας της Ϲητούµενης συνάρτησης myidtftm είναι σχεδόν έτοιµος και σας δίνεται σε ξεχωριστό script στα αρχεία του εργαστηρίου αυτού Λείπει µόνο µια γραµµή για να τρέξει σωστά, την οποία καλείστε να συµπληρώσετε : το γινόµενο της Σχέσης (1) Οταν γράψετε σωστά τη συνάρτηση, εκτελέστε το αρχείο checkmyidtftm για να την ελέγξετε Το script αυτό υπολογίζει το σήµα στο χρόνο x[n] = (1/) n u[n] (15) (13) (14)
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 5 Σχήµα : Ελεγχος για τη συνάρτηση αντίστρ µετ Fourier που ϕτιάξατε µέσω του αντίστροφου µετασχ Fourier για 0 δείγµατα Αν όλα πάνε καλά, ϑα πάρετε την εικόνα του Σχήµατος Παρατηρήστε ότι παρ όλο που το σήµα µας στο χρόνο είναι πραγµατικό, λόγω µη απόλυτης συµµετρίας του άξονα του ω 1 υπάρχει και ένα ϕανταστικό µέρος στο σήµα x[n] που υπολογίζουµε - όσο αυξάνουµε το ω, τόσο αυτό ϑα µικραίνει Ως εδώ λοιπόν, απλά πρέπει να ϐεβαιωθείτε ότι οι δυο συναρτήσεις mydtft, myidtft δουλεύουν σωστά, συµπληρώνοντας τις δυο γραµµές που λείπουν (µια γραµµή σε κάθε αρχείο) και εκτελώντας τα αρχεία ελέγχου checkmydtftm, checkmyidtftm Στην ηλεκτρονική κατάθεση της άσκησης, συµπεριλάβετε τα συµπληρωµένα αρχεία mydtftm, myidtftm III Γράψτε script µε όνοµα mydtftexamplesm που καλεί την κατάλληλη συνάρτηση από τις παραπάνω δυο και τυπώνει τους µετασχ Fourier διακριτού χρόνου (πλάτος και ϕάση) των σηµάτων : i x[n] = ( 1/4) n u[n] ii x[n] = δ[n 3] iii x[n] = n u[ n] Συµπεριλάβετε στην αναφορά σας τα γραφήµατα που σας επιστρέφει το script που γράψατε Στην κατάθεση της άσκησης, συµπεριλάβετε το αρχείο mydtftexamplesm που γράψατε IV Υπολογίστε στο χαρτί σας τους µετασχ Fourier των σηµάτων του προηγούµενου ερωτήµατος, και δείξτε ότι ισούνται µε i X(e jω ) = 1 1+ 1 4 e jω ii X(e jω ) = e j3ω iii X(e jω ) = 1 1 1 ejω Στο ερώτηµα αυτό, ΜΗΝ παραδώστε στην αναφορά σας τις λύσεις σας (κάντε το απλά για εξάσκηση) Γράψτε script µε όνοµα myidtftexamplesm που καλεί την κατάλληλη συνάρτηση και τυπώνει τους αντίστροφους µετασχ Fourier (δηλ το σήµα στο χρόνο) των µετασχηµατισµών που ϐρήκατε στο χαρτί σας Στο script αυτό, προγραµµατίστε τους παραπάνω µετασχηµατισµούς X(e jω ) στο MATLAB ως συναρτήσεις του ω (συµ- ϐουλευτείτε το περιεχόµενο της checkmyidtftm) Τυπώστε τόσο το πραγµατικό όσο και το (αµελητέο) ϕανταστικό µέρος των σηµάτων στο χρόνο και παραδώστε τα στην αναφορά σας Στην κατάθεση της άσκησης, συµπεριλάβετε το αρχείο myidtftexamplesm που γράψατε 1 εν µπορείτε να καταλήξετε ακριβώς στο π ξεκινώντας από το π µε ϐήµα 001 αντίθετα, η συνάρτηση linspace µπορεί να σας δώσει ένα ακριβέστερο αποτέλεσµα
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 6 Ασκηση - Αποθορυβοποίηση στην Aegean Στα αεροπλάνα, η ηλεκτρική ισχύς είναι στα 400 Hz (ενώ στα σπίτια είναι στα 50 60 Hz) Για τον λόγο αυτό, όταν γίνεται κάποια ανακοίνωση από τα ηχεία του αεροπλάνου, στο σήµα της ϕωνής προστίθεται ένα συνηµίτονο συχνότητας 400 Hz Το αποτέλεσµα δεν είναι ευχάριστο στο αυτί µας Καλείστε να ϕτιάξετε ένα ϕίλτρο (σύστηµα) το οποίο να αφαιρεί το παραπάνω ενοχλητικό σήµα χωρίς να καταστρέφει το σήµα της ϕωνής Για το πείραµά σας, χρησιµοποιήστε το αρχείο 4781_8kwav, το οποίο ϑα ϕορτώσετε και ακούσετε στο MATLAB ως εξής : [s,fs] = audioread( 4781_8kwav ); soundsc(s, fs); Ολος ο κώδικας της άσκησης αυτής πρέπει να παραδωθεί σε αρχείο HY370LabEx3m Ακολουθήστε τα παρακάτω ϐήµατα : i Προφανώς καταλαβαίνετε ότι για ένα σύστηµα µε απόκριση σε συχνότητα H(e jω ) = 1 e j(ω ω 0) (16) ισχύει H(e jω ) = 0 όταν ω = ω 0, δηλ η απόκριση συχνότητας µηδενίζεται για ω = ω 0 Θεωρήστε ότι έχετε ένα σήµα εισόδου της µορφής x[n] = cos(ω 0 n) (17) (αʹ) Βρείτε στο χαρτί το σήµα στο χρόνο h[n] της παραπάνω απόκρισης συχνότητας H(e jω ), και παραδώστε τη λύση σας στην αναφορά σας (ϐʹ) Η συνάρτηση freqz υπολογίζει την απόκριση σε συχνότητα H(e jω ) µιας εξίσωσης διαφορών της µορφής N a k y[n k] = k=0 N b l x[n l] (18) l=0 έχεται τους συντελεστές της εισόδου B = [b 0, b 1, b N ], της εξόδου A = [a 0, a 1, a M ], και τις συχνότητες W που ϑέλουµε να υπολογίσουµε την απόκριση συχνότητας ως ορίσµατα, και επιστρέφει τις τιµές της απόκρισης συχνότητας, H, στις συχνότητες W Παράδειγµα σύνταξης είναι το H = freqz(b,a,w); Σε όλη την άσκηση ϑεωρήστε ότι ϐλέπετε το χώρο της συχνότητας στο παράθυρο ( π, π], κι έτσι οι συχνότητές σας ϑα είναι dw = 001; W = -pi:dw:pi; Χρησιµοποιήστε στο χαρτί σας τις ιδιότητες του µετασχ Fourier για να ϐρείτε την εξίσωση διαφορών του παραπάνω ϕίλτρου της Σχέσης (16), και παραδώστε την απάντησή σας στην αναφορά σας Πρέπει να ϐρείτε ότι y[n] = x[n] e jω 0 x[n 1] (19) Χρησιµοποιήστε τη συνάρτήση freqz για να υλοποιήσετε την απόκριση συχνότητας της εξίσωσης διαφορών που ϐρήκατε, και τη συνάρτηση plot για να σχεδιάσετε το µέτρο της απόκρισης σε συχνότητα, δηλ την απόκριση πλάτους του συστήµατος Θα σας χρειαστεί σίγουρα η συνάρτηση abs του MATLAB Για να υλοποιήσετε την απόκριση πλάτους που σας Ϲητείται, ϑα χρειαστείτε πρώτα µια συχνότητα ω 0 ως αριθµητική τιµή στην παραπάνω εξίσωση διαφορών Ας υποθέσουµε ότι αυτή η ω 0 είναι η ανεπιθύµητη συχνότητα των f 0 = 400 Hz, το πλάτος της οποίας ϑέλουµε να µηδενίσουµε Μετατρέψτε την τιµή των 400 Hz σε συχνότητα διακριτού χρόνου, αξιοποιώντας τη συχνότητα δειγµατοληψίας f s - σας την επιστρέφει το MATLAB ως µεταβλητή fs µέσω της audioread, και είναι f s = 8000 Hz Συµπεριλάβετε τη συχνότητα ω 0 που ϐρήκατε στην αναφορά σας, µαζί µε το γράφηµα της απόκρισης πλάτους που ϕτιάξατε
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 7 Σχεδιάστε (συνάρτηση plot ξανά) το ϕάσµα ϕάσης, δηλ την απόκριση ϕάσης του συστήµατος χρησιµοποιώντας το διάνυσµα W και τη συνάρτηση angle επάνω στο διάνυσµα H, και παραδώστε το γράφηµα στην αναφορά σας Τα δυο γραφήµατα (απόκριση πλάτους και απόκριση ϕάσης) πρέπει να είναι όπως αυτά του Σχήµατος 3 (µε µόνη διαφορά στην κλίµακα των γραφηµάτων) Σχήµα 3: Απόκριση πλάτους και ϕάσης συστήµατος Εξίσωσης (16) (γʹ) Θεωρώντας το x[n] που σας δίνεται στη Σχέση (17), αναπτύξτε στο χαρτί σας το σήµα µε τις σχέσεις του Euler και παραδώστε τη απάντησή σας στην αναφορά σας (δʹ) Ποιά ϑα είναι η έξοδος y[n] όταν το παραπάνω σήµα x[n] (όπως το αναπτύξατε) περάσει από ένα οποιοδήποτε σύστηµα (όχι το συγκεκριµένο που δίνεται στην εκφώνηση) µε απόκριση σε συχνότητα H(e jω ); Εκµεταλλευτείτε το γεγονός ότι το σήµα εισόδου είναι άθροισµα ιδιοσυναρτήσεων του συστήµατος και εκφράστε την απάντησή σας συναρτήσει των ιδιοτιµών του συστήµατος και των µιγαδικών εκθετικών συναρτήσεων της σχέσης του Euler Παραδώστε στην αναφορά σας την απάντησή σας αναλυτικά (εʹ) Βρείτε στο χαρτί σας ένα ϕίλτρο H z (e jω ) που να µηδενίζει το παραπάνω σήµα εισόδου x[n], δηλ η έξοδος του συστήµατος όταν στην είσοδό του εµφανιστεί το σήµα x[n] της Σχέσης (17) να είναι y[n] = 0, n Λάβετε υπόψη σας ότι το σύστηµα που σας Ϲητείται πρέπει να χρησιµοποιεί το σύστηµα H(e jω ) που σας δίνεται παραπάνω, καθώς και ένα παρόµοιό του Παραδώστε τη λύση σας στην αναφορά σας (ϛʹ) Μετατρέψτε το ϕίλτρο H z (e jω ) που ϐρήκατε παραπάνω σε εξίσωση διαφορών στο χαρτί σας (χρησιµοποιήστε ιδιότητες) και παραδώστε τη λύση σας στην αναφορά σας (Ϲʹ) Χρησιµοποιήστε τη συνάρτηση freqz για να δείτε αν το ϕίλτρο σας όντως κάνει αυτό που πρέπει (δηλ µηδενίζει τις κατάλληλες συχνότητες στην απόκριση πλάτους), και συµπεριλάβετε τα γραφήµατα στην αναφορά σας Αν όλα τα έχετε κάνει σωστά, ϑα δείτε τα γραφήµατα του Σχήµατος 4 (ξανά, µε µόνη διαφορά την κλίµακα των γραφηµάτων) (ηʹ) Χρησιµοποιήστε τη συνάρτηση filter για να υλοποιήσετε το σύστηµα και να ϐρείτε την εξοδό του στο MATLAB, δίνοντας ως είσοδο το πραγµατικό σήµα ϕωνής που έχετε ανοίξει παραπάνω Η filter συντάσσεται ως y = filter(b,a,x);, µε B τους συντελεστές της εισόδου στην εξίσωση διαφορών, A τους συντελεστές της εξόδου στην εξίσωση διαφορών (ακριβώς όπως σε προηγούµενο ερώτηµα), και x το διάνυσµα του σήµατος εισόδου (ϕωνή) Ακούστε το σήµα εξόδου y µε την εντολή soundsc(y,fs); και σώστε το µε την εντολη audiowrite( clearsigwav, y, fs); και παραδώστε το ως wav αρχείο στην κατάθεσή σας Θα πρέπει να έχει εξαφανιστεί ο ενοχλητικός ϑόρυβος αλλά να υπάρχει και κάποια επιπλέον αλλοίωση του σήµατος σε σχέση µε το αρχικό ii Ενα πιο καλό ϕίλτρο από το προηγούµενο που (ελπίζω ) ϐρήκατε περιγράφεται µε την εξίσωση διαφορών y[n] α cos(ω 0 )y[n 1] + α y[n ] = x[n] cos(ω 0 )x[n 1] + x[n ] (0)
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 8 Σχήµα 4: Απόκριση πλάτους και ϕάσης συστήµατος H z (e jω ) (αʹ) Χρησιµοποιώντας α = 099 και α = 08, εφαρµόστε το ϕίλτρο µε χρήση της filter για να καθαρίσετε το σήµα ϕωνής, όπως κάνατε πριν Σχολιάστε τις επιδόσεις του ϕίλτρου για κάθε τιµή του α στην αναφορά σας (ϐʹ) Βρείτε στο χαρτί σας την απόκριση συχνότητας H(e jω ) της παραπάνω εξίσωσης διαφορών (χρησιµοποιήστε ιδιότητες) και παραδώστε τη στην αναφορά σας (γʹ) Χρησιµοποιήστε τη συνάρτηση freqz για να σχεδιάσετε και να παραδώσετε τις αποκρίσεις πλάτους και ϕάσης του νέου συστήµατός σας (εντολές plot, abs, angle όπως πριν) (δʹ) Υλοποιήστε τις αποκρίσεις πλάτους και ϕάσης στο MATLAB ως συνάρτηση του ω - µη χρησιµοποιήσετε τη freqz αυτή τη ϕορά Αντίθετα, χρησιµοποιήστε τις συναρτήσεις abs, angle επάνω σε απευθείας προγραµµατισµό της απόκρισης συχνότητας στο MATLAB Απεικονίστε τις και παραδώστε τα γραφήµατα στην αναφορά σας (εʹ) Τα γραφήµατά σας είναι ίδια µε αυτά που παρήγαγε η συνάρτηση freqz; Απαντήστε στην αναφορά σας Ασκηση 3 - Agent 007: ανίχνευση αριθµού τηλεφώνου Οταν πληκτρολογούµε ένα τηλεφωνικό νούµερο στο κινητό µας ή σε ένα οποιοδήποτε τηλέφωνο µε πλήκτρα, δη- µιουργούµε για κάθε αριθµό δυο συνηµίτονα Για παράδειγµα, όταν πληκτρολογούµε τον αριθµό 0, δηµιουργούµε ένα άθροισµα δυο συνηµιτόνων µε συχνότητες 941 και 1336 Hz έκαστο, ήτοι x 0 [n] = cos (π941 n ) + cos (π1336 n ) (1) f s f s µε f s τη συχνότητα δειγµατοληψίας, η οποία είναι f s = 8000 Hz για όλο το σύστηµα Το πρότυπο αυτό ονοµάζεται DTMF - Dual-Tone Multi-Frequency, και ο πίνακας που αντιστοιχεί σε αυτό ϕαίνεται παρακάτω στον πίνακα του Σχήµατος 5 Οι συχνότητες που αντιστοιχούν σε κάθε αριθµό δεν έχουν επιλεγεί τυχαία Καµιά από τις συχνότητες δεν είναι πολλαπλάσιο κάποιας άλλης, άθροισµα ή διαφορά οποιωνδήποτε δυο συχνοτήτων κλπ Η συνθήκη αυτή διευκολύνει πολύ τον εντοπισµό των συχνοτήτων (και άρα τον αριθµό) Για τους σκοπούς µας, κάθε άθροισµα συνηµιτόνων (δηλ κάθε τηλεφωνικός τόνος) διαρκεί 05 δευτερόλεπτα, ενώ υπάρχει µια παύση (σιωπή) µεταξύ των τόνων, διάρκειας 01 δευτερολέπτων Στο διακριτό χρόνο, η παύση δεν είναι τίποτε άλλο από ένα διάνυσµα γεµάτο µηδενικά, κατάλληλης διάρκειας δειγµάτων Υποθέτουµε ότι ο αριθµός που ψάχνουµε έχει συντεθεί από διαδοχικές συνενώσεις τόνου + σιωπής διάρκειας 05 + 01 = 06 δευτερολέπτων ο καθένας Άρα ένα 10ψήφιο τηλεφωνικό σήµα ϑα έχει διάρκεια 6 δευτερόλεπτα Το σκεπτικό µας είναι να χωρίσουµε το ολόκληρο το σήµα τηλεφωνικού αριθµού σε κοµµάτια (frames) των 06 δευτερολέπτων, χωρίς αυτά να επικαλύπτονται µεταξύ τους, και να ελέγχουµε σε κάθε frame αν υπάρχει κάποιος τόνος από τους παραπάνω Σκοπός αυτής της άσκησης είναι να σχεδιάσετε ένα σύστηµα Ϲωνοπερατών (bandpass) ϕίλτρων που ϑα ϕιλτράρει
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 9 Σχήµα 5: Πίνακας Πρότυπου DTMF ένα frame κάθε ϕορά, και ϑα ελέγχει ποιά έξοδος ϕίλτρου έχει περισσότερη πληροφορία σε σχέση µε τις υπόλοιπες Αυτή η έξοδος - που αντιστοιχεί σε κάποιο Ϲωνοπερατό ϕίλτρο - ϑα µας υποδείξει ποιό ϕίλτρο χρησιµοποιήθηκε και άρα ποιές συχνότητες επιτρέπει αυτό να περάσουν Αυτές οι συχνότητες ϑα πρέπει να είναι συχνότητες που υπάρχουν στον Πίνακα 5 Το σύστηµα Ϲωνοπερατών ϕίλτρων ϑα σχεδιαστεί από ένα ϐασικό (ιδανικό) ϐαθυπερατό (lowpass) ϕίλτρο το οποίο έχει απόκριση σε συχνότητα στο διάστηµα ( π, π] ως 1, ω c < ω < ω c H lp (e jω ) = () 0, ω c ω π µε ω c = π/00 (η οποία αντιστοιχεί σε f c = 0 Hz στο συνεχή χρόνο) Το σκεπτικό είναι πως αντί να σχεδιάσετε πολλά διαφορετικά Ϲωνοπερατά ϕίλτρα, µπορείτε να χρησιµοποιήσετε την ιδιότητα της µετατόπισης στη συχνότητα του µετασχ Fourier διακριτού χρόνου ώστε να µετατοπίζετε αυτό το ϐασικό ϕίλτρο γύρω από τις κατάλληλες συχνότητες και να δηµιουργείτε έτσι τα εκάστοτε Ϲωνοπερατά ϕίλτρα Θυµηθείτε ότι e jω 0n x[n] X(e j(ω ω 0) ) (3) και προσέξτε ότι κάθε ιδανικό πραγµατικό σύστηµα πρέπει να έχει συζυγές συµµετρικό ϕάσµα (πρέπει δηλ να έχει ϕασµατικό περιεχόµενο τόσο σε αρνητικές όσο και σε ϑετικές συχνότητες, και οι τιµές του εκατέρωθεν να είναι συζυγείς) Ευτυχώς το σύστηµά µας αποτελείται από ιδανικά ϕίλτρα, οπότε αρκεί αυτά να έχουν άρτια συµµετρία στο χώρο της συχνότητας Το διάγραµµα του Σχήµατος 6 σας δείχνει πως δουλεύει το σύστηµά σας για το πρώτο frame διάρκειας 06 s, που αντιστοιχεί στον αριθµό 6 Ως παράδειγµα σας δίνουµε ένα αρχείο ήχου που περιέχει τόνους από έναν αριθµό ενός κινητού τηλεφώνου Τελικός σκοπός σας είναι να εντοπίσετε τον αριθµό Στο MATLAB µπορείτε να χρησιµοποιήσετε τις παρακάτω εντολές για να το ακούσετε [s,fs] = audioread( cell_numwav ); soundsc(s,fs); Σας δίνονται επίσης τρεις συναρτήσεις που πρέπει να συµπληρώσετε και οι οποίες εκτελούν συνολικά την ανίχνευση του αριθµού Ακολουθήστε τις παρακάτω οδηγίες για κάθε συνάρτηση 1 makefbm Σε αυτήν την συνάρτηση ϑα ϕτιάξετε το σύστηµα Ϲωνοπερατών ϕίλτρων h i [n] Το πλήθος τους σύµφωνα µε το πρότυπο DTMF πρέπει να είναι επτά (7), ένα για κάθε µια συχνότητα, αν και στον κώδικα αυτό δίνεται ως µεταβλητή από το χρήστη για περισσότερη γενικότητα Η συνάρτηση αυτή σας επιστρέφει έναν πίνακα που η κάθε στήλη του περιέχει 01 δείγµατα της κρουστικής απόκρισης h[n] από ένα ϕίλτρο Πχ η 3η στήλη του πίνακα περιέχει την κρουστική απόκριση του Ϲωνοπερατού ϕίλτρου που έχει σαν κέντρο του τη συχνότητα π85/f s rad/sample Άρα ο πίνακας που κατασκευάζετε και επιστρέφει η συνάρτηση πρέπει να έχει διαστάσεις 01 7 (αʹ) Συµπληρώστε στη γραµµή 0 τη συχνότητα αποκοπής ω c του ϐασικού χαµηλοπερατού ϕίλτρου που σας δίνεται παραπάνω
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 10 DTFT DTFT DTFT DTFT Ε frame 1 frame [n] 1 -π 0 π ω -π 0 π ω -π 0 π ω -π 0 π ω Frame 1 Frame Frame N-1 Frame N 05 s 01 s h1[n] h[n] Ζωνοπερατά ΓΧΑ φίλτρα h -π -π 0 0 H1(e jω ) H(e jω ) π π ω ω hi[n] -π 0 Hi(e jω ) π ω hl[n] -π 0 HL(e jω ) π ω y1[n] y[n] Ε Ε y 1 [ n ] y [ n ] y [n] 1 y [n] yi[n] yl[n] Ε y i [ n ] y [n] i Ε y L [ n ] y [n] L S E y E 1 [ n ] frame 1 1 S E y E [ n ] frame 1 R? R? S E y E i [ n ] frame 1 i R? S E y E L [ n ] frame 1 L R? 6 9 1 Για κάθε frame, δυο Si θα είναι μεγαλύτερα από το κατώφλι R (το οποίο θα ορίσετε εσείς σας προτείνεται στον κώδικα μια καλή τιμή για αυτό) Αυτό σημαίνει ότι μόνο δυο έξοδοι yi[n] θα έχουν σημαντική ενέργεια Αν γνωρίζετε τους δείκτες των φίλτρων i,j από τα οποία παρήχθησαν αυτές οι έξοδοι, τότε γνωρίζετε τα ζωνοπερατά φίλτρα και τις συχνότητες γύρω από τις οποίες ορίζονται Άρα γνωρίζετε το ζεύγος συχνοτήτων που δημιουργούν τον εκάστοτε αριθμό πλήκτρου που αντιστοιχεί στο κάθε frame που αναλύετε Σημ: στον κώδικα, ο πίνακας h αποθηκεύει τα ζωνοπερατά φίλτρα ανά στήλες, κι όχι ανά γραμμές όπως παραπάνω (απλά δε βόλευε η σχεδίαση σε στήλες) Σχήµα 6: ιάγραµµα λειτουργίας συστήµατος ανίχνευσης αριθµού για το πρώτο frame
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 11 (ϐʹ) Βρείτε αρχικά στο χαρτί ποιό είναι το σήµα στο χρόνο στο οποίο αντιστοιχεί το χαµηλοπερατό ϕίλτρο που αναφέρεται παραπάνω στη Σχέση () και παραδώστε την απάντησή σας στην αναφορά σας (γʹ) Γράψτε την έκφραση που ϐρήκατε στη γραµµή 36 της συνάρτησης, για να δηµιουργήσετε 01 δείγµατα του ϐασικού χαµηλοπερατού σας ϕίλτρου Το MATLAB διαθέτει συνάρτηση sinc η οποία ϑα σας ϕανεί χρήσιµη Αν δεν τη χρησιµοποιήσετε, και υλοποιήσετε κατευθείαν την εξίσωση που ϐρήκατε, ελέγξτε προσεκτικά τις τιµές του ϕίλτρου σας Κάπου ϑα υπάρχει ένα πρόβληµα Εξηγήστε τι πρόβληµα υπάρχει, που οφείλεται, και διορθώστε το χειροκίνητα - δηλ γράψτε µια γραµµή κώδικα για να αλλάξετε την προβληµατική τιµή σε αυτή που πρέπει (δʹ) Βρείτε το µετασχηµατισµό Fourier του σήµατος y[n] = cos(ω 0 n)h lp [n] (4) στο χαρτί σας Εκφράστε τον ως συνάρτηση του µετασχ Fourier του h lp [n], δηλ του H lp (e jω ) Παραδώστε την απάντησή σας στην αναφορά σας Τι συµβαίνει στην απόκριση συχνότητας H lp (e jω ) όταν πολλαπλασιάζεται µε ένα ηµίτονο συχνότητας ω 0 ; Απαντήστε στην αναφορά σας (εʹ) Με ϐάση την απάντηση που δώσατε παραπάνω, µπορείτε τώρα να συµπληρώστε τη γραµµή 41 της συνάρτησης δηµιουργώντας έτσι τα Ϲωνοπερατά σας ϕίλτρα h i [n] επιλέγοντας κατάλληλες ω 0 για το καθένα Η υλοποίησή σας πρέπει να γίνει στο πεδίο του χρόνου - µια απλή πράξη (ϛʹ) Τέλος, στη γραµµή 43, κανονικοποιήστε το κάθε ϕίλτρο που δηµιουργείτε, απλά διαιρώντας το µε το άθροισµα των τιµών των δειγµάτων του, + h i [n] (5) Η συνάρτηση sum ϑα σας ϕανεί χρήσιµη n= ddtmfm Η συνάρτηση αυτή δέχεται ως όρισµα ένα σήµα τηλεφωνικού αριθµού και εντοπίζει τον τηλεφωνικό αριθµό που µεταφέρει το σήµα Σηµειώστε ότι γίνεται κλήση της συνάρτησης makefbm Η συνάρτηση ddtmfm σας επιστρέφει έναν πίνακα δυο στηλών ο οποίος περιέχει τις συχνότητες που µεταφέρει το σήµα, καθώς και έναν πίνακα χαρακτήρων που περιέχει τον αριθµό που ανιχνεύτηκε Συγκεκριµένα : (αʹ) Γραµµή 7: Μετατρέψτε τη διάρκεια κάθε τόνου από δευτερόλεπτα σε δείγµατα Θα σας χρειαστεί η συχνότητα δειγµατοληψίας fs (ϐʹ) Γραµµή 33: Κάντε το ίδιο για τις σιωπές (γʹ) Γραµµή 36: (απλό σχόλιο) Στη γραµµή αυτή, ϐρίσκουµε πόσα frames τόνου+σιωπής υπάρχουν σε όλο το τηλεφωνικό σήµα Απλώς κατανοήστε γιατί δουλεύει σωστά αυτή η εντολή (δʹ) Γραµµή 48: (απλο σχόλιο) Στη γραµµή αυτή, ο ϐρόχος επανάληψης διατρέχει το σήµα εισόδου ανά sh δείγµατα και αποθηκεύει κάθε ϕορά στο διάνυσµα fr ένα κοµµάτι διάρκειας όσο είναι µόνο η διάρκεια του τόνου (st), η οποία ϑεωρούµε ότι προηγείται της σιωπής πάντα (εʹ) Γραµµή 54: Υπολογίστε την ενέργεια του κάθε κοµµατιού που δεσµεύεται, µε ϐάση τη γνωστή σας σχέση + E = x [n] (6) Ξανά, η συνάρτηση sum ϑα σας ϕανεί χρήσιµη n= (ϛʹ) Γραµµή 58: (απλό σχόλιο) Σε αυτή τη γραµµή, ο ϐρόχος επανάληψης διατρέχει όλα τα Ϲωνοπερατά ϕίλτρα που έχουµε ϕτιάξει στον πίνακα h και κάνει συνέλιξη καθενός από αυτά µε το σήµα που ϐρίσκεται στο διάνυσµα fr Προσέξτε ότι τα διαφορετικά ϕίλτρα ϐρίσκονται σε στήλες στον πίνακα h Η διαδικασία αυτή υλοποιεί ακριβώς την έξοδο ενός ΓΧΑ συστήµατος δεδοµένης µιας εισόδου του (aka συνέλιξη )
Ψηφιακή Επεξεργασία Σήµατος - 017/ εύτερο Εργαστήριο 1 (Ϲʹ) Γραµµή 60: Κάνετε συνέλιξη του σήµατος µε το j-οστό Ϲωνοπερατό ϕίλτρο ώστε να ϐρείτε την έξοδο του ϕίλτρου Η συνάρτηση conv ϑα σας χρειαστεί σίγουρα (ηʹ) Γραµµή 63: Υπολογίστε την ενέργεια του παραπάνω σήµατος εξόδου µε τη γνωστή σχέση της ενέργειας (ϑʹ) Γραµµή 69: Πρέπει να ϑέσετε ένα όριο ώστε να αναγνωρίζετε πότε ένα Ϲωνοπερατό ϕίλτρο έχει πιάσει συχνότητα που περιέχεται στο σήµα fr Σας προτείνεται ένα τέτοιο κριτήριο µέσα στον κώδικα ως σχόλιο Πειραµατιστείτε αν έχετε χρόνο (εντελώς προαιρετικό) (ιʹ) Γραµµές 84 118: Με ϐάση τον Πίνακα 5, συµπληρώστε τα Ϲεύγη συχνοτήτων για κάθε αριθµό 3 callm Η συνάρτηση callm σας δίνεται απλά για έλεγχο Με αυτήν την συνάρτηση, µπορείτε να δηµιουργήσετε το δικό σας ήχο από οποιοδήποτε τηλεφωνικό νούµερο, να το ακούσετε, και αν ϑέλετε να το ανιχνεύσετε µε τη ϐοήθεια των συναρτήσεων που γράψατε πριν, ώστε να ϐεβαιωθείτε ότι δουλεύει σωστά ο κώδικά σας πριν τον χρησιµοποιήσετε για το µυστικό αριθµό που σας δίνεται Για παράδειγµα, µπορείτε να γράψετε x = call([ 8 1 0 3 9 3 5 3 3]); [Freq, Num] = ddtmf(x); και στη µεταβλητή Num ϑα πρέπει να έχετε τον αριθµό 810393533 Για να δουλέψει αυτή η συνάρτηση, πρέπει να συµπληρώσετε µέσα τις συχνότητες του Πίνακα 5 στις γραµµές 7 50 Αν καταφέρετε να ανακτήσετε σωστά τον αριθµό που σας δίνεται, στείλτε ένα SMS - όχι κλήση! - σε αυτόν τον αριθµό µε το όνοµά σας και το ΑΜ σας Αν όλα πάνε καλά, ϑα σας σταλεί µια απάντηση Για την παράδοση της άσκησης, γράψτε πλήρη αναφορά, συµπεριλαµβάνοντας απαντήσεις σε όλα τα ερωτήµατα του εργαστηρίου, καθώς και διαγράµµατα/γραφήµατα/εικόνες µε τα αποτελέσµατά σας, και συµπεριλάβετε τον κώδικα MATLAB που γράφετε σε ξεχωριστά m files Φροντίστε να έχετε στείλει και το SMS! Η παράδοση γίνεται αποκλειστικά µε το πρόγραµµα TURNIN Ανάθεση : 6/10/017 Προθεσµία : 8/11/017, 3:59:59 (TURNIN timestamp) Ναι, πρέπει να ϱισκάρετε