ΕΠΕΞΕΡΓΑΣΙΑ ΙΑΤΡΙΚΟΥ ΣΗΜΑΤΟΣ Σημειώσεις εργαστηριακού μαθήματος

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΕΠΕΞΕΡΓΑΣΙΑ ΙΑΤΡΙΚΟΥ ΣΗΜΑΤΟΣ Σημειώσεις εργαστηριακού μαθήματος"

Transcript

1 Γιάννης Καλατζής ΕΠΕΞΕΡΓΑΣΙΑ ΙΑΤΡΙΚΟΥ ΣΗΜΑΤΟΣ Σημειώσεις εργαστηριακού μαθήματος Επεξεργασία Ιατρικού Σήματος ΕΡΓΑΣΤΗΡΙΟ 014

2

3 ΠΕΡΙΕΧΟΜΕΝΑ 0 Βασικές γνώσεις προγραμματισμού σε MATLAB Γενικά Μεταβλητές Εντολές Πίνακες Συναρτήσεις οριζόμενες από το χρήστη Αρχεία Γραφικά Χρήσιμες ειδικές λειτουργίες και συναρτήσεις του MATLAB Εργαστηριακές ασκήσεις Σήματα διάκριτου χρόνου - Απεικόνιση σημάτων - Διαχείριση αρχείων σημάτων Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις... 0 Βασικά είδη σημάτων....1 Συνοπτική θεωρία.... Εργασίες κατανόησης Εργαστηριακές ασκήσεις Απόκριση συστήματος - Συνέλιξη Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις Συσχέτιση Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις Διάκριτος Μετασχηματισμός Fourier Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις Διάκριτος Μετασχηματισμός Fourier Εφαρμογές Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις Συνέλιξη στο πεδίο των συχνοτήτων Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις Φιλτράρισμα στο πεδίο των συχνοτήτων Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις... 86

4 9 Αποκατάσταση σήματος Συνοπτική θεωρία Εργασίες κατανόησης Εργαστηριακές ασκήσεις ΛΥΣΕΙΣ ΕΡΓΑΣΤΗΡΙΑΚΩΝ ΑΣΚΗΣΕΩΝ

5 0 Βασικές γνώσεις προγραμματισμού σε MATLAB Σε αυτήν την ενότητα θα γίνει υπενθύμιση των απαιτούμενων γνώσεων προγραμματισμού σε MATLAB για το εργαστηριακό μάθημα της Επεξεργασίας Σήματος, και συγκεκριμένα θα δείτε συνοπτικά: Μεταβλητές και εντολές. Πίνακες. Συναρτήσεις. Αρχεία. Γραφικά. 0.1 Γενικά Εντολές και μεταβλητές: Όπως κάθε γλώσσα προγραμματισμού, το MATLAB λειτουργεί με εντολές (δηλαδή οδηγίες προς τον υπολογιστή), οι οποίες επεξεργάζονται μεταβλητές (δηλαδή τιμές στη μνήμη του υπολογιστή), παράγοντας ως αποτέλεσμα νέες τιμές. Πρόγραμμα: Ένα σύνολο εντολών, ομαδοποιημένες σε ένα αρχείο, αποτελούν ένα πρόγραμμα. Οι εντολές ενός προγράμματος γράφονται σε ένα απλό αρχείο κειμένου (που στο MATLAB έχει κατάληξη.m) και αποτελούν τον κώδικα του προγράμαμτος. Όταν το πρόγραμμα εκτελεστεί, τότε οι εντολές του μετατρέπονοται σε γλώσσα μηχανής και στη συνέχεια εκτελούνται διαδοχικά. Current Directory, Path: Για να μπορεί να εκτελεστεί ένα πρόγραμμα στο MATLAB, πρέπει να βρίσκεται σ ένα φάκελο που λέγεται Current Directory. Εναλλακτικά, για καλύτερη οργάνωση, τα προγράμματα μπορεί να βρίσκονται σε οποιουσδήποτε φακέλους, αρκεί αυτοί να δηλωθούν σε μια ειδική ομάδα φακέλων του MATLAB που λέγεται Path (βρίσκεται στο μενού File Set Path). Συναρτήσεις, Toolboxes: Στο MATLAB υπάρχουν μια σειρά από συναρτήσεις (δηλαδή σύνολα εντολών που εμπλουτίζουν τις λειτουργίες του). Οι συναρτήσεις του MATLAB είναι οργανωμένες σε ομάδες, κάθε μια σχετική με μια εξειδικευμένη θεματική περιοχή. Κάθε ομάδα τέτοιων συναρτήσεων ονομάζεται Toolbox (π.χ. Statistics Toolbox, Signal Processing Toolbox κλπ). 0. Μεταβλητές Μια μεταβλητή είναι μια θέση στη μνήμη του υπολογιστή, που έχει ένα όνομα και μια τιμή. Η περιοχή της μνήμης του MATLAB στην οποία αποθηκεύονται οι μεταβλητές ονομάζεται Workspace. Το όνομα μιας μεταβλητής πρέπει να ξεκινάει από λατινικό γράμμα, και μπορεί να περιέχει μόνο λατινικά γράμματα (a z, A Z), αριθμούς (0 9) ή κάτω παύλες (underscore, _). Ο τύπος μιας μεταβλητής καθορίζει το είδος των τιμών που θα αποθηκεύονται (αριθμοί, χαρακτήρες κλπ), το χώρο στη μνήμη που θα καταλαμβάνει και (στην περίπτωση των αριθμητικών μεταβλητών) το αν θα έχει δεκαδικά ψηφία ή όχι. Αν δεν οριστούν διαφορετικά, οι αριθμητικές μεταβλητές που ορίζονται από το χρήστη στο MATLAB είναι τύπου double (κινητής υποδιαστολής, καταλαμβάνουν χώρο 64bit στη μνήμη, έχουν ακρίβεια 15 δεκαδικών ψηφίων και εύρος περίπου από έως ). Στο MATLAB υπάρχουν επίσης κάποιες ενσωματωμένες ειδικές μεταβλητές, όπως το pi, που είναι προσέγγιση του π με ακρίβεια 14 δεκαδικών ψηφίων (pi = ).

6 6 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 0.3 Εντολές Οι εντολές δίνονται είτε απ ευθείας στο Command Window, είτε γράφονται σε κώδικα προγράμματος στον Editor. Τα αποτελέσματα των εντολών μπορούν είτε να παρουσιαστούν σε μορφή κειμένου στο Command Window, είτε να αποθηκευτούν σε κάποιο μόνιμο μαγνητικό μέσο (όπως στο σκληρό δίσκο, σε δισκέτα ή σε μνήμη τύπου flash), είτε να απεικονιστούν με μορφή γραφημάτων σε ειδικά παράθυρα γραφικών (που λέγονται figures). Κάθε εντολή τελειώνει με ελληνικό ερωτηματικό (;), κόμμα (,) ή αλλαγή γραμμής ( Enter). Στην περίπτωση εντολής ανάθεσης (δηλ. όταν ορίζεται μια μεταβλητή ή αλλάζει η τιμή της) χωρίς ελληνικό ερωτηματικό (;), το αποτέλεσμα απεικονίζεται στο Command Window. Το σύμβολο «%» σημαίνει σχόλιο (ό,τι ακολουθεί στην ίδια σειρά αγνοείται). Εντολές εισόδου (από το πληκτρολόγιο) και εξόδου (στο Command Window): input: Εντολή για είσοδο τιμών σε μεταβλητές από το πληκτρολόγιο: w = input('weight: '); % Εισαγωγή αριθμού από το πληκτρολόγιο n = input('name: ', 's'); % Εισαγωγή string από το πληκτρολόγιο disp: Εντολή απεικόνισης κειμένου ή τιμής μιας μεταβλητής στο Command Window: disp(x); % Απεικόνιση της τιμής της μεταβλητής x στο Command Window disp('hello'); % Απεικόνιση της συμβολοσειράς Hello στο Command Window fprintf: Εντολή απεικόνισης κειμένου με τιμές μεταβλητών στο Command Window, π.χ.: fprintf('patient %s is %dkg and %.fm\n', n, w, h); Ειδικοί χαρακτήρες για την fprintf: %d = απεικόνιση σε μορφή ακεραίου αριθμού %f = απεικόνιση σε μορφή αριθμού με δεκαδικά ψηφία %X.Yf = απεικόνιση σε μορφή αριθμού με X συνολικές θέσεις και Υ δεκαδικά ψηφία %c = απεικόνιση σε μορφή χαρακτήρα %s = απεικόνιση σε μορφή σειράς χαρακτήρων (συμβολοσειράς, string) \n = αλλαγή γραμμής, \t = στηλοθέτης (tab). clc, clear: Πριν την έναρξη των προγραμμάτων συνιστάται η χρήση των εντολών clc και clear, ώστε να «καθαρίζει» το Command Window καθώς και η μνήμη από τις μεταβλητές. 0.4 Πίνακες Πίνακας είναι ένα σύνολο μεταβλητών ίδιου τύπου, με κοινό όνομα. Δημιουργία πινάκων: Τα στοιχεία μιας γραμμής χωρίζονται με κενό ή κόμμα, ενώ οι γραμμές χωρίζονται με ελληνικό ερωτηματικό ή αλλαγή γραμμής ( Enter). Παράδειγμα μονοδιάστατου πίνακα: >> A = [ 4 3 0] A = Παράδειγμα δισδιάστατου πίνακα: >> B = [ 4 3 0; ] B = Διαστάσεις πίνακα: Πρώτα αναφέρεται πάντοτε το πλήθος των γραμμών, και μετά των στηλών. Π.χ. ο πίνακας A είναι διαστάσεων 1 4 και ο B είναι 4. Στοιχεία πίνακα: Κάθε στοιχείο ενός πίνακα καθορίζεται από τους δείκτες, σε παρένθεση. Ο πρώτος δείκτης δείχνει πάντα τη γραμμή, ενώ ο δεύτερος τη στήλη. Π.χ. B(,3) = 1

7 Βασικές γνώσεις προγραμματισμού σε MATLAB 7 Χρήσιμες συναρτήσεις πινάκων: length: Πλήθος στοιχείων ενός μονοδιάστατου πίνακα, π.χ. >> length(a) % Μήκος του πίνακα A ans = 4 size: Πλήθος στοιχείων σε κάθε διάσταση ενός πίνακα, π.χ. >> size(b) % Διαστάσεις του πίνακα B ans = 4 >> size(b,1) % 1η διάσταση του B (πλήθος γραμμών) ans = >> size(b,) % η διάσταση του B (πλήθος στηλών) ans = Συναρτήσεις οριζόμενες από το χρήστη Οι συναρτήσεις είναι προγράμματα του MATLAB (m-files), που εκτελούνται σε δικό τους χώρο μνήμης και έχουν δυνατότητα για είσοδο και έξοδο μεταβλητών ως παραμέτρων. Δημιουργία συνάρτησης: function ορίσματαεξόδου = όνομασυνάρτησης(ορίσματαεισόδου)...<κώδικας της συνάρτησης>... Παράδειγμα δημιουργίας συνάρτησης: ypoteinoysa.m function c = ypoteinoysa(a,b) c = sqrt(a^ + b^); Προσοχή: Το όνομα του αρχείου της συνάρτησης πρέπει να είναι ίδιο με το όνομα της συνάρτησης, το οποίο όμως πρέπει να είναι διαφορετικό από όλες τις υπόλοιπες μεταβλητές (ορίσματα εισόδου και εξόδου, μεταβλητές που ορίζονται μέσα στη συνάρτηση, μεταβλητές που ορίζονται στο πρόγραμμα που καλεί τη συνάρτηση κλπ). Κλήση συνάρτησης: ορίσματαεξόδου = όνομασυνάρτησης(ορίσματαεισόδου); Οι συναρτήσεις δεν «τρέχουν» όπως τα απλά προγράμματα (διότι δεν είναι γνωστές οι τιμές των ορισμάτων εισόδου τους), αλλά «καλούνται» από άλλα προγράμματα ή συναρτήσεις ή από το Command Window, δίνοντας στα ορίσματα εισόδου τις επιθυμητές τιμές. Η κλήση μιας συνάρτησης γίνεται με βάση το όνομα του αρχείου της. Παράδειγμα κλήσης της συνάρτησης ypoteinoysa.m από το Command Window: >> x = 3; >> y = 4; >> z = ypoteinoysa(x,y) z = 5 Παράδειγμα κλήσης της συνάρτησης ypoteinoysa.m από ένα πρόγραμμα: program1.m clc; clear all; disp('υπολογισμοσ ΥΠΟΤΕΙΝΟΥΣΑΣ'); a = input('a? '); b = input('b? '); c = ypoteinoysa(a,b); fprintf('ypoteinoysa = %.1f');

8 8 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Υποσυναρτήσεις Πρόκειται για συναρτήσεις που ορίζονται μέσα σε ένα αρχείο συνάρτησης (η οποία λέγεται τότε κύρια συνάρτηση). Ο ορισμός μιας υποσυνάρτησης γίνεται στο τέλος της κύριας συνάρτησης και μπορεί να κληθεί μόνο από την κύρια συνάρτηση μέσα στην οποία ορίζεται. Γενικά, το MATLAB αναζητά μια συνάρτηση (α) πρώτα στο αρχείο μέσα από το οποίο καλείται (σε περίπτωση υποσυνάρτησης), (β) μετά στον Current Folder, με το όνομα του αρχείου της και (γ) τέλος στους φακέλους του Path, με τη σειρά που έχουν δηλωθεί εκεί (βλ. File Set Path ). Παράδειγμα 1 (συνάρτηση με 1 υποσυνάρτηση): deyteroba8mia.m function x = deyteroba8mia(a,b,c) D = diakrinoysa(a,b,c); if D>0, x1 = (-b + sqrt(d)) / (*a); x = (-b - sqrt(d)) / (*a); x = [x1 x]; % Ένας πίνακας με τις δύο λύσεις elseif D==0 x = -b/(*a); % Μία λύση else x = []; % Κενός πίνακας (καμία λύση) % ΥΠΟΣΥΝΑΡΤΗΣΗ % function D = diakrinoysa(a,b,c) D = b^ - 4*a*c; Παράδειγμα (πρόγραμμα-συνάρτηση με υποσυναρτήσεις): program.m function main clc; clear all; disp('υπολογισμοσ ΛΥΣΕΩΝ ΔΕΥΤΕΡΟΒΑΘΜΙΑΣ ΕΞΙΣΩΣΗΣ'); a = input('a? '); b = input('b? '); c = input('c? '); x = deyteroba8mia(a,b,c) % ΥΠΟΣΥΝΑΡΤΗΣΕΙΣ % function x = deyteroba8mia(a,b,c) D = diakrinoysa(a,b,c); if D>0, x1 = (-b + sqrt(d)) / (*a); x = (-b - sqrt(d)) / (*a); x = [x1 x]; % Ένας πίνακας με τις δύο λύσεις elseif D==0 x = -b/(*a); % Μία λύση else x = []; % Κενός πίνακας (καμία λύση) function D = diakrinoysa(a,b,c) D = b^ - 4*a*c;

9 Βασικές γνώσεις προγραμματισμού σε MATLAB Αρχεία Aρχείο είναι μια ομάδα δεδομένων αποθηκευμένη με ένα όνομα σε ένα φάκελο ενός μόνιμου αποθηκευτικού μέσου (π.χ. στο σκληρό δίσκο, σε μνήμη flash, σε CD κλπ). Αρχεία κειμένου είναι τα αρχεία των οποίων τα δεδομένα είναι αποθηκευμένα με μορφή χαρακτήρων του πίνακα ASCII (1 Byte ανά χαρακτήρα) ή Unicode ( Bytes ανά χαρακτήρα). Για να γράψουμε δεδομένα σε ένα αρχείο ή να διαβάσουμε από αυτό, πρέπει αρχικά να το «ανοίξουμε» (δηλ. να δεσμεύσουμε το όνομά του για αποκλειστική χρήση από το πρόγραμμά μας). Στη συνέχεια, μπορούμε να διαβάσουμε ή να γράψουμε στο αρχείο, και τέλος πρέπει το «κλείσουμε» (δηλ. να αποδεσμεύσουμε το όνομά του). fopen: Άνοιγμα αρχείου (= δέσμευση αρχείου για διάβασμα ή γράψιμο) fid = fopen('όνομααρχείου','rt') % άνοιγμα αρχείου κειμένου για διάβασμα fid = fopen('όνομααρχείου','wt') % άνοιγμα αρχείου κειμένου για εγγραφή fid = fopen('όνομααρχείου','at') % άνοιγμα αρχείου κειμένου για προσθήκη όπου fid είναι το όνομα της μεταβλητής που θα αντιπροσωπεύει το αρχείο. Π.χ. fid = fopen('test.txt','wt') fprintf: Εγγραφή σε αρχείο κειμένου fprintf(fid, 'κείμενο με ειδικούς χαρακτήρες',μεταβλητές) fscanf: Διάβασμα από αρχείο κειμένου μεταβλητή = fscanf(fid,'μορφή',πλήθος) fclose: Κλείσιμο αρχείου (= αποδέσμευση του αρχείου μετά τη χρήση του) fclose(fid) % κλείσιμο του αρχείου που είχε ανοίξει προηγουμένως Παράδειγμα εγγραφής σε αρχείο: Δημιουργήστε το παρακάτω πρόγραμμα, αποθηκεύστε το με όνομα της επιλογής σας και εκτελέστε το. Το πρόγραμμα εγγράφει τους ακεραίους από 1 έως 10 και τα τετράγωνά τους σε ένα αρχείο κειμένου: clc; clear; fid = fopen('test.txt', 'wt'); N = 10; for i=1:n fprintf(fid, '%d %d', i, i^); if i~=n, fprintf(fid, '\n'); fclose(fid); Στη συνέχεια, ανοίξτε από τα Windows το φάκελο του Current Directory, και δείτε τα περιεχόμενα του test.txt με το Σημειωματάριο (Notepad) των Windows. Σημείωση: Με τη εντολή «fprintf(fid, '\n');» εγγράφεται ένας χαρακτήρας αλλαγής γραμμής, με εξαίρεση στην τελευταία επανάληψη, όπου δεν γίνεται αλλαγή γραμμής (κάτι που ελέγχεται από τη συνθήκη «if i~=n,...»), ώστε να μη δημιουργείται πρόβλημα στην ανάγνωση του αρχείου στο επόμενο παράδειγμα. Παράδειγμα ανάγνωσης από αρχείο: Δημιουργήστε το παρακάτω πρόγραμμα, αποθηκεύστε το με όνομα της επιλογής σας και εκτελέστε το. Το πρόγραμμα διαβάζει όλα τα δεδομένα από το αρχείο text.txt και τα αποθηκεύει σε ένα πίνακα διαστάσεων: clc; clear; fid = fopen('test.txt', 'rt'); i = 0; while ~feof(fid) i = i + 1; a(i,1) = fscanf(fid, '%d', 1); a(i,) = fscanf(fid, '%d', 1); fclose(fid); Σημείωση: Η συνάρτηση feof δίνει έξοδο true αν ο δείκτης θέσης αρχείου βρίσκεται στο τέλος του αρχείου (διαφορετικά δίνει έξοδο false), ώστε να σταματήσει η ανάγνωση.

10 10 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 0.7 Γραφικά Η απεικόνιση των γραφικών παραστάσεων και των εικόνων στο MATLAB γίνεται σε ειδικά παράθυρα που ονομάζονται figures. Συναρτήσεις για γραφικές παραστάσεις: plot: Γραφική παράσταση δύο διαστάσεων. plot(x,y) plot(x,y,'χρώμα και είδος σημείων και γραμμής') x,y = πίνακες με συντεταγμένες των σημείων που θα εκτυπωθούν Σύμβολα χρώματος: r g b y c m k w Σύμβολα είδους σημείων: + o *. x s d p h ^ v > < Σύμβολα είδους γραμμής: - : Προσοχή: Τα εξ ορισμού είναι: χρώμα μπλε, γραμμή συνεχόμενη, σύμβολο σημείου κανένα. figure: Η εντολή figure δημιουργεί ένα νέο figure ή κάνει ενεργό ένα υπάρχον. figure = Δημιουργία ενός νέου παραθύρου γραφικών. figure(n) = Γίνεται ενεργό το παράθυρο γραφικών με αριθμό n («ενεργό» figure σημαίνει ότι οι επόμενες εντολές απεικόνισης θα εφαρμοστούν σε αυτό). close = Κλείσιμο των παραθύρων γραφικών. close = Κλείνει το τρέχoν figure close all = Κλείνει όλα τα ανοιχτά figures hold: Επιτρέπει ή αποτρέπει την εκτύπωση περισσοτέρων γραφημάτων στο ίδιο figure hold on = Η γραφική παράσταση παραμένει, και απεικονίζεται και η επόμενη στο ίδιο figure hold off = Η τρέχουσα γραφική παράσταση σβήνει, και η επόμενη απεικονίζεται μόνη της axis = Χειροκίνητος καθορισμός ορίων αξόνων. axis([xmin xmax ymin ymax]) grid: Δημιουργία πλέγματος grid on = Δημιουργία πλέγματος grid off = Σβήσιμο πλέγματος xlabel, ylabel: Τίτλοι αξόνων x και y. xlabel('κείμενο') xlabel('κείμενο') title: Τίτλος γραφήματος. title('κείμενο') leg: Υπόμνημα leg('κείμενο 1', 'κείμενο ', 'κείμενο 3',...) text: Απεικόνιση μηνύματος μέσα σε ένα γράφημα. text(x,y,'κείμενο') = Απεικόνιση του 'κειμένου' στις συντεταγμένες x,y του γραφήματος. subplot: Απεικόνιση πολλών διαγραμμάτων σε διαφορετικούς άξονες μέσα στο ίδιο figure.. subplot(m,n,p): Δημιουργία m n θέσεων απεικόνισης μέσα σε ένα figure (με m γραμμές και n στήλες) και απεικόνιση στη θέση p (μετρώντας από αριστερά προς τα δεξιά και στη συνέχεια από πάνω προς τα κάτω). Παραδείγματα για την απεικόνιση γραφικών παραστάσεων σε figures θα δοθούν στα επόμενα κεφάλαια.

11 Βασικές γνώσεις προγραμματισμού σε MATLAB Χρήσιμες ειδικές λειτουργίες και συναρτήσεις του MATLAB : Όταν χρησιμοποιείται σε πίνακα δείχνει τον τελευταίο δείκτη. Π.χ. A() είναι το τελευταίο στοιχείο ενός μονοδιάστατου πίνακα. max, min: Σε μονοδιάστατους πίνακες, επιστρέφουν τη μέγιστη και την ελάχιστη τιμή του πίνακα αντίστοιχα. Σε πίνακες δύο διαστάσεων, επιστρέφουν τη μέγιστη και την ελάχιστη τιμή κάθε στήλης του πίνακα. save (απλή μορφή): αποθήκευση μεταβλητής (π.χ. πίνακα) σε αρχείου κειμένου. Π.χ.: save data.txt A ascii όπου data.txt είναι το όνομα του αρχείου κειμένου στο οποίο θα γίνει η αποθήκευση και A είναι το όνομα του πίνακα που θα εγγραφεί στο αρχείο (-ascii είναι απαραίτητη παράμετρος ώστε η εγγραφή να γίνει με μορφή κειμένου). load (απλή μορφή): Διάβασμα αρχείου κειμένου το οποίο περιέχει αριθμητικές τιμές υπό μορφή πίνακα και αποθήκευσή του σε έναν πίνακα του MATLAB. Π.χ.: x = load('data.txt') όπου data.txt είναι το όνομα του αρχείου κειμένου από το οποίο γίνει η ανάγνωση και x είναι το όνομα του πίνακα του MATLAB στον οποίο που θα αποθηκευτούν οι τιμές που βρίσκονται στο αρχείο.

12 1 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργαστηριακές ασκήσεις Ασκήσεις πινάκων. 0.1 Δίνεται ο πίνακας Α = [3, 0, -5, ; 7, 1, 4, 1; -1, 3, 7, 0]. Να γραφτεί κατάλληλο πρόγραμμα σε MATLAB το οποίο να υπολογίζει τη μέση τιμή των στοιχείων του πίνακα Α. Μετά τον υπολογισμό, η μέση τιμή πρέπει να τυπώνεται με ένα δεκαδικό ψηφίο, με κατάλληλη χρήση της εντολής fprintf. 0. Η σχέση μεταξύ των θερμοκρασιών σε βαθμούς Κελσίου και Φαρενάιτ είναι η εξής: 9 F C 3, όπου C η θερμοκρασία σε βαθμούς Κελσίου και F σε Φαρενάιτ. 5 Να γραφτεί κατάλληλο πρόγραμμα σε MATLAB στο οποίο: α) Να δημιουργηθεί ένας δισδιάστατος πίνακας Α του οποίου η πρώτη στήλη θα περιέχει βαθμούς θερμοκρασίας από 0 έως 100 ανά 5 βαθμούς Κελσίου (0, 5, 10, 15,, 100), ενώ η δεύτερη στήλη θα περιέχει τους αντίστοιχους βαθμούς σε Φαρενάιτ (3, 41, 50,, 1). β) Να υπολογιστεί η μέση τιμή των θερμοκρασιών σε βαθμούς Κελσίου και Φαρενάιτ του πίνακα Α οι οποίες να αποθηκευτούν σε ένα μονοδιάστατο πίνακα Β. γ) Να απεικονιστούν στο Command Window (i) ο πίνακας Α με disp, και (ii) οι τιμές του πίνακα Β με fprintf ώστε να εμφανίζεται το παρακάτω μήνυμα: Mean temperature is 50 Celcius or 1 Fahrenheit. Ασκήσεις συναρτήσεων 0.3 Να γραφτεί κατάλληλη συνάρτηση η οποία να υπολογίζει τη μέση τιμή ενός πίνακα. Υπόδειξη: Η συνάρτηση πρέπει να έχει ως όρισμα εισόδου τον πίνακα και ως όρισμα εξόδου τη μέση τιμή του. 0.4 Να γραφτεί κατάλληλη συνάρτηση η οποία να υπολογίζει τη μέγιστη και την ελάχιστη τιμή ενός πίνακα. Υπόδειξη: Η συνάρτηση πρέπει να έχει ως όρισμα εισόδου τον πίνακα και ως ορίσματα εξόδου τη μέγιστη και την ελάχιστη τιμή του. 0.5 Να γραφτεί κατάλληλη συνάρτηση η οποία να υπολογίζει το πλήθος των θετικών και το πλήθος των αρνητικών στοιχείων ενός πίνακα. Ασκήσεις αρχείων 0.6 Να γραφτεί κατάλληλο πρόγραμμα με το οποίο να δημιουργείται ένα αρχείο κειμένου με όνομα "numbers.txt" όπου να γράφονται, σε μία γραμμή, οι ακέραιοι αριθμοί από 1 έως 100, χωρισμένοι ο ένας από τον άλλον με κενό (space). 0.7 Να γραφτεί κατάλληλο πρόγραμμα με το οποίο να «ανοίγει» για ανάγνωση το αρχείο κειμένου που δημιουργήθηκε στην άσκηση 0 (letters.txt) και να διαβάζονται οι πρώτοι 10 ακέραιοι, οι οποίοι και να αποθηκεύονται στις 10 θέσεις ενός πίνακα. 0.8 Να γραφτεί κατάλληλο πρόγραμμα με το οποίο να αποθηκεύεται στο σκληρό δίσκο ένα αρχείο κειμένου (temperatures.txt) μια λίστα θερμοκρασιών από 0 έως 100 ανά 5 βαθμών Κελσίου, με τις αντίστοιχες τιμές σε Φαρενάιτ, ως εξής: Η σχέση των θερμοκρασιών σε βαθμούς Κελσίου και Φαρενάιτ είναι:

13 Βασικές γνώσεις προγραμματισμού σε MATLAB 13 T F 9 5 T C 3, όπου T C η θερμοκρασία σε βαθμούς Κελσίου και T F σε Φαρενάιτ. Για την εγγραφή να χρησιμοποιηθεί η συνάρτηση fprintf. Οι θερμοκρασίες σε Κελσίου (πρώτη στήλη) πρέπει να χωρίζονται από τις θερμοκρασίες σε Φαρενάιτ (δεύτερη στήλη) με στηλοθέτη (tab, \t στην fprintf). Ασκήσεις γραφικών 0.9 Φθίνουσα ταλάντωση: Η εξίσωση της απόμάκρυνσης x συναρτήσει του χρόνου t σε μια απλή αρμονική ταλάντωση δίνεται από τη σχέση: x = A ημωt ή x = A ημ(πf t) (1) όπου Α το πλάτος της ταλάντωσης και f η συχνότητά της. Στις πραγματικές ταλαντώσεις, πάντοτε υπάρχουν τριβές, που συχνά είναι ανάλογες της ταχύτητας του σώματος. Τότε, το πλάτος ελαττώνεται εκθετικά με το χρόνο: Α = Α 0 e -Λt () όπου Α 0 το αρχικό πλάτος και Λ μια σταθερά (σταθερά απόσβεσης). Συνδυάζοντας τις εξισώσεις (1) και (), συμπεραίνουμε ότι η εξίσωση της απομάκρυνσης σε συνάρτηση με το χρόνο σε μια αρμονική ταλάντωση με τριβές δίνεται από τη σχέση: x = Α 0 e -Λt ημ(πf t) (3) α) Να γίνει πρόγραμμα όπου να απεικονίζεται γραφικά η απομάκρυνση σε συνάρτηση με το χρόνο στην περίπτωση μιας αρμονικής ταλάντωσης με τριβές. Χρησιμοποιήστε τις παρακάτω τιμές: Αρχικό πλάτος Α 0 = 10 Συχνότητα f = Σταθερά απόσβεσης Λ = 0.4 Χρόνος: από 0 έως 5 ανά 0.01 β) Επίσης, στο ίδιο διάγραμμα πρέπει να απεικονίζεται και η εκθετική ελάττωση του πλάτους, έτσι ώστε το τελικό αποτέλεσμα να είναι όπως στην παρακάτω εικόνα:

14 14 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 0.10 Σύνθεση ταλαντώσεων Διακρότημα: Θεωρούμε δύο απλές αρμονικές ταλαντώσεις, χωρίς τριβές, με ίδιο πλάτος Α, των οποίων οι απομακρύνσεις σε συνάρτηση με το χρόνο t δίνονται από τις σχέσεις: x 1 = A ημ(πf 1 t) (1) x = A ημ(πf t) () όπου Α το πλάτος της ταλάντωσης και f η συχνότητά της. Αν ένα σώμα εκτελεί ταυτόχρονα και τις δύο ταλαντώσεις, τότε η απομάκρυνσή του είναι το άθροισμα των δύο απομακρύνσεων: x = x 1 + x (3) Αν οι δύο συχνότητες f 1 και f διαφέρουν λίγο μεταξύ τους, τότε το αποτέλεσμα της σύνθεσης των δύο ταλαντώσεων είναι μια ειδική περίπτωση που ονομάζεται διακρότημα, και που χαρακτηρίζεται από μια σχετικώς αργή αυξομείωση του πλάτους της συνισταμένης ταλάντωσης. α) Να γίνει πρόγραμμα όπου να απεικονίζεται γραφικά η απομάκρυνση σε συνάρτηση με το χρόνο x(t) στην περίπτωση του διακροτήματος. Χρησιμοποιήστε τις παρακάτω τιμές: Πλάτος Α = 1 Συχντότητες f 1 = 0 και f 1 = 1 Χρόνος: από 0 έως 6 ανά 0.01 β) Επίσης, πρέπει να απεικονίζονται και οι επιμέρους ταλαντώσεις (x 1 και x ), έτσι ώ- στε το τελικό αποτέλεσμα να είναι όπως στην παρακάτω εικόνα:

15 1 Σήματα διάκριτου χρόνου - Απεικόνιση σημάτων - Διαχείριση αρχείων σημάτων Σε αυτήν την ενότητα θα δείτε τα βασικά περί σημάτων διακριτού χρόνου, και συγκεκριμένα: Δημιουργία απλού σήματος (με μονοδιάστατο πίνακα). Πράξεις μεταξύ σημάτων (πρόσθεση, πολλαπλασιασμός) Επίσης, θα εξοικειωθείτε με την απεικόνιση σημάτων σε άξονες, καθώς και με τα αρχεία σημάτων σε μαγνητικά μέσα, δηλαδή με: Απεικόνιση σήματος με μορφή γραφικής παράστασης. Απεικόνιση πολλών σημάτων στο ίδιο ή σε διαφορετικά γραφήματα. Αποθήκευση σημάτων σε μαγνητικό μέσο (σκληρό δίσκο, δισκέτα, μνήμη flash). Διάβασμα σημάτων σε μαγνητικό μέσο. 1.1 Συνοπτική θεωρία Σήμα διάκριτου χρόνου (x) = ένα σύνολο αριθμητικών τιμών με χρονική σειρά. Χρονικές στιγμές (n): Αν θεωρήσουμε αρχική τιμή του χρόνου το 0, τότε οι χρονικές στιγμές είναι: n = [0, 1,,, N-1] (όπου Ν το πλήθος των χρονικών στιγμών). Ανάλογα με την αρχή μέτρησης του χρόνου, οι χρονικές στιγμές θα μπορούσαν να ξεκινούν από οποτεδήποτε άλλοτε (π.χ. θα μπορούσε n=[1,,,n] ή n=[-,-1,0,1,,n-3] ). Συμβολισμός: Ο συμβολισμός που θα χρησιμοποιήσουμε είναι: Μαθηματικός συμβολισμός: x(n): x = τιμή σήματος, n = χρονική στιγμή. Συμβολισμός στον προγραμματισμό: x(n+1): η τιμή του σήματος για κάθε μία από τις χρονικές στιγμές n=[0:n-1], διότι το x είναι πίνακας και το n+1 λειτουργεί ως δείκτης του (οι δείκτες των πινάκων στο MATLAB ξεκινούν από 1, άρα αν το n ξεκινάει από το 0, τότε ο δείκτης του πίνακα πρέπει να είναι n+1). Ιδιότητες σημάτων: 1. Άθροισμα σημάτων = x 1 (n) + x (n). Γινόμενο σημάτων = x 1 (n) x (n) 3. Γινόμενο σήματος επί αριθμό = a x 1 (n) 4. x( n) [ x( k) ( n k)] k όπου δ(n) η συνάρτηση δέλτα ή κρουστική συνάρτηση, που ορίζεται ως: 1, για n0 ( n) ή 0, για n0 1, για ( n- a) 0, για na na

16 16 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 1. Εργασίες κατανόησης Εργασία 1.α Δημιουργία σήματος διάκριτου χρόνου ως μονοδιάστατο πίνακα. Απεικόνιση σήματος: plot(x,y,'χρώμα/είδος σημείων/γραμμής') όπου: x,y = πίνακες με συντεταγμένες των σημείων που θα εκτυπωθούν Σύμβολα χρώματος: r g b y c m k w Σύμβολα είδους σημείων: + o *. x s d p h ^ v > < Σύμβολα είδους γραμμής: - : Προσοχή: Τα εξ ορισμού είναι: χρώμα μπλε, γραμμή συνεχόμενη, σύμβολο σημείου κανένα. - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program1a.m): program1a.m clc; clear all; close all; % Δημιουργία και απεικόνιση τιμών σήματος διάκριτου χρόνου x = [ ]; % Τιμές σήματος N = length(x); % Μήκος σήματος n = [0:N-1]; % Χρονικές στιγμές disp('τιμές σήματος:'); x disp('χρονικές στιγμές:'); n % Μήκος σήματος fprintf('μήκος σήματος: %d\n', N); % Γραφική παράσταση σήματος plot(n,x,'o:'); xlabel('n'); ylabel('x(n)'); Αποτελέσματα Τιμές σήματος: x = Χρονικές στιγμές: n = Μήκος σήματος: 10

17 Σήματα διάκριτου χρόνου - Απεικόνιση σημάτων - Διαχείριση αρχείων σημάτων 17 Εργασία 1.β Πολλαπλασιασμός σήματος επί αριθμό (ενίσχυση σήματος): x (n) = a x 1 (n) Συμβολισμός τιμής σήματος στα μαθηματικά: x(n) (τιμή του σήματος τη χρονική στιγμή n). Συμβολισμός τιμής σήματος στο MATLAB: x(n+1) (n+1 = δείκτης του πίνακα x, αν το n ξεκινάει από 0). Απεικόνιση δύο σημάτων στους ίδιους άξονες: hold Η εντολή hold on επιτρέπει την απεικόνιση ή περισσοτέρων διαγραμμάτων στους ίδιους άξονες. Αντίθετα, η hold off έχει ως αποτέλεσμα τη διαγραφή του προηγούμενου διαγράμματος και την απεικόνιση μόνο του τελευταίου διαγράμματος κάθε φορά. - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program1b.m): Προσοχή: Αν οι χρονικές στιγμές είναι n=0:n-1, τότε οι δείκτες των πινάκων είναι n+1 ώ- στε να κυμαίνονται από 1έως N (στο MATLAB οι δείκτες των πινάκων ξεκινούν από 1). program1b.m clc; clear all; close all; % Δημιουργία 1ου σήματος x1 = [ ]; % Τιμές σήματος N = length(x1); % Μήκος σήματος % Δημιουργία ου σήματος ως πολλαπλάσιο του πρώτου a = 3; % πολλαπλασιαστικός παράγοντας for n=0:n-1 x(n+1) = a*x1(n+1); % Απεικόνιση σημάτων n = [0:N-1]; % Χρονικές στιγμές (απαιτούνται για τη γραφική παράσταση) hold on; plot(n,x1,'b.:'); plot(n,x,'r*-'); grid on; xlabel('n'); leg('x_1','x_'); Αποτελέσματα

