Πρόγραμμα Μεταπτυχιακών Σπουδών: «Τεχνολογίες και Συστήματα Ευρυζωνικών Εφαρμογών και Υπηρεσιών» Μάθημα: «Επεξεργασία Ψηφιακού Σήματος και Σχεδιασμός Υλικού» Σύντομη Αναφορά σε Βασικές Έννοιες Ψηφιακής Επεξεργασίας Σημάτων Περιεχόμενα 1 Βασικά Σήματα Διακριτού Χρόνου 1 Υπολογισμός Ενέργειας Σημάτων ΔΧ 4 3 Συνέλιξη 4 4 Εξισώσεις Διαφορών 6 5 Μετασχηματισμός Fourier Διακριτού Χρόνου (DTFT) 7 6 Απόκριση Συχνότητας 9 7 Δειγματοληψία Σήματος 13 8 Μετασχηματισμός Ζ 15 9 Διακριτός Μετασχηματισμός Fourier (DFT) 18 Μιχάλης Παρασκευάς Απρίλιος 015
1 Βασικά Σήματα Διακριτού Χρόνου Παράδειγμα 1 Να σχεδιάσετε το σήμα x( n) ( n ) ( n) ( n 3) 5, 5 για το διάστημα n=-5:5; d=zeros(size(n)); d(4)=1; d(9)=1; d(6)=1; stem(n,d); axis([-5 5-05 ]); Παράδειγμα Να γράψετε στο χαρτί σε μορφή αθροισμάτων διακριτών συναρτήσεων δέλτα δ(n), και στη συνέχεια να παρασταθεί γραφικά (στο Matlab) το σήμα: 1 1 x(n),1,,,,1,0,1,0,0,3 3 (Το βελάκι δείχνει την τιμή για τη χρονική στιγμή n=0) Λύση: x(n) - δ(n 3) δ(n ) n=-3:7; x=zeros(1,length(n)); 1 - δ(n 3 1) 1 δ(n) d=inline('n==0'); %Synartisi delta for i=1:length(n) δ(n -1) δ(n - ) δ(n - 4) 3δ(n - 7) x(i) = -*d(n(i)+3) + d(n(i)+) - 1/3*d(n(i)+1)+ 1/*d(n(i)) + *d(n(i)-1) + d(n(i)-)+ d(n(i)-4) + 3*d(n(i)-7); end stem(n,x); 1
Παράδειγμα 3 Να σχεδιάσετε το σήμα n=0:01:70; f1=1/13; f=1/17; y=cos(*pi*f1*n)+cos(*pi*f*n); plot(y,'-r'); axis([-10 70-5 5]); grid on; 1 1 x( n) cos( n) (cos n) 13 17 0, 70 για το διάστημα
Παράδειγμα 4 Να γράψετε πρόγραμμα που δημιουργεί και σχεδιάζει το σήμα: 5, 5 jn 16 x( n) e cos 17 για το διάστημα Στη συνέχεια να σχεδιάσετε το πραγματικό μέρος του σήματος και το φανταστικό μέρος του σήματος n = [0:10] x = exp(j *pi * n / 16)*cos(pi/17) stem( n, x ) %πραγματικό μέρος n = [-5:5] x=(exp(j*pi*n/16))*cos(pi/17); stem( n, real(x) ) %φανταστικό μέρος n = [-5:5] x=(exp(j*pi*n/16))*cos(pi/17); stem( n, imag(x) ) 3
Υπολογισμός Ενέργειας Σημάτων ΔΧ Παράδειγμα 5 Να γράψετε το πρόγραμμα που υπολογίζει την ενέργεια του σήματος: n n y( n) cos( 01) 15sin( 03) 5 8 για n [0 :5] n = [0:5]; x = * cos( (pi * n / 7 )+01) 15*sin((pi * n / 8 )+03); Ex = 0; for i = 1:5; end Ex Ex = Ex + x(i)^; Ex = 88490 3 Συνέλιξη Παράδειγμα 6 Έστω ότι έχουμε το παρακάτω σήμα εισόδου x(n),3,1 απόκριση h(n) 1,,3 και την κρουστική του Να υπολογίσετε την συνέλιξη χρησιμοποιώντας την συνάρτηση conv του Matlab στο διάστημα n 5,5 Σημείωση: Αρχικά βρίσκουμε τα διανύσματα x και h όπου θα πρέπει να εισάγουμε ως ορίσματα στην συνάρτηση conv clear all clc n = [-5:5]; x = [zeros(1,4),, 3, 1, zeros(1,4)]; h = [zeros(1,4), 1,, 3, zeros(1,4)]; y=conv(x,h,'same'); 4
subplot(3,1,1), stem(n,x), title('x(n)') subplot(3,1,), stem(n,h), title('h(n)') subplot(3,1,3), stem(n,y), title('y(n)') 4 x(n) 0-5 -4-3 - -1 0 1 3 4 5 4 h(n) 0-5 -4-3 - -1 0 1 3 4 5 0 y(n)=x(n)*h(n) 10 0-5 -4-3 - -1 0 1 3 4 5 Παράδειγμα 7 Να γράψετε το πρόγραμμα που υπολογίζει και σχεδιάζει την έξοδο y(n) ενός συστήματος με κρουστική απόκριση h( n) n u n u n 6 ως είσοδο το σήμα x(n) {-1, 1,, -, 0}, στο διάστημα n 10,10, όταν δέχεται Κώδικάς Matlab clear all clc n = [-10:10]; x=zeros(1,length(n)); x(1,n==-1) = -1 x(1,n==0) = 1 x(1,n==1) = x(1,n==) = - x(1,n==3) = 0 5
u = [zeros(1,10), ones(1,11)]; %u(n) u6 = [zeros(1,10+6), ones(1,11-6)] %u(n-6) h = abs(n-)*(u-u6); y=conv(x,h,'same'); subplot(3,1,1), stem(n,x), title('x(n)') subplot(3,1,), stem(n,h), title('h(n)') subplot(3,1,3), stem(n,y), title('y(n)=x(n)*h(n)') x(n) 0 - -10-8 -6-4 - 0 4 6 8 10 4 h(n) 0-10 -8-6 -4-0 4 6 8 10 10 y(n)=x(n)*h(n) 0-10 -10-8 -6-4 - 0 4 6 8 10 4 Εξισώσεις Διαφορών Παράδειγμα 8 Να γράψετε το πρόγραμμα που υπολογίζει και σχεδιάζει την κρουστική απόκριση του συστήματος που περιγράφεται από την εξίσωση διαφορών y(n) 01 y(n -1) - 0 y(n - ) 04y(n - 4) 05x(n) - 04x(n -1) στο χρονικό παράθυρο n=[0:100] 6
a = [1,01,-0,0,04]; b = [05-04]; n = [0:100]; x = zeros( size(n) ); x(1) = 1; h = filter( b, a, x ) stem( n,h); axis([-055 10-06 06]); 5 Μετασχηματισμός Fourier Διακριτού Χρόνου (DTFT) Παράδειγμα 9 Να βρεθεί ο DTFT για την ακολουθία: με το Matlab 3 x(n) 05, 05, 05, και να σχεδιαστεί X ( e j ) 05{1 05e 05 1 05e X ( ) 05 05 e j n j j x( n) e 3 05 e 05 (15 cos) jn 05 e j 1 j 05 1 05 cos } ά j05sin w=-*pi:0:*pi; x1=[0 0 0 1 1 1 1 1 0 0 0]; xx1=1+*cos(w)+*cos(*w); subplot(,,1) stem((-5:5),x1) xlabel('n ') ylabel('x(n)') 7
subplot(,,3) plot(w/(pi),xx1) xlabel('ω/π') ylabel('x(ω)') x=[0 0 05 05 015 05^4 05^5 05^6]; subplot() stem((-:5),x) xlabel('n ') ylabel('x(n)') xx=05/(15-cos(w))^(1/); subplot(4) plot(w/(pi),xx) xlabel('ω/π') ylabel(' X(ω) ') Στην πρώτη σειρά φαίνονται τα ψηφιακά σήματα και στη δεύτερη οι αντίστοιχοι DTFT 8
Παράδειγμα 10 Να υπολογιστεί ο DTFT του σήματος x(n)=cos(5πn/3)+cos(πn/11) (n=[0,0]) n = 0 : 01 : 0; x = cos(5*pi*n/3) + cos(*pi*n/11); figure(1); stem(n,x); N = length(n) X = fft(x,n); M = round(n/) figure(); subplot(11); stem(abs(x(1:m))) subplot(1); stem(angle(x(1:m))) 15 1 05 0-05 -1-15 - 0 5 10 15 0 100 80 60 40 0 0 0 0 40 60 80 100 10 4 0 - -4 0 0 40 60 80 100 10 6 Απόκριση Συχνότητας Παράδειγμα 10 Για το παρακάτω σύστημα με εξίσωση διαφορών: Να υπολογίσετε: y(n) 11y(n -1) - 05y(n - ) - 03y(n - 4) 05x(n) - 0x(n -1) a) Την κρουστική απόκριση για το διάστημα [0,10] b) Την απόκριση του συστήματος για είσοδο συνάρτηση conv x [51110 01110] χρησιμοποιώντας τη c) Την απόκριση για την παραπάνω είσοδο χρησιμοποιώντας τη συνάρτηση filter Τι παρατηρείτε από τα αποτελέσματα; 9
% Λύση a n=0:10; d=zeros(size(n)); d(1)=1; a=[1-11 05 0 03]; b=[05-0 0 0 0]; h=filter(b, a, d); stem(n, h); %Λύση b %Για τον υπολογισμό της απόκρισης (χρησιμοποιώντας την συνάρτηση conv) προσθέτουμε στο τέλος του προηγούμενου κώδικα: x=[5 1 1 1 0 0 1 1 1 0]; y=conv(x, h); figure; plot(y); %Λύση c %Για τον υπολογισμό της απόκρισης (χρησιμοποιώντας την συνάρτηση filter) προσθέτουμε στο τέλος του προηγούμενου κώδικα: y=filter(b, a, x); hold on; plot(y,'r'); 10
Παράδειγμα 11 Να υπολογιστεί και να παρασταθεί γραφικά η απόκριση συχνότητας (μέτρο και φάση) του παρακάτω φίλτρου y(n) = 03y(n-1) + 07x(n) Για n>=0 % y(n)- 03y(n-1) = 07x(n) a=[1-03]; b=[07 0]; freqz(b, a); Παράδειγμα 1 Να υπολογίσετε και να παραστήσετε γραφικά την απόκριση συχνότητας (μέτρο και φάση) με 51 δείγματα στο άνω ήμισυ του μοναδιαίου κύκλου του φίλτρου με την παρακάτω συνάρτηση μεταφοράς 1 05z H ( z) 1 08 cos( ) z 16 1 1 081z ( ω 0 - π) % H(z) a=[1-18*cos(pi/16) 081]; b=[1 05 0]; freqz(b, a); 11
Παράδειγμα 13 Να υπολογιστεί η απόκριση της f π [0 : : π] 56 H 1 1 08e j ( e ) j8 για τις συχνότητες num=[1] den=[1 0 0 0 0 0 0 0-08]; a=[0:pi/56:pi]; H=freqz(num,den,a); figure(1) plot(a/pi,abs(h)) xlabel('\omega/\pi') ylabel(' H(e^{j\omega}) ') title('magnitude Response') grid on figure() plot(a/pi,angle(h)) xlabel('\omega/\pi') ylabel('phase(h(e^{j\omega}))') title('phase Response') grid on 1
7 Δειγματοληψία Σήματος Παράδειγμα 14 Θεωρούμε το αναλογικό σήμα όπου f=4hz και t=[0,1] Γίνεται δειγματοληψία με τις εξής περιόδους: για να προκύψει το διακριτό σήμα x[n] Να σχεδιάσετε το σήμα x[n] για κάθε Τs x a (t) cos(πft) Ts 015, 005 και 001sec Ts=015; t=0:ts:1; f=4; x=cos(*pi*f*t); Fs=1/Ts; plot(t,x); Ts=005; t=0:ts:1; f=4; x=cos(*pi*f*t); Fs=1/Ts; plot(t,x,'o-'); 13
Ts=001; t=0:ts:1; f=4; x=cos(*pi*f*t); Fs=1/Ts; plot(t,x,'o-'); Παράδειγμα 15 Δίνονται τα σήματα x ( t) 1cos(10 ) 1 t και x ( t) 08cos(15 ) t α) Να δημιουργήσετε και να παραστήσετε γραφικά το σήμα θεωρώντας ως συχνότητα δειγματοληψίας f s 100Hz x( t) x1 ( t) x( t) fs=100; Ts=1/fs; n=0:ts:1; x1=1*cos(10*pi*n); x=08*cos(15*pi*n); x=x1+x; subplot(311), plot(n,x1),title('σήμα x1'); subplot(31), plot(n,x),title('σήμα x'); subplot(313), stem(n,x); title('σήμα x για fs=100 Hz'); 14
8 Μετασχηματισμός Ζ Για τον υπολογισμό του μετασχηματισμού Ζ στο Matlab θα χρησιμοποιήσουμε τις ακόλουθες συναρτήσεις: Όνομα Συνάρτηση Περιγραφή ztranz X=ztranz(x,n,z); Υπολογίζει το μετασχηματισμό Ζ iztranz X=iztranz(x,n,z); Υπολογίζει τον Αντίστροφο μετασχηματισμό Ζ syms syms n z; Ορίζει τη μεταβλητή z ως συμβολική tfzp [z, p,k] tfzp(b, a) Αυτή η Συνάρτηση βρίσκει τα μηδενικά, τους πόλους και τα κέρδη της συνάρτησης μεταφοράς συνεχούς χρόνου όπου b ώ ή a ώ ή 15
zplane zplane (z p Αυτή η συνάρτηση εμφανίζει τους πόλους και τα μηδενικά στα διακριτού χρόνου συστήματα eqtflength eqtflength [b, a] eqtflength [b, a, n, m] (numden eqtflength (num, den Η Συνάρτηση eqtflength τροποποιεί το διάνυσμα ή / και το διάνυσμα den, έτσι ώστε τα διανύσματα a και b που προκύπτουν στην έξοδο να έχουν το ίδιο μήκος όπου num ώ ή den ώ ή Η Συνάρτηση [b, a, n, m] = eqtflength (num, den) τροποποιεί τα διανύσματα όπως η παραπάνω συνάρτηση και επιστρέφει τη σειρά n στον αριθμητή και m στον παρονομαστής, χωρίς να συμπεριλαμβάνει τυχόν μηδενικά tfzpk [z, p,k] tfzpk(b, a) Παράδειγμα 16 Να υπολογιστεί ο Μετασχηματισμός Z του σήματος: n 1 1 x( n) u( n) u( n) 3 n % ορίζει τη μεταβλητή z ως συμβολική syms n z; X = % Η ztrans υπολογίζει το μετασχηματισμό Z x=((1/)^n)+((1/3)^n); X=ztrans(x, n, z) pretty(x) z/(z - 1/) + z/(z - 1/3) z z ------- + ------- z - 1/ z - 1/3 16
Παράδειγμα 17 Δίνετε ο Μετασχηματισμός Z: Μετασχηματισμός Z της X (z) X z 7z z) z z ( Να υπολογιστεί ο αντίστροφος % ορίζει τη μεταβλητή z ως συμβολική syms z; x = 3 - (-)^n % Η iztrans υπολογίζει τον αντίστροφο μετασχηματισμό Z X=(*z^+7*z)/(z^+z-); x=iztrans(x); pretty(x); 3 - (-) n Παράδειγμα 18 Βρείτε τα μηδενικά, τους πόλους και τον συντελεστή C της παρακάτω συνάρτησης μεταφοράς, χρησιμοποιώντας συναρτήσεις του Matlab: X z 3z z) z 04z 1 ( b = [ 3]; a = [1 04 1]; %Για να έχουν το ίδιο μέγεθος: [b, a] = eqtflength(b, a); % Πραγματοποίηση υπολογισμών: [z, p, c] = tfzp(b, a); %Σχεδίαση γραφικής παράστασης: zplane(z, p); 17
9 Διακριτός Μετασχηματισμός Fourier (DFT) Παράδειγμα 19 Δίνονται τα σήματα x ( t) cos(0 ) 1 t, x ( t) sin( 60 ) t α) Να δημιουργήσετε και να παραστήσετε γραφικά το σήμα θεωρώντας ως συχνότητα δειγματοληψίας x( t) x1( t) x( t) x3( t) και x ( t) cos(10 ) 3 t f s 00Hz fs=00; n=0:1/fs:1; x1=cos(0*pi*n); x=sin(60*pi*n); x3=cos(10*pi*n); x=x1+x+x3; subplot(411), plot(n,x1); subplot(41), plot(n,x); subplot(413), plot(n,x3); subplot(414), plot(n,x); title('σήμα x για fs=00 Hz'); β) Να υπολογίσετε το μετασχηματισμό Fourier (DFT) του σήματος x(t) fs=00; n=0:1/fs:1; x1=cos(0*pi*n); x=sin(60*pi*n); x3=cos(10*pi*n); x=x1+x+x3; subplot(411), plot(n,x1); subplot(41), plot(n,x); subplot(413), plot(n,x3); 18
subplot(414), plot(n,x); title('σήμα x για fs=00 Hz'); X=fft(x); subplot(11), plot(0:length(x)-1,abs(x)),title('abs(x)'); subplot(1), plot(0:length(x)-1,real(x)),title('re(x)'); Παρατήρηση Παρατηρούμε ότι στον άξονα x δεν εμφανίζονται οι συχνότητες όπως θα έπρεπε Αυτό συμβαίνει γιατί πρώτα θα πρέπει να υπολογίσουμε τις ψηφιακές συχνότητες και στη συνέχεια να κάνουμε τις γραφικές παραστάσεις 19
γ) Να υπολογίσετε το μετασχηματισμό Fourier (DFT) του σήματος ψηφιακές συχνότητες x(t) και για τις fs=00; n=0:1/fs:1; x1=cos(0*pi*n); x=sin(60*pi*n); x3=cos(10*pi*n); x=x1+x+x3; X=fft(x); k=0:length(x)-1; w=k*(*pi/length(x)); % για τις ψηφιακές κυκλικές % συχνότητες ω plot(w,abs(x)); xlabel('ψηφιακή συχνότητα ω') Αυτό που βλέπουμε είναι μία γραφική προσέγγιση του μετασχηματισμού Fourier διακριτού χρόνου του σήματος Επειδή το σήμα είναι το άθροισμα ημιτόνων η παρουσία των τριών πρώτων κορυφών είναι απόλυτα λογική 0
δ) Να υπολογίσετε το μετασχηματισμό Fourier (DFT) του σήματος σήματος 56 x(t) για μήκος fs=00; n=0:1/fs:1; x1=cos(0*pi*n); x=sin(60*pi*n); x3=cos(10*pi*n); x=x1+x+x3; X=fft(x,56); % θέλουμε μήκος σήματος ^8=56 k=0:length(x)-1; w=k*(*pi/length(x)); % για τις ψηφιακές κυκλικές % συχνότητες ω figure(); plot(w,abs(x)); xlabel('ψηφιακή συχνότητα ω') figure(1); subplot(11), plot(0:length(x)-1,abs(x)),title('abs(x)'); subplot(1), plot(0:length(x)-1,real(x)),title('re(x)'); 1