Καθηγητής Γεώργιος Ευθύμογλου Σήματα και Συστήματα Καθηγητής Γεώργιος Ευθύμογλου February 16, 2019 Module Title
Εισαγωγή Discrete Time Fourier Transform (DTFT) Discrete Fourier Transform (DFT) Module Title
Discrete Time Fourier Transform (DTFT) είναι περιοδική συνάρτηση με περίοδο 2π: Έχουμε επίσης δει ότι η γωνιακή ψηφιακή συχνότητα 2π αντιστοιχεί στη συχνότητα δειγματοληψίας Fs (το διακριτού χρόνου σήμα έχει φάσμα ίδιο με το συνεχούς χρόνου που όμως επαναλαμβάνεται γύρω από ακέραια πολλαπλάσια το Fs, είναι δηλαδή περιοδικό με περίοδο Fs).
Inverse DTFT Ο αντίστροφος μετασχηματισμός δίνεται από τη σχέση Η οποία δεν είναι εύκολο να υπολογιστεί αφού για κάθε δείγμα n πρέπει να υπολογίσουμε το παραπάνω ολοκλήρωμα για να βρούμε το x(n).
Discrete Time Fourier Transform (DTFT) Στο MATLAB freqz χρησιμοποιείται για να βρούμε το διακριτού χρόνου Fourier transform σε «αρκετές» συχνότητες στο διάστημα 0 -2π ώστε να υπολογίσουμε το το οποίο θεωτητικά είναι μία συνεχής συνάρτηση του ω. Για πρακτικούς λόγους το υπολογίζουμε σε αρκετές συχνοτητες, π.χ. 200 ή 512 ή 1024 στη πρώτη περίοδο 0 – 2π Ερώτηση: τί γίνεται αν δειγματοληπτήσουμε την
Discrete Time Fourier Transform (DTFT) Αν έχουμε ένα σήμα με διάρκεια από [n1 n2] και θέλουμε να υπολογίσουμε τον DTFT για Μ+1 συχνότητες στο διάστημα [0, 2π] τότε έχουμε όπου
Υλοποίηση DTFT in Matlab Στο Matlab αν ορίσουμε τους vectors n=n1:n2 k=0:M-1 τότε η (1) μπορεί να γραφεί σε μορφή πίνακα ως Όπου είναι ο vector του σήματος και είναι ο vector του DTFT
Discrete Time Fourier Transform (DTFT) Στο Matlab n=[n1:n2]; k = [0:M-1]; X = x * (exp(-j*2*pi/M)).^(n’*k); O πίνακας n’*k έχει διαστάσεις Ν×Μ. Παράδειγμα n=n1:n2; % with n2-n1=1, δηλαδή για απλότητα επιλέγουμε μήκος σήματος=2 δείγματα k=0:2; % θέλουμε μόνο 3 συχνότητες στο διάστημα 0-2π n’*k =
Discrete Time Fourier Transform (DTFT) O τελεστής . σημαίνει ότι (exp(-j*2*pi/M)).^(n’*k) = Δηλαδή κάθε στοιχείο του πίνακα (n’*k) είναι εκθέτης στο exp(∙) Επομένως έχουμε τελικά ότι η (1) υλοποιείται όπου για το συγκεκριμένο παράδειγμα.
Discrete Time Fourier Transform (DTFT) Ένα σήμα cos(2π20t) το οποίο δειγματοληπτείται με συχνότητα δειγματοληψίας fs = 200Ηz και το οποίο ορίζεται για n=0:30; Σχεδιάστε το DTFT από –fs μέχρι fs
Discrete Time Fourier Transform (DTFT) clear; M=100; Fs = 200; n=0:30; Freq_step = 2*pi/M; k=-200:200; % we evaluate DTFT for frequencies: Freq_step *k % k=100 is equal to w=2*pi % so we plot from -fs until fs x=cos(0.2.*pi.*n); % vector with 31 values, since vector n has 31 points X = x * (exp(-j*2*pi/M)).^( n‘*k); F= (Fs/M)*k; % since Fs corresponds to 2pi, the frequency step size is Fs/M % F is a vector of length equal to the length of k ! plot(F, abs(X)) axis([-200 200 0 18]) xlabel('frequency (Hz)') ylabel('magnitude of X, |X|')
Discrete Time Fourier Transform (DTFT) Παρατηρήστε ότι το σήμα έχει δύο συνιστώσες στο -20 Ηz και 20Hz όπως περιμέναμε. Επίσης το φάσμα είναι περιοδικό με περίοδο Fs = 200 Hz.
2η υλοποίηση του DTFT (1/2) Note that the previous implementation in matrix form is given by Equivalently, we can have the following implementation
2η υλοποίηση του DTFT (2/2) Με τη δεύτερη υλοποίηση, ο κώδικας Matlab γίνεται clear; M=100; Fs = 200; n=0:30; % sample index Freq_step = 2*pi/M; k=-100:100; % we evaluate DTFT for frequencies: Freq_step *k x=cos(0.2.*pi.*n); % vector with 31 values, since vector n has 31 points X = (exp(-j*2*pi/M)).^(k'*n)*x'; F= (Fs/M)*k; % is a vector of length equal to the length of k ! plot(F, abs(X)) axis([-200 200 0 18]) xlabel('frequency (Hz)') ylabel('magnitude of X, |X|')
Άσκηση στο DTFT (1/2) Σχεδιάστε το Διακριτού Χρόνου Μετασχηματισμό Fourier του διακριτού χρόνου σήματος για συχνότητες από -2fs until 2fs Τί παρατηρείτε?
Άσκηση στο DTFT (2/2) Παρατηρούμε ότι ένα διακριτού χρόνου (έχει προέλθει από τη δειγματοληψία ενός συνεχούς) σήμα έχει περιοδικό φάσμα με περίοδο τη συχνότητα δειγματοληψίας. Επομένως στο παράδειγμα μας, όπου το αρχικό συνεχές σήμα είχε φάσμα με συχνότητες [-20, +20] Hz The sampled signal with Fs=200 Hz έχει φάσμα που περιλαμβάνει όλες τις συχνότητες Δηλαδή […, -420, -380, -220, -180, -20, 20, 180, 220, 380, 420...] Hz
Discrete Fourier Transform (DFT) Ορίζουμε τον Discrete Fourier Transform (DFT) και τον Inverse DFT (IDFT), με μήκος Ν, ως εξής: DFT Και IDFT Εύκολα προκύπτει ότι Δηλαδή οι τιμές του DFT είναι ίδιες με τις τιμές του DTFT που προκύπτουν αν δειγματοληπτήσουμε τo frequency domain με βήμα
Discrete Fourier Transform (DFT) Δηλαδή υπολογίζουμε την μόνο σε Ν συχνότητες ομοιόμορφα κατανεμημένες πάνω στον τριγωνομετρικό κύκλο 0 – 2π με απόσταση η μία από την επόμενη ω1. Το διάστημα ω1 λέγεται sampling interval in the frequency domain αλλά και frequency resolution διότι καθορίζει πόσο κοντά είναι οι συχνότητες στις οποίες υπολογίζουμε το .
Discrete Fourier Transform (DFT) Επίσης είναι σημαντικό να δούμε ότι ο αντίστροφος DFT δίνεται πλέον από ένα πεπερασμένο άθροισμα (μήκος Ν) και όχι από ολοκλήρωμα. Επομένως προκύπτει ότι για ένα διακριτού χρόνου σήμα με μήκος Ν δείγματα, αν γνωρίζουμε με τον DFT τις τιμές του σε Ν συχνότητες μπορούμε να ανακτήσουμε ακριβώς τα δείγματα x(n) (με τον IDFT).
Discrete Fourier Transform (DFT) Υπολογίστε το Discrete Fourier Transform του σήματος x(n) με μήκος Ν δείγματα (samples) DFT is equal to DTFT when it is evaluated in N frequencies (equal to the number of samples in the time domain).
DFT example (1/2) Υπολογίστε το Discrete Fourier Transform (DFT) του σήματος x(n) = [1 0 0 1] με Ν=4
DFT example (2/2) k=0 k=1 k=2 k=3 X(k) = DFT[x(n)] = [2, 1+j, 0, 1-j]
Inverse DFT (IDFT) x(n) = IDFT[X(k)] = [1 0 0 1]
Example with DFT Εφαρμογή: Βρείτε τον DFT του σήματος x=[6,5,4,3,2,1] με μήκος M=length(x)=6 με μήκος M=4 clear; x=[6,5,4,3,2,1]; n=0:5; % time domain samples of signal M=6; k=0:M-1; % we sample the frequency domain in 6 frequencies X = x * (exp(-j*2*pi/M)).^(n'*k) W= (2*pi/M)*k; % frequencies where DTFT is evaluated
Example with DFT X = 21.0000 3.0000 - 5.1962i 3.0000 - 1.7321i 3.0000 - 0.0000i 3.0000 + 1.7321i 3.0000 + 5.1962i το οποίο συμφωνεί με x=[6,5,4,3,2,1]; >> y=fft(x,6) y = Columns 1 through 6 21.0000 3.0000 - 5.1962i 3.0000 - 1.7321i 3.0000 3.0000 + 1.7321i 3.0000 + 5.1962i
Example with DFT >> x_new = ifft(y,6) x_new = 6.0000 5.0000 4.0000 3.0000 2.0000 1.0000 Αν πάρουμε μεγαλύτερο μήκος DFT / IDFT το αποτέλεσμα θα είναι: >> x=[6,5,4,3,2,1]; >> y=fft(x, 8) y = 21.0000 4.7071 - 8.9497i 4.0000 - 3.0000i 3.2929 - 0.9497i 3.0000 3.2929 + 0.9497i 4.0000 + 3.0000i 4.7071 + 8.9497i >> x_new = ifft(y, 8) x_new = 6.0000 5.0000 4.0000 3.0000 2.0000 1.0000 0.0000 0.0000
Example with DFT Τί γίνεται αν υπολογίσουμε το DTFT σε λιγότερες συχνότητες από το μήκος Ν του σήματος? clear; x=[6,5,4,3,2,1]; n=0:5; % time domain samples of signal M=4; k=0:M-1; % we sample the frequency domain in 4 frequencies X = x * (exp(-j*2*pi/M)).^(n'*k) W= (2*pi/M)*k; % frequencies where DFT is evaluated X = 21.0000 4.0000 - 3.0000i 3.0000 - 0.0000i 4.0000 + 3.0000i
Example with DFT Χ(0) = 6*1 + 5*1 + 4*1 + 3*1 + 2*1 + 1*1 = 21 X(1) = 6*1 + 5* (-j) + 4*(-1) + 3*(j) + 2*1 + 1*(-j) = 4 + j (-3) Παρατηρήστε ότι X(2) = 6*1 + 5 * (-1) + 4*(1) + 3*(-1) + 2*(1) + 1*(-1) = 3 Χ(3) = 6*1 + 5*( ) + 4*( ) + 3* (-j) + 2*(1) + 1*( ) = 4 + j 3
Example with DFT Στη συνέχεια ο IDFT είναι x_new(0) = (21 * 1 + (4-3j) * 1 + 3 * 1 + (4+3j) * 1)/4 = 8 x_new(1) = (21 * 1 + (4-3j) * j + 3 * (-1) + (4+3j) * (-j))/4 = 6 x_new(2) = (21 * 1 + (4-3j) * j + 3 * (-1) + (4+3j) * (-j))/4 = 4 x_new(3) = (21 * 1 + (4-3j) * j + 3 * (-1) + (4+3j) * (-j))/4 = 3
Example with DFT Το τελευταίο αποτέλεσμα θα μπορούσαμε να το βρούμε και απευθείας χωρίς κανένα υπολογισμό(!!!) αν σκεφτούμε ως εξής. Ο αντίστροφος DTFT δίνει πίσω το x(n). O αντίστροφος DFT τί ακριβώς δίνει? Ο DFT ουσιαστικά δειγματοληπτεί την απόκριση συχνότητας (DTFT) σε N συχνότητες (ιδανικά όσο και το μήκος του σήματος). Επομένως σύμφωνα με αυτά που είδαμε νωρίτερα, η διαδικασία της δειγματοληψίας δίνει στο δυαδικό πεδίο (εδώ το πεδίο χρόνου αφού δειγματοληπτούμε στο πεδίο συχνότητας) περιοδικό σήμα. Επομένως το διακριτό σήμα που αντιστοιχεί στις τιμές του DFT, αν παίρναμε DFT με ΜΗΚΟΣ 6 όσο και το αρχικό x(n), είναι ..., 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1,... όπου με κόκκινο χρώμα δηλώνουμε την 1η περίοδο.
Example with DFT Επομένως μπορούμε να συμπεράνουμε ότι ο IDFT επιστρέφει την 1η περίοδο του περιοδικού σήματος που αντιστοιχεί στα δείγματα του DFT. Αν το μήκος του συνδυασμού DFT και IDFT είναι ίδιο με το μήκος του αρχικού σήματος θα πάρουμε τελικά το αρχικό σήμα. Αν δεν είναι όπως στο παραπάνω παράδειγμα, έχουμε aliasing όπου τα χρονικά δείγματα για n = 4, 5 εμφανίζονται στα δείγματα n = 0, 1.
Example with DFT Για αυτό το λόγο στην έξοδο του IDFT έχουμε x_new(0) = x(0) + x(4) = 6 + 2 = 8 x_new(1) = x(1) + x(5) = 5 + 1 = 6 x_new(2) = x(2) x_new(3) = x(3) Στην πραγματικότητα τα 4 δείγματα Χ(k) αντιστοιχούν στο περιοδικό σήμα ..., 8, 6, 4, 3, 8, 6, 4, 3, 8, 6, 4, 3, 8, 6, 4, 3,... και το IDFT είναι η 1η περίοδος.
Example with DFT Με βάση αυτή τη παρατήρηση το τελικό αποτέλεσμα θα μπορούσαμε να το βρούμε απευθείας. Για παράδειγμα, αν είχαμε πάρει DFT length = 5 για το ίδιο x(n) με μήκος 6, και στη συνέχεια κάναμε IDFT με μήκος 5, το χρονικό σήμα που θα παίρναμε είναι x_new = [7, 5, 4, 3, 2], αφού λόγω του ανεπαρκούς DFT length θα έχουμε επικάλυψη του τελευταίου δείγματος στο 1ο (7 = 6 + 1). Μόνο αν πάρουμε DFT / IDFT length = 6 θα επανακτήσουμε το αρχικό σήμα.
SUMMARY Έστω σήμα [1,0,0,1] DTFT can be found by freqz (απόκριση συχνότητας) Ή με κάποια υλοποίηση με μορφή πινάκων (βλέπε παραπάνω) clear; x=[1,0,0,1]; [H,w]=freqz(x,1,200,'whole') plot(w/pi, abs(H)) ylabel('abs(H(w)), |H(w)|') xlabel('w/pi')
SUMMARY Το φάσμα που αντιστοιχεί στο x(n) είναι περιοδικό !!! Αν θέλουμε να το υπολογίσουμε για συχνότητες - 4π έως 4π Θα έχουμε clear; x=[1,0,0,1]; w=[-4:0.01:4]*pi; H=freqz(x,1,w) plot(w/pi, abs(H)) ylabel('|H(w)|') xlabel('w/pi')
Conclusions (1/4) Επομένως διακριτό σήμα έχει περιοδικό φάσμα !!! Πραγματικό (Real) διακριτό σήμα έχει συμμετρικό φάσμα (ως προς το w=0 ή ισοδύναμα ως προς το π), οπότε αρκεί να υπολογίσουμε το DTFT για w από 0 – π. To DFT αποτελεί δειγματοληψία του DTFT, επομένως από το θεώρημα δυϊκότητας, θα αντιστοιχεί σε ένα περιοδικό σήμα !!! Για το σήμα [1,0,0,1] ο DFT υπολογίστηκε σε 4 συχνότητες: 0, π/2, π, 3π/2 και βρέθηκε X(k)=[2, 1+j, 0, 1-j] μπορεί να βρεθεί επίσης από την freqz ως εξής:
Conclusions (2/4) clear; x=[1,0,0,1]; w=[0,1/2,1,3/2]*pi H=freqz(x,1,w) H = 2.0000, 1.0000 + 1.0000i, 0.0000 - 0.0000i, 1.0000 - 1.0000i, Χρησιμοποιώντας τον IDFT μπορούμε να βρούμε το χρονικό σήμα που αντιστοιχεί στον παραπάνω DFT, ως εξής:
Conclusions (3/4) clear; X=[2.0000, 1.0000 + 1.0000i, 0.0000 - 0.0000i, 1.0000 - 1.0000i] k=0:length(X)-1; % frequency samples n=-4:3; % time samples N=length(X); % Ν=4 x = real((1/N)*X*(exp(j*2*pi/N)).^(k'*n)) % IDFT x = Columns 1 through 6 1.0000 0.0000 -0.0000 1.0000 1.0000 -0.0000 Columns 7 through 8 0.0000 1.0000 (with bold is the first period, n=0:3 !!!)
Conclusions (4/4) Επομένως με το IDFT με μήκος Ν (n=0:N-1) παίρνουμε πίσω το διακριτό σήμα ή ισοδύναμα την 1η περίοδο του περιοδικού σήματος που αντιστοιχεί στις τιμές του DFT X=[2.0000, 1.0000 + 1.0000i, 0.0000 - 0.0000i, 1.0000 - 1.0000i] k=0:length(X)-1; % frequency samples n=0:3; % time samples N=4; x = real((1/N)*X*(exp(j*2*pi/N)).^(k'*n)) % IDFT x = 1.0000 -0.0000 0.0000 1.0000