18 18 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργασία 1.γ. Εγγραφή (αποθήκευση) σήματος σε μαγνητικό μέσο: - Δημιουργήστε το παρακάτω αρχείο συνάρτησης (swrite.m). Η συνάρτηση αυτή αποθηκεύει ένα σήμα (του οποίου οι τιμές βρίσκονται σε ένα μονοδιάστατο πίνακα) σε ένα αρχείο κειμένου στο Current Directory: swrite.m function swrite(x,filename) % Writes signal values to a text file. % The file will have one columns (signal values) % Syntax: swrite(x,filename) % where % filename: the name of the file (string variable) % x: an 1D-array with the signal values fid = fopen(filename,'wt'); N = length(x) for i=1:length(x) fprintf(fid,'%f',x(i)); if i~=n, fprintf(fid, '\n'); fclose(fid); Σημείωση: Όπως παρατηρείτε, η τελευταία τιμή αποθηκεύεται στο αρχείο χωρίς χαρακτήρα αλλαγής γραμμής (\n). Αυτό γίνεται για να είναι ευκολότερη η ανάγνωση του αρχείου (βλ. επόμενη Εργασία). - Δημιουργήστε ένα απλό σήμα στο Command Window. Καλέστε τη συνάρτηση από το Command Window ώστε να αποθηκεύσετε το σήμα στο δίσκο: Command Window >> x = [ ]; >> swrite(x,'signal.txt'); Αποτελέσματα (Δημιουργία ενός αρχείου με όνομα signal.txt στο φάκελο Current Directory.) - Ανοίξτε από τα Windows το φάκελο του Current Directory. Διαπιστώστε την ύπαρξη του αρχείου signal.txt, και κάντε διπλό-κλικ στο εικονίδιό του, ώστε να να δείτε τα περιεχόμενά του.

19 Σήματα διάκριτου χρόνου - Απεικόνιση σημάτων - Διαχείριση αρχείων σημάτων 19 Εργασία 1.δ. Ανάγνωση (φόρτωμα) σήματος από μαγνητικό μέσο: - Δημιουργήστε το παρακάτω αρχείο συνάρτησης (sread.m). Η συνάρτηση αυτή διαβάζει ένα σήμα από ένα αρχείο κειμένου που βρίσκεται στο Current Directory και το αναθέτει σε ένα μονοδιάστατο πίνακα. sread.m function x = sread(filename) % Reads signal values from a text file. % Syntax: x = sread(filename) % where % filename: the name of the file (string variable) % x: an 1D-array with the signal values fid = fopen(filename,'rt'); i = 1; while ~feof(fid) x(i) = fscanf(fid,'%f',1); i = i + 1; fclose(fid); - Διαβάστε το σήμα από το αρχείο κειμένου που αποθηκεύσατε με την προηγούμενη εργασία (signal.txt) Στη συνέχεια εμφανίστε τις τιμές του στο Command Window και απεικονίστε το γραφικά. Command Window >> x = sread('signal.txt') >> n = [0:length(x)-1]; >> plot(n,x,'bo-'); Αποτέλεσμα x =

20 0 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 1.3 Εργαστηριακές ασκήσεις Άσκηση 1.3α Να γραφτεί πρόγραμμα (program13a.m) στο οποίο: i) να ορίζονται δύο σήματα x 1 και x ίδιου μήκους ως μονοδιάστατοι πίνακες της επιλογής σας, ii) να βρίσκεται η μέγιστη τιμή κάθε σήματος, iii) να βρίσκεται το σήμα x 3 που προκύπτει ως διαφορά των δύο σημάτων (x 1 -x αν η μέγιστη τιμή του x 1 είναι μεγαλύτερη από τη μέγιστη τιμή του x, αλλιώς το αντίθετο), και iii) τα τρία αυτά σήματα να απεικονίζονται γραφικά, στο ίδιο figure αλλά σε δύο διαφορετικά υπογραφήματα (subplot): τα x 1 και x στο 1 ο υπογράφημα και το x 3 στο ο υπογράφημα. Αποτέλεσμα του program13a.m (παράδειγμα αναλόγως των x 1 και x ) Σημείωση: Η subplot(m,n,p) χρησιμοποιείται για απεικόνιση σε διαφορετικά «υπογραφήματα» στο ίδιο figure. Αυτό σημαίνει πως ό,τι απεικονιστεί με την επόμενη plot θα απεικονιστεί στη θέση p ενός πλέγματος m n (m γραμμές και n στήλες). Π.χ. για το παραπάνω: subplot(,1,1); % Απεικόνιση στο «επάνω» υπογράφημα των x1 και x plot( ); hold on; % "hold on" = για απεικόνιση του x μαζί με το x1 plot( ); subplot(,1,); % Απεικόνιση στο «κάτω» υπογράφημα του x3 plot( );

21 Σήματα διάκριτου χρόνου - Απεικόνιση σημάτων - Διαχείριση αρχείων σημάτων 1 Άσκηση 1.3β Να γραφτεί πρόγραμμα (program13b.m) με το οποίο: i) Να διαβαστεί από το δίσκο το σήμα που βρίσκεται στο αρχείο ecg.txt (αφού ελέγξετε ότι το αρχείο αυτό βρίσκεται στο Current Directory) με τη βοήθεια της συνάρτησης sread.m (Εργασία 1.δ). Το σήμα να απεικονιστεί. Αποτέλεσμα του program13b.m (i) Σημείωση: Το αρχείο ecg.txt είναι ένα προσομοιωμένο ηλεκτροκαδριογραφικό σήμα, που δημιουργήθηκε με τη βοήθεια του ελεύθερου λογισμικού EEGSYN ( ii) Na δημιουργηθεί ένα δεύτερο σήμα με τριπλάσιο πλάτος από το πρώτο (ενίσχυση σήματος). Το δεύτερο σήμα να απεικονιστεί μαζί με το πρώτο (με hold on) ώστε να φανεί η διαφορά στο πλάτος. Αποτέλεσμα του program13b.m (ii) Άσκηση 1.3γ Να γραφτεί πρόγραμμα (program13c.m) με το οποίο: i) Να διαβαστεί από το δίσκο το σήμα που βρίσκεται στο αρχείο ecg.txt (αφού ελέγξετε ότι το αρχείο αυτό βρίσκεται στο Current Directory) με τη βοήθεια της συνάρτησης sread.m (Εργασία 1.δ). ii) Το ecg.txt είναι αρκετά μεγάλο σήμα (έχει 4355 τιμές). Na δημιουργήσετε ένα δεύτερο σήμα, στο οποίο να αποθηκεύσετε τις τιμές από 100 έως 1000 του ecg.txt.. Απεικονίστε το δεύτερο σήμα.

22 Βασικά είδη σημάτων Σε αυτήν την ενότητα θα δείτε τα βασικά είδη σημάτων (ημιτονοειδές, εκθετικό) και πώς δημιουργούνται..1 Συνοπτική θεωρία Βασικές συναρτήσεις σημάτων διάκριτου χρόνου: (n = χρονικές στιγμές) Όνομα Συνάρηση Γραφική παράσταση x(n) Κρουστική (δέλτα) συνάρτηση 1, για n0 ( n) 0, για n0 1, για na ( n- a) 0, για na a=3 Βηματική συνάρτηση 1, για n0 un ( ) 0, για n0 1, για na u( n - a) 0, για na a=3 Ημιτονοειδής συνάρτηση x( n) Asin( f n / N) A=1 N=50 f= Πραγματική βάση ar x( n) a n 0<a<1 Εκθετική συνάρτηση j Μιγαδική βάση a re R n n j n x( n) a re πλάτος: r n φάση: φ(n)=θn a>1 a=1 φ(n)=θn

23 Βασικά είδη σημάτων 3. Εργασίες κατανόησης Εργασία.α: Δημιουργία ημιτονοειδούς σήματος: x( n) Asin( f n / N) Θυμίζουμε ότι η εξίσωση ενός απλού ημιτονικού σήματος είναι: x = A ημ(ωt) όπου t = η χρονική στιγμή και ω = πf, όπου f η συχνότητα του σήματος. Θέτοντας για ευκολία ως μονάδα χρόνου τη συνολική χρονική διάρκεια του σήματος, τότε: t = n/n, όπου N το πλήθος των δειγμάτων και n ακέραιος από 0 έως N-1) η συχνότητα f του σήματος εκφράζει το πλήθος των ταλαντώσεων στη διάρκεια του σήματος (π.χ. στο διπλανό σήμα, N=100, A=4 και f=). x t: n: 0 1/10 /10... n/n... 9/ n... 9 = N-1 Π.χ. αν σε σήμα διάρκειας 1sec ληφθούν N=10 τιμές, αυτές είναι οι t = 0, 0.1, 0.,..., n/n,..., 0.9 sec Άρα η εξίσωση του διακριτού ημιτονικού σήματος γίνεται: x = A ημ(πf n/n) n - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (programa.m) που δημιουργεί και απεικονίζει ένα ημιτονικό σήμα 100 τιμών, με συχνότητα και πλάτος 4: programa.m clc; clear; close all; N = 100; % Πλήθος τιμών σήματος f = ; % Συχνότητα ημιτονικού σήματος A = 4; % Πλάτος ημιτονικού σήματος % Δημιουργία ημιτονικού σήματος for n=0:n-1 x(n+1) = A*sin(*pi*f*n/N); % Απεικόνιση σήματος n = [0:N-1]; % Χρονικές στιγμές plot(n,x,'b.'); Αποτέλεσμα Σημειώσεις: α) Το n+1 στον πίνακα x λειτουργεί ως δείκτης (οι δείκτες των πινάκων στο MATLAB ξεκινούν από 1, οπότε επειδή οι χρονικές στιγμές (n) ξεκινούν από 0, οι δείκτες του πίνακα πρέπει να είναι n+1). β) Η εντολή n=[0:n-1] δημιουργεί ένα μονοδιάστατο πίνακα με τιμές από 0 έως Ν-1 (χρονικές στιγμές) που χρειάζεται για τη γραφική παράσταση (plot).

24 4 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργασία.β: Πρόσθεση σημάτων: x(n) = x 1 (n) + x (n): - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (programb.m) που δημιουργεί και απεικονίζει ταυτόχρονα δύο ημιτονικά σήματα καθώς και το άθροισμά τους: programb.m clc; clear; close all; N = 100; % Πλήθος τιμών των σημάτων % Συχνότητες και πλάτη σημάτων f1 = 1; A1 = 4; % 1ο σήμα f = ; A = ; % ο σήμα % Δημιουργία σημάτων for n=0:n-1 x1(n+1) = A1*sin(*pi*f1*n/N); x(n+1) = A*sin(*pi*f*n/N); x3(n+1) = x1(n+1) + x(n+1); % Απεικόνιση σημάτων n = [0:N-1]; plot(n,x1,'b'); hold on; plot(n,x,'r'); plot(n,x3,'k'); grid on; leg('x_1','x_','x_3'); Αποτέλεσμα Εργασία.γ: Δημιουργία εκθετικού σήματος: x( n) a n - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (programc.m) στο οποίο δημουργείται και απεικονίζεται ένα εκθετικό σήμα: programc.m clc; clear all; close all; N = 100; % Μήκος σήματος % Δημιουργία εκθετικού σήματος a = 0.95; % Βάση εκθετικού σήματος % (a<1: ελάττωση με το χρόνο) for n=0:n-1 x(n+1) = a^n; % Απεικόνιση σήματος n = [0:N-1]; % Χρονικές στιγμές plot(n,x,'b.'); Αποτέλεσμα

25 Βασικά είδη σημάτων 5 Εργασία.δ: Απεικόνιση πολλών διαγραμμάτων στο ίδιο figure σε διαφορετικούς άξονες: subplot subplot(m,n,p): Δημιουργία m n θέσεων απεικόνισης μέσα σε ένα figure και απεικόνιση στη θέση p (μετρώντας από αριστερά προς τα δεξιά και στη συνέχεια από πάνω προς τα κάτω). - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (programd.m) στο οποίο δημουργείται και απεικονίζεται ένα εκθετικό σήμα σε συνδυασμό με ένα ημιτονικό: programd.m clc; clear all; close all; N = 100; % Μήκος σημάτων f = 5; % Συχνότητα ημιτονοειδούς σήματος a = 0.95; % Βάση εκθετικού σήματος (a<1: ελάττωση με το χρόνο) for n=0:n-1 x1(n+1) = sin(*pi*f*n/n); % Ημιτονοειδές σήμα x(n+1) = a^n; % Εκθετικό σήμα x3(n+1) = x1(n+1) * x(n+1); % Γινόμενο σημάτων % Γραφική παράσταση των x1 και x στο 1ο υπογράφημα n = [0:N-1]; % Χρονικές στιγμές (απαραίτητες για τη γραφική παράσταση) subplot(,1,1); hold on; plot(n,x1,'b'); plot(n,x,'r'); grid on; leg('x_1','x_'); % Γραφική παράσταση των x3 και x στο ο υπογράφημα subplot(,1,); hold on; plot(n,x3,'k'); plot(n,x,'r'); grid on; leg('x_1 * x_', 'x_'); xlabel('n'); Αποτελέσματα

26 6 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος.3 Εργαστηριακές ασκήσεις Άσκηση.3α Να γραφτεί πρόγραμμα (program3a.m) στο οποίο: i) να δημιουργείται ένα ημιτονοειδές σήμα μήκους 100, πλάτους 1 και συχνότητας ίσης με 7, ii) να δημιουργείται ένα εκθετικό σήμα, ίδιου μήκους με το ημιτονοειδές, με βάση ίση με 1.05, iii) να δημιουργείται ένα τρίτο σήμα, ίσο με το γινόμενο των δύο σημάτων, vi) να απεικονίζεται το εκθετικό σήμα καθώς και το σήμα του γινομένου, στους ίδιους άξονες, v) το σήμα του γινομένου να εγγράφεται (αποθηκεύεται) σε ένα αρχείο στο δίσκο. Αποτέλεσμα του program3a.m

27 Βασικά είδη σημάτων 7 Άσκηση.3β Να γραφτεί πρόγραμμα (program3b.m) στο οποίο: i) Αρχικά πρέπει να διαβάζεται από το δίσκο το αρχείο που δημιουργήθηκε στο δίσκο στην ά- σκηση.3α. ii) Στη συνέχεια, το σήμα αυτό πρέπει να ψαλιδιστεί με τιμή κατωφλίου ίση με t=0 και να γίνει απεικόνιση του αρχικού και του ψαλιδισμένου σήματος στους ίδιους άξονες. Το αποτέλεσμα πρέπει να είναι όπως στο παρακάτω σχήμα. Σημείωση: Ψαλιδισμός (clipping) είναι η αποκοπή των τιμών του σήματος που είναι μεγαλύτερες κατ απόλυτη τιμή από ένα κατώφλι (threshold). Υπόδειξη: Μετά την ανάγνωση του σήματος από το δίσκο, δημιουργείστε ένα δεύτερο σήμα του οποίου όλες οι τιμές θα είναι ίσες με του πρώτου, εκτός από όσες τιμές είναι μεγαλύτερες από το κατώφλι t (οι οποίες θα πάρουν την τιμή του κατωφλίου, t) και από όσες τιμές είναι μικρότερες του -t (οι οποίες θα πάρουν την τιμή -t). Έτσι, κάθε τιμή του δεύτερου σήματος θα είναι μικρότερη, κατ απόλυτη τιμή, από το κατώφλι t. Αποτέλεσμα του program3b.m

28 3 Απόκριση συστήματος - Συνέλιξη Σε αυτήν την ενότητα θα εξοικειωθείτε με τα συστήματα σημάτων διάκριτου χρόνου, και συγκεκριμένα με: την απόκριση και την κρουστική απόκριση ενός συστήματος διάκριτου χρόνου, και την πράξη της συνέλιξης μεταξύ δύο σημάτων. 3.1 Συνοπτική θεωρία Σύστημα διάκριτου χρόνου = Συσκευή ή αλγόριθμος που επεξεργάζεται ένα σήμα διάκριτου χρόνου: Είσοδος: x(n) [Επεξεργασία με το σύστημα Τ] Έξοδος: y(n) = T[x(n)] Απόκριση ενός συστήματος ονομάζουμε το σήμα εξόδου του συστήματος, αφού τροφοδοτηθεί με ένα σήμα εισόδου. Γραμμικό σύστημα διάκριτου χρόνου: Όταν το σήμα εξόδου συνδέεται γραμμικά με το σήμα εισόδου, δηλαδή όταν ισχύουν: T[a x(n)] = a T[x(n)] T[a x 1 (n) + b x (n)] = a T[x 1 (n)] + b T[x (n)] Σύστημα χρονικά αμετάβλητο: Όταν χρονική μετατόπιση του σήματος εισόδου έχει ως α- ποτέλεσμα ίδια χρονική μετατόπιση του σήματος εξόδου, δηλαδή: Αν y(n) = T[x(n)] τότε y(n-k) = T[x(n-k)] Κρουστική απόκριση συστήματος είναι η απόκριση του συστήματος, όταν η είσοδος είναι η κρουστική συνάρτηση. h(n) = T[δ(n)] Η κρουστική απόκριση είναι το χαρακτηριστικότερο στοιχείο ενός συστήματος διότι εκφράζει την επίδραση του συστήματος σε ένα σήμα. Ισοδύναμα συστήματα διάκριτου χρόνου: Όταν έχουν την ίδια κρουστική απόκριση. Συνέλιξη (convolution) των σημάτων x 1 (n) και x (n) ονομάζεται η πράξη ( ) σύμφωνα με την οποία: y( n) x ( n) x ( n) [ x ( k) x ( n k)] 1 1 k Πρακτικά, για είσοδο σήματος x(n) σε σύστημα με κρουστική απόκριση h(n), ισχύει: N 1 y( n) x( n) h( n) [ x( k) h( n k)], όπου N = το μήκος του σήματος x k0 Η συνέλιξη υπολογίζει την επίδραση του ενός σήματος στο άλλο ή, αλλιώς, την αλλοίωση του σήματος εισόδου x(n) από την κρουστική απόκριση h(n) του συστήματος. Προσοχή: Μαθηματικός συμβολισμός: = συνέλιξη, = πολλαπλασιασμός. Συμβολισμός στον προγραμματισμό: «*» = πολλαπλασιασμός. Δεν υπάρχει σύμβολο για τη συνέλιξη (θα χρησιμοποιηθεί η συνάρτηση convolution.m). Ιδιότητες συνέλιξης: 1. Αντιμεταθετική: x 1 (n) x (n) = x (n) x 1 (n). Προσεταιριστική: [x 1 (n) x (n)] x 3 (n) = x 1 (n) [x (n) x 3 (n)] 3. Επιμεριστική: x 1 (n) [x (n) + x 3 (n)] = x 1 (n) x (n) + x 1 (n) x 3 (n) 4. Ουδέτερο στοιχείο: x( n) ( n) [ x( k) ( n k)] x( n) k

29 Απόκριση συστήματος - Συνέλιξη 9 3. Εργασίες κατανόησης Εργασία 3.α: Απόκριση γραμμικού συστήματος σε σήμα εισόδου μίας τιμής. Η επίδραση ενός συστήματος σε μια τιμή ενός σήματος εισόδου υπολογίζεται με το γινόμενο της τιμής του σήματος με τις τιμές της κρουστικής απόκρισης του συστήματος. - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program3a_1.m), το οποίο βρίσκει την απόκριση (y) ενός σήματος μίας τιμής (x) σε ένα σύστημα με γνωστή κρουστική απόκριση h: program3a_1.m clc; clear all; close all; % Κρουστική απόκριση συστήματος (θεωρείται γνωστή): h = [ ]; % Σήμα εισόδου: x = ; % Σήμα εξόδου (επίδραση κρουστικής απόκρισης στο σήμα εισόδου): % Παρατηρούμε το σήμα εισόδου x καθώς εισέρχεται σταδιακά στο σύστημα h: % h1 h h3 % x y(1) = x*h(1); % h1 h h3 % x y() = x*h(); % h1 h h3 % x y(3) = x*h(3); % Απεικόνιση σήματος εξόδου y Αποτελέσματα y = Στο προηγούμενο πρόγραμμα (program3a_1.m), αντικαταστήστε την εύρεση των τιμών του y με ένα βρόχο for και αποθηκεύστε το με νέο όνομα (program3a_.m): program3a_.m clc; clear all; close all; % Κρουστική απόκριση συστήματος: h = [ ]; % Σήμα εισόδου: x = ; % Σήμα εξόδου M = 3; % μήκος σήματος εξόδου (χρονικές στιγμές n=0,1,): for n=0:μ-1 y(n+1) = x*h(n+1); % Απεικόνιση σήματος εξόδου y Αποτελέσματα y = 1 1 Παρατηρούμε ότι τα αποτελέσματα των program3a_1.m και program3a_.m είναι ίδια.

30 30 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργασία 3.β: Απόκριση γραμμικού συστήματος σε σήμα εισόδου τιμών. Το σήμα εξόδου ισούται με το άθροισμα των γινομένων των τιμών του σήματος που αλληλεπιδρούν με τις αντίστοιχες τιμές της κρουστικής απόκρισης. - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program3b_1.m), το οποίο βρίσκει την απόκριση ενός σήματος τιμών σε ένα σύστημα με γνωστή κρουστική απόκριση h: program3b_1.m clc; clear all; close all; % Κρουστική απόκριση συστήματος: h = [ ]; % Σήμα εισόδου: x = [ 3]; % Σήμα εξόδου: % Παρατηρούμε το σήμα εισόδου x καθώς εισέρχεται σταδιακά στο σύστημα h: % h1 h h3 % x x1 y(1) = x(1)*h(1); % h1 h h3 % x x1 y() = x(1)*h() + x()*h(1); % h1 h h3 % x x1 y(3) = x(1)*h(3) + x()*h(); % h1 h h3 % x x1 y(4) = x()*h(3); % Απεικόνιση σήματος εξόδου y Αποτελέσματα y = Στο προηγούμενο πρόγραμμα (program3b_1.m), αντικαταστήστε τη διαδικασία εύρεσης των τιμών του y χρησιμοποιώντας βρόχους for (με τη βοήθεια και του τύπου της συνέλιξης, N 1 y( n) x( n) h( n) [ x( k) h( n k)] ). Αποθηκεύστε το με νέο όνομα (program3b_.m): k0 program3b_.m clc; clear all; close all; % Κρουστική απόκριση συστήματος: h = [ ]; % Σήμα εισόδου: x = [ 3]; % Σήμα εξόδου (χρονικές στιγμές n=0,1,...,m-1): % (Συνέλιξη: y(n)= Σ x(k)h(n-k)) M = 4; % Μήκος σήματος εξόδου (χρονικές στιγμές n=0,1,,3): for n=0:m-1 y(n+1) = 0; for k=0:length(x)-1 if n-k+1>=1 & n-k+1<=length(h) % Εξασφάλιση εγκυρότητας δεικτών του h y(n+1) = y(n+1) + x(k+1)*h(n-k+1); % +1 γιατί οι δείκτες ξεκινούν από 1 % Απεικόνιση σήματος εξόδου y Αποτελέσματα y = Παρατηρούμε ότι τα αποτελέσματα των program3b_1.m και program3b_.m είναι ίδια.

31 Απόκριση συστήματος - Συνέλιξη 31 Εργασία 3.γ: Κατασκευή της συνάρτησης υπολογισμού της συνέλιξης. Συνέλιξη: N 1 y( n) x( n) h( n) [ x( k) h( n k)], όπου N = το μήκος του σήματος x k0 - Βασιζόμενοι στους βρόχους for του program3b_.m, δημιουργήστε το αρχείο συνάρτησης convolution.m, το οποίο θα βρίσκει τη συνέλιξη μεταξύ δύο σημάτων: convolution.m function y = convolution(x,h) % Μήκη σημάτων: N = length(x); % μήκος σήματος εισόδου L = length(h); % μήκος σήματος κρουστικής απόκρισης M = N+L-1; % μήκος σήματος εξόδου συνέλιξης % Συνέλιξη: y(n)= Σ x(k)h(n-k) for n=0:m-1 y(n+1) = 0; for k=0:n-1 if n-k+1>=1 & n-k+1<=l % Εξασφάλιση εγκυρότητας των δεικτών του πίνακα h y(n+1) = y(n+1) + x(k+1)*h(n-k+1); % +1 γιατί οι δείκτες ξεκινούν από 1 Εργασία 3.δ: Χρήση της συνάρτησης της συνέλιξης: - Εκτελέστε από το Command Window τη συνάρτηση convolution.m που δημιουργήσατε, ώστε να βρείτε τη συνέλιξη μεταξύ των σημάτων x και h που ορίστηκαν στο program3b_.m. Command Window >> h = [ ]; >> x = [ 3]; >> y = convolution(x,h) Αποτέλεσμα y = Στο πρόγραμμα program3b_.m αντικαταστήστε κατάλληλα τους βρόχους for με τη συνάρτηση convolution.m και αποθηκεύστε το με νέο όνομα (program3b_3.m): program3b_3.m clc; clear all; close all; % Κρουστική απόκριση συστήματος: h = [ ]; % Σήμα εισόδου: x = [ 3]; % Σήμα εξόδου (ισοδύναμα με τα program3b_1.m και program3b_.m, % αλλά με χρήση της συνάρτησης της συνέλιξης): y = convolution(x,h); % Απεικόνιση σήματος εξόδου y Αποτελέσματα y =

32 3 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Παρατηρούμε ότι το αποτέλεσμα είναι ίδιο με τα program3b_1.m και program3b_.m. Εργασία 3.ε: Χρήση της συνέλιξης για αφαίρεση θορύβου: Εξομάλυνση (smoothing). - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program3c.m), το οποίο προκαλεί εξομάλυνση σε ένα σήμα με σκοπό την αφαίρεση του θορύβου από αυτό. Στην παρακάτω εργασία, η εξομάλυνση πραγματοποιείται με τη συνέλιξη ενός συστήματος κρουστικής απόκρισης ίσης με [ ] (παράδειγμα φίλτρου εξομάλυνσης), σε ένα ημιτονοειδές σήμα στο οποίο έχει προστεθεί τυχαίος θόρυβος. program3c.m clc; clear all; close all; % Δημιουργία σήματος με θόρυβο N = 1000; % Μήκος σήματος f = ; % Συχνότητα ημιτονοειδούς σήματος for n=0:n-1 x(n+1) = sin(*pi*f*n/n); % Ημιτονοειδές σήμα noise = (rand-0.5)/5; % Τυχαίος αριθμός από -0.1 έως +0.1 xnoise(n+1) = x(n+1) + noise; % Ημιτονοειδές σήμα μαζί με τυχαίο θόρυβο % Εξομάλυνση (smoothing) σήματος h = [ ]; % Κρουστική απόκριση φίλτρου y = convolution(xnoise,h); % Συνέλιξη σήματος με φίλτρο % Απεικόνιση σημάτων n = [0:N-1]; % Χρονικές στιγμές subplot(3,1,1); plot(x); axis([1 N -1 +1]); title('ημιτονοειδές σήμα'); subplot(3,1,); plot(xnoise); axis([1 N -1 +1]); title('σήμα με θόρυβο'); subplot(3,1,3); plot(y); axis([1 N -1 +1]); title('εξομαλυμένο σήμα'); Αποτελέσματα

33 Απόκριση συστήματος - Συνέλιξη 33

34 34 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Επεξήγηση της εξομάλυνσης: Στην περίπτωση της εξομάλυνση με φίλτρα όπως το [ ], κάθε τιμή του σήματος εξόδου y(n) ισούται με το μέσο όρο της αντίστοιχης τιμής του σήματος εισόδου x(n) μαζί με τόσα γειτονικά του, όσα προκύπτουν από το πλήθος των τιμών του φίλτρου. Π.χ. για το παραπάνω φίλτρο, το y(n) ισούται με τη μέση τιμή τριών σημείων, των x(n-1), x(n) και x(n+1). Οι τιμές του φίλτρου εκφράζουν τη βαρύτητα κάθε σημείου του x(n) κατά τον υπολογισμό της μέσης τιμής (γι αυτό και το άθροισμά τους πρέπει να ισούται με τη μονάδα), π.χ. με το παραπάνω φίλτρο, κάθε σημείο του y(n) ισούται με 0.5 x(n-1) x(n) +0.5 x(n+1). Όσο μεγαλύτερη είναι η κεντρική τιμή, τόσο μικρότερη βαρύτητα δίνεται στα γειτονικά σημεία, με αποτέλεσμα μικρότερη εξομάλυνση και το αντίστροφο. Για παράδειγμα, το φίλτρο [ ] (50% στο κεντρικό σημείο και 5% σε κάθε γειτονικό), προκαλεί μικρότερη εξομάλυνση από το [1/3 1/3 1/3] (33% βαρύτητα σε κάθε σημείο). Ένα άλλο παράδειγμα φίλτρου εξομάλυνσης τέτοιου τύπου, που χρησιμοποιεί περισσότερα γειτονικά σημεία, είναι το [ ]. Αυτού του τύπου τα συγκεκριμένα απλά φίλτρα κόβουν ή ελαττώνουν το πλάτος των υψηλών συχνοτήτων του σήματος, γι αυτό λειτουργούν ως φίλτρα εξομάλυνσης ελαττώνοντας το θόρυβο (ο οποίος θεωρείται ότι βρίσκεται στις υψηλές συχνότητες). Για να λειτουργήσουν αποτελεσματικά έχοντας φυσικό νόημα, πρέπει (α) να έχουν περιττό αριθμό τιμών με άθροισμα ίσο με τη μονάδα, και (β) οι ακραίες τιμές πρέπει να είναι μικρότερες από την κεντρική τιμή και να είναι συμμετρικές τιμές ως προς αυτή. Εργασία 3.στ: Υπολογισμός κρουστικής απόκρισης και απόκρισης σε σύστημα αναδρομικής εξάρτησης των τιμών του. Έστω σύστημα του οποίου οι τιμές εξόδου y(n) εξαρτώνται από τις τιμές εισόδου x(n), σύμφωνα με την αναδρομική σχέση: y(n) = 0.5 y(n-1) + x(n) α) Να γράψετε τη μαθηματική σχέση της κρουστικής απόκρισης του συστήματος. β) Στο σύστημα εισάγεται σήμα x(n) = {0,0,1,1,1,1,0,0}. Δημιουργήστε ένα πρόγραμμα σε MATLAB (program3d.m), με το οποίο: (i) να υπολογίζεται η κρουστική απόκριση h(n) του συστήματος και (ii) να βρίσκεται η απόκριση y(n) του συστήματος, για το σήμα εισόδου x(n). Τα σήματα x και y πρέπει να απεικονίζονται στους ίδιους άξονες. Σχόλιο: Στο σύστημα αυτό παρατηρούμε ότι κάθε τιμή του σήματος εξόδου εξαρτάται από την προηγούμενη τιμή του (αναδρομική εξάρτηση τιμών). Αυτό σημαίνει ότι: η πρώτη τιμή του σήματος εξόδου είναι ίση με την πρώτη τιμή του σήματος εισόδου (αφού δεν υπάρχει προηγούμενη τιμή, ώστε να έχει επηρεαστεί). το μήκος της κρουστικής απόκρισης δεν είναι καθορισμένο, αλλά κάθε φορά είναι ίσο με το μήκος του σήματος εισόδου. Λύση: α) Η κρουστική απόκριση (h) είναι η έξοδος του συστήματος (y), όταν η είσοδος (x) είναι η κρουστική συνάρτηση (δ). Άρα, σύμφωνα με τη σχέση του y(n): h(n) = 0.5 h(n-1) + δ(n) β) Βλ. τον παρακάτω κώδικα:

35 Απόκριση συστήματος - Συνέλιξη 35 program3d.m clc; clear all; close all; x = [ ]; % Δημιουργία κρουστικής συνάρτησης δ(n) d(1) = 1; for i=:length(x) d(i) = 0; % Υπολογισμός της συγκεκριμένης κρουστικής απόκρισης h(n) h(1) = d(1); for i=:length(d) h(i) = 0.5*h(i-1) + d(i); % Συνέλιξη y = convolution(x,h); hold on; plot(x,'bo-'); plot(y,'r.:'); leg('x','y'); Αποτελέσματα Παρατηρήσεις: Ερώτημα (i): Χρησιμοποιείται η σχέση του ερωτήματος (α). Η πρώτη τιμή της κρουστικής απόκρισης δεν επηρεάζεται από κάποια προηγούμενη τιμή, άρα h(1) = d(1). Ερώτημα (ii): Η απόκριση ενός συστήματος βρίσκεται πάντα με συνέλιξη.

36 36 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 3.3 Εργαστηριακές ασκήσεις Άσκηση 3.3α: Εξομάλυνση καρδιογραφικού σήματος. Δημιουργήστε ένα πρόγραμμα (program33a.m), το οποίο να προκαλεί εξομάλυνση (smoothing) σε σήμα καρδιογραφήματος. Η εξομάλυνση πρέπει να πραγματοποιείται με τη συνέλιξη ενός συστήματος κρουστικής απόκρισης ίσης με [ ] στο σήμα ενός προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β). Ακολουθήστε τα παρακάτω βήματα: (i) Φορτώστε το σήμα 'ecg.txt' από το δίσκο (πρέπει να βρίσκεται στο Current Directory). (ii) Δημιουργείστε ένα φίλτρο εξομάλυνσης, ως σήμα κρουστικής απόκρισης [ ]. (iii) Πραγματοποιείστε τη συνέλιξη του φίλτρου με το καρδιογραφικό σήμα. (iv) Απεικονείστε το αρχικό και το εξομαλυμένο σήμα στους ίδιους άξονες, χρησιμοποιώντας διαφορετικά χρώματα. Για να δείτε καλύτερα τη διαφορά, δημιουργήστε και απεικονείστε μικρότερα τμήματα των δύο σημάτων (π.χ. για τις χρονικές στιγμές από 50 έως 50). Το αποτέλεσμα πρέπει να είναι όπως στο παρακάτω σχήμα: Αποτελέσματα του program33a.m Μπορείτε να πειραματιστείτε με διαφορετικά φίλτρα, για να παρατηρήσετε τα διαφορετικά αποτελέσματα στην εξομάλυνση. Απαιτούμενα αρχεία για το program33a.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). convolution.m: Συνάρτηση συνέλιξης (Εργασία 3.γ) Άσκηση 3.3β (γενίκευση της Εργασίας 3.στ): Δημιουργία συνάρτησης προσομοίωσης του συστήματος της Εργασίας 3.στ. α) Κατασκευάστε στο MATLAB μια συνάρτηση (SystemSimulation.m) που να προσομοιώνει και να γενικεύει το σύστημα της Εργασίας 3.στ, δηλαδή να μπορεί να υπολογίσει το σήμα εξόδου y(n) του συστήματος για οποιοδήποτε σήμα εισόδου x(n). Υπόδειξη: Βασιστείτε στο program3d.m. Απαιτούμενο αρχείο: convolution.m (συνάρτηση συνέλιξης, Εργασία 3.γ) β) Κατασκευάστε ένα πρόγραμμα σε MATLAB (program33b.m), στο οποίο: (i) Να δημιουργείται ένα σήμα N=100 τιμών, που να είναι το γινόμενο μιας εκθετικής συνάρτησης βάσης a=0.95 και μιας συνημιτονοειδούς συνάρτησης συχνότητας f= και πλάτους A=1. (ii) Να βρίσκεται η απόκριση του SystemSimulation.m, όταν εισαχθεί το σήμα του ερωτήματος (i). Τα σήματα εισόδου και εξόδου να παρασταθούν στους ίδιους άξονες. Το αποτέλεσμα πρέπει να είναι όπως στο σχήμα της επόμενης σελίδας:

37 Απόκριση συστήματος - Συνέλιξη 37 Αποτελέσματα του program33b.m Άσκηση 3.3γ: Ιδιότητες συνέλιξης Με χρήση της συνάρτησης της συνέλιξης, να δείξετε με παραδείγματα τις ιδιότητες της συνέλιξης (βλ. Συνοπτική θεωρία, παράγραφος 3.1), αφού ορίσετε κατάλληλα σήματα της επιλογής σας.

38 Σε αυτήν την ενότητα θα εξοικειωθείτε με: την πράξη της συσχέτισης μεταξύ δύο σημάτων. 4.1 Συνοπτική θεωρία 4 Συσχέτιση Συσχέτιση (correlation) των σημάτων x(n) και y(n) ονομάζεται η πράξη ( ) σύμφωνα με την οποία: r( n) x( n) y( n) [ x( k) y( k n)] k Η συσχέτιση είναι ένας τρόπος σύγκρισης δύο σημάτων και εκφράζει τη σχέση μεταξύ τους. Σε περίπτωση που τα σήματα είναι παρόμοια, το σήμα της συσχέτισης αρχικά αυξάνεται, παρουσιάζει μέγιστο για n=n (όπου N το κοινό μήκος των δύο σημάτων), και στη συνέχεια ελαττώνεται. Αν τα σήματα δεν έχουν ίδιο μήκος, τότε επαυξάνουμε το σήμα με το μικρότερο μήκος με τόσα μηδενικά ώστε τα μήκη να γίνουν ίσα. 4. Εργασίες κατανόησης Εργασία 4.α: Συσχέτιση σημάτων. - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program4a_1.m): program4a_1.m clc; clear all; close all; % Σήμα A x = [3 1 ]; % Σήμα B y = [ 4]; % Συσχέτιση των δύο σημάτων (πρώτα το μικρότερου μήκους σήμα % "γεμίζει" με 0 ώστε να γίνει ίδιου μήκους με το μεγαλύτερο): y = [ 4 0]; % Παρατηρούμε το σήμα A καθώς συσχετίζεται με το σήμα B: % x1 x x3 % y1 y y3 r(1) = x(1)*y(3); % x1 x x3 % y1 y y3 r() = x(1)*y() + x()*y(3); % x1 x x3 % y1 y y3 r(3) = x(1)*y(1) + x()*y() + x(3)*y(3); % x1 x x3 % y1 y y3 r(4) = x()*y(1) + x(3)*y(); % x1 x x3 % y1 y y3 r(5) = x(3)*y(1); % Απεικόνιση σήματος εξόδου r Αποτελέσματα r =

39 Συσχέτιση 39 - Στο προηγούμενο πρόγραμμα (program4a_1.m), αντικαταστήστε τη διαδικασία εύρεσης των τιμών του r χρησιμοποιώντας βρόχους for (και με τη βοήθεια του τύπου της συσχέτισης, N 1 r( n) x( n) y( n) [ x( k) y( k n)] ). Αποθηκεύστε το με νέο όνομα (program4a_.m): k0 program4a_.m clc; clear all; close all; % Σήμα A x = [3 1 ]; % Σήμα B y = [ 4]; % Συσχέτιση των δύο σημάτων (πρώτα το μικρότερου μήκους σήμα % "γεμίζει" με 0 ώστε να γίνει ίδιου μήκους με το μεγαλύτερο): y = [ 4 0]; % Ισοδύναμα με το program4a_1.m, αλλά με βρόχο for: % (Συσχέτιση: r(n)= Σ x(k)y(k-n)) M = 5; % μήκος σήματος εξόδου (χρονικές στιγμές n=0,1,,3,4): for n=0:m-1 r(n+1) = 0; for k=0:length(x)-1 if k-n+length(y)>=1 & k-n+length(y)<=length(y) r(n+1) = r(n+1) + x(k+1) * y(k-n+length(y)); % Απεικόνιση αποτελέσματος συσχέτισης r Αποτελέσματα r = Παρατηρούμε ότι τα αποτελέσματα των program4a_1.m και program4a_.m είναι ίδια.

40 40 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος - Στο προηγούμενο πρόγραμμα (program4a_.m), αντικαταστήστε την εύρεση των τιμών του r χρησιμοποιώντας τη συνάρτηση της συνέλιξης (convolution.m, της προηγούμενης εργαστηριακής άσκησης), αφού πρώτα αναστρέψτε («δεξιά-αριστερά») το ο σήμα. Αποθηκεύστε το πρόγραμμα με νέο όνομα (program4a_3.m): program4a_3.m clc; clear all; close all; % Σήμα A x = [3 1 ]; % Σήμα B y = [ 4]; % Συσχέτιση των δύο σημάτων (πρώτα το μικρότερου μήκους σήμα % "γεμίζει" με 0 ώστε να γίνει ίδιου μήκους με το μεγαλύτερο): y = [ 4 0]; % Στο program4a_1.m παρατηρούμε ότι η συσχέτιση υπολογίζεται όμοια % με τη συνέλιξη, αλλά με το o σήμα ανεστραμένο "δεξιά-αριστερά", % όπως εξάλλου φαίνεται και από τις μαθηματικές σχέσεις των δύο πράξεων: % Συνέλιξη: y(n)= Σ x(k)h(n-k) % Συσχέτιση: r(n)= Σ x(k)y(k-n) % Άρα: % (i) Αναστροφή του ου σήματος: for i=1:length(y) z(i) = y(length(y)-i+1); % (ii) Υπολογισμός συσχέτισης των x,y με συνέλιξη των x,z: r = convolution(x,z); % Απεικόνιση αποτελέσματος συσχέτισης r Αποτελέσματα r = Παρατηρούμε ότι τα αποτελέσματα των program4a_.m και program4a_3.m είναι ίδια.

41 Συσχέτιση 41 Εργασία 4.β: Κατασκευή της συνάρτησης υπολογισμού της συσχέτισης. Συσχέτιση: N 1 r( n) x( n) y( n) [ x( k) y( k n)], όπου N = το μήκος του σήματος x k0 - Βασιζόμενοι στους βρόχους for του program4a_.m ή στο program4a_3.m, δημιουργήστε το αρχείο συνάρτησης correlation.m, το οποίο θα βρίσκει τη συσχέτιση δύο σημάτων: correlation.m function r = correlation(x,y) % Επαύξηση με 0 του μικρότερου σε μήκος σήματος: if length(x)<length(y) for i=length(x)+1:length(y) x(i) = 0; elseif length(x)>length(y) for i=length(y)+1:length(x) y(i) = 0; % Μήκη σημάτων: N = length(x); % μήκος σημάτων (τα μήκη έχουν εξισωθεί προηγουμένως) M = *N-1; % μήκος σήματος συσχέτισης % Α' τρόπος % Συσχέτιση: r(n)= Σ x(k)y(k-n) for n=0: M-1 r(n+1) = 0; for k=0:n-1 if k-n+n>=1 & k-n+n<=n r(n+1) = r(n+1) + x(k+1) * y(k-n+n); % Β' τρόπος % Η συσχέτιση των x και y είναι ισοδύναμη με τη συνέλιξη % του x με το ανεστραμμένο y "δεξιά-αριστερά": % (i) Αναστροφή του ου σήματος: for i=1:length(y) z(i) = y(length(y)-i+1); % (ii) Υπολογισμός συσχέτισης των x,y με συνέλιξη των x,z: r = convolution(x,z); Σημείωση: Για να ενεργοποιηθεί ο ένας από τους δύο τρόπους υπολογισμού της συσχέτισης (ο Α' ή ο Β'), αρκεί να βάλουμε σχόλια (%) στον άλλο τρόπο (π.χ. επιλέγουμε με το ποντίκι τις γραμμές που θέλουμε, και μετά πατάμε Control+R για να βάλουμε σχόλια, ή Control+T για να τα βγάλουμε) ή, φυσικά, να διαγράψουμε τελείως τις γραμμές εντολών που δεν χρειαζόμαστε. Πάντως, η επαύξηση με 0 του μικρότερου σήματος πρέπει να αφαρμοστεί και στους δύο τρόπους.

42 4 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργασία 4.γ: Χρήση της συνάρτησης της συσχέτισης: - Εκτελέστε από το Command Window τη συνάρτηση correlation.m που δημιουργήσατε, ώστε να βρείτε τη συσχέτιση μεταξύ δύο σημάτων x και y. Command Window >> x = [3 1 ]; >> y = [ 4]; >> r = correlation(x,y) Αποτέλεσμα r = Στο πρόγραμμα program4a_.m αντικαταστήστε κατάλληλα τους βρόχους for με τη συνάρτηση correlation.m και αποθηκεύστε το με νέο όνομα (program4a_4.m): program4a_4.m clc; clear all; close all; % Σήμα A x = [3 1 ]; % Σήμα B y = [ 4]; % Σήμα συσχέτισης (ισοδύναμα με τα program4a_1.m, program4a_.m % και program4a_3.m, % αλλά με χρήση της συνάρτησης της συνέλιξης): r = correlation(x,y); % Απεικόνιση αποτελέσματος συσχέτισης r Αποτελέσματα r = Παρατηρούμε ότι το αποτέλεσμα είναι ίδιο με τα program4a_1.m, program4a_.m και program4a_3.m.

43 Συσχέτιση 43 Εργασία 4.δ: Χρήση της συσχέτισης για εντοπισμό σήματος σε περιβάλλον θορύβου. - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program4b.m), το οποίο εντοπίζει γνωστό σήμα μέσα σε περιβάλλον θορύβου. Παράδειγμα τέτοιας εφαρμογής είναι ο εντοπισμός του ανακλώμενου ηχητικού σήματος συσκευής υπερήχων. program4b.m clc; clear all; close all; % Δημιουργία ημιτονοειδούς σήματος με θόρυβο N = 00; f = 8; % Συχνότητα ημιτονοειδούς σήματος for n=0:n-1 x(n+1) = sin(n**pi*f/n); % Ημιτονοειδές σήμα noise(n+1) = 8*(rand-0.5); % Δημιουργία τυχαίου θορύβου xnoise(n+1) = x(n+1) + 8*(rand-0.5); % Ημιτονοειδές σήμα με θόρυβο % Συσχέτιση του σήματος με (α) το θορυβώδες σήμα και (β) με το θόρυβο rx_xnoise = correlation(x,xnoise); % Συσχέτιση σήματος με θορυβώδες σήμα rx_noise = correlation(x,noise); % Συσχέτιση σήματος με θόρυβο % Απεικόνιση σημάτων n = [0:N-1]; % Χρονικές στιγμές subplot(3,,1); plot(n,x); xlabel('x'); subplot(3,,); plot(n,x); xlabel('x'); subplot(3,,3); plot(n,noise); xlabel('noise'); subplot(3,,4); plot(n,xnoise); xlabel('x+noise'); subplot(3,,5); plot([0:*n-],rx_noise); xlabel('correl.: x & noise'); subplot(3,,6); plot([0:*n-],rx_xnoise); xlabel('correl.: x & x+noise'); % Γιατί οι τιμές του σήματος της συχέτισης είναι από 0 έως *N-; Αποτελέσματα

44 44 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 4.3 Εργαστηριακές ασκήσεις Άσκηση 4.3α: Συσχέτιση για εντοπισμό σήματος μέσα σε θορυβώδες περιβάλλον Δημιουργήστε ένα πρόγραμμα (program43a.m), το οποίο να εντοπίζει ένα σήμα καρδιογραφήματος μέσα σε θορυβώδες περιβάλλον. Η συσχέτιση θα γίνεται με ένα γνωστό καρδιογραφικό σήμα. Ακολουθήστε τα παρακάτω βήματα: (i) Φορτώστε το καρδιογραφικό σήμα 'ecg.txt' από το δίσκο (πρέπει να βρίσκεται στο Current Directory). (ii) Προσθέστε τυχαίο θόρυβο στο σήμα (βλ. και Εργασία 4.β). (iii) Δημιουργήστε σήμα που να περιέχει μόνο τυχαίο θόρυβο. (iv) Απεικονίστε τα τρία σήματα (καρδιογράφημα, καρδιογράφημα+θόρυβος, θόρυβος). (v) Πραγματοποιείστε συσχέτιση του καρδιογραφήματος με κάθε ένα από τα δύο θορυβώδη σήματα. (vii) Απεικονίστε τα αποτελέσματα των δύο συσχετίσων, ώστε να κατανοήσετε τη σημασία της συσχέτισης. Τα αποτελέσματα μπορεί να είναι όπως στο παρακάτω σχήμα: Αποτελέσματα του program43a.m Απαιτούμενα αρχεία για το program43a.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). correlation.m: Συνάρτηση συσχέτισης (Εργασία 4.β)

45 Συσχέτιση 45 Άσκηση 4.3β: Συσχέτιση για εντοπισμό συχνότητας μέσα σε σήμα Τροποποιήστε το προηγούμενο πρόγραμμα, κάνοντας συσχέτιση του ηλεκτροκαδριογραφικού σήματος με δύο ημιτονοειδή σήματα, τα οποία θα δημιουργήσετε προηγουμένως στη θέση των σημάτων με θόρυβο. Το ένα ημιτονοειδές σήμα πρέπει να έχει κάποια συχνότητα που φαίνεται να ενυπάρχει στο καρδιογραφικό σήμα (π.χ. μπορεί να είναι ίση με το πλήθος των κορυφών του, 17), ενώ το άλλο ημιτονοειδές σήμα πρέπει να έχει κάποια άλλη διαφορετική συχνότητα, που δεν φαίνεται να υπάρχει μέσα στο καρδιογραφικό σήμα (π.χ. 10). Ο σκοπός της άσκησης αυτής είναι να δείτε τη συσχέτιση με το ημιτονοειδές σήμα, όταν αυτό έχει συχνότητα που υπάρχει μέσα στο καρδιογραφικό σήμα. Τα αποτελέσματα πρέπει να είναι όπως στο παρακάτω σχήμα: Αποτελέσματα Απαιτούμενα αρχεία για το program43b.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). correlation.m: Συνάρτηση συσχέτισης (Εργασία 4.β)

46 5 Διάκριτος Μετασχηματισμός Fourier Στην ενότητα αυτή θα εξοικειωθείτε με το διάκριτο μετασχηματισμό Fourier. Συγκεκριμένα, θα δείτε: δημιουργία κώδικα συναρτήσεων για τον ευθύ και αντίστροφο μετασχηματισμό Fourier, τον υπολογισμό και την απεικόνιση του φάσματος πλάτους ενός σήματος στο πεδίο των συχνοτήτων, καθώς και τις πληροφορίες που μπορούμε να λάβουμε από το φάσμα πλάτους, και την εύρεση ενός σήματος (και των απλών ημιτονοειδών σημάτων που το αποτελούν) στο πεδίο του χρόνου, αν γνωρίζουμε το φάσμα πλάτους. 5.1 Συνοπτική θεωρία Σύμφωνα με το θεώρημα Fourier, οποιοδήποτε σήμα μπορεί να αναλυθεί σε ένα άθροισμα απλών ημιτονοειδών σημάτων με συγκεκριμένες συχνότητες και πλάτη. Αυτό σημαίνει ότι ένα σήμα μπορεί να απεικονιστεί είτε στο πεδίο του χρόνου (γνωρίζοντας την τιμή του σήματος κάθε χρονική στιγμή), είτε στο πεδίο των συχνοτήτων (γνωρίζοντας το πλάτος κάθε συχνότητας). Ένα σήμα διάκριτου χρόνου υπολογίζεται στο πεδίο των συχνοτήτων με το Διάκριτο Μετασχηματισμό Fourier (Discrete Fourier Transform, DFT): N 1 j kn N 1 Fx( k) x( n) e N n0 όπου x(n) είναι το αρχικό σήμα στο πεδίο του χρόνου, n=0 N-1 οι χρονικές στιγμές, Fx(k) είναι το μετασχηματισμένο σήμα στο πεδίο των συχνοτήτων και k=0 N-1 είναι οι συχνότητες από τις οποίες αποτελείται το Fx(k) ή, αλλιώς, τα πολλαπλάσια της βασικής συχνότητας που ισούται με 1/Ν). Ο επανασχηματισμός του αρχικού σήματος στο πεδίο του χρόνου, γνωρίζοντας το Fx(k), γίνεται με τον Αντίστροφο Διάκριτο Μετασχηματισμό Fourier (Inverse DFT, IDFT): j N 1 j kn N x( n) Fx( k) e k0 Σχέση Euler: e cos jsin. Άρα: j Π.χ.: e cos j sin 0 j 1 j j kn N e cos kn j sin kn N N Το σήμα στο πεδίο των συχνοτήτων Fx(k) αποτελείται από μιγαδικούς αριθμούς (το σύμβολο «j» είναι η φανταστική μονάδα, j 1 ή j = 1), με πραγματικό μέρος RFx( k ) και φανταστικό μέρος IFx( k ). Έτσι, υπολογίζονται τα μεγέθη: Πλάτος: Fx( k) RFx( k) IFx( k) (για όλα τα k : φάσμα πλάτους) 1 IFx( k) Φάση: ( k) tan (όπου tan -1 = τόξο εφαπτομένης) RFx( k) Ισχύς: P(k) = Fx(k) (για όλα τα k : φάσμα ισχύος) όπου: Fx(k) = το σήμα στο πεδίο των συχνοτήτων, RFx(k) και IFx(k) = το πραγματικό και το φανταστικό μέρος του Fx(k), Fx(k), φ(k) και P(k) = το πλάτος, η φάση και η ισχύς του Fx(k), k = 0 N-1 οι συχνότητες και Ν = το μήκος του σήματος Fx(k). Fx φ RFx IFx

47 Διάκριτος Μετασχηματισμός Fourier Εργασίες κατανόησης Εργασία 5.α: Υπολογισμός σήματος στο πεδίο των συχνοτήτων με DFT: N 1 j kn N 1 Το σήμα στο πεδίο των συχνοτήτων υπολογίζεται από τον DFT: Fx( k) x( n) e N n0 Όμως, το Fx( k ) είναι μιγαδικός αριθμός και δεν μπορεί να υπολογιστεί απ ευθείας. Έτσι, τον φέρνουμε στη μορφή Fx(k) = RFx(k) + j IFx(k) με τη βοήθεια της σχέσης του Euler ( j e cos jsin ) και υπολογίζουμε τα RFx( k ) και IFx( k ) (το πραγματικό και το φανταστικό μέρος του): N1 1 1 j kn N 1 Ισχύει: ( ) ( ) N Fx k x n e x( n) cos kn j sin kn N n0 N n0 N N Άρα: N1 N1 1 1 Fx( k) x( n)cos kn j x( n)sin kn N n0 N N n0 N ή, τελικά: Fx(k) = RFx(k) + j IFx(k) όπου N 1 RFx 1 ( k ) x ( n )cos N kn n0 N και N 1 IFx 1 ( k ) x ( n )sin N kn n0 N - Με τη βοήθεια των παραπάνω σχέσεων κατασκευάστε το αρχείο συνάρτησης dft.m για τον υπολογισμό του μετασχηματισμού Fourier ενός σήματος: dft.m function [RFx,IFx] = dft(x) % Είσοδος: x = πραγματικό σήμα, στο πεδίο του χρόνου % Έξοδος: RFx, IFx = πραγματικό και φανταστικό μέρος του σήματος % στο πεδίο των συχνοτήτων μετά από το μετασχηματισμό Fourier N = length(x); for k=0:n-1 RFx(k+1) = 0; IFx(k+1) = 0; for n=0:n-1 RFx(k+1) = RFx(k+1) + x(n+1)*cos(*pi*k*n/n); IFx(k+1) = IFx(k+1) + x(n+1)*sin(*pi*k*n/n); RFx(k+1) = RFx(k+1)/N; IFx(k+1) = -IFx(k+1)/N; - Xρησιμοποιήστε τη συνάρτηση dft.m στο Command Window για να υπολογίσετε τον ευθύ μετασχηματισμό Fourier ενός απλού σήματος (π.χ. x = [ ]): Command Window (εντολές και αποτελέσματα) >> x = [ ] x = >> [RFx,IFx] = dft(x) RFx = IFx = e Σημείωση: Ο συμβολισμός «-3.061e-017» σημαίνει Τέτοιες πολύ μικρές τιμές θεωρούνται μηδενικές (η απόκλιση από το 0 οφείλεται στις προσεγγίσεις του pi π).

48 48 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργασία 5.β: Υπολογισμός σήματος στο πεδίο του χρόνου με IDFT: Εδώ θεωρείται γνωστό το Fx( k ) (δηλαδή τα RFx( k ) και IFx( k )) και θέλουμε να υπολογίσουμε το x(n) σύμφωνα με τον IDFT: N 1 j kn N x( n) Fx( k) e k0 Σύμφωνα με τον ανωτέρω τύπο, το x(n) είναι μιγαδικός αριθμός, οπότε θα υπολογίσουμε το πραγματικό και το φανταστικό του μέρος ( RFx( k ) και IFx( k )) ως εξής: N1 j kn N1 N Ισχύει: x ( n ) Fx ( k ) e Fx ( k ) cos kn j sin kn k0 k0 N N N1 N1 Άρα: x ( n ) Fx ( k )cos kn j Fx ( k )sin kn k0 N k0 N ή N1 N1 x ( n ) RFx ( k ) j IFx ( k ) cos kn j RFx ( k ) j IFx ( k ) sin kn k0 N k0 N ή N 1 N 1 N 1 N 1 x( n) RFx( k)cos kn j IFx( k)cos kn j RFx( k)sin kn j IFx( k)sin kn k0 N k0 N k0 N k0 N ή N1 N1 x( n) RFx( k)cos kn IFx( k)sin kn j RFx( k)sin kn IFx( k)cos kn k0 N N k0 N N ή, τελικά: x(n) = Rx(n) + j Ix(n) N 1 όπου Rx ( n ) RFx ( k )cos kn IFx ( k )sin kn k0 N N N 1 και Ix ( n ) RFx ( k )sin kn IFx ( k )cos kn k0 N N Σημείωση: Στη συνήθη περίπτωση που το σήμα x(n) είναι πραγματικό, τότε απλώς το ( ) IFx k προκύπτει ίσο με το μηδέν.

49 Διάκριτος Μετασχηματισμός Fourier 49 - Με τη βοήθεια των παραπάνω σχέσεων κατασκευάστε το αρχείο συνάρτησης idft.m για τον υπολογισμό του αντίστροφου μετασχηματισμό Fourier ενός σήματος: idft.m function [Rx,Ix] = idft(rfx,ifx) % Είσοδος: RFx, IFx = πραγματικό και φανταστικό μέρος του σήματος % στο πεδίο των συχνοτήτων % Έξοδος: Rx, Ix = πραγματικό και φανταστικό μέρος του σήματος % στο πεδίο του χρόνου N = length(rfx); for n=0:n-1 Rx(n+1) = 0; Ix(n+1) = 0; for k=0:n-1 Rx(n+1) = Rx(n+1) + ( RFx(k+1)*cos(*pi*k*n/N) -... IFx(k+1)*sin(*pi*k*n/N) ); Ix(n+1) = Ix(n+1) + ( RFx(k+1)*sin(*pi*k*n/N) +... IFx(k+1)*cos(*pi*k*n/N) ); - Xρησιμοποιήστε τη συνάρτηση idft.m στο Command Window για να υπολογίσετε τον αντίστροφο μετασχηματισμό Fourier ενός σήματος στο πεδίο των συχνοτήτων (χρησιμοποιήστε το σήμα με RFx = [ ] και IFx = [ ], που όπως είδαμε προηγουμένως προέρχεται από τον DFT του σήματος x = [ ], ώστε με IDFT να προκύψει ως επιβεβαίωση το σήμα αυτό): Command Window (εντολές και αποτελέσματα) >> [Rx,Ix] = idft(rfx,ifx) Rx = e e-017 Ix = e e e e-016 Παρατηρούμε ότι το φανταστικό μέρος του σήματος x(n) προκύπτει ίσο με το μηδέν (ως επιβεβαίωση του ότι το αρχικό σήμα x = [ ] ήταν πραγματικό).

50 50 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Εργασία 5.γ: Υπολογισμός φάσματος πλάτους ενός σήματος στο πεδίο των συχνοτήτων: Πλάτος σήματος στο πεδίο των συχνοτήτων: Fx( k) RFx( k) IFx( k) - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program5a.m), στο οποίο: (i) δημιουργείται ένα σύνθετο σήμα από ημιτονοειδή σήματα γνωστών συχνοτήτων/πλάτους (ii) το τελικό σήμα μετασχηματίζεται κατά Fourier και απεικονίζεται το φάσμα πλάτους. program5a.m clc; clear; close all; %Δημιουργία σήματος (x) από επιμέρους σήματα (x1,x) στο πεδίο του χρόνου N = 100; % Μήκος σήματος A1 = 0; f1 = ; % Πλάτος και συχνότητα 1ου σήματος A = 1; f = 10; % Πλάτος και συχνότητα ου σήματος C = 5; % Σταθερός όρος στο ο σήμα for n=0:n-1 x1(n+1) = A1*sin(*pi*n*f1/N); % Σήμα 1 x(n+1) = C + A*sin(*pi*n*f/N); % Σήμα x(n+1) = x1(n+1) + x(n+1); % Τελικό σήμα % Σήμα στο πεδίο των συχνοτήτων (Fx) [RFx IFx] = dft(x); % Πλάτος του σήματος στο πεδίο των συχνοτήτων (AF(k)) for k=0:n-1 AF(k+1) = sqrt( RFx(k+1)^ + IFx(k+1)^ ); % Γραφικές παραστάσεις επιμέρους σημάτων στο πεδίο του χρόνου x1(n), x(n) n = [0:N-1]; % Χρονικές στιγμές subplot(3,1,1); plot(n,x1); hold on; plot(n,x); grid on; xlabel('χρόνος (n)'); ylabel('σήματα x_1(n),x_(n)'); % Γραφική παράσταση τελικού σήματος στο πεδίο του χρόνου x(n) subplot(3,1,); plot(n,x); grid on; xlabel('χρόνος (n)'); ylabel('σήμα x(n)'); % Γραφική παράσταση πλάτους του σήματος στο πεδίο των συχνοτήτων (AF(k)) k = [0:N-1]; % Συχνότητες subplot(3,1,3); stem(k,af); grid on; xlabel('συχνότητες (k)'); ylabel('πλάτος Fx(k) ');

51 Διάκριτος Μετασχηματισμός Fourier 51 Αποτελέσματα Σημείωση: Για την απεικόνιση των πλατών χρησιμοποιήθηκε η συνάρτηση stem, που είναι περισσότερο κατάλληλη για τη συγκεκριμένη απεικόνιση (η stem συντάσσεται όπως και η plot, απλώς η απεικόνιση των σημείων γίνεται με διαφορετικό τρόπο). Παρατηρήσεις στα αποτελέσματα του program5a.m: 1) Στο φάσμα πλάτους (τρίτο γράφημα) εμφανίζονται οι συχνότητες των επιμέρους σημάτων ( και 10) με τα αντίστοιχα ημίσεια πλάτη (0/=10 και 1/=6). ) Τα πλάτη εμφανίζονται το ήμισυ, λόγω της ύπαρξης των συζυγών μιγαδικών όρων με ίδια πλάτη στις συμμετρικές ως προς το μέσον συχνότητες (98 και 90) (δοκιμάστε να τρέξετε το πρόγραμμα με συχνότητες f 1 = 98 και f = 90). 3) Παρατηρούμε την εμφάνιση του σταθερού όρου (που είχε εισαχθεί με το ο σήμα και ήταν ίσος με 5) στη συχνότητα f=0 (ο σταθερός όρος αν υπάρχει αντιστοιχεί πάντα στη μηδενική συχνότητα, καθώς δεν είναι περιοδικός).

52 5 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος 5.3 Εργαστηριακές ασκήσεις Άσκηση 5.3α: Απεικόνιση φασμάτων πλάτους και ισχύος: Κατασκευάστε πρόγραμμα (program53b.m) στο οποίο: (i) δημιουργείται ένα σύνθετο σήμα που να αποτελείται από ένα εκθετικό σήμα με βάση 0.95 και από ένα ημιτονοειδές σήμα πλάτους 1 και συχνότητας 10, (ii) εκτελείται ο μετασχηματισμός Fourier του σήματος, (iii) υπολογίζεται το φάσμα πλάτους AF(k) και το φάσμα ισχύος P(k)=AF(k) του σήματος στο πεδίο των συχνοτήτων, και (iv) απεικονίζεται η γραφική παράσταση του τελικού σήματος στο πεδίο του χρόνου, και των φασμάτων πλάτους και ισχύος στο πεδίο των συχνοτήτων. Τα αποτελέσματα της απεικόνισης μπορεί να είναι όπως παρακάτω: Αποτελέσματα

53 Διάκριτος Μετασχηματισμός Fourier 53 Άσκηση 5.3β: Μελέτη φάσματος πλάτους σύνθετου σήματος: Με βάση το φάσμα πλάτους του παρακάτω σχήματος, δημιουργήστε την εξίσωση ενός σύνθετου σήματος που να αποτελείται από απλά ημιτονοειδή σήματα και που να δίνει αυτό το φάσμα. Στη συνέχεια, κατασκευάστε πρόγραμμα (program53a.m), το οποίο να δίνει τα αποτελέσματα που παρουσιάζονται παρακάτω: (Υπόδειξη: Στηριχτείτε στην εργασία 5.γ (program5a.m).) Αποτελέσματα του program53a.m Άσκηση 5.3γ Γενικεύστε τον κώδικα της συνάρτησης dft.m (βλ. εργασία 5.α) ώστε να μπορεί να δέχεται ως είσοδο μιγαδικό σήμα. Υπόδειξη: Θα χρειαστεί πρώτα να γενικεύσετε τις μαθηματικές σχέσεις και την απόδειξη της εργασίας 5.α, θέτοντας x( n) Rx( n) j Ix( n).

54 6 Διάκριτος Μετασχηματισμός Fourier Εφαρμογές Στην ενότητα αυτή θα δείτε μια απλή εφαρμογή του διάκριτου μετασχηματισμού Fourier. Συγκεκριμένα, θα δείτε ένα απλό φιλτράρισμα στο πεδίο των συχνοτήτων με σκοπό την αφαίρεση θορύβου από ένα σήμα (ανακατασκευή του σήματος στο πεδίο του χρόνου μετά την αφαίρεση συγκεκριμένων συχνοτήτων στο πεδίο των συχνοτήτων). 6.1 Συνοπτική θεωρία Συχνά θεωρείται ότι ο θόρυβος σε ένα σήμα βρίσκεται σε συγκεκριμένη περιοχή συχνοτήτων, π.χ. στις υψηλές. Κατά συνέπεια, αν ήταν δυνατόν να αφαιρεθούν μόνο οι υψηλές συχνότητες από ένα σήμα, τότε θα αφαιρούταν και ο θόρυβος. Μια απλή διαδικασία αφαίρεσης θορύβου από ένα σήμα, μπορεί να είναι η εξής: α) μετασχηματίζουμε κατά Fourier στο πεδίο των συχνοτήτων με DFT: x(n) Fx(k) β) μηδενίζουμε τις συνιστώσες του Fx που αντιστοιχούν στις συχνότητες όπου υποθέτουμε ότι υπάρχει θόρυβος (π.χ. τις υψηλές): Fx(k) Fx_denoised(k) γ) ανακατασκευάζουμε το σήμα στο πεδίο του χρόνου με IDFT: Fx_denoised(k) x_denoised(n) 6. Εργασίες κατανόησης Εργασία 6.α: Ανακατασκευή σήματος στο πεδίο του χρόνου, μετά από αφαίρεση θορύβου στο πεδίο των συχνοτήτων: - Δημιουργήστε και εκτελέστε το παρακάτω πρόγραμμα (program6a.m), στο οποίο: (i) δημιουργείται ένα ημιτονοειδές σήμα με προσθετικό τεχνητό θόρυβο (ένα άλλο ημιτονοειδές σήμα αρκετά υψηλότερης συχνότητας, αλλά μικρότερου πλάτους), (ii) βρίσκεται το φάσμα πλάτους του σήματος με το θόρυβο, από όπου μπορούμε να «βρούμε» (αν δεν γνωρίζουμε) την υψηλή συχνότητα που αντιστοιχεί στο θόρυβο, (iii) η υψηλή συχνότητα που αντιστοιχεί στο θόρυβο αφαιρείται από το σήμα στο πεδίο των συχνοτήτων, (iv) το σήμα, αφού αφαιρεθεί η υψηλή συχνότητα, ανακατασκευάζεται στο πεδίο του χρόνου με IDFT, και (v) γίνεται απεικόνιση του σήματος πριν και μετά την αφαίρεση της υψηλής συχνότητας θορύβου καθώς και του φάσματος πλάτους.

55 Διάκριτος Μετασχηματισμός Fourier - Εφαρμογές 55 program6a.m clc; clear; close all; % Δημιουργία σήματος με θόρυβο (xnoise) που αποτελείται από ένα % απλό ημιτονοειδές σήμα (x) με πρόσθεση τεχνητού θορύβου (δηλαδή με % πρόσθεση ενός δεύτερου ημιτονοειδούς σήματος υψηλής συχνότητας (noise), % καθώς ο θόρυβος είναι συνήθως στις υψηλές συχνότητες). N = 100; % Μήκος σήματος Ax = 0; fx = ; % Πλάτος και συχνότητα σήματος Anoise = 5; fnoise = 40; % Πλάτος και συχνότητα θορύβου % Δημιουργία σήματος με θόρυβο for n=0:n-1 xnoise(n+1) = Ax*sin(*pi*n*fx/N) + Anoise*sin(*pi*n*fnoise/N); % Σήμα με θόρυβο στο πεδίο των συχνοτήτων (Fxnoise) [RFxnoise IFxnoise] = dft(xnoise); % Πλάτος του σήματος με θόρυβο στο πεδίο των συχνοτήτων (AFxnoise(k)) for k=0:n-1 AFxnoise(k+1) = sqrt( RFxnoise(k+1)^ + IFxnoise(k+1)^ ); % Γραφική παράσταση σήματος με θόρυβο στο πεδίο του χρόνου (xnoise(n)) n = [0:N-1]; % Χρονικές στιγμές subplot(3,1,1); plot(n,xnoise); grid on; xlabel('χρόνος (n)'); ylabel('xnoise(n)'); axis([0 N-1 -Ax +Ax]); % Γραφική παράσταση του φάσματος πλάτους του σήματος με θόρυβο AFxnoise(k) % (δηλαδή του πλάτους στο πεδίο των συχνοτήτων) k = [0:N-1]; % Συχνότητες subplot(3,1,); stem(k, AFxnoise); grid on; xlabel('συχνότητες (k)'); ylabel('afxnoise(k)'); % Στη γραφική παράσταση του φάσματος πλάτους παρατηρούμε ότι οι υψηλές % συχνότητες (θόρυβος) είναι οι 40 και 60. % Έτσι, μηδενίζουμε αυτές τις συχνότητες στο πεδίο των συχνοτήτων και % στη συνέχεια ανακατασκευάζουμε το σήμα στο πεδίο του χρόνου. % Μηδενισμός των συχνοτήτων 40 και 60 του σήματος % (θέσεις στον πίνακα: 41 και 61). RFxnoise(41) = 0; IFxnoise(41) = 0; RFxnoise(61) = 0; IFxnoise(61) = 0; % Ανακατασκευή του σήματος με τον IDFT, αφού έχουν % αφαιρεθεί οι συχνότητες 40 και 60. [Rx Ix] = idft(rfxnoise,ifxnoise); x = Rx; % Κανονικά x = Rx + jix, όμως Ix = 0, άρα x = Rx. % Γραφική παράσταση του ανακατασκευασμένου σήματου στο πεδίο του χρόνου % (x(n)), δηλαδή μετά από το φιλτράρισμα στο πεδίο των συχνοτήτων. subplot(3,1,3); plot(n,x); grid on; xlabel('χρόνος (n)'); ylabel('x(n)');

56 56 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος Αποτελέσματα

57 AFx x ecg Διάκριτος Μετασχηματισμός Fourier - Εφαρμογές Εργαστηριακές ασκήσεις Άσκηση 6.3α: Αφαίρεση θορύβου από ηλεκτροκαρδιογραφικό σήμα: Στην Άσκηση αυτή θα φορτώσουμε ένα ηλεκτροκαρδιογραφικό σήμα από το δίσκο, θα προσπαθήσουμε να εντοπίσουμε τις συχνότητες του θορύβου μέσα σ αυτό και στη συνέχεια θα τις μηδενίσουμε ώστε να ελαττώσουμε το θόρυβο από το αρχικό σήμα (όπως κάναμε στην Εργασία 6.α). Θα χρειαστούμε τις συναρτήσεις sread.m (Εργασία 1.δ), dft.m (Εργασία 5.α) και idft.m (Εργασία 5.β). - Κατασκευάστε πρόγραμμα (program63a.m) στο οποίο να κάνετε τα παρακάτω: α) Φορτώστε το σήμα ecg.txt από το δίσκο (sread.m, Εργασία 1.δ) και απεικονίστε το: n β) Το ecg.txt είναι αρκετά μεγάλο σήμα (έχει 4355 τιμές). Για το λόγο αυτό και για λόγους ταχύτητας υπολογισμών, θα εργαστούμε στη συνέχεια μόνο με ένα τμήμα του: Αποθηκεύστε σε έναν άλλο πίνακα ένα τμήμα του αρχικού σήματος (τις τιμές π.χ. από 100 έως 1000) και απεικονίστε το: n γ) Υπολογίστε το φάσμα πλάτους του στο πεδίο των συχνοτήτων και απεικονίστε το: k

58 x (denoised) AFx x (denoised) ecg AFx AFx 58 Εργαστηριακές Ασκήσεις Επεξεργασίας Ιατρικού Σήματος n δ) Εντοπίστε (οπτικά) στο φάσμα πλάτους τη συχνότητα εκείνη (συχνότητα αποκοπής) πάνω από την οποία βρίσκεται ο θόρυβος (κατά την κρίση σας, π.χ. 50). Πρέπει (i) να αποκόπτονται αρκετές 500 υψηλές συχνότητες, 3000που περιέχουν το θόρυβο, 3500 αλλά (ii) να παραμένουν 4000 επίσης αρκετές 4500 χαμηλές συχνότητες, που περιέχουν τη χρήσιμη πληροφορία του σήματος k 0 ε) Μηδενίστε τις 100 συνιστώσες 00 του σήματος 300 στο 400πεδίο των 500 συχνοτήτων 600 που 700 αντιστοιχούν 800 στις 900 συχνότητες που είναι μεγαλύτερες από τη συχνότητα αποκοπής, και απεικονίστε το νέο φάσμα k πλάτους (προσοχή, πρέπει να μηδενιστούν και οι συζυγείς συχνότητες): n k n στ) Ανακατασκευάστε το σήμα στο πεδίο του χρόνου. Απεικονίστε το ανακατασκευασμένο σήμα: n Συγκρίνετε το ανακατασκευασμένο με το αρχικό σήμα. Η αφαίρεση του θορύβου είναι επιτυχής αν το σήμα έχει εξομαλυνθεί αρκετά, διατηρώντας όμως τη γενική μορφή του. Δοκιμάστε τη διαδικασία με συχνότητες αποκοπής (α) 5 και (β) 00. Τι παρατηρείτε σε κάθε περίπτωση (i) για την αφαίρεση του θορύβου και (ii) για τη διατήρηση της μορφής του σήματος; Στην επόμενη σελίδα φαίνεται η συνολική διαδικασία σε ένα figure με subplots.

59 x (denoised) AFx (denoised) x AFx ecg Διάκριτος Μετασχηματισμός Fourier - Εφαρμογές n n k n k

60 7 Συνέλιξη στο πεδίο των συχνοτήτων Σε αυτήν την ενότητα θα αναπτυχθεί μια σημαντική εφαρμογή του διάκριτου μετασχηματισμού Fourier. Συγκεκριμένα, θα δείτε: πώς πραγματοποιείται η συνέλιξη στο πεδίο των συχνοτήτων με το θεώρημα συνέλιξης. 7.1 Συνοπτική θεωρία Θεώρημα συνέλιξης (convolution theorem): «Ο μετασχηματισμός Fourier της συνέλιξης δύο σημάτων ισούται με το γινόμενο των μετασχηματισμών Fourier των δύο σημάτων»: Fy( k) Fx( k) Fh( k) όπου y( n) x( n) h( n) Υπολογισμός συνέλιξης χρησιμοποιώντας το θεώρημα της συνέλιξης: Το θεώρημα αυτό μας δίνει έναν διαφορετικό τρόπο υπολογισμού της συνέλιξης μεταξύ δύο σημάτων: Η συνέλιξη μεταξύ δύο σημάτων ισούται με τον αντίστροφο μετασχηματισμό Fourier του γινομένου των σημάτων στο πεδίο των συχνοτήτων: y( n) x( n) h( n) IDFT Fy( k) IDFT Fx( k) Fh( k) Πιο αναλυτικά, ο υπολογισμός της συνέλιξης, χρησιμοποιώντας το θεώρημα της συνέλιξης, γίνεται σε 3 βήματα: 1. Μετασχηματίζουμε κατά Fourier τα αρχικά σήματα (x, h), δημιουργώντας τα σήματα στο πεδίο των συχνοτήτων (Fx, Fh).. Πολλαπλασιάζουμε τα σήματα στο πεδίο των συχνοτήτων, βρίσκοντας (λόγω του θεωρήματος της συνέλιξης) τη συνέλιξη στο πεδίο των συχνοτήτων (Fy). 3. Βρίσκουμε με IDFT τη συνέλιξη στο πεδίο του χρόνου (y). Η παραπάνω διαδικασία φαίνεται και στο παρακάτω διάγραμμα ροής: x(n) h(n) DFT DFT. IDFT y(n) Θεώρημα συσχέτισης (correlation theorem): Το θεώρημα της συνέλιξης ισχύει με παρόμοιο τρόπο και για τη συσχέτιση, αρκεί να ληφθεί ο συζυγής μιγαδικός του δεύτερου μετασχηματισμού Fourier: Αν r( n) x( n) h( n), τότε Fr( k) Fx( k) Fh( k) όπου Fh( k ) = συζυγής μιγαδικός του Fh( k ) Υπολογισμός συσχέτισης χρησιμοποιώντας το θεώρημα της συσχέτισης: Μπορούμε να υπολογίσουμε τη συσχέτιση χρησιμοποιώντας το παραπάνω θεώρημα: Σχηματικά: r( n) x( n) h( n) IDFT Fr( k) IDFT Fx( k) Fh( k) x(n) h(n) DFT DFT. IDFT r(n)

61 Συνέλιξη στο πεδίο των συχνοτήτων Εργασίες κατανόησης Εργασία 7.α: Υπολογισμός συνέλιξης με χρήση του θεωρήματος της συνέλιξης: Κατασκευάστε ένα πρόγραμμα (program7a.m) το οποίο να υπολογίζει τη συνέλιξη μεταξύ δύο απλών σημάτων με τη βοήθεια του θεωρήματος της συνέλιξης, σε 3 βήματα: 1. Μετασχηματίζουμε κατά Fourier τα αρχικά σήματα (x, h), δημιουργώντας τα σήματα στο πεδίο των συχνοτήτων (Fx, Fh).. Πολλαπλασιάζουμε τα σήματα στο πεδίο των συχνοτήτων, βρίσκοντας (λόγω του θεωρήματος της συνέλιξης) τη συνέλιξη στο πεδίο των συχνοτήτων (Fy). 3. Βρίσκουμε με IDFT τη συνέλιξη στο πεδίο του χρόνου (y). Παρά την αυξημένη πολυπλοκότητα, ο υπολογισμός της συνέλιξης δύο σημάτων με την διαδικασία αυτή είναι ταχύτερος για την ακρίβεια, όταν χρησιμοποιείται σε συνδυασμό με ειδικούς ταχύτατους αλγορίθμους για DFT, γνωστούς ως FFT (Fast Fourier Transform). Εύρεση του γινομένου των μετασχηματισμών Fourier: Fx( k) Fh( k) RFx( k) j IFx( k) RFh( k) j IFh( k) RFx( k) RFh( k) RFx( k) j IFh( k) j IFx( k) RFh( k) j IFx( k) j IFh( k) RFx( k) RFh( k) IFx( k) IFh( k) j RFx( k) IFh( k) IFx( k) RFh( k) ή, αλλιώς: Fx( k) Fh( k) RFy( k) j IFy( k) όπου RFy( k) RFx( k) RFh( k) IFx( k) IFh( k), το πραγματικό μέρος του Fy( k ) και IFy( k) RFx( k) IFh( k) IFx( k) RFh( k), το φανταστικό μέρος του Fy( k ) Οι δύο τελευταίες σχέσεις χρησιμοποιούνται στο επόμενο πρόγραμμα για την εύρεση του γινομένου των μετασχηματισμών Fourier των δύο σημάτων. Σημειώσεις για την κατασκευή του κώδικα του program7a.m: 1) Ίσα μήκη σημάτων: Για να μπορούν να γίνει σωστά το γινόμενο στοιχείο-προς-στοιχείο των μετασχηματισμών Fourier των δύο σημάτων, τα σήματα πρέπει να έχουν ίδιο μήκος. Αν δεν συμβαίνει αυτό, επαυξάνουμε το μικρότερου μήκους σήμα με 0. ) Διπλασιασμός μήκους σημάτων με μηδενικά: Ο DFT θεωρεί ότι τα σήματα επαναλαμβάνονται περιοδικά, με περίοδο ίση με το μήκος του σήματος, με ανεπιθύμητα αποτελέσματα (wrapping effect). Ένα τέχνασμα για να το αποφύγουμε αυτό, είναι να διπλασιάσουμε το μήκος των δύο σημάτων επαυξάνοντας με 0. 3) Πολλαπλασιασμός με το μήκος του σήματος: Λόγω της εφαρμογής του μετασχηματισμού Fourier (πολλαπλασιασμός με 1/N στη σχέση του DFT παράγραφος 3.1, σελ. 8) και στα δύο σήματα, κατά το γινόμενό τους έχει τελικά εφαρμοστεί ο πολλαπλασιαστικός παράγοντας 1/N*1/N=1/N. Το αποτέλεσμα του ενός εκ των δύο 1/Ν αναιρείται από τον αντίστροφο μετασχηματισμό Fourier που θα ακολουθήσει, αλλά για την αναίρεση και του άλλου 1/N, το τελικό αποτέλεσμα πρέπει να πολλαπλασιαστεί με το μήκος του σήματος.

62 6 Εργαστηριακές ασκήσεις επεξεργασίας σήματος program7a.m clc; clear all; % Σήμα εισόδου: x = [ 3]; % Κρουστική απόκριση συστήματος: h = [ ]; % Συνέλιξη μέσω του πεδίου των συχνοτήτων, με το θεώρημα της συνέλιξης: % y = IDFT(Fx.Fh) % Προσοχή: Η παραπάνω σχέση υπλογίζει τη συνέλιξη y των x,h σε 3 βήματα: % α) Υπολογισμός των Fx και Fh, με DFT (ουσιαστικά RFx,IFx και RFh,IFh) % β) Εύρεση του γινομένου των Fx και Fh % (δηλ. της συνέλιξης Fy στο πεδίο των συχνοτήτων) % γ) Υπολογισμός της συνέλιξης y στο πεδίο του χρόνου με IDFT της Fy. % Εξίσωση μήκους σημάτων (επαυξάνοντας με 0 το μικρότερου μήκους σήμα) % (βλ. Σημείωση 1 παραγράφου 7.) if length(x)<length(h) for i=length(x)+1:length(h), x(i) = 0; elseif length(x)>length(h) for i=length(h)+1:length(x), h(i) = 0; % Διπλασιασμός μήκους σημάτων (επαυξάνοντας με 0 και τα δύο σήματα) % (βλ. Σημείωση παραγράφου 7.) N = length(x); for i=1:n x(n+i) = 0; h(n+i) = 0; % α) Μετασχηματισμοί Fourier [RFx IFx] = dft(x); % DFT του 1ου σήματος [RFh IFh] = dft(h); % DFT του ου σήματος % β) Γινόμενο των DFT (Εύρεση συνέλιξης στο πεδίο των συχνοτήτων) for k=1:length(rfx) RFy(k) = RFx(k)*RFh(k) - IFx(k)*IFh(k); % (πραγματικό μέρος) IFy(k) = RFx(k)*IFh(k) + IFx(k)*RFh(k); % (φανταστικό μέρος) % γ) Υπολογισμός συνέλιξης στο πεδίο του χρόνου [Ry Iy] = idft(rfy,ify); % Επειδή τα x,h είναι έχουν μόνο πραγματικές τιμές, το ίδιο συμβαίνει και για τη συνέλιξή τους, άρα y=ry. % Όμως, λόγω της Σημείωσης 3 της παραγράφου 7., τελικά έχουμε: y = length(x)*ry Αποτέλεσμα y = e e-016 Σημ. Οι τιμές 4.996e-016 και e-016 θεωρούνται μηδενικές (βλ. και σημείωση σελ. 47).

63 Συνέλιξη στο πεδίο των συχνοτήτων 63 Εργασία 7.β: Κατασκευή και χρήση συνάρτησης για τον υπολογισμό της συνέλιξης μέσω του πεδίου των συχνοτήτων: - Βασιζόμενοι στο πρόγραμμα program7a.m, κατασκευάστε τη συνάρτηση convolution_freq.m για τον υπολογισμό της συνέλιξης μέσω του πεδίου των συχνοτήτων: convolution_freq.m function y = convolution_freq(x,h) % % Συνέλιξη (μέσω του πεδίου των συχνοτήτων, με το θεώρημα της συνέλιξης): % y = IDFT(Fx.Fh) % % Εξίσωση μήκους σημάτων (επαυξάνοντας με 0 το μικρότερου μήκους σήμα) if length(x)<length(h) for i=length(x)+1:length(h), x(i) = 0; elseif length(x)>length(h) for i=length(h)+1:length(x), h(i) = 0; % Διπλασιασμός μήκους σημάτων (επαυξάνοντας με 0 και τα δύο σήματα) N = length(x); for i=1:n x(n+i) = 0; h(n+i) = 0; % Μετασχηματισμοί Fourier [RFx IFx] = dft(x); % DFT του 1ου σήματος [RFh IFh] = dft(h); % DFT του ου σήματος % Γινόμενο των DFT for k=1:length(rfx) RFy(k) = RFx(k)*RFh(k) - IFx(k)*IFh(k); % (πραγματικό μέρος) IFy(k) = RFx(k)*IFh(k) + IFx(k)*RFh(k); % (φανταστικό μέρος) % Συνέλιξη (με χρήση του θεωρήματος συνέλιξης) [Ry Iy] = idft(rfy,ify); y = length(x)*ry; - Χρησιμοποιήστε στο Command Window τη συνάρτηση που κατασκευάσατε (convolution_freq.m) καθώς και την convolution.m (Εργασία 3.δ) για να διαπιστώσετε την ταύτιση των αποτελεσμάτων τους: Command Window (εντολές και αποτελέσματα) >> x = [ 3]; >> h = [ ]; >> y1 = convolution(x,h) y1 = >> y = convolution_freq(x,h) y = e e-016

64 64 Εργαστηριακές ασκήσεις επεξεργασίας σήματος - Κατασκευάστε πρόγραμμα (program7b.m) που να υπολογίζει τη συνέλιξη δύο σημάτων με τρόπους (ώστε να φανεί ότι παράγονται τα ίδια αποτελέσματα): α) απ ευθείας στο πεδίο του χρόνου (χρησιμοποιώντας τη συνάρτηση convolution.m, Κεφάλαιο 3), β) μέσω του πεδίου των συχνοτήτων (με τη συνάρτηση convolution_freq.m που δημιουργήσατε προηγουμένως): Απαιτούμενες συναρτήσεις: convolution.m (Εργασία 3.δ), dft.m και idft.m (Εργασίες 5.α και 5.β). program7b.m clc; clear all; % Σήμα εισόδου: x = [ 3]; % Κρουστική απόκριση συστήματος: h = [ ]; % (α) Συνέλιξη στο πεδίο του χρόνου (απ' ευθείας): y1 = convolution(x,h); % (β) Συνέλιξη μέσω του πεδίου των συχνοτήτων, με το θεώρημα της συνέλιξης: % y = IDFT(Fx.Fh) y = convolution_freq(x,h); % (γ) Απεικόνιση των αποτελεσμάτων y1 και y για σύγκριση: disp('convolution (directly in time domain)'); y1 disp('convolution (through frequency domain)'); y Αποτελέσματα Convolution (directly in time domain) y1 = Convolution (through frequency domain) y = e e-016

65 Συνέλιξη στο πεδίο των συχνοτήτων Εργαστηριακές ασκήσεις Άσκηση 7.3α: Εξομάλυνση καρδιογραφικού σήματος. Δημιουργήστε ένα πρόγραμμα (program73a.m), το οποίο να προκαλεί εξομάλυνση (smoothing) σε ένα καρδιογραφικό σήμα. Η εξομάλυνση πρέπει να πραγματοποιείται με τη συνέλιξη ενός συστήματος κρουστικής απόκρισης ίσης με [ ] σε ένα τμήμα ενός προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β). Η συνέλιξη πρέπει να πραγματοποιείται μέσω του πεδίου των συχνοτήτων (χρήση συνάρτησης convolution_freq.m). Ακολουθήστε τα παρακάτω βήματα: (i) Δημιουργείστε ένα φίλτρο εξομάλυνσης στο πεδίο του χρόνου με κρουστική απόκριση ίση με [ ]. (ii) Φορτώστε το καρδιογραφικό σήμα 'ecg.txt' από το δίσκο σε έναν πίνακα (πρέπει να βρίσκεται στο Current Directory). (iii) Για λόγους ταχύτητας, επιλέξτε μόνο ένα μικρό κομμάτι του σήματος, π.χ. τις χρονικές στιγμές από 50 έως 50, αποθηκεύοντάς τις σε έναν άλλο πίνακα για τη συνέχεια της άσκησης. (iii) Πραγματοποιείστε τη συνέλιξη του φίλτρου με το τμήμα του καρδιογραφικού σήματος μέσω του πεδίου των συχνοτήτων χρησιμοποιώντας το θεώρημα συνέλιξης (δηλ. χρησιμοποιώντας τη συνάρτηση convolution_freq.m). (iv) Απεικονείστε το αρχικό και το εξομαλυμένο σήμα στους ίδιους άξονες, χρησιμοποιώντας διαφορετικά χρώματα. Σημείωση: Το παραγόμενο σήμα της συνέλιξης έχει διπλάσιο μήκος από το αναμενόμενο, λόγω του διπλασιασμού του μήκους των σημάτων (επαυξάνοντας με 0). Για το λόγο αυτό, μπορεί κανείς να διατηρήσει μόνο το πρώτο μισό του παραγόμενου σήματος. Το αποτέλεσμα πρέπει να είναι όπως στο παρακάτω σχήμα: Αποτέλεσμα του program73a.m Σήμα εισόδου Φιλτραρισμένο σήμα Απαιτούμενα αρχεία για το program73a.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). dft.m.m: Συνάρτηση διάκριτου μετασχηματισμού Fourier (Εργασία 5.α). idft.m.m: Συνάρτηση αντίστροφου διάκριτου μετασχηματισμού Fourier (Εργασία 5.β). convolution_freq.m: Συνάρτηση συνέλιξης μέσω πεδίου συχνοτήτων (Εργασία 7.β)

66 66 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 7.3β: Υπολογισμός συσχέτισης με χρήση του θεωρήματος της συσχέτισης: Με τη βοήθεια του θεωρήματος της συσχέτισης και με μικρές τροποποιήσεις του προγράμματος program7a.m (Εργασία 7.α), κατασκευάστε πρόγραμμα (program73b.m), στο οποίο να υ- πολογίζεται η συσχέτιση μεταξύ δύο σημάτων με τη βοήθεια του θεωρήματος της συσχέτισης. Να ληφθούν υπ όψιν οι σημειώσεις για την κατασκευή του προγράμματος program7a.m (Εργασία 7.α), με τη διαφορά ότι κατά το διπλασιασμό του μήκους των δύο σημάτων επαυξάνοντας με 0 (σημείωση ) το ένα σήμα πρέπει να επαυξηθεί προς τα δεξιά, ενώ το άλλο προς τ αριστερά (μπορείτε να εξηγήσετε γιατί;). Απαιτούμενες συναρτήσεις: correlation.m (Εργασία 4.β), dft.m και idft.m (Εργασίες 5.α και 5.β). Άσκηση 7.3γ: Κατασκευή και χρήση συνάρτησης για τον υπολογισμό της συσχέτισης μέσω του πεδίου των συχνοτήτων: Βασιζόμενοι στο πρόγραμμα program73b.m (Άσκηση 7.3β), κατασκευάστε το αρχείο συναρτήσεων correlation_freq.m, για τον υπολογισμό της συσχέτισης μέσω του πεδίου των συχνοτήτων. Στη συνέχεια, χρησιμοποιήστε στο Command Window με απλά σήματα τη συνάρτηση που κατασκευάσατε (correlation_freq.m), καθώς και την correlation.m (Εργασία 4.β) για να διαπιστώσετε την ταύτιση των αποτελεσμάτων τους.

67 8 Φιλτράρισμα στο πεδίο των συχνοτήτων Σε αυτήν την ενότητα θα εξοικειωθείτε με την υλοποίηση των βασικών ψηφιακών φίλτρων στο πεδίο των συχνοτήτων, και συγκεκριμένα θα δείτε: τον τρόπο υλοποίησης βασικών ψηφιακών φίλτρων (Ιδεώδες, Butterworth, Εκθετικό) στο πεδίο των συχνοτήτων, σε κάθε μία από τις βασικές μορφές τους (Low-pass, High-pass, Band-Reject, Band-Pass), και τον τρόπο με τον οποίο γίνεται το φιλτράρισμα ενός ψηφιακού σήματος στο πεδίο των συχνοτήτων, χρησιμοποιώντας τα παραπάνω φίλτρα και το θεώρημα της συνέλιξης. 8.1 Συνοπτική θεωρία Φιλτράρισμα σήματος x(n) = συνέλιξη του σήματος x(n) με ένα ειδικά σχεδιασμένο σήμα h(n) (που ονομάζεται φίλτρο), με σκοπό την αποκοπή ή την ενίσχυση συγκεκριμένων περιοχών συχνοτήτων του x(n). Φιλτράρισμα σήματος στο πεδίο των συχνοτήτων = όταν το φίλτρο δίνεται απ ευθείας στο πεδίο των συχνοτήτων ( Fh( k )). Τότε, το φιλτράρισμα (η συνέλιξη του σήματος με το φίλτρο) εκτελείται σύμφωνα με το θεώρημα της συνέλιξης και τη σχέση: y( n) IDFT Fx( k) Fh( k) όπου Fx( k ) ο μετασχηματισμός Fourier του x(n). Είσοδος: x(n) Φίλτρο: DFT. IDFT Έξοδος: y(n) Φίλτρα μηδενικής φάσης (zero-shift phase): Στην πράξη θα εργαστούμε με φίλτρα στο πεδίο των συχνοτήτων τα οποία έχουν μόνο πραγματικό μέρος ( Fh( k) RFh( k) ). Αυτό σημαίνει ότι το μιγαδικό μέρος αυτών των φίλτρων είναι μηδέν, κατά συνέπεια ταυτίζονται με το φάσμα πλάτους τους, ενώ επίσης η φάση τους είναι μηδέν ( ( k) 0 ): Φίλτρα μηδενικής φάσης: ( k) 0, IFh( k) 0, Fh( k) RFh( k) Fh( k) Στην επόμενη σελίδα βρίσκονται οι μαθηματικές σχέσεις ορισμού των συνηθέστερων φίλτρων μηδενικής φάσης που χρησιμοποιούνται για φιλτράρισμα σημάτων στο πεδίο των συχνοτήτων:

68 68 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 1, Fh( k) 0, Ιδεώδη φίλτρα Φίλτρα Butterworth Εκθετικά φίλτρα Low-pass: Αποκοπή υψηλών συχνοτήτων (π.χ. θορύβου) f co = συχνότητα αποκοπής (cut-off frequency) k f 1 co Fh( k) n Fh( k) e k f k co 1 f co n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο τείνει προς το ιδεώδες) n k ln f co n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο τείνει προς το ιδεώδες) 0, k f Fh( k) 1, k f co High-pass: Αποκοπή χαμηλών συχνοτήτων f co = συχνότητα αποκοπής (cut-off frequency) 1 Fh( k) n Fh( k) fco 1 co k n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο τείνει προς το ιδεώδες) e n f ln co k n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο τείνει προς το ιδεώδες) Band-Reject: Αποκοπή μέσων συχνοτήτων d = κέντρο συχνοτήτων αποκοπής (μετατόπιση προς τα δεξιά κατά d, σε σχέση με το high-pass) w 1, k d 1 f n w w ln Fh( k) 0, d k d Fh( k) co w 1 1, k d kd n Fh( k) e fco kd w = εύρος συχνοτήτων αποκοπής n = βαθμός φίλτρου n = βαθμός φίλτρου Band-Pass: Διέλευση μόνο μέσων συχνοτήτων d = κέντρο συχνοτήτων διέλευσης (μετατόπιση προς τα δεξιά κατά d, σε σχέση με το low-pass) w 0, k d n 1 kd w w ln Fh( k) 1, d k d Fh( k) w 1 0, k d f n Fh( k) e co kd fco w = εύρος συχνοτήτων αποκοπής n = βαθμός φίλτρου n = βαθμός φίλτρου

69 Φιλτράρισμα στο πεδίο των συχνοτήτων Εργασίες κατανόησης Ένα ψηφιακό φίλτρο στο πεδίο των συχνοτήτων σχεδιάζεται από k=0 έως k=n/, και από N/ έως N επαναλαμβάνεται το ίδιο (λόγω του θεωρήματος του συζυγούς μιγαδικού). Αυτό στην πράξη σημαίνει πως ό,τι συμβαίνει για κάποια συχνότητα k, θα συμβαίνει και για την N-k. Αυτή η παρατήρηση θα μας βοηθήσει να κατασκευάσουμε τον κώδικα για την υλοποίηση των ψηφιακών φίλτρων. Εργασία 8.α: Δημιουργία συναρτήσεων φίλτρων: Δημιουργείστε τις συναρτήσεις που ακολουθούν, οι οποίες υλοποιούν τα βασικά ψηφιακά φίλτρα (Ιδεώδες, Butterworth, Εκθετικό), σε κάθε μία από τις βασικές μορφές τους (Low-pass, High-pass, Band-Reject, Band-Pass). Ιδεώδες (ideal) φίλτρο (Low-pass και High-pass): Οι σχέσεις των low-pass και high-pass ιδεωδών φίλτρων παίρνουν την εξής μορφή, ώστε ό,τι συμβαίνει για κάποια συχνότητα k, να συμβαίνει και για την N-k: Low-pass: 1, για k fco (ή N k fco) Fh( k) 0, αλλού όπου f co = συχνότητα αποκοπής (cut-off frequency). High-pass: 0, για k fco (ή N k fco) Fh( k) 1, αλλού όπου f co = συχνότητα αποκοπής (cut-off frequency). filter_ideal_lowpass.m function Fh = filter_ideal_lowpass(n,fco) % Ideal Low-pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<=fco N-k<=fco, Fh(k+1) = 1; else Fh(k+1) = 0; filter_ideal_highpass.m function Fh = filter_ideal_highpass(n,fco) % Ideal High-pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<=fco N-k<=fco, Fh(k+1) = 0; else Fh(k+1) = 1;

70 70 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Ιδεώδες (ideal) φίλτρο (Band-Reject και Band-Pass): Οι σχέσεις των band-reject και band-pass ιδεωδών φίλτρων παίρνουν την εξής μορφή, ώστε ό,τι συμβαίνει για κάποια συχνότητα k, να συμβαίνει και για την N-k: Band-Reject: w w 1, k d (ή N k d ) Fh( k) 0, αλλού w w 1, k d (και N k d ) όπου d = κέντρο συχνοτήτων αποκοπής (μετατόπιση προς τα δεξιά σε σχέση με το high-pass) και w = εύρος συχνοτήτων αποκοπής Band-Pass: w w 0, k d (ή N k d ) Fh( k) 1, αλλού w w 0, k d (και N k d ) όπου d = κέντρο συχνοτήτων διέλευσης (μετατόπιση προς τα δεξιά σε σχέση με το low-pass) και w = εύρος συχνοτήτων διέλευσης filter_ideal_bandreject.m function Fh = filter_ideal_bandreject(n,d,w) % Ideal Band-Reject filter % N = filter length (must be equal the signal length) % d = center of the filter % w = width of the filter for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if (k<=d-w/ N-k<=d-w/), Fh(k+1) = 1; elseif (k>=d+w/ & N-k>=d+w/), Fh(k+1) = 1; else Fh(k+1) = 0; filter_ideal_bandpass.m function Fh = filter_ideal_bandpass(n,d,w) % Ideal Band-Pass filter % N = filter length (must be equal the signal length) % d = center of the filter % w = width of the filter for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if (k<=d-w/ N-k<=d-w/), Fh(k+1) = 0; elseif (k>=d+w/ & N-k>=d+w/), Fh(k+1) = 0; else Fh(k+1) = 1;

71 Φιλτράρισμα στο πεδίο των συχνοτήτων 71 Butterworth φίλτρο (Low-pass και High-pass): Οι σχέσεις των low-pass και high-pass φίλτρων Butterworth παίρνουν την εξής μορφή, ώστε ό,τι συμβαίνει για κάποια συχνότητα k, να συμβαίνει και για την N-k: Low-pass: 1 Fh( k) 1 1 k f co 1 co Nk f n n, για, για k N k όπου f co = συχνότητα αποκοπής (cut-off frequency) και n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) N High-pass: 1 Fh( k) 1 1 f k co 1 fco Nk n n, για, για k N k όπου f co = συχνότητα αποκοπής (cut-off frequency) και n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) N Παρατήρηση: Η σημασία ττης fco στο φίλτρο Butterworth είναι ότι για συχνότητα ίση με την fco, η τιμή του φίλτρου έχει υποδιπλασιαστεί (όπως εύκολα αποδεικνύεται από την εξίσωση του φίλτρου Butterworth). filter_butterworth_lowpass.m function Fh = filter_butterworth_lowpass(n,fco,n) % Butterworth Low-pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = 1 / ( 1+(k/fco)^(*n) ); else Fh(k+1) = 1 / ( 1+((N-k)/fco)^(*n) ); filter_butterworth_highpass.m function Fh = filter_butterworth_highpass(n,fco,n) % Butterworth Low-pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = 1 / ( 1+(fco/k)^(*n) ); else Fh(k+1) = 1 / ( 1+(fco/(N-k))^(*n) );

72 7 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Butterworth φίλτρο (Band-Reject και Band-Pass): Οι σχέσεις των band-reject και band-pass φίλτρων Butterworth παίρνουν την εξής μορφή, ώ- στε ό,τι συμβαίνει για κάποια συχνότητα k, να συμβαίνει και για την N-k: Band-Reject: 1 Fh( k) 1 1 fco kd 1 n fco N kd, για n, για k N k όπου f co = συχνότητα αποκοπής (cut-off frequency), n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) και d = κέντρο συχνοτήτων αποκοπής (μετατόπιση προς τα δεξιά σε σχέση με το high-pass) Band-Pass: 1 Fh( k) 1 1 kd f co 1 co n N kd f, για n, για k N k όπου f co = συχνότητα αποκοπής (cut-off frequency), n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) και d = κέντρο συχνοτήτων διέλευσης (μετατόπιση προς τα δεξιά σε σχέση με το low-pass) N N filter_butterworth_bandreject.m function Fh = filter_butterworth_bandreject(n,fco,n,d) % Butterworth Band-Reject filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree % d = shift for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = 1 / ( 1+(fco/(k-d))^(*n) ); else Fh(k+1) = 1 / ( 1+(fco/(N-k-d))^(*n) ); filter_butterworth_bandpass.m function Fh = filter_butterworth_bandpass(n,fco,n,d) % Butterworth Band-Pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree % d = shift for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = 1 / ( 1+((k-d)/fco)^(*n) ); else Fh(k+1) = 1 / ( 1+((N-k-d)/fco)^(*n) );

73 Φιλτράρισμα στο πεδίο των συχνοτήτων 73 Εργασία 8.β: Δημιουργία συνάρτησης φιλτραρίσματος: Κατασκευάστε κατάλληλη συνάρτηση (convolution_freq_filter0.m) η οποία να εφαρμόζει ένα φίλτρο μηδενικής φάσης (φίλτρο χωρίς φανταστικό μέρος) σε ένα σήμα (δηλαδή να υπολογίζει τη συνέλιξη ενός πραγματικού σήματος στο πεδίο του χρόνου x(n) με ένα πραγματικό φίλτρο στο πεδίο των συχνοτήτων Fh(x)): Σημείωση:Η εξίσωση του μήκους των σημάτων (καθώς ο διπλασιασμός τους με μηδενικά) δεν έχουν νόημα στην περίπτωση αυτή, διότι το φίλτρο δεν είναι γνωστό στο πεδίο του χρόνου. Α- ντίθετα, κατασκευάζουμε το φίλτρο απευθείας στο πεδίο των συχνοτήτων, φροντίζοντας να έχει ίσο μήκος με το σήμα. Απαιτούμενες συναρτήσεις: dft.m και idft.m (Εργασία 5.γ). convolution_freq_filter0.m function y = convolution_freq_filter0(x,rfh) % x = σήμα εισόδου (πραγματικό μέρος) στο πεδίο του χρόνου % RFh = φίλτρο (πραγματικό μέρος) στο πεδίο των συχνοτήτων % (Το RFh πρέπει να έχει δημιουργηθεί έτσι ώστε να έχει ίδιο μήκος με το x) % y = σήμα εξόδου (πραγματικό μέρος) στο πεδίο του χρόνου % % Συνέλιξη (μέσω του πεδίου των συχνοτήτων, με το θεώρημα της συνέλιξης): % y = IDFT(Fx.Fh) % όπου Fx = DFT(x) % και Fh = φίλτρο αποκοπής ή διέλευσης συχνοτήτων % % DFT(x): Μετασχηματισμός Fourier του x [RFx IFx] = dft(x); % Fx.Fh: Γινόμενο των DFT for k=1:length(rfx) RFy(k) = RFx(k)*RFh(k); % (πραγματικό μέρος) IFy(k) = IFx(k)*RFh(k); % (φανταστικό μέρος) % y=idft(fx.fh): Συνέλιξη (με χρήση του θεωρήματος συνέλιξης) [Ry Iy] = idft(rfy,ify); % Σήμα εξόδου (το IFy είναι 0, επειδή τόσο το σήμα εισόδου όσο % και το φίλτρο έχουν μόνο πραγματικό μέρος.) y = Ry;

74 74 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Εργασία 8.γ: Δημιουργία προγράμματος για επίδειξη φιλτραρίσματος στο πεδίο των συχνοτήτων: Δημιουργήστε και εκτελέστε τα προγράμματα που ακολουθούν για επίδειξη φιλτραρίσματος, στα οποία: (i) δημιουργείται ένα σύνθετο σήμα από 4 ημιτονοειδή σήματα γνωστών συχνοτήτων/πλάτους (ii) επιλέγεται ένα φίλτρο καλώντας την κατάλληλη συνάρτηση που το δημιουργεί, (iii) εκτελείται φιλτράρισμα του σύνθετου σήματος με το φίλτρο που επιλέχθηκε, (iv) απεικονίζεται το φίλτρο, το αρχικό σήμα καθώς και το αποτέλεσμα του φιλτραρίσματος, μαζί με τα αντίστοιχα φάσματα πλάτους στο πεδίο των συχνοτήτων. α) Τα program8a_1.m και program8a_.m αφορούν στα Ιδεώδη φίλτρα (low-pass/highpass και band-reject/band-pass αντίστοιχα). β) Ta program8b_1.m και program8b_.m αφορούν στα φίλτρα Butterworth (lowpass/high-pass και band-reject/band-pass αντίστοιχα). Σημείωση: Απαιτούνται οι συναρτήσεις δημιουργίας των φίλτρων (filter_.m, Εργασία 8.α) και η συνάρηση εφαρμογής των φίλτρων (convolution_freq_filter0.m, Εργασία 8.β). Πρόγραμμα program8a_1.m Εφαρμογή Ιδεωδών φίλτρων low-pass και high-pass: program8a_1.m clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% IDEAL LOW-PASS & HIGH-PASS FILTERING %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal N = 100; % Μήκος σήματος A1 = 10; A = 4; A3 = ; A4 = ; % Πλάτη συνιστωσών σημάτων f1 = 1; f = 5; f3 = 30; f4 = 40; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N) + A4*sin(*pi*n*f4/N); % Low-pass Ideal filter fco1 = 0; Fh1 = filter_ideal_lowpass(n,fco1); y1 = convolution_freq_filter0(x,fh1); % High-pass Ideal filter fco = 0; Fh = filter_ideal_highpass(n,fco); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy1 IFy1]= dft(y1); for k=1:n, Ay1(k) = sqrt(rfy1(k)^+ify1(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^);

75 Φιλτράρισμα στο πεδίο των συχνοτήτων 75 % Plots n=[0:n-1]; k=[0:n-1]; subplot(4,,1); hold on; stem(k,fh1); plot([n/ N/],[0 max(fh1)],'k--','linewidth',); text(n/,max(fh1)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring = sprintf('low-pass Ideal filter (fco=%d)',fco1); title(titlestring); subplot(4,,); hold on; stem(k,fh); plot([n/ N/],[0 max(fh)],'k--','linewidth',); text(n/,max(fh)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring = sprintf('high-pass Ideal filter (fco=%d)',fco); title(titlestring); subplot(4,,3); hold on; grid on; plot(n,x); plot(n,y1,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,4); hold on; grid on; plot(n,x); plot(n,y,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,5); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,6); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c', 'BackgroundColor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,7); hold on; stem(k,ay1,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c', 'BackgroundColor','w'); xlabel('frequency (k)'); leg('low-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,8); hold on; stem(k,ay,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c', 'BackgroundColor','w'); xlabel('frequency (k)'); leg('high-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]);

76 76 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Αποτελέσματα Παρατηρήσεις: Στο πρόγραμμα αυτό δημιουργήσαμε ένα σύνθετο σήμα που περιείχε δύο χαμηλές συχνότητες (1 και 5) και δύο υψηλές (30 και 40). Στη συνέχεια, φιλτράραμε το σήμα με Ιδεώδες φίλτρο lowpass και high-pass (με f co =0 και στις περιπτώσεις). Όπως αναμενόταν, στο φιλτράρισμα low-pass κόπηκαν οι υψηλές συχνότητες (για την ακρίβεια, οι υψηλότερες της f co, δηλ. η 30 και η 40) ενώ παρέμειναν οι χαμηλές (1 και 5). Το αποτέλεσμα μπορούμε να το δούμε τόσο στο φάσμα πλάτους, όσο και στη μορφή του φιλτραρισμένου σήματος, όπου φαίνεται μια αργή ταλάντωση μιας περιόδου (f=1) πάνω στην οποία υπάρχει μια δεύτερη ταλάντωση 5 περιόδων (f=5), χωρίς τις μικρές απότομες υψίσυχνες κορυφές που υπάρχουν στο αρχικό σήμα και που οφείλονται στις υψηλές συχνότητες 30 και 40. Αντίθετα, στο φιλτράρισμα high-pass κόπηκαν οι χαμηλότερες της f co συχνότητες (1 και 5) και παρέμειναν οι υψηλές (30 και 40). Το αποτέλεσμα μπορούμε να το δούμε τόσο στο φάσμα πλάτους, όσο και στη μορφή του φιλτραρισμένου σήματος, όπου φαίνεται ένα σήμα με γρήγορες αυξομειώσεις, που οφείλονται στις υψηλές συχνότητες 30 και 40.

77 Φιλτράρισμα στο πεδίο των συχνοτήτων 77 Πρόγραμμα program8a_.m Εφαρμογή Ιδεωδών φίλτρων band-reject και band-pass: program8a_.m clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% IDEAL BAND-REJECT & BAND-PASS FILTERING %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal N = 00; % Μήκος σήματος A1 = 10; A = 4; A3 = 4; A4 = ; % Πλάτη συνιστωσών σημάτων f1 = 1; f = 30; f3 = 3; f4 = 50; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N) + A4*sin(*pi*n*f4/N); % Band-Reject Ideal filter d1 = 30; w1=0; Fh1 = filter_ideal_bandreject(n,d1,w1); y1 = convolution_freq_filter0(x,fh1); % Band-Pass Ideal filter d = 30; w=0; Fh = filter_ideal_bandpass(n,d,w); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy1 IFy1]= dft(y1); for k=1:n, Ay1(k) = sqrt(rfy1(k)^+ify1(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Plots n=[0:n-1]; k=[0:n-1]; subplot(4,,1); hold on; stem(k,fh1); plot([n/ N/],[0 max(fh1)],'k--','linewidth',); text(n/,max(fh1)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring = sprintf('band-reject Ideal filter (w=%d, d=%d)',w1,d1); title(titlestring); subplot(4,,); hold on; stem(k,fh); plot([n/ N/],[0 max(fh)],'k--','linewidth',); text(n/,max(fh)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring = sprintf('band-pass Ideal filter (w=%d, d=%d)',w,d); title(titlestring); subplot(4,,3); hold on; grid on; plot(n,x); plot(n,y1,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal');

78 78 Εργαστηριακές ασκήσεις επεξεργασίας σήματος subplot(4,,4); hold on; grid on; plot(n,x); plot(n,y,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,5); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,6); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c', 'BackgroundColor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,7); hold on; stem(k,ay1,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c', 'BackgroundColor','w'); xlabel('frequency (k)'); leg('band-reject filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,8); hold on; stem(k,ay,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c', 'BackgroundColor','w'); xlabel('frequency (k)'); leg('band-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]);

79 Φιλτράρισμα στο πεδίο των συχνοτήτων 79 Αποτελέσματα Παρατηρήσεις: Στο πρόγραμμα αυτό δημιουργήσαμε ένα σύνθετο σήμα που περιείχε δύο «ακραίες» συχνότητες (μια πολύ χαμηλή, 1, και μια πολύ υψηλή, 50) και δύο ενδιάμεσες (30 και 3). Στη συνέχεια, φιλτράραμε το σήμα με ideal φίλτρο band-reject και band-pass (με κέντρο συχνοτήτων αποκοπής/διέλευσης d=30 και εύρος συχνοτήτων αποκοπής/διέλευσης w=0, δηλαδή το εύρος των συχνοτήτων αποκοπής/διέλευσης ήταν από 0 έως 40). Όπως αναμενόταν, στο φιλτράρισμα band-reject, κόπηκαν οι ενδιάμεσες συχνότητες 30 και 3 και παρέμειναν οι ακραίες 1 και 50. Το αποτέλεσμα μπορούμε να το δούμε τόσο στο φάσμα πλάτους, όσο και στη μορφή του φιλτραρισμένου σήματος (μια αργή ταλάντωση μιας περιόδου (f=1) στην οποία υπάρχει μια δεύτερη υψίσυχνη ταλάντωση, η f=50). Αντίθετα, στο φιλτράρισμα band-pass παρέμειναν οι ενδιάμεσες συχνότητες 30 και 3 ενώ κόπηκαν οι δύο ακραίες. Το αποτέλεσμα μπορούμε να το δούμε τόσο στο φάσμα πλάτους, όσο και στη μορφή του φιλτραρισμένου σήματος (μορφή διακροτήματος, που παράγεται από δύο συχνότητες που είναι πολύ κοντά η μία στην άλλη, όπως οι 30 και 3).

80 80 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Πρόγραμμα program8b_1.m Εφαρμογή φίλτρων Butterworth low-pass και high-pass: program8b_1.m clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% BUTTERWORTH LOW-PASS & HIGH-PASS FILTERING %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal N = 100; % Μήκος σήματος A1 = 10; A = 4; A3 = ; A4 = ; % Πλάτη συνιστωσών σημάτων f1 = 1; f = 5; f3 = 30; f4 = 40; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N) + A4*sin(*pi*n*f4/N); % Low-pass Butterworth filter fco1 = 5; n1 = 3; Fh1 = filter_butterworth_lowpass(n,fco1,n1); y1 = convolution_freq_filter0(x,fh1); % High-pass Butterworth filter fco = 5; n = 3; Fh = filter_butterworth_highpass(n,fco,n); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy1 IFy1]= dft(y1); for k=1:n, Ay1(k) = sqrt(rfy1(k)^+ify1(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Plots n=[0:n-1]; k=[0:n-1]; subplot(4,,1); hold on; stem(k,fh1); plot([n/ N/],[0 max(fh1)],'k--','linewidth',); text(n/,max(fh1)/,'n/','horizontalalignment','c','backgroundcolor','w'); plot([0 fco1],[fh1(fco1+1) Fh1(fco1+1)],'k-','LineWidth',1.5); plot([fco1 fco1],[0 Fh1(fco1+1)],'k-','LineWidth',1.5); xlabel('frequency (k)'); titlestring = sprintf('low-pass Butterworth filter (fco=%d,n=%d)',fco1,n1); title(titlestring); subplot(4,,); hold on; stem(k,fh); plot([n/ N/],[0 max(fh)],'k--','linewidth',); text(n/,max(fh)/,'n/','horizontalalignment','c','backgroundcolor','w'); plot([0 fco],[fh(fco+1) Fh(fco+1)],'k-','LineWidth',1.5); plot([fco fco],[0 Fh(fco+1)],'k-','LineWidth',1.5); xlabel('frequency (k)'); titlestring = sprintf('high-pass Butterworth filter(fco=%d,n=%d)',fco,n); title(titlestring); subplot(4,,3); hold on; plot(n,x); plot(n,y1,'r'); grid on;

81 Φιλτράρισμα στο πεδίο των συχνοτήτων 81 xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,4); hold on; grid on; plot(n,x); plot(n,y,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,5); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,6); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,7); hold on; stem(k,ay1,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('low-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,8); hold on; stem(k,ay,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('high-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]);

82 8 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Αποτελέσματα Παρατηρήσεις: Στο πρόγραμμα αυτό εργαστήκαμε όπως ακριβώς και στο program8a_1.m, με τη διαφορά ότι χρησιμοποιήσαμε φίλτρο Butterworth αντί για το Ιδεώδες. Τα αποτελέσματα είναι παρόμοια με του Ιδεώδους φίλτρου, με τη διαφορά ότι, λόγω της ομαλής αποκοπής των συχνοτήτων, οι συχνότητες 30 και 40 δεν έχουν αποκοπεί τελείως στο low-pass, όπως μπορούμε να δούμε στο φάσμα πλάτους (σε αντίθεση με το Ιδεώδες, όπου η αποκοπή είναι πλήρης μετά την f co ). Αντίθετα, στο high-pass οι συχνότητες 30 και 40 έχουν παραμείνει (όπως είναι αναμενόμενο), αλλά το πλάτος τους είναι κάπως ελαττωμένο.

83 Φιλτράρισμα στο πεδίο των συχνοτήτων 83 Πρόγραμμα program8b_.m Εφαρμογή φίλτρων Butterworth band-reject και band-pass: program8b_.m clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% BUTTERWORTH BAND-REJECT & BAND-PASS FILTERING %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal N = 00; % Μήκος σήματος A1 = 10; A = 4; A3 = 4; A4 = ; % Πλάτη συνιστωσών σημάτων f1 = 1; f = 30; f3 = 3; f4 = 50; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N) + A4*sin(*pi*n*f4/N); % Band-Reject Butterworth filter fco1 = 5; n1 = 3; d1 = 30; Fh1 = filter_butterworth_bandreject(n,fco1,n1,d1); y1 = convolution_freq_filter0(x,fh1); % Band-Pass Butterworth filter fco = 5; n = 3; d = 30; Fh = filter_butterworth_bandpass(n,fco,n,d); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy1 IFy1]= dft(y1); for k=1:n, Ay1(k) = sqrt(rfy1(k)^+ify1(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Plots n=[0:n-1]; k=[0:n-1]; subplot(4,,1); hold on; stem(k,fh1); plot([n/ N/],[0 max(fh1)],'k--','linewidth',); text(n/,max(fh1)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring=sprintf('band-reject Butterworth filter (fco=%d, n=%d, d=%d)',fco1,n1,d1); title(titlestring); subplot(4,,); hold on; stem(k,fh); plot([n/ N/],[0 max(fh)],'k--','linewidth',); text(n/,max(fh)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring= sprintf('band-pass Butterworth filter (fco=%d, n=%d, d=%d)',fco,n,d); title(titlestring); subplot(4,,3); hold on; grid on; plot(n,x); plot(n,y1,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal');

84 84 Εργαστηριακές ασκήσεις επεξεργασίας σήματος subplot(4,,4); hold on; grid on; plot(n,x); plot(n,y,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,5); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,6); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,7); hold on; stem(k,ay1,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('band-reject filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,8); hold on; stem(k,ay,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('band-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]);

85 signal signal Φιλτράρισμα στο πεδίο των συχνοτήτων 85 Αποτελέσματα 1 Band-Reject Butterworth filter (fco=5, n=3, d=30) 1 Band-Pass Butterworth filter (fco=5, n=3, d=30) 0.5 N/ 0.5 N/ frequency (k) frequency (k) 0 10 Original signal Filtered signal 0 10 Original signal Filtered signal time (n) time (n) 5 4 Original Amplitude Spectrum 5 4 Original Amplitude Spectrum 3 N/ 3 N/ frequency (k) frequency (k) 5 4 Band-Reject filtered Amplitude Spectrum 5 4 Band-Pass filtered Amplitude Spectrum 3 N/ 3 N/ frequency (k) frequency (k) Παρατηρήσεις: Στο πρόγραμμα αυτό εργαστήκαμε όπως ακριβώς και στο program8a_.m, με τη διαφορά ότι χρησιμοποιήσαμε φίλτρο Butterworth αντί για το Ιδεώδες. Τα αποτελέσματα είναι παρόμοια με του Ιδεώδους φίλτρου, με μικρές διαφορές. Για παράδειγμα, ενώ στο Ιδεώδες band-reject φίλτρο η συχνότητα f=50 έχει παραμείνει, εδώ έχει ελαττωθεί σημαντικά, όπως μπορούμε να δούμε στο φάσμα πλάτους. Επίσης, ενώ στο Ιδεώδες band-pass οι συχνότητες 1 και 50 είχαν «κοπεί», εδώ παραμένουν, αλλά με ελαττωμένο πλάτος.

86 AFx x 86 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 8.3 Εργαστηριακές ασκήσεις Άσκηση 8.3α: Αφαίρεση θορύβου από ηλεκτροκαρδιογραφικό σήμα: Ο σκοπός της Άσκησης αυτής είναι η αφαίρεση του θορύβου των υψηλών συχνοτήτων από ένα ηλεκτροκαρδιογραφικό σήμα (όπως στην Άσκηση 6.3α) χρησιμοποιώντας φίλτρα low-pass. Θα χρησιμοποιήσουμε το ιδεώδες φίλτρο καθώς και το Butterworth, για να δούμε τις διαφορές μεταξύ τους. Για να επιλέξουμε την κατάλληλη συχνότητα αποκοπής, θα απεικονίσουμε το σήμα στο πεδίο των συχνοτήτων, ώστε να εντοπίσουμε οπτικά πού βρίσκονται οι υψηλές συχνότητες. Απαιτούμενες συναρτήσεις: sread.m (Εργασία 1.δ), filter_butterworth_lowpass.m και filter_butterworth_lowpass.m (Εργασία 8.α), convolution_freq_filter0.m (Εργασία 8.β). - Κατασκευάστε πρόγραμμα (program83a.m) στο οποίο να κάνετε τα εξής: α) Φορτώστε το σήμα ecg.txt από το δίσκο (sread.m, Εργασία 1.δ). Επειδή το σήμα έχει μεγάλο μήκος (4355 τιμές, βλ. και Άσκηση 6.3α), να χρησιμοποιήσετε μόνο ένα τμήμα του (π.χ. από 100 έως 1000) για επιτάχυνση των υπολογισμών: n β) Υπολογίστε το φάσμα πλάτους στο πεδίο των συχνοτήτων και απεικονίστε το k γ) Εντοπίστε (οπτικά) στο φάσμα πλάτους τη συχνότητα αποκοπής, ώστε να αποκόπτονται αρκετές υψηλές συχνότητες αλλά να παραμένουν επίσης αρκετές χαμηλότερες συχνότητες, που περιέχουν τη χρήσιμη πληροφορία του σήματος (π.χ. f co =50, βλ. κόκκινες γραμμές ανωτέρω).

87 ...με Butteworth...με Butteworth...με ιδεώδες...με ιδεώδες Πρωτότυπο Πρωτότυπο Φιλτράρισμα στο πεδίο των συχνοτήτων 87 δ) Εφαρμόστε στο σήμα τα low-pass φίλτρα ιδεώδες και Butterworth. Απεικονίστε το αποτέλεσμα στο πεδίο του χρόνου και στο πεδίο των συχνοτήτων (δημιουργήστε ένα figure με subplots, με τα σήματα στο πεδίο του χρόνου στην πρώτη στήλη και στο πεδίο των συχνοτήτων στη δεύτερη): Σήματα στο πεδίο του χρόνου Χρονικές στιγμές Σήματα στο πεδίο των συχνοτήτων (φάσματα πλάτους) Συχνότητες ε) Παρατηρείστε το αποτέλεσμα της φαρμογής των δύο φίλτρων και σχολιάστε τις διαφορές.

88 88 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 8.3β: Υποδιπλασιασμός συχνότητας μέσω φίλτρου Butterworth: Κατασκευάστε πρόγραμμα (program83b.m) στο οποίο να κάνετε τα εξής: α) Κατασκευάστε ένα σύνθετο σήμα 00 τιμών που να αποτελείται από τις συχνότητες 10 και 50, με πλάτη 4 και αντίστοιχα. β) Φιλτράρετε το παραπάνω σήμα με φίλτρο Butterworth κατάλληλης συχνότητας αποκοπής, ώστε να υποδιπλασιαστεί το πλάτος της χαμηλής συχνότητας. [Υπόδειξη: Βλ. Παρατήρηση στο φίλτρο Butterhworth, στην Εργασία 8.α.] γ) Να απεικονιστεί το αρχικό σύνθετο σήμα μεζί με το τελικό (φιλτραρισμένο) στους ίδιους άξονες στο πεδίο του χρόνου (subplot 1). Επίσης, να απεικονιστούν τα δύο σήματα στο πεδίο των συχνοτήτων (φάσματα πλάτους, subplots & 3). Άσκηση 8.3γ: Διαδοχική εφαρμογή φίλτρων: Κατασκευάστε πρόγραμμα (program83c.m) στο οποίο να κάνετε τα εξής: α) Κατασκευάστε ένα σύνθετο σήμα 00 τιμών που να αποτελείται από τις συχνότητες 10, 40 και 80 με πλάτη ίσα με 10 (όλα). β) Φιλτράρετε το παραπάνω σήμα με δύο διαδοχικά φίλτρα Butterworth κατάλληλων συχνοτήτων αποκοπής, ώστε διαδοχικά να υποδιπλασιαστεί πρώτα η χαμηλή και στη συνέχεια η υψηλή συχνότητα. [Υπόδειξη: Εφαρμόστε το δεύτερο φίλτρο στο αποτέλεσμα του πρώτου φιλτραρίσματος.] γ) Να απεικονιστεί το αρχικό σύνθετο σήμα μεζί με το τελικό στους ίδιους άξονες στο πεδίο του χρόνου (subplot 1). Επίσης, να απεικονιστούν το αρχικό και το τελικό σήμα στο πεδίο των συχνοτήτων (subplots & 3). Άσκηση 8.3δ: Κατασκευή εκθετικών φίλτρων (low-pass, high-pass, band-reject, band-pass): Κατασκευάστε συναρτήσεις που να υλοποιούν τα παρακάτω φίλτρα: εκθετικό low-pass (filter_exponential_lowpass.m), εκθετικό high-pass (filter_exponential_highpass.m), εκθετικό band-reject (filter_exponential_badreject.m) και εκθετικό band-pass (filter_exponential_bandpass.m), όπως στα φίλτρα Butterworth (Εργασία 8.α). Υπόδειξη: Γράψτε πρώτα τις μαθηματικές σχέσεις των ανωτέρω εκθετικών φίλτρων. Άσκηση 8.3ε: Προγράματα εφαρμογής των εκθετικών φίλτρων: Κατασκευάστε δύο προγράμματα (program83d_1.m και program83d_.m), στα οποία να γίνεται επίδειξη εφαρμογής των εκθετικών φίλτρων low-pass/high-pass και band-reject/bandpass αντίστοιχa, κατά το υπόδειγμα των προγραμμάτων εφαρμογής των φίλτρων Butterworth (program8b_1.m και program8b_.m, Εργασία 8.γ). Άσκηση 8.3στ: Πρόγραμμα φιλτραρίσματος με επιλογή φίλτρου από μενού: Με βάση τα προγράμματα της Εργασίας 8.γ και της Άσκησης 8.3β, κατασκευάστε ένα και μοναδικό πρόγραμμα (program83e.m) στο οποίο να μπορεί να γίνεται επιλογή του φίλτρου, μέσω ενός μενού. Υπόδειξη: Δημιουργείστε στο πρόγραμμα ένα μενού και κάντε την επιλογή της δημιουργίας του φίλτρου μέσω εντολής switch-case. Ουσιαστικά, το switch-case θα αντικαταστήσει μόνο την εντολή δημιουργίας του φίλτρου, ενώ κατά τα άλλα το πρόγραμμα θα είναι σχεδόν ίδιο με ένα από τα ανωτέρω αναφερόμένα προγράμματα (με τη διαφορά ότι θα τυπώνει 4 και όχι 8- γραφικές παραστάσεις).

89 Φιλτράρισμα στο πεδίο των συχνοτήτων 89 Παράδειγμα λειτουργίας του προγράμματος program83c.m: Αποτελέσματα του program83c.m ** FILTER SELECTION MENU ** 1. Ideal Low-Pass. Ideal High-Pass 3. Ideal Band-Reject 4. Ideal Band-Pass 5. Butterworth Low-Pass 6. Butterworth High-Pass 7. Butterworth Band-Reject 8. Butterworth Band-Pass 9. Exponential Low-Pass 10. Exponential High-Pass 11. Exponential Band-Reject 1. Exponential Band-Pass Select a filter: 5

90 9 Αποκατάσταση σήματος Σε αυτήν την ενότητα θα εξοικειωθείτε με την υλοποίηση και τη χρήση των βασικών ψηφιακών φίλτρων αποκατάστασης σήματος (Αντίστροφο, Wiener, Ισχύος). 9.1 Συνοπτική θεωρία Υποβάθμιση (degradation) σήματος = η ανεπιθύμητη μεταβολή των τιμών ενός σήματος κατά τη διέλευσή του μέσα από ένα σύστημα. Η υποβάθμιση ενός σήματος μπορεί να ο- φείλεται: (α) στην επίδραση της διάταξης καταγραφής του σήματος (η οποία περιγράφεται με την πράξη της συνέλιξης), και (β) σε τυχαίο θορύβο (π..χ ηλεκτρονικό, θερμικής κίνησης κλπ). Το τελικό υποβαθμισμένο σήμα yn ( ) δίνεται τότε από τη σχέση: όπου xn ( ) το αρχικό σήμα, y( n) x( n)* h( n) d( n) hn ( ) η κρουστική απόκριση του συστήματος και dn ( ) ο θόρυβος (που εδώ θεωρήθηκε προσθετικός και ανεξάρτητος από τη διάταξη καταγραφής). Αποκατάσταση (restoration) σήματος = η διέλευση ενός υποβαθμισμένου σήματος y(n) μέσα από κατάλληλο φίλτρο wk ( ) με σκοπό την ανάκτηση του αρχικού σήματος x(n) ή έστω μιας όσο το δυνατόν καλύτερης προσέγγισής του, x (n): x (n) = IDFT(Fy(k) Fw(k)) y(n) DFT Φίλτρο αποκατάστασης:. IDFT x (n) Η αποκατάσταση ενός σήματος γίνεται με την εφαρμογή σ αυτό κατάλληλων φίλτρων, για την αναίρεση της επίδρασης (α) τόσο της κρουστικής απόκρισης h της διάταξης καταγραφής του σήματος όσο και (β) του θορύβου d. Η πλήρης αποκατάσταση του αρχικού σήματος δεν είναι σχεδόν ποτέ δυνατή λόγω της άγνοιας διαφόρων παραγόντων, κυρίως όμως της συνάρτησης κατανομής του θορύβου. Στη συνέχεια αναπτύσσονται μέθοδοι για την εύρεση κατάλληλων φίλτρων αποκατάστασης σήματος:

91 Αποκατάσταση σήματος 91 Φίλτρα αποκατάστασης σήματος Αντίστροφο (inverse) φίλτρο: 1 Fw( k) Fh( k) Το αντίστροφο φίλτρο αποκαθιστά κυρίως την επίδραση της κρουστικής απόκρισης h της διάταξης καταγραφής του σήματος. Στο αντίστροφο φίλτρο καταλήγουμε ως εξής: Έστω: y( n) x( n)* h( n) d( n) Παίρνοντας DFT: Fy( k) Fx( k) Fh( k) Fd( k) Επιλύοντας ως προς xk ( ): Αν Fd(k)Fh(k )(αμελητέος θόρυβος): Fy( k) Fd( k) Fx( k) Fh( k) Fh( k) Fy( k) 1 Fx( k) Fy( k) Fh( k) Fh( k) Ή: Fx( k) Fy( k) Fw( k), όπου Γνωρίζοντας πλέον το Fw( k ), το αρχικό σήμα υπολογίζεται προσεγγιστικά ως: x (n) = IDFT(Fy(k) Fw(k)) 1 Fw( k) Fh( k) Σημείωση: Η hk ( ) (που απαιτείται για την εύρεση του wk ( )) θεωρείται γνωστή, καθώς μπορούμε να τη λάβουμε ως έξοδο από το σύστημα αν το τροφοδοτήσουμε με την κρουστική συνάρτηση. Από τα παραπάνω συμπεραίνουμε ότι το αντίστροφο φίλτρο είναι μια απλή προσέγγιση, που μπορεί να χρησιμοποιηθεί μόνο σε περιβάλλον χαμηλού θορύβου. Μια βελτίωση του αντίστροφου φίλτρου στις υψηλές συχνότητες, όπου ο θόρυβος είναι σχετικά υψηλός ενώ η hk ( ) έχει μικρές τιμές, προκύπτει με με την αντικατάσταση της hk ( ) από μια μικρή σταθερά C (ψευδοαντίστροφο φίλτρο): Ψευδοαντίστροφο φίλτρο: 1 Fh( k) Fw( k) 1 C αν Fh( k) C αν Fh( k) C Το ψευδοαντίστροφο φίλτρο ταυτίζεται με το αντίστροφο αν C = 0. Φίλτρο Wiener: Fh( k) 1 Fw( k) Fh( k) A Fh( k) Το φίλτρο Wiener αποκαθιστά τόσο την επίδραση της κρουστικής απόκρισης h της διάταξης καταγραφής του σήματος όσο και το θόρυβο d (έστω και κατά προσέγγιση). Στο φίλτρο Wiener καταλήγουμε θεωρητικά ως εξής: Ψάχνουμε για κατάλληλη συνάρτηση Fv η οποία, όταν εφαρμοστεί στο υποβαθμισμένο σήμα Fy να μας δώσει την επίδραση του συστήματος Fh πάνω στο αρχικό σήμα Fx (ή έστω σε μια προσέγγισή του, Fx '), χωρίς όμως την ύπαρξη του θορύβου: Fv( k) Fy( k) Fx '( k) Fh( k) ή Fv( k) Fy( k) Fx '( k) Fh( k)

92 9 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Ταυτόχρονα, θα πρέπει η προσεγγιστική λύση x ' να «απέχει» όσο το δυνατόν λιγότερο από το πραγματικό αρχικό σήμα x, δηλαδή θα πρέπει: N 1 Fx '( k) Fx( k) ελάχιστο k0 Άρα αντικαθιστώντας την F''(k): N 1 k0 Fv( k) Fy( k) Fx( k) Fh( k) Όμως y( n) x( n)* h( n) d( n) Fy( k) Fx( k) Fh( k) Fd( k), άρα: Ή: N 1 k0 k0 Fv( k) Fx( k) Fh( k) Fd( k) Fh( k) Fx( k) N 1 Fx( k) Fh( k) Fv( k) 1 Fv( k) Fd( k) Fh( k) Για να είναι ελάχιστο το ε πρέπει η παράγωγός του ως προς Fv να ισούται με το μηδέν (αυτό πρέπει να ισχύει για κάθε k, γιατί οι όροι του αθροίσματος είναι όλοι μη αρνητικοί): Fv( k) 0 Παραγωγίζοντας και λύνοντας ως προς Fv( k ) προκύπτει: Fv( k) Fh( k) Fh( k) Fd( k) Fx( k) (ή Fv( k) Fh( k), όπου Fh( k) A Fd( k) A ) Fx( k) Θεωρούμε την v μηδενικής φάσης (δηλαδή πραγματική, οπότε Fv Fv ), οπότε: Fv( k) Fy( k) Fy( k) Fh( k) Fy( k) Fx '( k) Fv( k) Fh k Fh k Fh( k) A Fh k ή, αλλιώς, Fx '( k) Fw( k) Fy( k), ( ) ( ) ( ) όπου Fh( k) 1 Fw( k) Fh( k) A Fh( k) Ο παράγοντας Fd( k) A είναι ο λόγος θορύβου προς σήμα αντίστροφος του λόγου Fx( k) σήματος προς θόρυβο (signal-to-noise ratio, SNR), ή A =. Γνωρίζοντας πλέον το Fw( k ), το αρχικό σήμα υπολογίζεται προσεγγιστικά ως: x (n) = IDFT(Fx (k)) = IDFT(Fy(k) Fw(k)).

93 Αποκατάσταση σήματος 93 Σημειώσεις: 1) Αν ο λόγος θορύβου προς σήμα Fd( k) A είναι πολύ μικρός (π.χ. στις χαμηλές συ- Fx( k) χνότητες), τότε Fh( k) 1, οπότε το φίλτρο Wiener προσεγγίζει το αντίστροφο. Fh( k) A ) Στην περίπτωση που ο λόγος θορύβου προς σήμα Fd( k) A είναι σημαντικός (π.χ. Fx( k) Fh( k) στις υψηλές συχνότητες), τότε 1, οπότε το Fx ' προκύπτει μικρότερο από Fh( k) A ότι στο αντίστροφο φίλτρο, δίνοντας μικρότερη ενίσχυση θορύβου. 1 3) Στην πράξη, ο παράγοντας αντικαθίσταται από 1 Fh( k) C, αν Fh( k) C (όπου C μια μικρή τιμή), για αποφυγή απειρισμών ή πολύ μεγάλων τιμών. Φίλτρο Ισχύος (Power ή Homomorphic): Fw( k) Fh( k) 1 Fh( k) A Fh( k) Παρόμοια με το φίλτρο Wiener, ψάχνουμε για κατάλληλη συνάρτηση Fv( k) Fy( k) Fx '( k) Fh( k) ή Fv( k) Fy( k) Fx '( k) Fh( k) v ώστε: Στην περίπτωση του φίλτρου Ισχύος απαιτούμε η συνολική ισχύς (στο πεδίο των συχνοτήτων) του προσεγγιστικού σήματος x'(k) να είναι ίση με αυτήν του αρχικού x(k), δηλαδή: N1 N1 Fx '( k) Fx( k) k0 k0 Από τις προηγούμενες σχέσεις μπορεί να υπολογιστεί ότι: Fx '( k) ή, αλλιώς, Fh( k) Fy( k) Fd( k) Fh( k) Fh( k) Fx( k) Fx '( k) Fw( k) Fy( k), όπου Fw( k) Fh( k) 1 Fh( k) A Fh( k) με Fd( k) A 1 SNR Fx( k) Γνωρίζοντας πλέον το Fw( k ), το αρχικό σήμα υπολογίζεται προσεγγιστικά ως: x (n) = IDFT(Fx (k)) = IDFT(Fy(k) Fw(k))

94 94 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Σημειώσεις: Οι σημειώσεις (1), () και (3) του φίλτρου Wiener ισχύουν και στο φίλτρο Ισχύος. 4) Επειδή το υπόριζο είναι <1, προκύπτει: Fx '(Wiener) Fx '(Power) Fx '(Inverse). Fh( k) 1 Γενικευμένο φίλτρο Wiener: Fw( k) Fh( k) A Fh( k) Τα τρία προηγούμενα φίλτρα μπορούν να γενικευτούν με την παραπάνω σχέση, όπου: Αντίστροφο φίλτρο: α=1 β=0 Φίλτρο Wiener: α=0 β=1 Φίλτρο Ισχύος: α=0.5 β=1 Fd( k) και όπου A 1 SNR ο αντίστροφος του λόγου σήματος προς θόρυβο (signalto-noise ratio, Fx( k) SNR). 1 Στην πράξη, ο παράγοντας αντικαθίσταται από 1 Fh( k) C, αν Fh( k) C0,1 (όπου C μια μικρή τιμή), για αποφυγή απειρισμών ή πολύ μεγάλων τιμών. 1 Υπολογισμός της σταθεράς A και του λόγου σήματος προς θόρυβο (signal-to-noise ratio,snr) Η παράμετρος A των φίλτρων Wiener και Ισχύος αποτελεί τον αντίστροφο του λόγου σήματος προς θόρυβο (signal-to-noise ratio, SNR): A 1 SNR, όπου SNR Fx( k) Fd( k) Ο παράγοντας Α μπορεί να προσεγγιστεί ως εξής: α) με τη μέθοδο δοκιμής και σφάλματος: Δοκιμάζονται διάφορες τιμές, και λαμβάνεται η τιμή που δίνει την καλύτερη προσέγγιση του σήματος x'(k), π.χ. η τιμή που δίνει το ελάχιστο N 1 k0 Fx '( k) Fx( k), ή το ελάχιστο N 1 k0 x '( n) x( n) β) από ένα τμήμα z του υποβαθμισμένου σήματος στο οποίο θεωρούμε ότι οι αυξομειώσεις οφείλονται μόνο σε θόρυβο (π.χ. ως z θα μπορούσε να ληφθεί η έξοδος του συστήματος για σταθερό σήμα εισόδου) και υπό την προϋπόθεση ότι οι τιμές του σήματος είναι μη αρνητικές. Τότε, o SNR προσεγγίζεται ως: 1 z i η τυπική απόκλιση των τιμών του z N όπου και i zi i η μέση τιμή των τιμών του z N Στις παραπάνω σχέσεις το σήμα y 1 μπορεί να ληφθεί είτε στο πεδίο του χρόνου z(n) είτε στο πεδίο των συχνοτήτων Fz(k).

95 Αποκατάσταση σήματος Εργασίες κατανόησης Η αποκατάσταση ενός σήματος yn ( ) γίνεται μέσω της σχέσης: x (n) = IDFT(Fy(k) Fw(k)) όπου Fy( k) DFT ( y( n)) και Fw( k ) το φίλτρο αποκατάστασης του σήματος στο πεδίο των συχνοτήτων. Εργασία 9.α: Κατασκευή συναρτήσεων φίλτρων αποκατάστασης σήματος Αντίστροφο φίλτρο: 1 Fw( k) Fh( k) Στην πράξη, το αντίστροφο φίλτρο υλοποιείται ως ψευδοαντίστροφο, δηλαδή ο παράγοντας 1 Fh( k ) αντικαθίσταται από 1 C, αν Fh( k) C (όπου C μια μικρή τιμή), για αποφυγή απειρισμών ή πολύ μεγάλων αριθμών Η συνάρτηση του αντίστροφου φίλτρου έχει εισόδους τις Fh( k ) και C και έξοδο την Fw( k ). filter_restoration_inverse.m function Fw = filter_restoration_inverse(fh,c) % Pseudo-Inverse restoration filter function % Fh = Impulse response % C = a small number % Fw = Filter for i=1:length(fh) if Fh(i)>C Fw(i) = 1/Fh(i); else Fw(i) = 1/C; Φίλτρο Wiener: Fh( k) 1 Fw( k) Fh( k) A Fh( k) Στην πράξη, ο παράγοντας 1 Fh( k ) αντικαθίσταται από 1 C, αν Fh( k) C (όπου C μια μικρή τιμή), για αποφυγή απειρισμών ή πολύ μεγάλων αριθμών. Η συνάρτηση του φίλτρου Wiener έχει εισόδους τις Fh( k ), A και C και έξοδο την Fw( k ). filter_restoration_wiener.m function Fw = filter_restoration_wiener(fh,a,c) % Wiener restoration filter function % Fh = Impulse response % A = Noise to Signal Ratio (squared) % C = a small number % Fw = Filter for i=1:length(fh) if Fh(i)>C Fw(i) = (1/Fh(i)) * (Fh(i)^/(Fh(i)^+A)); else Fw(i) = (1/C) * (Fh(i)^/(Fh(i)^+A));

96 96 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Εργασία 9.β: Πρόγραμμα επίδειξης αποκατάστασης σήματος: Κατασκευάστε κατάλληλο πρόγραμμα (program9a.m) στο οποίο: (α) να υποβαθμίζεται τεχνητά ένα σήμα και (β) το υποβαθμισμένο σήμα να αποκαθίσταται χρησιμοποιώντας τα φίλτρα που αναπτύχθηκαν στην Εργασία 9.α. Σημείωση: Απαιτούνται οι συναρτήσεις: filter_restoration_inverse.m και filter_restoration_wiener.m (Εργασία 9.α), convolution_freq_filter0.m (Εργασία 8.β), dft.m και idft.m (Εργασία 5.γ), sread.m (Εργασία 1.δ), και το τμήμα προσομοιωμένου ηλεκτροκαρδιογραφικού σήματος ecgtest.txt. program9a.m clc; clear all; close all; % Αρχικό σήμα % (Διάβασμα ηλεκτροκαρδιογραφήματος από το δίσκο) x = sread('ecgtest.txt'); % Κρουστική απόκριση συστήματος % (Δημιουργία τεχνητού συστήματος που αποκόπτει τις υψηλές συχνότητες) N = length(x); fco = 10; n = ; Fh = filter_butterworth_lowpass(n,fco,n); % Υποβάθμιση σήματος % (Συνέλιξη αρχικού σήματος με σύστημα + θόρυβος) % 1. Συνέλιξη με κρουστική απόκριση συστήματος y = convolution_freq_filter0(x,fh); %. Προσθήκη θορύβου for i=1:length(y) y(i) = y(i) + randn/5; % Επιλογή φίλτρου αποκατάστασης % (Αντίστροφο ή Wiener) filter = input('filter (1=Inverse, =Wiener)? '); switch filter case 1 C = 0.1; Fw = filter_restoration_inverse(fh,c); case C = 0.1; A = 0.05; Fw = filter_restoration_wiener(fh,a,c); % Αποκατάσταση σήματος % (Συνέλιξη υποβαθμισμένου σήματος με φίλτρο) x1 = convolution_freq_filter0(y,fw); % Γραφικές παραστάσεις % (Αρχικό σήμα, Υποβαθμισμένο σήμα, Αποκατεστημένο σήμα) hold on; plot(x,'b:'); plot(y,'b'); plot(x1,'r'); leg('original signal','degrated signal','restored signal');

97 Αποκατάσταση σήματος 97 Αποτελέσματα filter = 1 (στη γραμμή 3 του κώδικα) filter = (στη γραμμή 3 του κώδικα)

98 98 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Περιγραφή του προγράμματος program9a.m και παρατηρήσεις: Δημιουργία σήματος: Αρχικά φορτώθηκε ένα τμήμα τεχνητού ηλεκτροκαρδιογραφήματος από το δίσκο, που χρησιμοποιήθηκε ως αρχικό σήμα (x). Υποβάθμιση σήματος: Το σήμα υποβαθμίστηκε με τρόπους (y = x*h + d): Κατ αρχήν προσομοιώθηκε η δίοδος του σήματος από ένα σύστημα. Ως κρουστική απόκριση του συστήματος (h) χρησιμοποιήθηκε ένα φίλτρο low-pass, προσομοιώνοντας σύστημα το οποίο υποβαθμίζει το σήμα αποκόπτοντας τις υψηλές συχνότητες που περιέχει. Στη συνέχεια, προστέθηκε τυχαίος γκαουσσιανός θόρυβος (d). Για το θόρυβο χρησιμοποιήθηκε η συνάρτηση randn του MATLAB, η οποία παράγει τυχαίους αριθμούς που ακολουθούν την κανονική ή γκαουσσιανή κατανομή (δηλαδή, πρακτικά, θετικούς και αρνητικούς αριθμούς που έχουν μικρότερη πιθανότητα να εμφανιστούν όσο απομακρύνονται από το μηδέν). (Οι τιμές του θορύβου διαιρέθηκαν με το 5 καθώς παρατηρήσαμε ότι ο θόρυβος στο σήμα ήταν πολύ μεγάλος.) Αποκατάσταση σήματος: Στη συνέχεια το πρόγραμμα επιτρέπει την επιλογή φίλτρου αποκατάστασης (αντίστροφο ή Wiener). Εφαρμόζοντας το αντίστροφο φίλτρο, παρατηρούμε ότι η αποκατάσταση είναι πολύ κακή. Αυτό οφείλεται στο ότι το υποβαθμισμένο σήμα έχει θόρυβο (ενώ, σύμφωνα με τη θεωρία, το αντίστροφο φίλτρο «δουλεύει» καλά μόνο όταν ο θόρυβος είναι πολύ χαμηλός). Αντίθετα, εφαρμόζοντας το φίλτρο Wiener, παρατηρούμε ότι έχουμε πολύ καλή αποκατάσταση του αρχικού σήματος.

99 Αποκατάσταση σήματος Εργαστηριακές ασκήσεις Άσκηση 9.3α: Συνάρτηση φίλτρου Ισχύος: Να κατασκευαστεί συνάρτηση (filter_restoration_power.m) η οποία να υλοποιεί το φίλτρο ι- σχύος. Η συνάρτηση αυτή πρέπει να έχει να έχει εισόδους τις Fh( k ), A και C και έξοδο την wk ( ) (βλ. Συνοπτική θεωρία, παράγραφος 9.1). Άσκηση 9.3β: Συνάρτηση γενικευμένου φίλτρου Wiener: Να κατασκευαστεί συνάρτηση (filter_restoration_gwiener.m) η οποία να υλοποιεί το γενικευμένο φίλτρο Wiener. Η συνάρτηση αυτή πρέπει να έχει να έχει εισόδους τις hk ( ), α, β, A και C και έξοδο την wk ( ) (βλ. Συνοπτική θεωρία, παράγραφος 9.1), ώστε με κατάλληλες τιμές των παραμέτρων αυτών να μπορεί να αντικαταστήσει τις συναρτήσεις των φίλτρων Αντίστροφο, Wiener και Ισχύος (Εργασία 9.α και Άσκηση 9.3α). Άσκηση 9.3γ: Πρόγραμμα εφαρμογής του γενικευμένου φίλτρου Wiener: Τροποποιήστε κατάλληλα το program9a.m ώστε να κατασκευάστε ένα άλλο (program93a.m) στο οποίο να αντικαταστήσετε τις συναρτήσεις των φίλτρων Αντίστροφο, Wiener και Ισχύος με τη συνάρτηση του γενικευμένου φίλτρου Wiener. Το program93a.m πρέπει να παράγει τα ίδια αποτελέσματα με το program9a.m, με κατάλληλες τιμές των παραμέτρων α και β. Άσκηση 9.3δ: Μελέτη φίλτρων αποκατάστασης: Εκτελέστε τις παρακάτω εργασίες, χρησιμοποιώντας το πρόγραμμα program9a.m: 1. Επίδραση του θορύβου στο αντίστροφο φίλτρο: Τρέξτε το πρόγραμμα με το Inverse φίλτρο, και στη συνέχεια: α) Αυξήστε το θόρυβο (π.χ. σβήστε τη διαίρεση με το 5 στην εντολή randn). Τι παρατηρείτε; Εξηγήστε το με βάση τη θεωρία. β) Ελαττώστε το θόρυβο (π.χ. διαιρέστε την εντολή randn με 50 αντί για 5). Τι παρατηρείτε; Εξηγήστε το με βάση τη θεωρία. γ) Μηδενίστε το θόρυβο (π.χ. βάλτε σε σχόλια (%) τις γραμμές που προσθέτουν το θόρυβο). Τι παρατηρείτε; Εξηγήστε το με βάση τη θεωρία. ) Βελτιστοποίηση ανίστροφου φίλτρου: Να μεταβάλλετε τη σταθερά C ώστε να βρείτε την τιμή εκείνη που δίνει οπτικά καλύτερο α- ποτέλεσμα στο φιλτράρισμα (με μέθοδο δοκιμής και σφάλματος). Να προτείνετε έναν αντικειμενικό τρόπο (δηλ. όχι οπτικό) εκτίμησης των αποτελεσμάτων. 3) Σύγκριση του αντίστροφου φίλτρου με το φίλτρο Wiener: Μηδενίστε το θόρυβο καθώς και τη σταθερά A. Στη συνέχεια τρέξτε το πρόγραμμα και με τα δύο φίλτρα. Τι παρατηρείτε; Εξηγήστε το με βάση τη θεωρία. 4) Επίδραση του θορύβου στο φίλτρο Wiener: Χρησιμoποιήστε σήμα με μεσαίο επίπεδο θορύβου (π.χ. randn/5) και εφαρμόστε το φίλτρο Wiener θέτοντας την παράμετρο θορύβου προς σήμα A=0.05. Στη συνέχεια μεγαλώστε το θόρυβο (π.χ. σβήστε τη διαίρεση με το 5). Τι μεταβολή πρέπει να κάνετε στην παράμετρο A, σύμφωνα με τη θεωρία; Διαπιστώστε το και πειραματικά, αυξάνοντας και ελαττώνοντας την τιμή του A στο πρόγραμμα και παρατηρώντας τα αποτελέσματα.

100 ΛΥΣΕΙΣ ΕΡΓΑΣΤΗΡΙΑΚΩΝ ΑΣΚΗΣΕΩΝ Οι λύσεις που ακολουθούν δεν είναι οι μοναδικές. 1 Σήματα διάκριτου χρόνου - Απεικόνιση σημάτων - Διαχείριση αρχείων σημάτων Άσκηση 1.3α (Λύσεις εργαστηριακών ασκήσεων) Να γραφτεί πρόγραμμα (program13a.m) στο οποίο: i) να ορίζονται δύο σήματα x 1 και x ίδιου μήκους ως μονοδιάστατοι πίνακες της επιλογής σας, ii) να βρίσκεται η μέγιστη τιμή κάθε σήματος, iii) να βρίσκεται το σήμα x 3 που προκύπτει ως διαφορά των δύο σημάτων (x 1 -x αν η μέγιστη τιμή του x 1 είναι μεγαλύτερη από τη μέγιστη τιμή του x, αλλιώς το αντίθετο), και iii) τα τρία αυτά σήματα να απεικονίζονται γραφικά, στο ίδιο figure αλλά σε δύο διαφορετικά υπογραφήματα (subplot): στο 1 ο υπογράφημα θα βρίσκεται το σήμα x3, ενώ τα σήματα x1 και x θα βρίσκονται στο ο υπογράφημα. iv) το σήμα x3 να εγγράφεται στο δίσκο. program13a.m clc; clear all; close all; % Ορισμός σημάτων x1 = [ ]; % Τιμές σήματος 1 x = [ ]; % Τιμές σήματος N = length(x1); % Μήκος σήματος n = [0:N-1]; % Χρονικές στιγμές % Εύρεση μεγίστων max1 = x1(1); for i=1:n if x1(i)>max1, max1 = x1(i); max = x(1); for i=1:n if x(i)>max, max = x(i); % Αφαίρεση σημάτων ανάλογα με ποιο μέγιστο είναι μεγαλύτερο if max1>max for i=1:n x3(i) = x1(i) - x(i); else for i=1:n x3(i) = x(i) - x1(i); % Γραφική παράσταση των δύο αρχικών σημάτων στο 1ο υπογράφημα subplot(,1,1); hold on; plot(n,x1,'bo-'); plot(n,x,'r*-'); grid on; leg('x_1','x_'); % Γραφική παράσταση της διαφοράς στο ο υπογράφημα subplot(,1,); plot(n,x3,'ko-'); grid on; leg('x_3'); % Αποθήκευση του x3 στο δίσκο swrite(x3,'signal.txt');

101 Λύσεις εργαστηριακών ασκήσεων 101 Αποτελέσματα

102 10 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 1.3β Να γραφτεί πρόγραμμα (program13b.m) με το οποίο: i) Να διαβάζεται από το δίσκο το σήμα που βρίσκεται στο αρχείο ecg.txt (αφού ελέγξετε ότι το αρχείο αυτό βρίσκεται στο Current Directory). Το σήμα να απεικονίζεται. ii) Na δημιουργείται ένα δεύτερο σήμα με τριπλάσιο πλάτος από το πρώτο (ενίσχυση σήματος). Το δεύτερο σήμα να απεικονίζεται μαζί με το πρώτο (με hold on) ώστε να φανεί η διαφορά στο πλάτος. iii) Το δεύτερο (ενισχυμένο) σήμα να αποθηκεύεται στο δίσκο. program13b.m clc; clear all; close all; % Διάβασμα 1ου σήματος από το δίσκο x1 = sread('ecg.txt'); N = length(x1); % Μήκος σήματος % Δημιουργία ου σήματος (ενισχυμένου) for n=0:n-1 x(n+1) = 3*x1(n+1); % Απεικόνιση των δύο σημάτων n = [0:N-1]; % Χρονικές στιγμές hold on; plot(n,x1,'b'); plot(n,x,'r'); grid on; xlabel('time'); ylabel('amplitude'); title('simulated ECG'); leg('original', 'Amplified'); Αποτελέσματα i) Γραφική παράσταση του ecg.txt..ii) Γραφική παράσταση στους ίδιους άξονες. iii) Δημιουργία ενός αρχείου με όνομα ecg.txt στο Current Directory.

103 Amplitude Λύσεις εργαστηριακών ασκήσεων 103 Άσκηση 1.3γ Να γραφτεί πρόγραμμα (program13c.m) με το οποίο: i) Να διαβαστεί από το δίσκο το σήμα που βρίσκεται στο αρχείο ecg.txt (αφού ελέγξετε ότι το αρχείο αυτό βρίσκεται στο Current Directory) με τη βοήθεια της συνάρτησης sread.m (Εργασία 1.δ). ii) Το ecg.txt είναι αρκετά μεγάλο σήμα (έχει 4355 τιμές). Na δημιουργήσετε ένα δεύτερο σήμα, στο οποίο να αποθηκεύσετε τις τιμές από 100 έως 1000 του ecg.txt.. Απεικονίστε το δεύτερο σήμα. program13c.m clc; clear all; close all; % Διάβασμα 1ου σήματος από το δίσκο x1 = sread('ecg.txt'); N = length(x1); % Μήκος σήματος % Δημιουργία ου σήματος (τμήματος του 1ου) i = 0; for n=100:1000 i = i + 1; % Δείκτες (από 1 έως 901) του x x(i) = x1(n); % Απεικόνιση του τμήματος n = [100:1000]; % Χρονικές στιγμές για την απεικόνιση plot(n,x); grid on; xlabel('time'); ylabel('amplitude'); Αποτελέσματα Time

104 104 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Βασικά είδη σημάτων (Λύσεις εργαστηριακών ασκήσεων) Άσκηση.3α Να γραφτεί πρόγραμμα (program3a.m) στο οποίο: i) να δημιουργείται ένα ημιτονοειδές σήμα μήκους 100 και συχνότητας ίσης με 7, ii) να δημιουργείται ένα εκθετικό σήμα, ίδιου μήκους με το ημιτονοειδές, με βάση ίση με 1.05, iii) να δημιουργείται ένα τρίτο σήμα, ίσο με το γινόμενο των δύο σημάτων, iv) να απεικονίζεται το εκθετικό σήμα καθώς και το σήμα του γινομένου, στους ίδιους άξονες, v) το σήμα του γινομένου να εγγράφεται (αποθηκεύεται) σε ένα αρχείο στο δίσκο. program3a.m clc; clear all; close all; N = 100; % Μήκος σήματος % 1ο σήμα (ημιτονοειδές) f = 7; % Συχνότητα ημιτονοειδούς σήματος for n=0:n-1 x1(n+1) = sin(*pi*f*n/n); % ο σήμα (εκθετικό) a = 1.05; % Βάση εκθετικού σήματος (>1 σημαίνει αύξηση με το χρόνο) for n=0:n-1 x(n+1) = a^n; % Πολλαπλασιασμός σημάτων for n=0:n-1 x3(n+1) = x1(n+1) * x(n+1); % Γράφ. παράσταση του εκθετικού και του τελικού σήματος στους ίδιους άξονες n = [0:N-1]; % Χρονικές στιγμές plot(n,x,'k.-'); hold on; plot(n,x3,'b.-'); grid on; leg('x_', 'x_1 * x_', 'location', 'NW'); % το 'location' δείχνει τη θέση του leg ('NW' =North West=πάνω αριστερά) % Εγγραφή του x3 στο δίσκο swrite(x3,'signal.txt');

105 Λύσεις εργαστηριακών ασκήσεων 105 Αποτελέσματα iv) Γραφική παράσταση στους ίδιους άξονες v) Δημιουργία ενός αρχείου με όνομα signal.txt στο φάκελο Current Directory.

106 106 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση.3β Να γραφτεί πρόγραμμα (program3b.m) στο οποίο: i) Αρχικά πρέπει να διαβάζεται από το δίσκο το αρχείο που δημιουργήθηκε στο δίσκο στην ά- σκηση.3α. ii) Στη συνέχεια, το σήμα αυτό πρέπει να ψαλιδιστεί με τιμή κατωφλίου ίση με t=0 και να γίνει απεικόνιση του αρχικού και του ψαλιδισμένου σήματος στους ίδιους άξονες. Το αποτέλεσμα πρέπει να είναι όπως στο παρακάτω σχήμα. Σημείωση: Ψαλιδισμός (clipping) είναι η αποκοπή των τιμών του σήματος που είναι μεγαλύτερες κατ απόλυτη τιμή από ένα κατώφλι (threshold). Υπόδειξη: Μετά την ανάγνωση του σήματος από το δίσκο, δημιουργείστε ένα δεύτερο σήμα του οποίου όλες οι τιμές θα είναι ίσες με του πρώτου, εκτός από όσες τιμές είναι μεγαλύτερες από το κατώφλι t (οι οποίες θα πάρουν την τιμή του κατωφλίου, t) και από όσες τιμές είναι μικρότερες του -t (οι οποίες θα πάρουν την τιμή -t). Έτσι, κάθε τιμή του δεύτερου σήματος θα είναι μικρότερη, κατ απόλυτη τιμή, από το κατώφλι t. program3b.m clc; clear all; close all; % Διάβασμα σήματος από το δίσκο x = sread('signal.txt'); % Ψαλιδισμός (clipping) έτσι ώστε η απόλυτη τιμή του πλάτους του σήματος % να μην ξεπεράσει ένα κατώφλι (threshold). t = 0; % τιμή κατωφλίου for i=1:length(x) if x(i)>t y(i) = t; elseif x(i)<-t y(i) = -t; else y(i) = x(i); % Γραφική παράσταση σήματος n = [0:length(x)-1]; hold on; plot(n,x,'b.-'); plot(n,y,'r.-'); grid on; titlestring = sprintf('clipping with threshold t = %d',t); title(titlestring); leg('original signal', 'Clipped signal', 'location', 'NW');

107 Λύσεις εργαστηριακών ασκήσεων 107 Αποτελέσματα

108 108 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 3 Απόκριση συστήματος - Συνέλιξη (Λύσεις εργαστηριακών ασκήσεων) Άσκηση 3.3α: Εξομάλυνση καρδιογραφικού σήματος. Δημιουργήστε ένα πρόγραμμα (program33a.m), το οποίο να προκαλεί εξομάλυνση (smoothing) σε σήμα καρδιογραφήματος. Η εξομάλυνση πρέπει να πραγματοποιείται με τη συνέλιξη ενός συστήματος κρουστικής απόκρισης ίσης με [ ] στο σήμα ενός προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β). Ακολουθήστε τα παρακάτω βήματα: (i) Φορτώστε το καρδιογραφικό σήμα 'ecg.txt' από το δίσκο (πρέπει να βρίσκεται στο Current Directory). (ii) Δημιουργείστε ένα φίλτρο εξομάλυνσης, ως σήμα κρουστικής απόκρισης [ ]. (iii) Πραγματοποιείστε τη συνέλιξη του φίλτρου με το καρδιογραφικό σήμα. (iv) Απεικονείστε το αρχικό και το εξομαλυμένο σήμα στους ίδιους άξονες, χρησιμοποιώντας διαφορετικά χρώματα. Για να δείτε καλύτερα τη διαφορά, δημιουργήστε και απεικονείστε μικρότερα τμήματα των δύο σημάτων (π.χ. για τις χρονικές στιγμές από 50 έως 50). Απαιτούμενα αρχεία για το program33a.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). convolution.m: Συνάρτηση συνέλιξης (Εργασία 3.γ) program33a.m clc; clear all; close all; % Σήμα εισόδου: x = sread('ecg.txt'); % Κρουστική απόκριση: h = [ ]; % Συνέλιξη: y = convolution(x,h); % Δημιουργία μικρότερων τμημάτων των σημάτων για καλύτερη απεικόνιση: n1 = 50; n = 50; i = 0; for n=n1:n i = i + 1; x1(i) = x(n); y1(i) = y(n); % Γραφικές παραστάσεις των x1, y1: hold on; Nx = length(x1); Ny = length(y1); nx = [0:Nx-1]; ny = [0:Ny-1]; plot(nx,x1,'b-'); plot(ny,y1,'r-'); leg('σήμα εισόδου','σήμα εξόδου'); grid on Αποτελέσματα Πειραματιστείτε με διαφορετικά φίλτρα για να δείτε τις διαφορές.

109 Λύσεις εργαστηριακών ασκήσεων 109 Άσκηση 3.3β (γενίκευση της Εργασίας 3.στ): Δημιουργία συνάρτησης προσομοίωσης του συστήματος της Εργασίας 3.στ. α) Κατασκευάστε στο MATLAB μια συνάρτηση (SystemSimulation.m) που να προσομοιώνει το σύστημα της Εργασίας 3.στ,, δηλαδή να μπορεί να υπολογίσει το σήμα εξόδου y(n) του συστήματος για οποιοδήποτε σήμα εισόδου x(n). Υπόδειξη: Βασιστείτε στο program3d.m. SystemSimulation.m function y = SystemSimulation(x) % Υπολογισμός κρουστικής συνάρτησης δ(n) d(1) = 1; for i=:length(x) d(i) = 0; % Υπολογισμός κρουστικής απόκρισης h(n) h(1) = d(1); for i=:length(d) h(i) = 0.5*h(i-1) + d(i); % Συνέλιξη y = convolution(x,h); β) Κατασκευάστε ένα πρόγραμμα σε MATLAB (program33b.m), στο οποίο: (i) Να δημιουργείται ένα σήμα N=100 τιμών, που να είναι το γινόμενο μιας εκθετικής συνάρτησης βάσης a=0.95 και μιας συνημιτονοειδούς συνάρτησης συχνότητας f= και πλάτους A=1. (ii) Να βρίσκεται η απόκριση του SystemSimulation.m, όταν εισαχθεί το σήμα του ερωτήματος (i). Τα σήματα εισόδου και εξόδου να παρασταθούν στους ίδιους άξονες. program33b.m clc; clear all; close all; N = 100; f = ; for n=0:n-1 x(n+1) = 0.95^n * cos(*pi*f*n/n); y = SystemSimulation(x); hold on; plot(x,'b.-'); plot(y,'r.-'); leg('x','y');

110 110 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Αποτελέσματα

111 Λύσεις εργαστηριακών ασκήσεων 111 Άσκηση 3.3γ Με χρήση της συνάρτησης της συνέλιξης, να δείξετε με παραδείγματα τις ιδιότητες της συνέλιξης (βλ. Συνοπτική θεωρία, παράγραφος 3.1), αφού ορίσετε κατάλληλα σήματα της επιλογής σας. program33c.m clc; clear all; x1 = [ 3 4 1]; x = [-1 3 0]; x3 = [1 0 -]; disp('αντιμεταθετική ιδιότητα: x1*x = x*x1'); convolution(x1,x) convolution(x,x1) disp(' '); disp('προσεταιριστική ιδιότητα: (x1*x)*x3 = x1*(x*x3)'); convolution( convolution(x1,x), x3 ) convolution( x1, convolution(x,x3) ) disp(' '); disp('επιμεριστική ιδιότητα: x1*(x+x3) = x1*x + x1*x3'); convolution(x1,x+x3) convolution(x1,x) + convolution(x1,x3) disp(' '); disp('ουδέτερο στοιχείο: x*δ = x'); delta = [1]; x1 convolution(x1,delta) Αποτελέσματα Αντιμεταθετική ιδιότητα: x1*x = x*x1 ans = ans = Προσεταιριστική ιδιότητα: (x1*x)*x3 = x1*(x*x3) ans = ans = Επιμεριστική ιδιότητα: x1*(x+x3) = x1*x + x1*x3 ans = ans = Ουδέτερο στοιχείο: x*δ = x x1 = ans = 3 4 1

112 11 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 4 Συσχέτιση (Λύσεις εργαστηριακών ασκήσεων) Άσκηση 4.3α: Συσχέτιση για εντοπισμό σήματος μέσα σε θορυβώδες περιβάλλον Δημιουργήστε ένα πρόγραμμα (program43a.m), το οποίο να εντοπίζει ένα σήμα καρδιογραφήματος μέσα σε θορυβώδες περιβάλλον. Η συσχέτιση θα γίνεται με ένα γνωστό καρδιογραφικό σήμα. Ακολουθήστε τα παρακάτω βήματα: (i) Φορτώστε το καρδιογραφικό σήμα 'ecg.txt' από το δίσκο (πρέπει να βρίσκεται στο Current Directory). (ii) Προσθέστε τυχαίο θόρυβο στο σήμα (βλ. και Εργασία 4.β). (iii) Δημιουργήστε σήμα που να περιέχει μόνο τυχαίο θόρυβο. (iv) Απεικονίστε τα τρία σήματα (καρδιογράφημα, καρδιογράφημα+θόρυβος, θόρυβος). (v) Πραγματοποιείστε συσχέτιση του καρδιογραφήματος με κάθε ένα από τα δύο θορυβώδη σήματα. (vii) Απεικονίστε τα αποτελέσματα των δύο συσχετίσων, ώστε να κατανοήσετε τη σημασία της συσχέτισης. Απαιτούμενα αρχεία για το program43a.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). correlation.m: Συνάρτηση συσχέτισης (Εργασία 4.β) program43a.m clc; clear all; close all; % Διάβασμα ηλεκτροκαρδιογραφήματος (ECG) από το δίσκο x = sread('ecg.txt'); N = length(x); % Μήκος ECG % Δημιουργία (α) ECG με θόρυβο & (β) σήματος τυχαίου θορύβου for n=0:n-1 xnoise(n+1) = x(n+1) + 4*(rand-0.5); % ECG με θόρυβο Noise(n+1) = 4*(rand-0.5); % Σήμα τυχαίου θορύβου % Συσχέτιση του ECG με % (α) το θορυβώδες ECG και % (β) με το σήμα τυχαίου θορύβου r1 = correlation(x,xnoise); % Συσχέτιση ECG με θορυβώδες ECG r = correlation(x,noise); % Συσχέτιση ECG με σήμα τυχαίου θορύβου % Απεικόνιση σημάτων n = [0:N-1]; subplot(3,,1); plot(n,x); xlabel('ecg'); subplot(3,,); plot(n,x); xlabel('ecg'); n = [0:N-1]; subplot(3,,3); plot(n,xnoise); xlabel('ecg + noise'); subplot(3,,4); plot(n,noise); xlabel('random noise'); n = [0;*N-]; subplot(3,,5); plot(n,r1); xlabel('correlation of ECG with ECG + noise'); subplot(3,,6); plot(n,r); xlabel('correlation of ECG with Random noise');

113 Λύσεις εργαστηριακών ασκήσεων 113 Αποτελέσματα Μπορείτε να πειραματιστείτε με διαφορετικά επίπεδα θορύβου (π.χ. αντί για πολλαπλασιαστικό παράγοντα 4, να δώσετε ή 8), ώστε να δείτε (α) την επίδρασή του στο αποτέλεσμα και (β) μέχρι ποιο επίπεδο μπορούμε να επιτύχουμε εντοπισμό του αρχικού σήματος μέσα στο θόρυβο.

114 114 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 4.3β: Συσχέτιση για εντοπισμό συχνότητας μέσα σε σήμα Τροποποιήστε το προηγούμενο πρόγραμμα, κάνοντας συσχέτιση του ηλεκτροκαδριογραφικού σήματος με δύο ημιτονοειδή σήματα, τα οποία θα δημιουργήσετε προηγουμένως στη θέση των σημάτων με θόρυβο. Το ένα ημιτονοειδές σήμα πρέπει να έχει κάποια συχνότητα που φαίνεται να ενυπάρχει στο καρδιογραφικό σήμα (π.χ. μπορεί να είναι ίση με το πλήθος των κορυφών του, 17), ενώ το άλλο ημιτονοειδές σήμα πρέπει να έχει κάποια άλλη διαφορετική συχνότητα, που δεν φαίνεται να υπάρχει μέσα στο καρδιογραφικό σήμα (π.χ. 10). Ο σκοπός της άσκησης αυτής είναι να δείτε τη συσχέτιση με το ημιτονοειδές σήμα, όταν αυτό έχει συχνότητα που υπάρχει μέσα στο καρδιογραφικό σήμα. Απαιτούμενα αρχεία για το program43b.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). correlation.m: Συνάρτηση συσχέτισης (Εργασία 4.β) program43b.m clc; clear all; close all; % Διάβασμα ηλεκτροκαρδιογραφήματος (ECG) από το δίσκο x = sread('ecg.txt'); N = length(x); % Μήκος ECG f1 = 17; f = 10; % Δημιουργία δύο ημιτονοειδών σημάτων for n=0:n-1 y1(n+1) = sin(*pi*f1*n/n); y(n+1) = sin(*pi*f*n/n); % Συσχέτιση... r1 = correlation(x,y1); %...του ECG με το πρώτο ημιτονοειδές σήμα r = correlation(x,y); %...του ECG με το δεύτερο ημιτονοειδές σήμα % Απεικόνιση σημάτων n = [0:N-1]; subplot(3,,1); plot(n,x); xlabel('ecg'); subplot(3,,); plot(n,x); xlabel('ecg'); n = [0:N-1]; subplot(3,,3); plot(n,y1); xlabel(['sin wave, f=', numstr(f1)]); subplot(3,,4); plot(n,y); xlabel(['sin wave, f=', numstr(f)]); n = [0:*N-]; subplot(3,,5);plot(n,r1); xlabel(['correlation with Sin f=',numstr(f1)]); subplot(3,,6);plot(n,r); xlabel(['correlation with Sin f=',numstr(f)]);

115 Λύσεις εργαστηριακών ασκήσεων 115 Αποτελέσματα Μπορείτε να πειραματιστείτε με ημιτονοειδή σήματα διαφόρων συχνοτήτων (π.χ. ίσως μπορούμε να διακρίνουμε μια χαμηλή συχνότητα μέσα στο καρδιογραφικό σήμα, περίπου ίση με 4 ή 4.5).

116 116 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 5 Διάκριτος Μετασχηματισμός Fourier (Λύσεις εργαστηριακών ασκήσεων) Άσκηση 5.3α: Απεικόνιση φασμάτων πλάτους και ισχύος: Κατασκευάστε πρόγραμμα (program53b.m) στο οποίο: (i) δημιουργείται ένα σύνθετο σήμα που να αποτελείται από ένα εκθετικό σήμα με βάση 0.95 και από ένα ημιτονοειδές σήμα πλάτους 1 και συχνότητας 10, (ii) εκτελείται ο μετασχηματισμός Fourier του σήματος, (iii) υπολογίζεται το φάσμα πλάτους AF(k) και το φάσμα ισχύος P(k)=AF(k) του σήματος στο πεδίο των συχνοτήτων, και (iv) απεικονίζεται η γραφική παράσταση του τελικού σήματος στο πεδίο του χρόνου, και των φασμάτων πλάτους και ισχύος στο πεδίο των συχνοτήτων. program53a.m clc; clear; close all; % Δημιουργία σήματος από επιμέρους σήματα στο πεδίο του χρόνου N = 100; % Μήκος σήματος a = 0.95; % Βάση εκθετικού σήματος f = 10; % Συχνότητα ημιτονοειδούς σήματος for n=0:n-1 x1(n+1) = a^n; x(n+1) = sin(*pi*n*f/n); x(n+1) = x1(n+1)*x(n+1); % Σήμα στο πεδίο των συχνοτήτων (Fx(k)) [RFx IFx] = dft(x); % Πλάτος και Ισχύς του σήματος στο πεδίο των συχνοτήτων (A(k) και P(k)) for k=1:n A(k) = sqrt( RFx(k)^ + IFx(k)^ ); P(k) = A(k)^; % Γραφικές παραστάσεις: % Σήμα στο πεδίο του χρόνου (x(n)) n = [0:N-1]; % Χρονικές στιγμές subplot(3,1,1); plot(n,x); grid on; xlabel('χρόνος (n)'); ylabel('σήμα x(n)'); % Φάσμα πλάτους του σήματος στο πεδίο των συχνοτήτων (A(k)) k = [0:N-1]; % Συχνότητες subplot(3,1,); stem(k,a); grid on; xlabel('συχνότητες (k)'); ylabel('πλάτος Fx(k) '); % Φάσμα ισχύος του σήματος στο πεδίο των συχνοτήτων (P(k)) subplot(3,1,3); stem(k,p); grid on; xlabel('συχνότητες (k)'); ylabel('ισχύς Ρ(k)');

117 Λύσεις εργαστηριακών ασκήσεων 117 Αποτελέσματα Άσκηση 5.3β Με βάση το φάσμα πλάτους που βλέπουμε στην επομένη σελίδα, δημιουργήστε την εξίσωση ενός σύνθετου σήματος που να αποτελείται από απλά ημιτονοειδή σήματα και που να δίνει αυτό το φάσμα. Στη συνέχεια, κατασκευάστε πρόγραμμα (program53a.m), το οποίο να δίνει τα αποτελέσματα που παρουσιάζονται στην επόμενη σελίδα. Υπόδειξη: Στηριχτείτε στην εργασία 5.a (program5a.m). Λύση: Στο φάσμα πλάτους που απεικονίζεται στο σχήμα της επόμενης σελίδας. βλέπουμε ότι το σύνθετο σήμα (x) αποτελείται από 3 συχνότητες (5, 10 και 0), με πλάτη 0.5 =1, 1 = και 1.5 =3. Επίσης, βλέπουμε ότι το μήκος του σήματος είναι N=100. Άρα η εξίσωση του σήματος είναι η: x( n) A1 sin n f1 A sin n f A3 sin n f3 N N N με n=0 N-1, όπου N=100 και A 1 =1, A =, A 3 =3, f 1=5, f =10 και f 3 =0. Με βάση τα προηγούμενα, κατασκευάζουμε το program53b.m ως ακολούθως:

118 118 Εργαστηριακές ασκήσεις επεξεργασίας σήματος program53b.m clc; clear; close all; % Δημιουργία σήματος (x) από 3 ημιτονοειδή σήματα στο πεδίο του χρόνου N = 100; % Μήκος σήματος A1 = 1; f1 = 5; % Πλάτος και συχνότητα 1ου ημιτονοειδούς σήματος A = ; f = 10; % Πλάτος και συχνότητα ου ημιτονοειδούς σήματος A3 = 3; f3 = 0; % Πλάτος και συχνότητα ου ημιτονοειδούς σήματος for n=0:n-1 x(n+1) = A1*sin(*pi*n*f1/N) +... A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N); % Σήμα στο πεδίο των συχνοτήτων (Fx(k)) [RFx IFx] = dft(x); % Πλάτος του σήματος στο πεδίο των συχνοτήτων (A(k)) for k=1:n A(k) = sqrt( RFx(k)^ + IFx(k)^ ); % Γραφικές παραστάσεις: % Σήμα στο πεδίο του χρόνου (x(n)) n = [0:N-1]; % Χρονικές στιγμές subplot(,1,1); plot(n,x); grid on; xlabel('χρόνος (n)'); ylabel('σήμα x(n)'); % Πλάτος του σήματος στο πεδίο των συχνοτήτων (A(k)) k = [0:N-1]; % Συχνότητες subplot(,1,); stem(k,a); grid on; xlabel('συχνότητες (k)'); ylabel('πλάτος Fx(k) '); Αποτελέσματα

119 Λύσεις εργαστηριακών ασκήσεων 119 Άσκηση 5.3γ Γενικεύστε τον κώδικα της συνάρτησης dft.m (βλ. άσκηση 0α) ώστε να μπορεί να δέχεται ως είσοδο μιγαδικό σήμα. Υπόδειξη: Θα χρειαστεί πρώτα να γενικευτούν οι μαθηματικές σχέσεις και η απόδειξη της εργασίας 5.α, θέτοντας x(n) = Rx(n) + Ix(n). Λύση: Εργαζόμαστε όπως στην εργασία 5.α, με τη διαφορά ότι θεωρούμε το σήμα x(n) μιγαδικό, δηλαδή: x( n) Rx( n) jix( n) Το σήμα στο πεδίο των συχνοτήτων υπολογίζεται από τον DFT: N 1 j kn N 1 Fx( k) x( n) e N Πρέπει να φέρουμε το Fx(k) στη μορφή Fx( k) RFx( k) jifx( k), ώστε να μπορούν να υ- πολογιστούν τα RFx(k) και IFx(k) (δηλ. το πραγματικό και το φανταστικό μέρος του): Θα χρησιμοποιηθεί επίσης η σχέση Euler: e cos jsin Έχουμε: N1 j kn N1 N 1 1 Fx( k) x( n) e x( n) cos kn j sin kn N n0 N n0 N N ή: j N1 N1 1 1 Fx( k) x( n)cos kn j x( n)sin kn N n0 N N n0 N ή: N1 N1 1 1 Fx( k) Rx( n) jix( n) cos kn j Rx( k) jix( k) sin kn N n0 N N n0 N ή: N1 N1 1 1 Fx( k) Rx( n)cos kn jix( n)cos kn j Rx( n)sin kn jix( n)sin kn N n0 N N N n0 N N ή: N1 N1 1 1 Fx( k) Rx( n)cos kn Ix( n)sin kn j Rx( n)sin kn Ix( n)cos kn N n0 N N N n0 N N n0 ή, τελικά: Fx( k) RFx( k) jifx( k) όπου και N 1 1 RFx( k) Rx( n)cos kn Ix( n)sin kn N n0 N N N 1 1 IFx( k) Rx( n)sin kn Ix( n)cos kn N n0 N N Σημείωση: Στην περίπτωση που το σήμα x(n) είναι πραγματικό, μπορούμε να θέσουμε Ix(n)=0 και Rx(n)=x(n) στις προηγούμενες σχέσεις, οπότε για τα RFx(k) και IFx(k) θα προκύψουν ακριβώς οι σχέσεις της εργασίας 5.α.

120 10 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Με βάση τις προηγούμενες σχέσεις, μπορούμε να γράψουμε τον κώδικα της ακόλουθης συνάρτηση dft_general.m, ως γενίκευση της dft.m: dft_general.m function [RFx,IFx] = dft_general(rx, Ix) % Είσοδος: Rx, Ix = πραγματικό και φανταστικό μέρος του σήματος, % στο πεδίο του χρόνου % Έξοδος: RFx, IFx = πραγματικό και φανταστικό μέρος του σήματος % στο πεδίο των συχνοτήτων μετά από το μετασχηματισμό Fourier N = length(rx); for k=1:n RFx(k) = 0; IFx(k) = 0; for n=1:n RFx(k) = RFx(k) + ( Rx(n)*cos(*pi*(k-1)*(n-1)/N) +... Ix(n)*sin(*pi*(k-1)*(n-1)/N) ); IFx(k) = IFx(k) - ( Rx(n)*sin(*pi*(k-1)*(n-1)/N) -... Ix(n)*cos(*pi*(k-1)*(n-1)/N) ); RFx(k) = RFx(k)/N; IFx(k) = IFx(k)/N;

121 Λύσεις εργαστηριακών ασκήσεων 11 6 Διάκριτος Μετασχηματισμός Fourier - Εφαρμογές (Λύσεις εργαστηριακών ασκήσεων) Άσκηση 6.3α: Αφαίρεση θορύβου από ηλεκτροκαρδιογραφικό σήμα: Στην Άσκηση αυτή θα φορτώσουμε ένα ηλεκτροκαρδιογραφικό σήμα από το δίσκο, θα προσπαθήσουμε να εντοπίσουμε τις συχνότητες του θορύβου μέσα σ αυτό και στη συνέχεια θα τις μηδενίσουμε ώστε να ελαττώσουμε το θόρυβο από το αρχικό σήμα (όπως κάναμε στην Εργασία 6.α). Θα χρειαστούμε τις συναρτήσεις sread.m (Εργασία 1.δ), dft.m (Εργασία 5.α) και idft.m (Εργασία 5.β). - Κατασκευάστε πρόγραμμα (program63a.m) στο οποίο να κάνετε τα παρακάτω: α) Φορτώστε το σήμα ecg.txt από το δίσκο (sread.m, Εργασία 1.δ) και απεικονίστε το. β) Το ecg.txt είναι αρκετά μεγάλο σήμα (έχει 4355 τιμές). Για το λόγο αυτό και για λόγους ταχύτητας υπολογισμών, θα εργαστούμε στη συνέχεια μόνο με ένα τμήμα του: Αποθηκεύστε σε έναν άλλο πίνακα ένα τμήμα του αρχικού σήματος (τις τιμές π.χ. από 100 έως 1000) και απεικονίστε το. γ) Υπολογίστε το φάσμα πλάτους του στο πεδίο των συχνοτήτων και απεικονίστε το. δ) Εντοπίστε (οπτικά) στο φάσμα πλάτους τη συχνότητα εκείνη (συχνότητα αποκοπής) πάνω από την οποία βρίσκεται ο θόρυβος (κατά την κρίση σας, π.χ. 50). Πρέπει να αποκόπτονται αρκετές υψηλές συχνότητες αλλά να παραμένουν επίσης αρκετές χαμηλότερες, που περιέχουν τη χρήσιμη πληροφορία του σήματος. ε) Μηδενίστε τις συνιστώσες του σήματος στο πεδίο των συχνοτήτων που αντιστοιχούν στις συχνότητες που είναι μεγαλύτερες από τη συχνότητα αποκοπής, και απεικονίστε το νέο φάσμα πλάτους: στ) Ανακατασκευάστε το σήμα στο πεδίο του χρόνου. Απεικονίστε το ανακατασκευασμένο σήμα: Συγκρίνετε το ανακατασκευασμένο με το αρχικό σήμα. Τι παρατηρείτε; Μπορείτε να δοκιμάσετε με διαφορετικές συχνότητες αποκοπής ώστε να δείτε τις διαφορές.

122 1 Εργαστηριακές ασκήσεις επεξεργασίας σήματος program63a.m clc; clear; close all; % Φόρτωμα σήματος από το δίσκο ecg = sread('ecg.txt'); N = length(ecg); % Μήκος σήματος n = [0:N-1]; % Χρονικές στγμές subplot(3,,1:); plot(n,ecg,'k'); grid on; xlabel('n'); ylabel('ecg'); % Επιλογή τμήματος του ecg i = 0; for n=100:1000 i = i + 1; x(i) = ecg(n); N = length(x); % Μήκος σήματος n = [0:N-1]; % Χρονικές στγμές subplot(3,,3); plot(n,x,'b'); grid on; xlabel('n'); ylabel('x'); % Σήμα στο πεδίο των συχνοτήτων [RFx IFx] = dft(x); % Φάσμα πλάτους και γραφική του παράσταση for k=0:n-1 AFx(k+1) = sqrt( RFx(k+1)^ + IFx(k+1)^ ); k = [0:N-1]; % Συχνότητες subplot(3,,4); stem(k,afx,'b'); grid on; xlabel('k'); ylabel('afx'); % Εντοπίζουμε κατά την κρίση μας μια συχνότητα πέρα από την οποία % βρίσκεται ο θόρυβος και θα γίνει η αποκοπή (cut-off frequency). fco = 50; subplot(3,,4); hold on; plot([fco fco],[0 0.1],'r'); plot([n-fco N-fco],[0 0.1],'r'); % Μηδενισμός των συνιστωσών με συχνότητες >=fco % (μέχρι την κατοπτρική της σε σχέση με το N/). for k=fco:length(rfx)-fco RFx(k+1) = 0; IFx(k+1) = 0; % Νέο φάσμα πλάτους και γραφική του παράσταση for k=0:n-1 AFx(k+1) = sqrt( RFx(k+1)^ + IFx(k+1)^ ); k = [0:N-1]; % Συχνότητες subplot(3,,6); stem(k,afx,'r'); grid on; xlabel('k'); ylabel('afx (denoised)'); % Ανακατασκευή του σήματος με τον IDFT, μετά την αποκοπή % των ανεπιθύμητων συχνοτήτων. [Rx Ix] = idft(rfx,ifx); xnew = Rx; % Κανονικά xnew = Rx + jix, όμως Ix = 0, άρα xnew = Rx. n = [0:N-1]; % Χρονικές στγμές subplot(3,,5); plot(n,xnew,'r'); grid on; xlabel('n'); ylabel('x (denoised)'); Αποτελέσματα

123 Λύσεις εργαστηριακών ασκήσεων 13

124 14 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 7 Διάκριτος Μετασχηματισμός Fourier - Συνέλιξη στο πεδίο των συχνοτήτων (Λύσεις εργαστηριακών ασκήσεων) Άσκηση 7.3α: Εξομάλυνση καρδιογραφικού σήματος. Δημιουργήστε ένα πρόγραμμα (program73a.m), το οποίο να προκαλεί εξομάλυνση (smoothing) σε ένα καρδιογραφικό σήμα. Η εξομάλυνση πρέπει να πραγματοποιείται με τη συνέλιξη ενός συστήματος κρουστικής απόκρισης ίσης με [ ] σε ένα τμήμα ενός προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β). Η συνέλιξη πρέπει να πραγματοποιείται μέσω του πεδίου των συχνοτήτων (χρήση συνάρτησης convolution_freq.m). Ακολουθήστε τα παρακάτω βήματα: (i) Δημιουργείστε ένα φίλτρο εξομάλυνσης στο πεδίο του χρόνου με κρουστική απόκριση ίση με [ ]. (ii) Φορτώστε το καρδιογραφικό σήμα 'ecg.txt' από το δίσκο σε έναν πίνακα (πρέπει να βρίσκεται στο Current Directory). (iii) Για λόγους ταχύτητας, επιλέξτε μόνο ένα μικρό κομμάτι του σήματος, π.χ. τις χρονικές στιγμές από 50 έως 50, αποθηκεύοντάς τις σε έναν άλλο πίνακα για τη συνέχεια της άσκησης. (iii) Πραγματοποιείστε τη συνέλιξη του φίλτρου με το τμήμα του καρδιογραφικού σήματος μέσω του πεδίου των συχνοτήτων χρησιμοποιώντας το θεώρημα συνέλιξης (δηλ. χρησιμοποιώντας τη συνάρτηση convolution_freq.m). (iv) Απεικονείστε το αρχικό και το εξομαλυμένο σήμα στους ίδιους άξονες, χρησιμοποιώντας διαφορετικά χρώματα. Σημείωση: Το παραγόμενο σήμα της συνέλιξης έχει διπλάσιο μήκος από το αναμενόμενο, λόγω του διπλασιασμού του μήκους των σημάτων (επαυξάνοντας με 0). Για το λόγω αυτό, μπορεί κανείς να διατηρήσει μόνο το πρώτο μισό του παραγόμενου σήματος. Απαιτούμενα αρχεία για το program73a.m: ecg.txt: Αρχείο προσομοιωμένου καρδιογραφήματος (βλ. και Άσκηση 1.3β) sread.m: Συνάρτηση για το διάβασμα του σήματος από το δίσκο (Εργασία 1.δ). convolution_freq.m: Συνάρτηση συνέλιξης μέσω πεδίου συχνοτήτων (Εργασία 7.β) program73a.m clc; clear all; close all; % Κρουστική απόκριση φίλτρου: h = [ ]; % Σήμα εισόδου: x = sread('ecg.txt'); % Δημιουργία μικρότερου τμήματος του σήματος i = 0; for n=50:50 i = i + 1; x1(i) = x(n); % Συνέλιξη μέσω πεδίου συχνοτήτων: y = convolution_freq(x1,h); % Διατήρηση μόνο του 1ου μισού του y (το υπόλοιπο είναι 0) for i=1:length(y)/ y1(i) = y(i); % Γραφικές παραστάσεις των x, y: hold on; plot([0:length(x1)-1],x1,'b-'); plot([0:length(y1)-1],y1,'r-'); leg('σήμα εισόδου','φιλτραρισμένο σήμα'); grid on

125 Λύσεις εργαστηριακών ασκήσεων 15 Αποτελέσματα Σήμα εισόδου Φιλτραρισμένο σήμα

126 16 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 7.3β: Υπολογισμός συσχέτισης με χρήση του θεωρήματος της συσχέτισης: Με τη βοήθεια του θεωρήματος της συσχέτισης και με μικρές τροποποιήσεις του προγράμματος program7a.m (Εργασία 7.α), κατασκευάστε πρόγραμμα (program73b.m), στο οποίο να υ- πολογίζεται η συσχέτιση μεταξύ δύο σημάτων με τη βοήθεια του θεωρήματος της συσχέτισης. Να ληφθούν υπ όψιν οι σημειώσεις για την κατασκευή του προγράμματος program7a.m (Εργασία 7.α), με τη διαφορά ότι κατά το διπλασιασμό του μήκους των δύο σημάτων επαυξάνοντας με 0 (σημείωση ) το ένα σήμα πρέπει να επαυξηθεί προς τα δεξιά, ενώ το άλλο προς τ αριστερά (μπορείτε να εξηγήσετε γιατί;). Απαιτούμενες συναρτήσεις: correlation.m (Εργασία 4.β), dft.m και idft.m (Εργασίες 5.α και 5.β). program73b.m clc; clear all; % 1ο σήμα: x = [3 1 ]; % ο σήμα: h = [ 4]; % Συσχέτιση μέσω του πεδίου των συχνοτήτων,με το θεώρημα της συσχέτισης % r = IDFT(Fx.Fh*) % Εξίσωση μήκους σημάτων (επαυξάνοντας με 0 το μικρότερου μήκους σήμα) if length(x)<length(h) for i=length(x)+1:length(h), x(i) = 0; elseif length(x)>length(h) for i=length(h)+1:length(x), h(i) = 0; % Διπλασιασμός μήκους σημάτων (επαυξάνοντας με 0 και τα δύο σήματα) % (το ένα σήμα επαυξάνεται προς τα δεξιά και το άλλο προς τ' αριστερά) N = length(x); for i=1:n x(n+i) = 0; for i=1:n h(n+i) = h(i); h(i) = 0; % Μετασχηματισμοί Fourier [RFx IFx] = dft(x); % DFT του 1ου σήματος [RFh IFh] = dft(h); % DFT του ου σήματος cifh = -IFh; % Συζυγής μιγαδικός του ου σήματος % Γινόμενο των DFT for k=1:length(rfx) RFr(k) = RFx(k)*RFh(k) - IFx(k)*cIFh(k); % (πραγματικό μέρος) IFr(k) = RFx(k)*cIFh(k) + IFx(k)*RFh(k); % (φανταστικό μέρος) % Συσχέτιση (με χρήση του θεωρήματος συσχέτισης) [Rr Ir] = idft(rfr,ifr); r = length(x)*rr Αποτέλεσμα r = e e

127 Λύσεις εργαστηριακών ασκήσεων 17 Άσκηση 7.3γ: Κατασκευή και χρήση συνάρτησης για τον υπολογισμό της συσχέτισης μέσω του πεδίου των συχνοτήτων: Βασιζόμενοι στο πρόγραμμα program73b.m (Άσκηση 7.3β), κατασκευάστε το αρχείο συναρτήσεων correlation_freq.m, για τον υπολογισμό της συσχέτισης μέσω του πεδίου των συχνοτήτων. Στη συνέχεια, χρησιμοποιήστε στο Command Window με απλά σήματα τη συνάρτηση που κατασκευάσατε (correlation_freq.m), καθώς και την correlation.m (Εργασία 4.β) για να διαπιστώσετε την ταύτιση των αποτελεσμάτων τους. correlation_freq.m function r = correlation_freq (x,h) % % Συσχέτιση (μέσω του πεδίου των συχνοτήτων, με το θεώρημα της συσχέτισης): % r = IDFT(Fx.Fh*) % % Εξίσωση μήκους σημάτων (επαυξάνοντας με 0 το μικρότερου μήκους σήμα) if length(x)<length(h) for i=length(x)+1:length(h), x(i) = 0; elseif length(x)>length(h) for i=length(h)+1:length(x), h(i) = 0; % Διπλασιασμός μήκους σημάτων (επαυξάνοντας με 0 και τα δύο σήματα) % (το ένα σήμα επαυξάνεται προς τα δεξιά και το άλλο προς τ' αριστερά) N = length(x); for i=1:n x(n+i) = 0; for i=1:n h(n+i) = h(i); h(i) = 0; % Μετασχηματισμοί Fourier [RFx IFx] = dft(x); % DFT του 1ου σήματος [RFh IFh] = dft(h); % DFT του ου σήματος cifh = -IFh; % Συζυγής μιγαδικός του ου σήματος % Γινόμενο των DFT for k=1:length(rfx) RFr(k) = RFx(k)*RFh(k) - IFx(k)*cIFh(k); % (πραγματικό μέρος) IFr(k) = RFx(k)*cIFh(k) + IFx(k)*RFh(k); % (φανταστικό μέρος) % Συσχέτιση (με χρήση του θεωρήματος συσχέτισης) [Rr Ir] = idft(rfr,ifr); r = length(x)*rr; Command Window (εντολές και αποτελέσματα) >> x = [3 1 ]; h = [ 4]; >> correlation(x,h), correlation_freq(x,h) ans = ans = e e >>

128 ...με Butteworth...με Butteworth...με ιδεώδες...με ιδεώδες Πρωτότυπο Πρωτότυπο 18 Εργαστηριακές ασκήσεις επεξεργασίας σήματος 8 Φιλτράρισμα σήματος στο πεδίο των συχνοτήτων (Λύσεις εργαστηριακών ασκήσεων) Άσκηση 8.3α: Αφαίρεση θορύβου από ηλεκτροκαρδιογραφικό σήμα: Ο σκοπός της Άσκησης αυτής είναι η αφαίρεση του θορύβου των υψηλών συχνοτήτων από ένα ηλεκτροκαρδιογραφικό σήμα (όπως στην Άσκηση 6.3α) χρησιμοποιώντας φίλτρα low-pass. Θα χρησιμοποιήσουμε τόσο το ιδεώδες φίλτρο όσο και το Butterworth για να δούμε τις διαφορές. Για να επιλέξουμε την κατάλληλη συχνότητα αποκοπής, θα απεικονίσουμε το σήμα στο πεδίο των συχνοτήτων, ώστε να εντοπίσουμε οπτικά πού βρίσκονται οι υψηλές συχνότητες. Απαιτούμενες συναρτήσεις: sread.m (Εργασία 1.δ), filter_butterworth_lowpass.m και filter_butterworth_lowpass.m (Εργασία 8.α), convolution_freq_filter0.m (Εργασία 8.β). - Κατασκευάστε πρόγραμμα (program83a.m) στο οποίο να κάνετε τα εξής: α) Φορτώστε το σήμα ecg.txt από το δίσκο (sread.m, Εργασία 1.δ). Επειδή το σήμα έχει μεγάλο μήκος (4355 τιμές, βλ. και Άσκηση 6.3α), να χρησιμοποιήσετε μόνο ένα τμήμα του (π.χ. από 100 έως 1000) για επιτάχυνση των υπολογισμών. β) Υπολογίστε το φάσμα πλάτους στο πεδίο των συχνοτήτων και απεικονίστε το. γ) Εντοπίστε (οπτικά) στο φάσμα πλάτους τη συχνότητα αποκοπής, ώστε να αποκόπτονται αρκετές υψηλές συχνότητες αλλά να παραμένουν επίσης αρκετές χαμηλότερες συχνότητες, που περιέχουν τη χρήσιμη πληροφορία του σήματος (π.χ. f co =50, βλ. κόκκινες γραμμές ανωτέρω). δ) Εφαρμόστε στο σήμα τα low-pass φίλτρα ιδεώδες και Butterworth. Απεικονίστε το αποτέλεσμα στο πεδίο του χρόνου και στο πεδίο των συχνοτήτων (δημιουργήστε ένα figure με subplots, με τα σήματα στο πεδίο του χρόνου στην πρώτη στήλη και στο πεδίο των συχνοτήτων στη δεύτερη). 1.5 Σήματα στο πεδίο του χρόνου 0.1 Σήματα στο πεδίο των συχνοτήτων (φάσματα πλάτους) Χρονικές στιγμές Συχνότητες

129 Λύσεις εργαστηριακών ασκήσεων 19 program83a.m clc; clear; close all; % Φόρτωμα σήματος από το δίσκο ecg = sread('ecg.txt'); % Επιλογή μικρού τμήματος του ecg i = 0; for n=100:1000 i = i + 1; x(i) = ecg(n); N = length(x); % Μήκος σήματος % Επιλογή συχνότητας αποκοπής και δημιουργία φίλτρων fco = 50; Fh1 = filter_ideal_lowpass(n,fco); % Low-pass Ideal n = 3; Fh = filter_butterworth_lowpass(n,fco,n); % Low-pass Butterworth % Εφαρμογή φίλτρων y1 = convolution_freq_filter0(x,fh1); y = convolution_freq_filter0(x,fh); % Σήματα στο πεδίο των συχνοτήτων - Φάσματα πλάτους [RFx IFx] = dft(x); for k=0:n-1 AFx(k+1) = sqrt( RFx(k+1)^ + IFx(k+1)^ ); [RFy1 IFy1] = dft(y1); for k=0:n-1 AFy1(k+1) = sqrt( RFy1(k+1)^ + IFy1(k+1)^ ); [RFy IFy] = dft(y); for k=0:n-1 AFy(k+1) = sqrt( RFy(k+1)^ + IFy(k+1)^ ); % Γραφικές παραστάσεις n = [0:N-1]; % Χρονικές στγμές subplot(3,,1); plot(n,x,'k'); grid on; ylabel('πρωτότυπο'); title('σήματα στο πεδίο του χρόνου'); subplot(3,,3); plot(n,y1,'b'); grid on; ylabel('...με ιδεώδες'); subplot(3,,5); plot(n,y,'r'); grid on; ylabel('...με Butteworth'); xlabel('χρονικές στιγμές'); k = [0:N-1]; % Συχνότητες subplot(3,,); stem(k,afx,'k'); grid on; ylabel('πρωτότυπο'); title('σήματα στο πεδίο των συχνοτήτων (φάσματα πλάτους)'); subplot(3,,4); stem(k,afy1,'b'); grid on; ylabel('...με ιδεώδες'); subplot(3,,6); stem(k,afy,'r'); grid on; ylabel('...με Butteworth'); xlabel('συχνότητες');

130 130 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 8.3β: Υποδιπλασιασμός συχνότητας μέσω φίλτρου Butterworth: Κατασκευάστε πρόγραμμα (program83b.m) στο οποίο να κάνετε τα εξής: α) Κατασκευάστε ένα σύνθετο σήμα 00 τιμών που να αποτελείται από τις συχνότητες 10 και 50, με πλάτη 4 και αντίστοιχα. β) Φιλτράρετε το παραπάνω σήμα με φίλτρο Butterworth κατάλληλης συχνότητας αποκοπής, ώστε να υποδιπλασιαστεί το πλάτος της χαμηλής συχνότητας. [Υπόδειξη: Βλ. Παρατήρηση στο φίλτρο Butterhworth, στην Εργασία 8.α.] γ) Να απεικονιστεί το αρχικό σύνθετο σήμα μεζί με το τελικό (φιλτραρισμένο) στους ίδιους άξονες στο πεδίο του χρόνου (subplot 1). Επίσης, να απεικονιστούν τα δύο σήματα στο πεδίο των συχνοτήτων (φάσματα πλάτους, subplots & 3). program83b.m clc; clear all; close all; % Signal N = 00; % Μήκος σήματος A1 = 4; A = ; % Πλάτη συνιστωσών σημάτων f1 = 10; f = 50; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N); % High-pass Butterworth filter fco = 10; n = 3; % Επιλογή της fco=10 ώστε να υποδιπλασιαστεί η συχνότητα f1=10 Fh = filter_butterworth_highpass(n,fco,n); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Plots n=[0:n-1]; k=[0:n-1]; subplot(3,1,1); hold on; plot(n,x); plot(n,y,'r'); grid on; xlabel('time (n)'); ylabel('signals'); subplot(3,1,); hold on; stem(k,ax); xlabel('frequency (k)'); axis([0 N min(ax) max(ax)]); subplot(3,1,3); hold on; stem(k,ay); xlabel('frequency (k)'); axis([0 N min(ax) max(ax)]);

131 signals Λύσεις εργαστηριακών ασκήσεων 131 Αποτελέσματα time (n) frequency (k) frequency (k)

132 13 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 8.3γ: Διαδοχική εφαρμογή φίλτρων: Κατασκευάστε πρόγραμμα (program83c.m) στο οποίο να κάνετε τα εξής: α) Κατασκευάστε ένα σύνθετο σήμα 00 τιμών που να αποτελείται από τις συχνότητες 10, 40 και 80 με πλάτη ίσα με 10 (όλα). β) Φιλτράρετε το παραπάνω σήμα με δύο διαδοχικά φίλτρα Butterworth κατάλληλων συχνοτήτων αποκοπής, ώστε διαδοχικά να υποδιπλασιαστεί πρώτα η χαμηλή και στη συνέχεια η υψηλή συχνότητα. [Υπόδειξη: Εφαρμόστε το δεύτερο φίλτρο στο αποτέλεσμα του πρώτου φιλτραρίσματος.] γ) Να απεικονιστεί το αρχικό σύνθετο σήμα μεζί με το τελικό στους ίδιους άξονες στο πεδίο του χρόνου (subplot 1). Επίσης, να απεικονιστούν το αρχικό και το τελικό σήμα στο πεδίο των συχνοτήτων (subplots & 3). program83c.m clc; clear all; close all; % Signal N = 00; % Μήκος σήματος A1 = 10; A = 10; A3 = 10; % Πλάτη συνιστωσών σημάτων f1 = 10; f = 40; f3 = 80; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) + A3*sin(*pi*n*f3/N); % High-pass Butterworth filter fco = 10; n = 3; % Επιλογή της fco=10 ώστε να υποδιπλασιαστεί η f1=10 Fh = filter_butterworth_highpass(n,fco,n); % High-pass για διατήρηση υψηλών y = convolution_freq_filter0(x,fh); % x --(φιλτράρισμα)--> y % Low-pass Butterworth filter fco = 80; n = 3; % Επιλογή της fco=80 ώστε να υποδιπλασιαστεί η f3=80 Fh = filter_butterworth_lowpass(n,fco,n); % Low-pass για διατήρηση χαμηλών z = convolution_freq_filter0(y,fh); % y --(φιλτράρισμα)--> z % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); % Αρχικό [RFy IFy]= dft(z); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Τελικό % Plots n=[0:n-1]; k=[0:n-1]; subplot(3,1,1); hold on; plot(n,x); plot(n,y,'r'); grid on; xlabel('time (n)'); ylabel('signals'); subplot(3,1,); hold on; stem(k,ax); xlabel('frequency (k)'); axis([0 N min(ax) max(ax)]); subplot(3,1,3); hold on; stem(k,ay); xlabel('frequency (k)'); axis([0 N min(ax) max(ax)]);

133 signals Λύσεις εργαστηριακών ασκήσεων 133 Αποτελέσματα time (n) frequency (k) frequency (k)

134 134 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 8.3δ: Κατασκευή εκθετικών φίλτρων (low-pass, high-pass, band-reject, band-pass): Κατασκευάστε συναρτήσεις που να υλοποιούν τα παρακάτω φίλτρα: εκθετικό low-pass (filter_exponential_lowpass.m), εκθετικό high-pass (filter_exponential_highpass.m), εκθετικό band-reject (filter_exponential_badreject.m) και εκθετικό band-pass (filter_exponential_bandpass.m), όπως στα φίλτρα Butterworth (Εργασία 8.α). Υπόδειξη: Γράψτε πρώτα τις μαθηματικές σχέσεις των ανωτέρω εκθετικών φίλτρων. Λύση: Οι μαθηματικές σχέσεις των ανωτέρω εκθετικών φίλτρων είναι: n k ln f Εκθετικό co N e, για k Low-pass: Fh( k) n Nk ln f co N e, για k όπου f co = συχνότητα αποκοπής (cut-off frequency) και n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) Εκθετικό High-pass: e Fh( k) e ln f co k n f n ln co Nk, για, για k όπου f co = συχνότητα αποκοπής (cut-off frequency) και n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) k N N Εκθετικό Band-Reject: e Fh( k) e f n ln co kd f n ln co N k d, για, για k όπου f co = συχνότητα αποκοπής (cut-off frequency), n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) και d = κέντρο συχνοτήτων αποκοπής (μετατόπιση προς τα δεξιά σε σχέση με το high-pass) N k N Εκθετικό Band-Pass: e Fh( k) e n kd ln f co n N k d ln f co, για, για k N k όπου f co = συχνότητα αποκοπής (cut-off frequency), n = βαθμός φίλτρου (όσο μεγαλύτερος, τόσο το φίλτρο τείνει προς το ιδεώδες) και d = κέντρο συχνοτήτων διέλευσης (μετατόπιση προς τα δεξιά σε σχέση με το low-pass) N

135 Λύσεις εργαστηριακών ασκήσεων 135 Κατά συνέπεια τα εκθετικά φίλτρα υλοποιούνται ως εξής: filter_exponential_lowpass.m function Fh = filter_exponential_lowpass(n,fco,n) % Exponential Low-pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = exp(-log()*(k/fco)^n); else Fh(k+1) = exp(-log()*((n-k)/fco)^n); filter_exponential_highpass.m function Fh = filter_exponential_highpass(n,fco,n) % Exponential High-pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = exp(-log()*(fco/k)^n); else Fh(k+1) = exp(-log()*(fco/(n-k))^n); filter_exponential_bandreject.m function Fh = filter_exponential_bandreject(n,fco,n,d) % Exponential Band-Reject filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree % d = shift for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = exp(-log()*(fco/(k-d))^n); else Fh(k+1) = exp(-log()*(fco/(n-k-d))^n); filter_exponential _bandpass.m function Fh = filter_exponential_bandpass(n,fco,n,d) % Exponential Band-Pass filter % N = filter length (must be equal the signal length) % fco = cut-off frequency % n = degree % d = shift for k=0:n-1 % (k=συχνότητα, k+1=δείκτης πίνακα) if k<n/ Fh(k+1) = exp(-log()*((k-d)/fco)^n); else Fh(k+1) = exp(-log()*((n-k-d)/fco)^n);

136 136 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Άσκηση 8.3ε: Προγράματα εφαρμογής των εκθετικών φίλτρων: Κατασκευάστε δύο προγράμματα (program83d_1.m και program83d_.m), στα οποία να γίνεται επίδειξη εφαρμογής των εκθετικών φίλτρων low-pass/high-pass και band-reject/bandpass αντίστοιχa, κατά το υπόδειγμα των προγραμμάτων εφαρμογής των φίλτρων Butterworth (program8b_1.m και program8b_.m, Εργασία 8.γ). program83d_1.m clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% EXPONENTIAL LOW-PASS & HIGH-PASS FILTERING %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal N = 100; % Μήκος σήματος A1 = 10; A = 4; A3 = ; A4 = ; % Πλάτη συνιστωσών σημάτων f1 = 1; f = 5; f3 = 30; f4 = 40; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N) + A4*sin(*pi*n*f4/N); % Low-pass Exponential filter fco1 = 5; n1 = 3; Fh1 = filter_exponential_lowpass(n,fco1,n1); y1 = convolution_freq_filter0(x,fh1); % High-pass Exponential filter fco = 5; n = 3; Fh = filter_exponential_highpass(n,fco,n); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy1 IFy1]= dft(y1); for k=1:n, Ay1(k) = sqrt(rfy1(k)^+ify1(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Plots n=[0:n-1]; k=[0:n-1]; subplot(4,,1); hold on; stem(k,fh1); plot([n/ N/],[0 max(fh1)],'k--','linewidth',); text(n/,max(fh1)/,'n/','horizontalalignment','c','backgroundcolor','w'); plot([0 fco1],[fh1(fco1+1) Fh1(fco1+1)],'k-','LineWidth',1.5); plot([fco1 fco1],[0 Fh1(fco1+1)],'k-','LineWidth',1.5); xlabel('frequency (k)'); titlestring = sprintf('low-pass Exponential filter (fco=%d,n=%d)',fco1,n1); title(titlestring); subplot(4,,); hold on; stem(k,fh); plot([n/ N/],[0 max(fh)],'k--','linewidth',); text(n/,max(fh)/,'n/','horizontalalignment','c','backgroundcolor','w'); plot([0 fco],[fh(fco+1) Fh(fco+1)],'k-','LineWidth',1.5); plot([fco fco],[0 Fh(fco+1)],'k-','LineWidth',1.5); xlabel('frequency (k)'); titlestring = sprintf('high-pass Exponential filter(fco=%d,n=%d)',fco,n); title(titlestring);

137 Λύσεις εργαστηριακών ασκήσεων 137 subplot(4,,3); hold on; grid on; plot(n,x); plot(n,y1,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,4); hold on; grid on; plot(n,x); plot(n,y,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,5); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,6); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,7); k=[0:n-1]; stem(k,ay1,'r'); hold on; plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('low-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,8); k=[0:n-1]; stem(k,ay,'r'); hold on; plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('high-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]);

138 138 Εργαστηριακές ασκήσεις επεξεργασίας σήματος Αποτελέσματα Παρατηρήσεις: Στο πρόγραμμα αυτό εργαστήκαμε όπως ακριβώς και στο program8b_1.m, με τη διαφορά ότι χρησιμοποιήσαμε Εκθετικό φίλτρο αντί για Butterworth. Τα αποτελέσματα είναι παρόμοια, σχεδόν χωρίς διαφορές, λόγω της παρόμοιας μορφής των δύο φίλτρων.

139 Λύσεις εργαστηριακών ασκήσεων 139 program83d_.m clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% EXPONENTIAL BAND-REJECT & BAND-PASS FILTERING %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal N = 00; % Μήκος σήματος A1 = 10; A = 4; A3 = 4; A4 = ; % Πλάτη συνιστωσών σημάτων f1 = 1; f = 30; f3 = 3; f4 = 50; % Συχνότητες συνιστωσών σημάτων for n=0:n-1 % (n=συχνότητα, n+1=δείκτης πίνακα) x(n+1) = A1*sin(*pi*n*f1/N) + A*sin(*pi*n*f/N) +... A3*sin(*pi*n*f3/N) + A4*sin(*pi*n*f4/N); % Band-Reject Exponential filter fco1 = 5; n1 = ; d1 = 30; Fh1 = filter_exponential_bandreject(n,fco1,n1,d1); y1 = convolution_freq_filter0(x,fh1); % Band-Pass Exponential filter fco = 5; n = ; d = 30; Fh = filter_exponential_bandpass(n,fco,n,d); y = convolution_freq_filter0(x,fh); % Amplitude spectrums [RFx IFx]= dft(x); for k=1:n, Ax(k) = sqrt(rfx(k)^+ifx(k)^); [RFy1 IFy1]= dft(y1); for k=1:n, Ay1(k) = sqrt(rfy1(k)^+ify1(k)^); [RFy IFy]= dft(y); for k=1:n, Ay(k) = sqrt(rfy(k)^+ify(k)^); % Plots n=[0:n-1]; k=[0:n-1]; subplot(4,,1); hold on; stem(k,fh1); plot([n/ N/],[0 max(fh1)],'k--','linewidth',); text(n/,max(fh1)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring = sprintf('band-reject Exponential filter (fco=%d, n=%d, d=%d)',fco1,n1,d1); title(titlestring); subplot(4,,); hold on; stem(k,fh); plot([n/ N/],[0 max(fh)],'k--','linewidth',); text(n/,max(fh)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); titlestring = sprintf('band-pass Exponential filter (fco=%d, n=%d, d=%d)',fco,n,d); title(titlestring); subplot(4,,3); hold on; grid on; plot(n,x); plot(n,y1,'r'); xlabel('time (n)'); ylabel('signal'); leg('original signal','filtered signal'); subplot(4,,4); hold on; grid on; plot(n,x); plot(n,y,'r'); xlabel('time (n)'); ylabel('signal');

140 140 Εργαστηριακές ασκήσεις επεξεργασίας σήματος leg('original signal','filtered signal'); subplot(4,,5); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,6); hold on; stem(k,ax); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('original Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,7); hold on; stem(k,ay1,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('low-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]); subplot(4,,8); hold on; stem(k,ay,'r'); plot([n/ N/],[0 max(ax)],'k--','linewidth',); text(n/,max(ax)/,'n/','horizontalalignment','c','backgroundcolor','w'); xlabel('frequency (k)'); leg('high-pass filtered Amplitude Spectrum'); axis([0 N min(ax) max(ax)]);

141 Λύσεις εργαστηριακών ασκήσεων 141 Αποτελέσματα Παρατηρήσεις: Στο πρόγραμμα αυτό εργαστήκαμε όπως ακριβώς και στο program8b_.m, με τη διαφορά ότι χρησιμοποιήσαμε Εκθετικό φίλτρο αντί για Butterworth. Τα αποτελέσματα είναι παρόμοια, σχεδόν χωρίς διαφορές, λόγω της παρόμοιας μορφής των δύο φίλτρων.

Γραφικές παραστάσεις (2ο μέρος)

Γραφικές παραστάσεις (2ο μέρος) Γραφικές παραστάσεις (2ο μέρος) Σε αυτήν την ενότητα θα εξοικειωθείτε με τον τρόπο απεικόνισης γραφικών παραστάσεων στο MATLAB χρησιμοποιώντας την εντολή plot με πίνακες. Επίσης, θα δείτε επιπλέον εντολές

Διαβάστε περισσότερα

Γραφικές παραστάσεις (1ο μέρος)

Γραφικές παραστάσεις (1ο μέρος) ΤΕΙ ΑΘΗΝΑΣ Τμήμα Ηλεκτρονικής Φυσική των Αισθητήρων Γραφικές παραστάσεις (1ο μέρος) Σε αυτήν την ενότητα θα εξοικειωθείτε με τον τρόπο απεικόνισης γραφικών παραστάσεων στο MATLAB, και συγκεκριμένα με τις

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 8 Η εξίσωση της απομάκρυνσης x συναρτήσει του χρόνου t σε μια απλή αρμονική ταλάντωση δίνεται από τη σχέση:

ΑΣΚΗΣΗ 8 Η εξίσωση της απομάκρυνσης x συναρτήσει του χρόνου t σε μια απλή αρμονική ταλάντωση δίνεται από τη σχέση: ΑΣΚΗΣΗ 7 Θεωρούμε δύο απλές αρμονικές ταλαντώσεις, χωρίς τριβές, με ίδιο πλάτος Α, των οποίων οι απομακρύνσεις σε συνάρτηση με το χρόνο t δίνονται από τις σχέσεις: x 1 = A ημ(2πf 1 t) x 2 = A ημ(2πf 2

Διαβάστε περισσότερα

Δημιουργία και εκτέλεση προγραμμάτων. Εντολές εισόδου από το πληκτρολόγιο και εξόδου στην οθόνη.

Δημιουργία και εκτέλεση προγραμμάτων. Εντολές εισόδου από το πληκτρολόγιο και εξόδου στην οθόνη. Δημιουργία και εκτέλεση προγραμμάτων. Εντολές εισόδου από το πληκτρολόγιο και εξόδου στην οθόνη. Σε αυτήν την ενότητα θα δημιουργήσετε και θα εκτελέσετε τα πρώτα σας απλά προγράμματα. Επίσης, θα δείτε

Διαβάστε περισσότερα

Εργαστήριο Μαθηματικής Ανάλυσης Ι. Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις. Πανεπιστήμιο Θεσσαλίας. Σχολή Θετικών Επιστημών

Εργαστήριο Μαθηματικής Ανάλυσης Ι. Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις. Πανεπιστήμιο Θεσσαλίας. Σχολή Θετικών Επιστημών Πανεπιστήμιο Θεσσαλίας Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής με εφαρμογές στη Βιοϊατρική Εργαστήριο Μαθηματικής Ανάλυσης Ι Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις Εισαγωγή στη

Διαβάστε περισσότερα

Συστήματα Αναμονής (Queuing Systems)

Συστήματα Αναμονής (Queuing Systems) ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ - ΕΜΠ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧ. ΥΠΟΛΟΓΙΣΤΩΝ Τομέας Επικοινωνιών, Ηλεκτρονικής & Συστημάτων Πληροφορικής Εργαστήριο Διαχείρισης & Βέλτιστου Σχεδιασμού Δικτύων Τηλεματικής

Διαβάστε περισσότερα

1 Πίνακες 1.1 Συνοπτική θεωρία

1 Πίνακες 1.1 Συνοπτική θεωρία 1 Πίνακες Σε αυτήν την ενότητα θα εξοικειωθείτε με την έννοια των πινάκων στον προγραμματισμό (χωρίς τον ιδιαίτερο τρόπο χειρισμού των πινάκων στο MATLAB), και συγκεκριμένα θα δείτε: πώς ορίζεται ένας

Διαβάστε περισσότερα

Τυπικές χρήσεις της Matlab

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

Διαβάστε περισσότερα

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1 Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave Περιεχόμενο εργαστηρίου: - Το περιβάλλον ανάπτυξης προγραμμάτων Octave - Διαδικασία ανάπτυξης προγραμμάτων MATLAB - Απλά

Διαβάστε περισσότερα

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΗΠΕΙΡΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. Εργαστήριο Επεξεργασία Εικόνας & Βίντεο 1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή Νικόλαος Γιαννακέας Άρτα 2018 1 Εισαγωγή Το Matlab

Διαβάστε περισσότερα

true (1) αν και οι δύο είσοδοι είναι true (1) true (1) αν τουλάχιστον μια είσοδος είναι true (1)

true (1) αν και οι δύο είσοδοι είναι true (1) true (1) αν τουλάχιστον μια είσοδος είναι true (1) Λογικές και συγκριτικές πράξεις. Εντολή διακλάδωσης if Σε αυτήν την ενότητα θα εξοικειωθείτε με: τις λογικές μεταβλητές τις συγκριτικές πράξεις, τις λογικές πράξεις και τους τελεστές τους. την εντολή διακλάδωσης

Διαβάστε περισσότερα

Ψηφιακή Επεξεργασία Σήματος

Ψηφιακή Επεξεργασία Σήματος Ψηφιακή Επεξεργασία Σήματος Εργαστήριο 3 Εισαγωγή στα Σήματα Αλέξανδρος Μανουσάκης Τι είναι σήμα; Ως σήμα ορίζουμε το σύνολο των τιμών που λαμβάνει μια ποσότητα (εξαρτημένη μεταβλητή) όταν αυτή μεταβάλλεται

Διαβάστε περισσότερα

Εισαγωγή στα Σήματα. Κυριακίδης Ιωάννης 2011

Εισαγωγή στα Σήματα. Κυριακίδης Ιωάννης 2011 Εισαγωγή στα Σήματα Κυριακίδης Ιωάννης 2011 Τελευταία ενημέρωση: 11/11/2011 Τι είναι ένα σήμα; Ως σήμα ορίζουμε το σύνολο των τιμών που λαμβάνει μια ποσότητα (εξαρτημένη μεταβλητή) όταν αυτή μεταβάλλεται

Διαβάστε περισσότερα

Αριθμητική Ανάλυση & Εφαρμογές

Αριθμητική Ανάλυση & Εφαρμογές Αριθμητική Ανάλυση & Εφαρμογές Διδάσκων: Δημήτριος Ι. Φωτιάδης Τμήμα Μηχανικών Επιστήμης Υλικών Ιωάννινα 2017-2018 Υπολογισμοί και Σφάλματα Παράσταση Πραγματικών Αριθμών Συστήματα Αριθμών Παράσταση Ακέραιου

Διαβάστε περισσότερα

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB Εαρινό εξάμηνο 2018-2019 Τμήμα Μαθηματικών ΑΠΘ Διδάσκουσα: Αγγελική Παπάνα Μεταδιδακτορική Ερευνήτρια Πολυτεχνική σχολή, Α.Π.Θ. & Οικονομικό Τμήμα, Πανεπιστήμιο

Διαβάστε περισσότερα

ΑΣΚΗΣΗ Κείµενο στο 2ο µόνο γράφηµα ο αριθµός µηδέν στα σηµεία µε συντεταγµένες (0.5,0), (1.5,0), (2.5,0), (3.5,0), (4.5,0), (5.5,0).

ΑΣΚΗΣΗ Κείµενο στο 2ο µόνο γράφηµα ο αριθµός µηδέν στα σηµεία µε συντεταγµένες (0.5,0), (1.5,0), (2.5,0), (3.5,0), (4.5,0), (5.5,0). ΑΣΚΗΣΗ 7 Θεωρούµε δύο απλές αρµονικές ταλαντώσεις, χωρίς τριβές, µε ίδιο πλάτος Α, των οποίων οι αποµακρύνσεις σε συνάρτηση µε το χρόνο t δίνονται από τις σχέσεις: x 1 = A ηµ(2πf 1 t) x 2 = A ηµ(2πf 2

Διαβάστε περισσότερα

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Υπολογιστές Εισαγωγή στους Υπολογιστές Ενότητα #5: Διαγράμματα ροής (Flow Charts), Δομές επανάληψης Καθ. Δημήτρης Ματαράς Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών Διαγράμματα ροής (Flow Charts), Δομές επανάληψης

Διαβάστε περισσότερα

Σύντομη Αναφορά σε Βασικές Έννοιες Ψηφιακής Επεξεργασίας Σημάτων

Σύντομη Αναφορά σε Βασικές Έννοιες Ψηφιακής Επεξεργασίας Σημάτων Πρόγραμμα Μεταπτυχιακών Σπουδών: «Τεχνολογίες και Συστήματα Ευρυζωνικών Εφαρμογών και Υπηρεσιών» Μάθημα: «Επεξεργασία Ψηφιακού Σήματος και Σχεδιασμός Υλικού» Σύντομη Αναφορά σε Βασικές Έννοιες Ψηφιακής

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

ΦΥΛΛΟ ΑΠΑΝΤΗΣΗΣ 3 ης ΕΡΓΑΣΙΑΣ

ΦΥΛΛΟ ΑΠΑΝΤΗΣΗΣ 3 ης ΕΡΓΑΣΙΑΣ 1 η θεματική ενότητα: Εφαρμογές του εκπαιδευτικού λογισμικού IP 2005 ΦΥΛΛΟ ΑΠΑΝΤΗΣΗΣ 3 ης ΕΡΓΑΣΙΑΣ Θέμα δραστηριότητας: ΑΠΛΗ ΑΡΜΟΝΙΚΗ ΤΑΛΑΝΤΩΣΗ Μάθημα και Τάξη στην Φυσική Γενικής Παιδείας Β Λυκείου οποία

Διαβάστε περισσότερα

Ψηφιακή Επεξεργασία Σημάτων

Ψηφιακή Επεξεργασία Σημάτων Ψηφιακή Επεξεργασία Σημάτων Ενότητα 3: Συστήματα Διακριτού Χρόνου Δρ. Μιχάλης Παρασκευάς Επίκουρος Καθηγητής 1 Συστήματα Διακριτού Χρόνου Εισαγωγή στα Συστήματα Διακριτού Χρόνου Ταξινόμηση Συστημάτων ΔΧ

Διαβάστε περισσότερα

Συνοπτικός οδηγός MATLAB & OCTAVE. (έως και συναρτήσεις) Ιωάννης Καλατζής 2018d

Συνοπτικός οδηγός MATLAB & OCTAVE. (έως και συναρτήσεις) Ιωάννης Καλατζής 2018d Συνοπτικός οδηγός MATLAB & OCTAVE (έως και συναρτήσεις) Ιωάννης Καλατζής 2018d ΕΓΚΑΤΑΣΤΑΣΗ ΓΕΝΙΚΑ 2 MATLAB Το MATLAB είναι ένα περιβάλλον για επιστημονικό και τεχνικό προγραμματισμό, ιδανικό για ανάπτυξη

Διαβάστε περισσότερα

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

Εισαγωγή στη Matlab Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

Εισαγωγή στη Matlab Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής Εισαγωγή στη Matlab Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής email: dzavanti@cs.uoi.gr Περιεχόμενα Τι είναι η Matlab; Ιστορικά Χρήσεις και στοιχεία της Matlab

Διαβάστε περισσότερα

ΕΝΔΕΙΚΤΙΚΑ ΘΕΜΑΤΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ «ΥΠΟΛΟΓΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΙΑΤΡΙΚΩΝ ΚΑΙ ΒΙΟΛΟΓΙΚΩΝ ΔΕΔΟΜΕΝΩΝ»

ΕΝΔΕΙΚΤΙΚΑ ΘΕΜΑΤΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ «ΥΠΟΛΟΓΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΙΑΤΡΙΚΩΝ ΚΑΙ ΒΙΟΛΟΓΙΚΩΝ ΔΕΔΟΜΕΝΩΝ» ΕΝΔΕΙΚΤΙΚΑ ΘΕΜΑΤΑ ΓΙΑ ΤΟ ΜΑΘΗΜΑ «ΥΠΟΛΟΓΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΙΑΤΡΙΚΩΝ ΚΑΙ ΒΙΟΛΟΓΙΚΩΝ ΔΕΔΟΜΕΝΩΝ» Θέμα 1α Σημειώστε στις αγκύλες με [Χ] όσες προτάσεις θεωρείτε ότι είναι σωστές: [ ] Η συνάρτηση length(m,1) επιστρέφει

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 2 ΒΑΣΙΚΑ ΚΑΙ ΣΥΝΘΕΤΑ ΣΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ - ΕΙΚΟΝΑΣ

ΑΣΚΗΣΗ 2 ΒΑΣΙΚΑ ΚΑΙ ΣΥΝΘΕΤΑ ΣΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ - ΕΙΚΟΝΑΣ ΑΣΚΗΣΗ 2 ΒΑΣΙΚΑ ΚΑΙ ΣΥΝΘΕΤΑ ΣΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ - ΕΙΚΟΝΑΣ Αντικείμενο: Κατανόηση και αναπαράσταση των βασικών σημάτων δύο διαστάσεων και απεικόνισης αυτών σε εικόνα. Δημιουργία και επεξεργασία των διαφόρων

Διαβάστε περισσότερα

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Δυνατότητα ανάπτυξης, μεταγλώττισης και εκτέλεσης προγραμμάτων στη PASCAL. Κατανόηση της σύνταξης των προτάσεων της PASCAL. Κατανόηση της εντολής εξόδου για

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η Δ.Π.Θ. - Πολυτεχνική Σχολή Τμήμα Μηχανικών Παραγωγής & Διοίκησης Ακαδ. έτος 2016-2017 Τομέας Συστημάτων Παραγωγής Εξάμηνο Β Αναπληρωτής Καθηγητής Στέφανος Δ. Κατσαβούνης ΜΑΘΗΜΑ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διαβάστε περισσότερα

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

Διαβάστε περισσότερα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

Διαβάστε περισσότερα

Εισαγωγή στις Τηλεπικοινωνίες. Δομή της παρουσίασης

Εισαγωγή στις Τηλεπικοινωνίες. Δομή της παρουσίασης ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Εισαγωγή στις Τηλεπικοινωνίες Διάλεξη 3 η Τα Συστήματα στις Τηλεπικοινωνίες

Διαβάστε περισσότερα

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2) Τμήμα Μηχανικών Πληροφορικής Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Δρ. Δημήτρης Βαρσάμης Αριθμητικές Μέθοδοι (E 2) Σεπτέμβριος 2015

Διαβάστε περισσότερα

3 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

3 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα 3 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ Ενότητα: ΔΟΥΛΕΥΟΝΤΑΣ ΜΕ ΣΗΜΑΤΑ Aναστασία Βελώνη Τμήμα Η.Υ.Σ Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

ΤΕΙ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ

ΤΕΙ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ Συστήματα Ψηφιακής Επεξεργασίας Σήματος σε Πραγματικό Χρόνο 2009 10 ΤΕΙ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ Συστήματα Ψηφιακής Επεξεργασία Σήματος σε Πραγματικό

Διαβάστε περισσότερα

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 2ο Μεταβλητές Μεταβλητή ονομάζεται ένα μέγεθος

Διαβάστε περισσότερα

1. Κατασκευάστε ένα διάνυσμα με στοιχεία τους ζυγούς αριθμούς μεταξύ του 31 και 75

1. Κατασκευάστε ένα διάνυσμα με στοιχεία τους ζυγούς αριθμούς μεταξύ του 31 και 75 1. Κατασκευάστε ένα διάνυσμα με στοιχεία τους ζυγούς αριθμούς μεταξύ του 31 και 75 2. Έστω x = [2 5 1 6] α. Προσθέστε το 16 σε κάθε στοιχείο β. Προσθέστε το 3 σε κάθε στοιχείο που βρίσκεται σε μονή θέση.

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 9 Ανάλυση Fourier: Από τη Θεωρία στην Πρακτική Εφαρμογή των Μαθηματικών

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 9 Ανάλυση Fourier: Από τη Θεωρία στην Πρακτική Εφαρμογή των Μαθηματικών Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 9 Ανάλυση Fourier: Από τη Θεωρία στην Πρακτική Εφαρμογή των Μαθηματικών Τύπων. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Βασική δομή ενός προγράμματος

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

Διαβάστε περισσότερα

6 η ΕΝΟΤΗΤΑ Δομές επανάληψης

6 η ΕΝΟΤΗΤΑ Δομές επανάληψης ΣΧΟΛΗ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΕΜΠ ΜΕΘΟΔΟΙ ΕΠΙΛΥΣΗΣ ΜΕ Η/Υ 6 η ΕΝΟΤΗΤΑ Δομές επανάληψης Ν.Δ. Λαγαρός Μ. Φραγκιαδάκης Α. Στάμος Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες Χρήσης Creative Commons.

Διαβάστε περισσότερα

1. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB... 13

1. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB... 13 ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ 1. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB... 13 1.1. Τι είναι το Matlab... 13 1.2. Περιβάλλον εργασίας... 14 1.3. Δουλεύοντας με το Matlab... 16 1.3.1. Απλές αριθμητικές πράξεις... 16 1.3.2. Σχόλια...

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η Δημοκρίτειο Πανεπιστήμιο Θράκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Παραγωγής & Διοίκησης Ακαδ. έτος 2015-2016 Τομέας Συστημάτων Παραγωγής Εξάμηνο Β Αναπληρωτής Καθηγητής Στέφανος Δ. Κατσαβούνης ΜΑΘΗΜΑ :

Διαβάστε περισσότερα

17-Φεβ-2009 ΗΜΥ Ιδιότητες Συνέλιξης Συσχέτιση

17-Φεβ-2009 ΗΜΥ Ιδιότητες Συνέλιξης Συσχέτιση ΗΜΥ 429 7. Ιδιότητες Συνέλιξης Συσχέτιση 1 Μαθηματικές ιδιότητες Αντιμεταθετική: a [ * b[ = b[ * a[ παρόλο που μαθηματικά ισχύει, δεν έχει φυσικό νόημα. Προσεταιριστική: ( a [ * b[ )* c[ = a[ *( b[ * c[

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ 9.1 Εντολές Εισόδου/εξόδου Στην Pascal, 1. Tα δεδομένα των προγραμμάτων λαμβάνονται: είτε από το πληκτρολόγιο είτε από ένα αρχείο με τη χρήση των διαδικασιών read και readln,

Διαβάστε περισσότερα

Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink. Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος

Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink. Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος 1 Τι είναι τα Matlab και Simulink? Το Matlab (MATrix LABoratory) είναι ένα περιβάλλον επιστημονικού

Διαβάστε περισσότερα

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ Κεφαλαία και μικρά γράμματα ελληνικού αλφαβήτου: Α Ω και α ω Κεφαλαία και μικρά γράμματα λατινικού αλφαβήτου: A Z και a z Αριθμητικά ψηφία: 0 9 Ειδικοί χαρακτήρες: + - * / =. ( ),! & κενός

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων...

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων... Μέρος 2 Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων... 211 Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων... 241 Kεφάλαιο 13 Ανάλυση δεδομένων... 257 Kεφάλαιο 14 Συναρτήσεις Μέρος Β... 285 Kεφάλαιο 15 Ευρετήριο

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5 ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5 Σημειώσεις βασισμένες στο βιβλίο Το MATLAB στην Υπολογιστική Επιστήμη και Τεχνολογία Μια Εισαγωγή Πίνακες (Arrays) [1/2] Δομές δεδομένων για την αποθήκευση δεδομένων υπό

Διαβάστε περισσότερα

Εργαστήριο Γραμμικής Άλγεβρας. H Matlab ως γλώσσα προγραμματισμού

Εργαστήριο Γραμμικής Άλγεβρας. H Matlab ως γλώσσα προγραμματισμού Πανεπιστήμιο Θεσσαλίας Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής με Εφαρμογές στη Βιοϊατρική Εργαστήριο Γραμμικής Άλγεβρας H Matlab ως γλώσσα προγραμματισμού Προγραμματιστικές δομές Έλεγχος ροής if if

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών

Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών TINΑ ΒΡΕΝΤΖΟΥ www.ma8eno.gr www.ma8eno.gr Σελίδα 1 Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών Στους πραγματικούς αριθμούς ορίστηκαν οι

Διαβάστε περισσότερα

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2) Τμήμα Μηχανικών Πληροφορικής Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Δρ. Δημήτρης Βαρσάμης Αριθμητικές Μέθοδοι (E 2) Σεπτέμβριος 2015

Διαβάστε περισσότερα

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα. Η δομή Επιλογής στη PASCAL. H δομή Επανάληψης στη PASCAL. Η εντολή επανάληψης for

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα. Η δομή Επιλογής στη PASCAL. H δομή Επανάληψης στη PASCAL. Η εντολή επανάληψης for Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα Η δομή Επιλογής στη PASCAL H δομή Επανάληψης στη PASCAL Η εντολή επανάληψης for Σκοπός Η εντολή επανάληψης while. 1 ΕΡΓΑΣΤΗΡΙΟ 6 Εισαγωγή στο

Διαβάστε περισσότερα

Σήματα και Συστήματα. Διάλεξη 1: Σήματα Συνεχούς Χρόνου. Δρ. Μιχάλης Παρασκευάς Επίκουρος Καθηγητής

Σήματα και Συστήματα. Διάλεξη 1: Σήματα Συνεχούς Χρόνου. Δρ. Μιχάλης Παρασκευάς Επίκουρος Καθηγητής Σήματα και Συστήματα Διάλεξη 1: Σήματα Συνεχούς Χρόνου Δρ. Μιχάλης Παρασκευάς Επίκουρος Καθηγητής 1 Εισαγωγή στα Σήματα 1. Σκοποί της Θεωρίας Σημάτων 2. Κατηγορίες Σημάτων 3. Χαρακτηριστικές Παράμετροι

Διαβάστε περισσότερα

Συστήματα Διακριτού Χρόνου (Discrete-Time Systems) Κυριακίδης Ιωάννης 2011

Συστήματα Διακριτού Χρόνου (Discrete-Time Systems) Κυριακίδης Ιωάννης 2011 Συστήματα Διακριτού Χρόνου (Discrete-Time Systems) Κυριακίδης Ιωάννης 2011 Τελευταία ενημέρωση: 11/11/2011 Πράξεις διακριτών σημάτων (υπενθύμιση) Πρόσθεση x(n) + y(n) Αφαίρεση x(n) y(n) Πολλαπλασιασμός

Διαβάστε περισσότερα

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ, Εισαγωγή στο MATLAB Κολοβού Αθανασία, ΕΔΙΠ, akolovou@di.uoa.gr Εγκατάσταση του Matlab Διανέμεται ελεύθερα στα μέλη του ΕΚΠΑ το λογισμικό MATLAB με 75 ταυτόχρονες (concurrent) άδειες χρήσης. Μπορείτε να

Διαβάστε περισσότερα

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

Διαβάστε περισσότερα

Πληροφορική. Ενότητα 1: Α. Οργάνωση μαθήματος. Β. Στοιχεία Προγραμματισμού -Προγραμματιστικές Δομές, Πρόγραμμα, Γλώσσες.

Πληροφορική. Ενότητα 1: Α. Οργάνωση μαθήματος. Β. Στοιχεία Προγραμματισμού -Προγραμματιστικές Δομές, Πρόγραμμα, Γλώσσες. ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Πληροφορική Ενότητα 1: Α. Οργάνωση μαθήματος. Β. Στοιχεία Προγραμματισμού -Προγραμματιστικές Δομές, Πρόγραμμα, Γλώσσες. Κωνσταντίνος Καρατζάς

Διαβάστε περισσότερα

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C) Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C) ΚΑΤΑΛΟΓΟΣ ΕΡΩΤΗΣΕΩΝ ΕΡΩΤΗΣΕΙΣ ΕΙ ΙΚΩΝ ΓΝΩΣΕΩΝ (γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

M files RCL Κυκλώματα

M files RCL Κυκλώματα M files RCL Κυκλώματα Στο MATLAB γράφουμε τις δικές μας εντολές και προγράμματα μέσω αρχείων που καλούνται m-files. Έχουν το επίθεμα.m π.χ compute.m Υπάρχουν δύο είδη m-files: τα αρχεία script (script

Διαβάστε περισσότερα

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

Διαβάστε περισσότερα

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

Διαβάστε περισσότερα

Εισαγωγή στη Matlab Βασικές Συναρτήσεις

Εισαγωγή στη Matlab Βασικές Συναρτήσεις Πανεπιστήμιο Θεσσαλίας Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής με Εφαρμογές στη Βιοϊατρική Εργαστήριο Γραμμικής Άλγεβρας Εισαγωγή στη Matlab Βασικές Συναρτήσεις 2016-2017 Εισαγωγή στη Matlab Matlab

Διαβάστε περισσότερα

Για τη δημιουργία ενός διανύσματος με στοιχεία από το 0 μέχρι το 20 με βήμα το 2 (χρησιμοποιείται συνήθως για διανύσματα χρόνου) δίνουμε

Για τη δημιουργία ενός διανύσματος με στοιχεία από το 0 μέχρι το 20 με βήμα το 2 (χρησιμοποιείται συνήθως για διανύσματα χρόνου) δίνουμε Εργαστήριο Συστημάτων Αυτομάτου Ελέγχου Άσκηση 1 η Εισαγωγή στο Matlab 1 Άσκηση 1 η : Εισαγωγή στο Matlab Αντικείμενο Εξοικείωση με τις βασικές λειτουργίες του Matlab (πρόγραμμα αριθμητικής ανάλυσης και

Διαβάστε περισσότερα

Σε αυτήν την ενότητα θα εξοικειωθείτε με το περιβάλλον αλληλεπίδρασης του MATLAB με το χρήστη.

Σε αυτήν την ενότητα θα εξοικειωθείτε με το περιβάλλον αλληλεπίδρασης του MATLAB με το χρήστη. 1 Το περιβάλλον εργασίας του MATLAB 7 Σε αυτήν την ενότητα θα εξοικειωθείτε με το περιβάλλον αλληλεπίδρασης του MATLAB με το χρήστη. 1.1 Μια πρώτη ματιά Μετά την πρώτη εγκατάσταση και εκτέλεση του MATLAB

Διαβάστε περισσότερα

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Ενότητα 1: Εισαγωγή στο Matlab Διδάσκουσα: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System) 2.1.1 Εισαγωγή στη διαχείριση αρχείων Οι Η/Υ αποθηκεύουν τα δεδομένα και τα επεξεργάζονται. Εφαρμογή Προγράμματος C:\Documents and Settings\user\Τα έγγραφά μου\leitourgika.doc Λ.Σ. File System Γι αυτό

Διαβάστε περισσότερα

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

Διαβάστε περισσότερα

Το παράθυρο έναρξης του Μatlab

Το παράθυρο έναρξης του Μatlab Εισαγωγή στο Matlab Το παράθυρο έναρξης του Μatlab Αν οποιοδήποτε από αυτά τα παράθυρα είναι κρυμμένο μπορείτε να το εμφανίσετε από το menu με όνομα Desktop. Desktop > Desktop Layout > Default Ένα παράθυρο

Διαβάστε περισσότερα

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Ενότητα 3: Αρχεία script- Αρχεία συναρτήσεων Διδάσκουσα: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

ΑΛΓΕΒΡΑ Α ΓΥΜΝΑΣΙΟΥ ΘΕΤΙΚΟΙ ΚΑΙ ΑΡΝΗΤΙΚΟΙ ΑΡΙΘΜΟΙ ΕΠΙΜΕΛΕΙΑ : ΧΑΛΑΤΖΙΑΝ ΠΑΥΛΟΣ

ΑΛΓΕΒΡΑ Α ΓΥΜΝΑΣΙΟΥ ΘΕΤΙΚΟΙ ΚΑΙ ΑΡΝΗΤΙΚΟΙ ΑΡΙΘΜΟΙ ΕΠΙΜΕΛΕΙΑ : ΧΑΛΑΤΖΙΑΝ ΠΑΥΛΟΣ ΘΕΤΙΚΟΙ ΚΑΙ ΑΡΝΗΤΙΚΟΙ ΑΡΙΘΜΟΙ ΕΠΙΜΕΛΕΙΑ : ΧΑΛΑΤΖΙΑΝ ΠΑΥΛΟΣ ΚΕΦΑΛΑΙΟ 7 Ο ΘΕΤΙΚΟΙ ΚΑΙ ΑΡΝΗΤΙΚΟΙ ΑΡΙΘΜΟΙ ΣΤΟΙΧΕΙΑ ΘΕΩΡΙΑΣ 1. Όταν μπροστα" (αριστερα") απο" ε"ναν αριθμο" γραφει" το συ"μβολο + το"τε ο αριθμο"ς

Διαβάστε περισσότερα

ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ. Μια παράσταση που περιέχει πράξεις με μεταβλητές (γράμματα) και αριθμούς καλείται αλγεβρική, όπως για παράδειγμα η : 2x+3y-8

ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ. Μια παράσταση που περιέχει πράξεις με μεταβλητές (γράμματα) και αριθμούς καλείται αλγεβρική, όπως για παράδειγμα η : 2x+3y-8 ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ Άλγεβρα 1 ο Κεφάλαιο 1. Τι ονομάζουμε αριθμητική και τι αλγεβρική παράσταση; Να δώσετε από ένα παράδειγμα. Μια παράσταση που περιέχει πράξεις με αριθμούς, καλείται αριθμητική παράσταση,

Διαβάστε περισσότερα

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα; Λίστα για ψώνια Έννοιες: αρχεία- άνοιγμα- εγγραφή διάβασμα Προαπαιτούμενα : δομή επιλογής, επανάληψης, συναρτήσεις, λίστες Ο Άκης, τώρα που έμαθε και τις λίστες στην Python αποφάσισε να φτιάξει μια λίστα

Διαβάστε περισσότερα

Διακριτός Μετασχηματισμός Fourier

Διακριτός Μετασχηματισμός Fourier Διακριτός Μετασχηματισμός Fourier 1 Διακριτός Μετασχηματισμός Fourier Ο μετασχηματισμός Fourier αποτελεί τον ακρογωνιαίο λίθο της επεξεργασίας σήματος αλλά και συχνή αιτία πονοκεφάλου για όσους πρωτοασχολούνται

Διαβάστε περισσότερα

4. ΚΕΦΑΛΑΙΟ ΕΦΑΡΜΟΓΕΣ ΤΟΥ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ FOURIER

4. ΚΕΦΑΛΑΙΟ ΕΦΑΡΜΟΓΕΣ ΤΟΥ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ FOURIER 4. ΚΕΦΑΛΑΙΟ ΕΦΑΡΜΟΓΕΣ ΤΟΥ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ FOURIER Σκοπός του κεφαλαίου είναι να παρουσιάσει μερικές εφαρμογές του Μετασχηματισμού Fourier (ΜF). Ειδικότερα στο κεφάλαιο αυτό θα περιγραφούν έμμεσοι τρόποι

Διαβάστε περισσότερα

Εισαγωγή στο Matlab Μέρος Α. Κυριακίδης Ιωάννης 2011

Εισαγωγή στο Matlab Μέρος Α. Κυριακίδης Ιωάννης 2011 Εισαγωγή στο Matlab Μέρος Α Κυριακίδης Ιωάννης 2011 Εισαγωγή στο Matlab Το όνομα του προέρχεται από τα αρχικά γράμματα των λέξεων MATtrix LABoratory (εργαστήριο πινάκων). To MATLAB (MathWorks Inc.) παρέχει

Διαβάστε περισσότερα

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης;

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης; 10. Τι ονομάζουμε Ευκλείδεια διαίρεση και τέλεια διαίρεση; Όταν δοθούν δύο φυσικοί αριθμοί Δ και δ, τότε υπάρχουν δύο άλλοι φυσικοί αριθμοί π και υ, έτσι ώστε να ισχύει: Δ = δ π + υ. Ο αριθμός Δ λέγεται

Διαβάστε περισσότερα

Εισαγωγή στο GNU Octave/MATLAB

Εισαγωγή στο GNU Octave/MATLAB Εισαγωγή στο GNU Octave/MATLAB Δρ. Βασίλειος Δαλάκας Καλώς ήρθατε στο εργαστήριο Σημάτων και Συστημάτων με το λογισμικό Octave (Οκτάβα). Οι σημειώσεις αυτές έχουν βασιστεί στις σημειώσεις του εργαστηρίου

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 7 Ακούγοντας Πρώτη Ματιά στην Ανάλυση Fourier. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 7 Ακούγοντας Πρώτη Ματιά στην Ανάλυση Fourier. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 7 Ακούγοντας Πρώτη Ματιά στην Ανάλυση Fourier. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο Πλαίσιο (front

Διαβάστε περισσότερα

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

Διαβάστε περισσότερα

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι κ. ΠΕΤΑΛΙΔΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Ανάλυση, Στατιστική Επεξεργασία και Παρουσίαση Δεδομένων με χρήση Ανοικτών Λογισμικών Δρ. Φίλιππος Σοφός

Ανάλυση, Στατιστική Επεξεργασία και Παρουσίαση Δεδομένων με χρήση Ανοικτών Λογισμικών Δρ. Φίλιππος Σοφός Ανάλυση, Στατιστική Επεξεργασία και Παρουσίαση Δεδομένων με χρήση Ανοικτών Λογισμικών Δρ. Φίλιππος Σοφός ΠΕΡΙΓΡΑΜΜΑ ΠΑΡΟΥΣΙΑΣΗΣ Διερεύνηση αναγκών Επιλογή του Octave Χαρακτηριστικά και περιβάλλον εργασίας

Διαβάστε περισσότερα

2.1 ΠΡΑΞΕΙΣ ΚΑΙ ΟΙ ΙΔΙΟΤΗΤΕΣ ΤΟΥΣ

2.1 ΠΡΑΞΕΙΣ ΚΑΙ ΟΙ ΙΔΙΟΤΗΤΕΣ ΤΟΥΣ ΚΕΦΑΛΑΙΟ : ΟΙ ΠΡΑΓΜΑΤΙΚΟΙ ΑΡΙΘΜΟΙ. ΠΡΑΞΕΙΣ ΚΑΙ ΟΙ ΙΔΙΟΤΗΤΕΣ ΤΟΥΣ Ρητός ονομάζεται κάθε αριθμός που έχει ή μπορεί να πάρει τη μορφή κλάσματος, όπου, είναι ακέραιοι με 0. Ρητοί αριθμοί : Q /, 0. Έτσι π.χ.

Διαβάστε περισσότερα

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού

Διαβάστε περισσότερα

Μεταπτυχιακό Πρόγραμμα «Γεωχωρικές Τεχνολογίες» Ψηφιακή Επεξεργασία Εικόνας. Εισηγητής Αναστάσιος Κεσίδης

Μεταπτυχιακό Πρόγραμμα «Γεωχωρικές Τεχνολογίες» Ψηφιακή Επεξεργασία Εικόνας. Εισηγητής Αναστάσιος Κεσίδης Μεταπτυχιακό Πρόγραμμα «Γεωχωρικές Τεχνολογίες» Ψηφιακή Επεξεργασία Εικόνας Εισηγητής Αναστάσιος Κεσίδης Χωρικά φίλτρα Χωρικά φίλτρα Γενικά Σε αντίθεση με τις σημειακές πράξεις και μετασχηματισμούς, στα

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι Α λ γ ό ρ ι θ μ ο ι Αριθμητικοί τελεστές Οι αριθμητικοί τελεστές είναι: πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση +,-,*,/ ύψωση σε δύναμη ^ πηλίκο ακέραιης διαίρεσης δύο ακεραίων αριθμών div υπόλοιπο

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η Δ.Π.Θ. - Πολυτεχνική Σχολή Τμήμα Μηχανικών Παραγωγής & Διοίκησης Ακαδ. έτος 2017-2018 Τομέας Συστημάτων Παραγωγής Εξάμηνο Β Αναπληρωτής Καθηγητής Στέφανος Δ. Κατσαβούνης ΜΑΘΗΜΑ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διαβάστε περισσότερα

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ Διάλεξη 2 Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις Διοργάνωση : ΚΕΛ ΣΑΤΜ Διαφάνειες: Skaros, MadAGu Παρουσίαση: MadAGu Άδεια: Creative Commons 3.0 2 Internal

Διαβάστε περισσότερα

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου ΕΣΔ 516 Τεχνολογίες Διαδικτύου Εισαγωγή στην PHP Περιεχόμενα Περιεχόμενα PHP και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις Παράδειγματα 1 Βιβλιογραφία Ενότητας Βιβλιογραφία [Lane 2004]: Chapter

Διαβάστε περισσότερα

SPSS Statistical Package for the Social Sciences

SPSS Statistical Package for the Social Sciences SPSS Statistical Package for the Social Sciences Ξεκινώντας την εφαρμογή Εισαγωγή εδομένων Ορισμός Μεταβλητών Εισαγωγή περίπτωσης και μεταβλητής ιαγραφή περιπτώσεων ή και μεταβλητών ΣΤΑΤΙΣΤΙΚΗ Αθανάσιος

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 3: Πίνακες, βρόχοι, συναρτήσεις 1 Ιουνίου 2017 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 Τμήμα θεωρίας: Α.Μ. 8, 9 Κάθε Πέμπτη, 11πμ-2μμ, ΑΜΦ23. Διδάσκων: Ντίνος Φερεντίνος Γραφείο 118 email: kpf3@cornell.edu Μάθημα: Θεωρία + προαιρετικό

Διαβάστε περισσότερα

Έναρξη Τερματισμός του MatLab

Έναρξη Τερματισμός του MatLab Σύντομος Οδηγός MATLAB Β. Χ. Μούσας 1/6 Έναρξη Τερματισμός του MatLab Η έναρξη της λειτουργίας του MatLab εξαρτάται από το λειτουργικό σύστημα. Στα συστήματα UNIX πληκτρολογούμε στη προτροπή του συστήματος

Διαβάστε περισσότερα

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο Τετάρτη, 30 Οκτωβρίου 2013 Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο Λύστε στο Visual Basic Express 2010 τις παρακάτω ασκήσεις: 1. Να δημιουργήσετε ένα νέο Project του είδους Console

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 1 ο Εργαστήριο. Εισαγωγή στο Matlab

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 1 ο Εργαστήριο. Εισαγωγή στο Matlab Εργαστήρια Αριθμητικής Ανάλυσης Ι 1 ο Εργαστήριο Εισαγωγή στο Matlab 2017 Εισαγωγή Στα εργαστήρια θα ασχοληθούμε με την υλοποίηση των αριθμητικών μεθόδων που βλέπουμε στο θεωρητικό μέρος του μαθήματος,

Διαβάστε περισσότερα