ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΣΕΡΡΩΝ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΕΠΙΚΟΙΝΩΝΙΩΝ ΣΗΜΕΙΩΣΕΙΣ ΕΡΓΑΣΤΗΡΙΟΥ ΨΗΦΙΑΚΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ ΣΗΜΑΤΟΣ ρ. ΑΘΑΝΑΣΙΟΣ ΝΙΚΟΛΑΪ ΗΣ ΗΜΗΤΡΙΟΣ ΒΑΡΣΑΜΗΣ ΣΕΡΡΕΣ 6
η ΕΝΟΤΗΤΑ Εισαγωγή στο λογισµικό πακέτο MATLAB 6.5 Το MATLAB είναι µια interpreted γλώσσα προγραµµατισµού. ηλαδή ο πηγαίος κώδικας δε µεταφράζεται αλλά διερµηνεύεται κατά την εκτέλεση. Έτσι, µπορείτε να δώσετε εντολές στο command prompt του MATLAB. Επίσης µπορείτε να δηµιουργήσετε script αρχεία (τα M-files), τα οποία δεν είναι άλλο από διαδοχή εντολών που επιθυµούµε να εκτελεστούν. Βασικό στοιχείο του MATLAB είναι ο πίνακας. Γι αυτό είναι εξαιρετικά χρήσιµο εργαλείο για την ψηφιακή επεξεργασία σήµατος. Ένα µονοδιάστατο σήµα µπορεί να θεωρηθεί ως ένα διάνυσµα. Οι βαθµωτές µεταβλητές είναι ουσιαστικά πίνακες x. Κάποια σηµεία που πρέπει να έχετε πάντα υπόψη κατά τη χρήση του MATLAB: Οι δείκτες αρχίζουν από το (και όχι από το ). Βάζοντας ελληνικό ερωτηµατικό (;) µετά από µια εντολή, αποφεύγουµε την εµφάνιση του αποτελέσµατος στην οθόνη. Μπορούµε να κινηθούµε µπρος-πίσω στο ιστορικό των εντολών που έχουµε δώσει µε το πάνω και κάτω βέλος. Με Ctrl+C διακόπτουµε την εκτέλεση εντολής ή την εµφάνιση αποτελεσµάτων στην οθόνη. Υπάρχει διάκριση κεφαλαίων και πεζών (άρα η µεταβλητή Y είναι διαφορετική από την y). Τα ονόµατα των συναρτήσεων γράφονται µε πεζά. Ότι ακολουθεί το σύµβολο % σε µια γραµµή είναι σχόλιο. Αποφεύγετε όσο µπορείτε τους βρόχους. Αυτοί εκτελούνται αργά (θυµηθείτε ότι µιλάµε για interpreted γλώσσα). Προκειµένου να δώσετε σε ένα διάνυσµα τιµές που απέχουν κατά µια σταθερή ποσότητα, µπορείτε να χρησιµοποιήσετε την άνω-κάτω τελεία (:). Για παράδειγµα, η εντολή b=:: δηµιουργεί ένα διάνυσµα b µε τιµές όλους τους περιττούς από ως. Αν δίναµε b=: θα είχαµε ένα διάνυσµα µε όλους τους ακέραιους από ως. Αντίστοιχα, όταν θέλουµε να προσπελάσουµε τµήµα ενός πίνακα, χρησιµοποιούµε πάλι το :, π.χ. το b(3:6) σηµαίνει το τµήµα του b από το τρίτο ως το έκτο στοιχείο. Για να πάρουµε π.χ. το όγδοο στοιχείο του b δίνουµε απλά b(8). Πέρα από τις κλασικές πράξεις πινάκων ορίζονται και οι «στοιχείοπρος-στοιχείο» πράξεις οι οποίες συµβολίζονται µε µια τελεία πριν το αντίστοιχο σύµβολο της πράξης. Π.χ. η πράξη Α*Β ορίζεται µόνο όταν οι διαστάσεις του Α είναι KxM και του Β είναι MxN. Αντίθετα, η πράξη Α.*Β ορίζεται µόνο όταν Α και Β έχουν ίδιες διαστάσεις. Για να ορίσουµε ρητά έναν πίνακα, δίνουµε τα στοιχεία του χωρισµένα µε κενά, µέσα σε αγκύλες. Π.χ. το D=[5 3 8 4 9] δηµιουργεί ένα διάνυσµα D διαστάσεων x5 µε τις τιµές που βλέπουµε. --
Χρήσιµες συναρτήσεις: Η ones(k, m) δηµιουργεί ένα πίνακα διαστάσεων kxm µε άσους. Η zeros(k,m) δηµιουργεί ένα πίνακα διαστάσεων kxm µε µηδενικά. Η length(b) επιστρέφει το µήκος του διανύσµατος b. H find(a) επιστρέφει τις τιµές του δείκτη για τις οποίες ο Α έχει µη µηδενικές τιµές. H figure δηµιουργεί ένα νέο παράθυρο γραφικών. H subplot(k, m, δηµιουργεί ένα παράθυρο γραφικών στο οποίο µπορούν να τοποθετηθούν kxm γραφήµατα σε k γραµµές και m στήλες. Επιπλέον κάνει ενεργό το γράφηµα στη θέση n. Η stem(x, y) δίνει γράφηµα των διακριτών τιµών του y ως προς το x. H axis([xmin xmax ymin ymax]) θέτει τις ελάχιστες και µέγιστες τιµές των αξόνων. H title τυπώνει έναν τίτλο στην κορυφή του τρέχοντος γραφήµατος. η ΕΝΟΤΗΤΑ Μερικές θεµελιώδεις ακολουθίες n = Μοναδιαίος παλµός (κρούση) δ ( = n Σε MATLAB υλοποιείται ως εξής : Ορίζουµε το πλάτος της ανεξάρτητης µεταβλητής και δηµιουργούµε vector µε ίδια διάσταση το οποίο να έχει σε όλα τα στοιχεία τιµή εκτός από το µεσαίο στοιχείο που αντιστοιχεί στο n = και έχει τιµή. n=-:; m=length(; k=find(n==); d=zeros(,m); d(k)=; % or d=[zeros(,) zeros(,)]; stem(n,d) axis([- - ]) --
H εντολή length( µας επιστρέφει το µήκος του n H εντολή find(n==) µας επιστρέφει το δείκτη στον οποίο το n παίρνει µηδενική τιµή (κέντρο). H εντολή zeros(,m) µας επιστρέφει ένα vector µε διάσταση x m µε µηδενικές τιµές. H εντολή d(k)= τοποθετεί µια µονάδα στην θέση k στον πίνακα d. H εντολή axis([xmin,xmax,ymin,ymax]) επανακαθορίζει τα όρια στους άξονες. n Μοναδιαία βηµατική συνάρτηση u( = n < Σε MATLAB υλοποιείται ως εξής : Ορίζουµε το πλάτος της ανεξάρτητης µεταβλητής και δηµιουργούµε vector µε ίδια διάσταση το οποίο να έχει από n=- µέχρι n=- τιµές και από n= µέχρι n= τιµές. n=-:; m=length(; k=find(n==); u=zeros(,m); u(k:m)=; %or u=[zeros(,) ones(,)]; stem(n,u); axis([- - ]); -3-
n a n D Εκθετική ακολουθία x( = όπου D ένα διάστηµα. n D Σε MATLAB υλοποιείται ως εξής : Ορίζουµε το πλάτος της ανεξάρτητης µεταβλητής και δηµιουργούµε vector µε ίδια διάσταση το οποίο να έχει από n=- µέχρι n=-6 και από n=6 µέχρι n= n τιµές και από n=-5 µέχρι n=5 τιµές α. n=-:; m=length(; k=find(n==); a=.9; e=zeros(,m); e(k-5:k+5)=a.^[-5:5]; %or e(k-5:k+5)=a.^n(k-5:k+5); stem(n,e); title('exponential sequence').8 exponential sequence.6.4..8.6.4. - -8-6 -4-4 6 8 n n Γραµµική (ramp) ακολουθία x( =. n < Σε MATLAB υλοποιείται ως εξής : Ορίζουµε το πλάτος της ανεξάρτητης µεταβλητής και δηµιουργούµε vector µε ίδια διάσταση το οποίο να έχει από n=- µέχρι n=- τιµές και από n= µέχρι n= τιµές ανάλογες του n. -4-
n=-:; m=length(; k=find(n==); r=zeros(,m); r(k:m)=n(k:m); stem(n,r); title('ramp '); ramp 9 8 7 6 5 4 3 - -8-6 -4-4 6 8 3 η ΕΝΟΤΗΤΑ Μετατόπιση Ορίζουµε το n σε ένα διάστηµα από - έως και την αντίστοιχη n a n [,] x( = µε α =.9. Θέλουµε να σχεδιάσουµε τις n [, ) (,] εξής ακολουθίες x(=x(n-), x(=x(n+). Στην πρώτη έχουµε µετατόπιση προς τα δεξιά (καθυστέρηση) και στην δεύτερη µετατόπιση προς τα αριστερά (προπορεία). Σε MATLAB υλοποιείται ως εξής : n=-:; m=length(; k=find(n==); a=.9; -5-
x=zeros(,m); x(k-:k+)=a.^n(k-:k+); % or a.^[-:] % delay x(=x(n-) x=zeros(,m); x(k:m)=x(k-:k+); % advance x(=x(n+) x=zeros(,m); x(k-:k)=x(k-:k+); % graph of signal x, x,x subplot(3,,); stem(n,x); title('original'); subplot(3,,); stem(n,x); title('delay'); subplot(3,,3); stem(n,x); title('advance'); 3 original - -5 - -5 5 5 delay 3 - -5 - -5 5 5 advance 3 - -5 - -5 5 5-6-
4 η ΕΝΟΤΗΤΑ Κλιµάκωση στο χρόνο, Αντιστροφή Ορίζουµε το n σε ένα διάστηµα από - έως και την αντίστοιχη n a n [,] x( = µε α =.9. Θέλουµε να σχεδιάσουµε τις n [, ) (,] εξής ακολουθίες x(=x(, x(=x(n/) και x3(=x(-. Στην πρώτη έχουµε διαίρεση συχνότητας (down sampling), στην δεύτερη πολλαπλασιασµό συχνότητας (up sampling) και στην τρίτη έχουµε αντιστροφή (reversal). Σε MATLAB υλοποιείται ως εξής : % Sampling n=-:; m=length(; k=find(n==); a=.9; x=zeros(,m); x(k-:k+)=a.^n(k-:k+); % or a.^[-:] % down sampling x(=x( x=zeros(,m); x(k-5:k+5)=x(k-::k+); % up sampling x(=x(n/) x=zeros(,m); x(::m)=x(k-:k+); % reverse x3(=x(- x3(:m)=x(m:-:); % or x3=x(m:-:) % graph of signal x, x, x, x3 subplot(4,,); stem(n,x); title('original'); subplot(4,,); stem(n,x); title('down Sampling'); subplot(4,,3); stem(n,x); title('up Sampling'); subplot(4,,4); stem(n,x3); title('reverse'); -7-
3 original - -5 - -5 Down Sampling 5 5 3 - -5 - -5 Up Sampling 5 5 3 - -5 - -5 reverse 5 5 3 - -5 - -5 5 5 5 η ΕΝΟΤΗΤΑ Χωρισµός σήµατος σε άθροισµα άρτιου και περιττού µέρους. Ορίζουµε το n σε ένα διάστηµα από - έως και την βηµατική συνάρτηση, n στο αντίστοιχο διάστηµα u( =. Θέλουµε να σχεδιάσουµε τις, n < εξής ακολουθίες x e ( = ( x( + x( ) και x o ( = ( x( x( ). Σε MATLAB υλοποιείται ως εξής : % partition odd - even n=-:; m=length(; k=find(n==); u=zeros(,m); u(k:m)=; ur=u(m:-:); % even part xe(=/[x(+x(-] ue=/*(u+ur); % odd part xo(=/[x(-x(-] uo=/*(u-ur); -8-
% graph of signal x, x,x subplot(3,,); stem(n,u); title('original'); axis([- -.5]) subplot(3,,); stem(n,ue); title('even part'); axis([- -.5]) subplot(3,,3); stem(n,uo); title('odd part'); axis([- -.5]).5.5 -.5 original - - -5 - -5 5 5 even part.5.5 -.5 - - -5 - -5 5 5 odd part.5.5 -.5 - - -5 - -5 5 5 6 η ΕΝΟΤΗΤΑ Συνέλιξη, απόκριση συστηµάτων Ορίζουµε το n σε ένα διάστηµα από - έως και δυο ακολουθίες x µε τιµές,, 3, 4, 5 για n από έως 4 και την h (κρουστική απόκριση ) µε τιµές,, για n από - έως. Θα υπολογίσουµε την συνέλιξη των x και h, δηλαδή -9-
+ k= y ( = x( * h( = x( k) h( n k) η οποία µας δίνει την έξοδο του συστήµατος. Σε MATLAB υλοποιείται ως εξής : % Convolution % Input - Impulse Response - Output n=-:; m=length(; k=find(n==); x=zeros(,m); h=zeros(,m); y=zeros(,m); x(k:k+4)=[ 3 4 5]; h(k-:k+)=[ ]; yt=conv(x(k:k+4),h(k-:k+)); y(k-:k+5)=yt; % graph of signal x, h,y subplot(3,,) stem(n,x) title('input signal') subplot(3,,) stem(n,h) title('impulse response') subplot(3,,3) stem(n,y) title('output signal') 6 input signal 4 - -8-6 -4-4 6 8 impulse response.5.5 - -8-6 -4-4 6 8 output signal 5 5 - -8-6 -4-4 6 8 --
Η συνάρτηση conv(x, y) υπολογίζει τη συνέλιξη των διανυσµάτων x και y. Αποτέλεσµα είναι ένα διάνυσµα του οποίου το µήκος είναι Νx+Νy- όπου Νx είναι το µήκος του x και Νy το µήκος του y. Το νέο διάνυσµα έχει ως αρχικό δείκτη το άθροισµα των αρχικών δεικτών των x και y δηλαδή L = Lx+Ly όπου Lx ο αριστερός (αρχικός) δείκτης του x και Ly ο αριστερός (αρχικός) δείκτης του y και τελικό δείκτη το άθροισµα των τελικών δεικτών των x και y δηλαδή R = Rx+Ry όπου Rx ο δεξιός (τελικός) δείκτης του x και Ry ο δεξιός (τελικός) δείκτης του y 7 η ΕΝΟΤΗΤΑ Υπολογισµός ευθύ και αντίστροφου DFT Ορίζουµε το n σε ένα διάστηµα από έως 9 και το µοναδιαίο παλµό x µε διάρκεια από έως 5. Θα υπολογίσουµε τον ευθύ και τον αντίστροφο DFT της ακολουθίας αυτής, που δίνονται, αντίστοιχα, από τους τύπους: X ( k) = N n= x( = (/ N) x( *exp( j ** pi *( k )*( n ) / N), N n= X ( k)*exp( j ** pi *( k )*( n ) / N), k N n N Στη συνέχεια θα σχεδιάσουµε το µέτρο και τη φάση για τον ευθύ, και το πραγµατικό και φανταστικό µέρος για τον αντίστροφο DFT. % Forward DFT of unit step n=:9; x=*n; x(:5)=; y=fft(x); y=fftshift(y); ym=abs(y); yp=angle(y); figure(); stem(n,x) title('original Signal'); figure(); stem(n,ym); title('dft Magnitude'); figure(3); stem(n,yp); title('dft phase'); %Inverse DFT of unit step z=ifft(x); zr=real(z); zi=imag(z); figure(4); --
stem(n,x) title('original DFT sequence'); figure(5); stem(n,zr); title('real part of signal'); figure(6); stem(n,zi); title('imaginary part of signal'); Original Signal.9.8.7.6.5.4.3.. 4 6 8 4 6 8 --
5 DFT Magnitude 4.5 4 3.5 3.5.5.5 4 6 8 4 6 8 DFT phase.5.5 -.5 - -.5-4 6 8 4 6 8-3-
Original DFT sequence.9.8.7.6.5.4.3.. 4 6 8 4 6 8.3 Real part of signal.5..5..5 -.5 4 6 8 4 6 8-4-
. Imaginary part of signal.5..5 -.5 -. -.5 -. 4 6 8 4 6 8 H fft(x) υπολογίζει τον DFT Ν σηµείων του διανύσµατος x, όπου Ν το µήκος του x. H fftshift(x) µετατοπίζει τη µηδενική συχνότητα του φάσµατος ώστε να βρίσκεται στο κέντρο του διανύσµατος. Η abs(x) υπολογίζει το µέτρο του µιγαδικού διανύσµατος x (ή την απόλυτη τιµή ενός πραγµατικού). Η angle(x) υπολογίζει τη φάση του µιγαδικού διανύσµατος x. H ifft(x) υπολογίζει τον αντίστροφο DFT Ν σηµείων του διανύσµατος x, όπου Ν το µήκος του x. Η real(x) υπολογίζει το πραγµατικό µέρος του διανύσµατος x. Η imag(x) υπολογίζει το φανταστικό µέρος του διανύσµατος x. 8 η ΕΝΟΤΗΤΑ Υπολογισµός DTFT µέσω του DFT Παρακάτω θα υπολογίσουµε τον µετασχηµατισµό Fourier διακριτού χρόνου (DTFT) ενός ηµιτονοειδούς σήµατος x( = cos(3πn /8) µέσω του DFT, βασιζόµενοι στο γεγονός ότι: k) = X (exp( j )) X ( ω ω= πk / N -5-
% computation of DTFT with DFT n=:5; x=cos(*pi*n*3/6); xx=fft(x); xe=fft(x,5); L=:5; plot(l/5,abs(xe)); hold; plot(n/6,abs(xx),'o'); xlabel('normalized angular frequency'); ylabel('magnitude'); 9 8 7 6 Magnitude 5 4 3...3.4.5.6.7.8.9 Normalized angular frequency Η συνάρτηση cos(x) υπολογίζει το συνηµίτονο των στοιχείων του x. H συνάρτηση fft µε δεύτερο όρισµα, δηλαδή στη µορφή fft(x, L), συµπληρώνει το διάνυσµα x µε µηδενικά ως το µήκος L προτού υπολογίσει τον DFT. H hold κρατάει το περιεχόµενο του τρέχοντος γραφήµατος ώστε ότι σχεδιαστεί στη συνέχεια δε θα σβήσει τα προηγούµενα. Η plot(x, y) σχεδιάζει ένα συνεχές γράφηµα του y σε σχέση µε το x. Όταν έχει τρίτο όρισµα, αυτό είναι ο χαρακτήρας που θα χρησιµοποιηθεί για το σχεδιασµό των τιµών του y. Οι xlabel και ylabel τυπώνουν, αντίστοιχα, ένα τίτλο στον οριζόντιο και τον κάθετο άξονα του γραφήµατος. -6-
9 η ΕΝΟΤΗΤΑ Υπολογισµός συνέλιξης µέσω DFT Παρακάτω θα υπολογίσουµε τη συνέλιξη δύο πεπερασµένων σηµάτων µε χρήση του DFT. ηλαδή συµπληρώνοντας καθένα από τα σήµατα µε µηδενικά ως το µήκος L+M-, όπου L το µήκος του x και Μ το µήκος του y, υπολογίζοντας τους DFT των επεκταµένων σηµάτων και στη συνέχεια το γινόµενο αυτών των µετασχηµατισµών, και τέλος υπολογίζοντας τον αντίστροφο DFT. Επίσης θα υπολογιστεί η συνέλιξη απευθείας και θα υπολογιστικό το σχετικό λάθος υπολογισµού. % computation of convolution with DFT x=[5 3 8 6]; y=[7 9 8 3 6]; z=conv(x,y); L=length(x)+length(y)-; xx=fft(x,l); yy=fft(y,l); zz=xx.*yy; zdft=ifft(zz); subplot(3,,) stem(z); title('convolution by definition'); subplot(3,,) stem(zdft); title('convolution by DFT'); subplot(3,,3) stem(z-zdft); title('computation error'); -7-
Convolution by definition 5 5 3 4 5 6 7 8 9 Convolution by DFT 5 5 3 4 5 6 7 8 9 4 x -4 Computation error - 3 4 5 6 7 8 9 Σηµείωση: Σε άλλες εκδόσεις του MATLAB, υπάρχει η πιθανότητα κατά τον αντίστροφο DFT να υπάρξει και κάποιο, σχεδόν µηδενικό, φανταστικό µέρος για το σήµα. Σ αυτή την περίπτωση θα πρέπει να χρησιµοποιήσουµε τη συνάρτηση abs για τη σχεδίαση του µέτρου των σηµάτων αντί να σχεδιάσουµε τα ίδια τα σήµατα. η ΕΝΟΤΗΤΑ Υπολογισµός ευθύ και αντίστροφου µετασχηµατισµού Z n n ( = + 3 και τον µετασχηµατισµό z Ορίζουµε µια ακολουθία x z + 7z H ( z) =. Θα υπολογίσουµε τον ευθύ µετασχηµατισµό Z της z + z ακολουθίας x( ο οποίος δίνεται από τον τύπο : αντίστροφο µετασχηµατισµό Z της Η(z). %Forward Z-transform clear; syms n z; x=^n+3*(/)^n; X ( z) = n= x( z n αλλά και το -8-
X=ztrans(x, n, z); pretty(x) %Inverse Z-transform clear; syms z; H=(*z^+7*z)/(z^+z-); h=iztrans(h); pretty(h); και θα εµφανιστούν τα παρακάτω αποτελέσµατα στο Command window του matlab z z / --------- + 6 ------- / z - z - n -(-) + 3 Το πρώτο αποτέλεσµα είναι ο µετασχηµατισµός Z της x(. Το δεύτερο αποτέλεσµα είναι o αντίστροφος µετασχηµατισµός Z της Η(z). Η συνάρτηση syms z ορίζει την µεταβλητή z ως συµβολική. Η συνάρτηση ztrans(x) υπολογίζει το µετασχηµατισµό Z της x. Η συνάρτηση pretty(x) µετατρέπει την παράσταση x σε µια πιο ευπαρουσίαστη µορφή. Η συνάρτηση iztrans(h) υπολογίζει τον αντίστροφο µετασχηµατισµό Z της H. Υπολογισµός µερικών κλασµάτων Στη συνέχεια θα κάνουµε στην Η(z) ανάλυση σε µερικά κλάσµατα µε βάση B( z) R() R() R( τον τύπο : = + + + + K( z) µε θετικές δυνάµεις A( z) z P() z P() z P( B( z) r() r() r( του z ή = + + + + k() + k() z... µε A( z) p() z p() z p( z αρνητικές δυνάµεις του z. %Residue computation b = [ 7 ]; a = [ -]; [r,p,k]=residue(b,a) [r,p,k]=residuez(b,a) και θα εµφανιστούν τα παρακάτω αποτελέσµατα στο Command window του matlab -9-
r = 3 p = - k = r = - 3 p = - k = Το πρώτο αποτέλεσµα είναι η ανάλυση σε µερικά κλάσµατα, µε θετικές δυνάµεις του z, το r µας επιστρέφει τους αριθµητές, το p τις ρίζες των παρανοµαστών (πόλοι) και το k το υπόλοιπο, δηλαδή η Η(z) αναλύεται 3 H ( z) = + +. z + z Το δεύτερο αποτέλεσµα είναι η ανάλυση σε µερικά κλάσµατα, µε αρνητικές δυνάµεις του z, το r µας επιστρέφει τους αριθµητές, το p τις ρίζες των παρανοµαστών (πόλοι) και το k το υπόλοιπο, δηλαδή η Η(z) 3 αναλύεται H ( z) = + + z z Η συνάρτηση [r,p,k]=residue(b,a) κάνει ανάλυση σε µερικά κλάσµατα την Η, η οποία είναι µε θετικές δυνάµεις του z. Όπου b είναι οι συντελεστές του αριθµητή, a είναι οι συντελεστές του παρανοµαστή, r είναι οι αριθµητές των κλασµάτων, p είναι οι ρίζες των παρανοµαστών (πόλοι), k είναι το υπόλοιπο. Η συνάρτηση [r,p,k]=residue(b,a) κάνει ανάλυση σε µερικά κλάσµατα την Η, η οποία είναι µε αρνητικές δυνάµεις του z. Όπου b είναι οι συντελεστές του αριθµητή, a είναι οι συντελεστές του παρανοµαστή, r είναι οι αριθµητές των κλασµάτων, p είναι οι ρίζες των παρανοµαστών (πόλοι), k είναι το υπόλοιπο. --
Συνάρτηση µεταφοράς - Ευστάθεια Τέλος θα ορίσουµε την συνάρτηση µεταφοράς σε matlab, θα βρούµε τους πόλους και τα µηδενικά του συστήµατος τα οποία θα τα σχεδιάσουµε µαζί µε τον µοναδιαίο κύκλο και θα ελέγξουµε αν το σύστηµα είναι η όχι ευσταθές. %define transfer function X(z) as tf-object H=tf([ 7 ],[ -],) H=filt([ 7 ],[ -]) pol=pole(h) zer=zero(h) pzmap(h) και θα εµφανιστούν τα παρακάτω αποτελέσµατα και η γραφική παράσταση στο Command window του matlab Pole-Zero Map.5.5 Imaginary Axis -.5 - -.5-3.5-3 -.5 - -.5 - -.5.5 Real Axis Transfer function: z^ + 7 z ----------- z^ + z - Sampling time: Transfer function: + 7 z^- ----------------- + z^- - z^- --
Sampling time: unspecified pol = zer = - -3.5 Τα δυο πρώτα αποτελέσµατα µας εµφανίζουν την Η(z) ως συνάρτηση µεταφοράς (transfer functio το ένα µε θετικές δυνάµεις του z ενώ το άλλο µε αρνητικές δυνάµεις του z. Τα δυο τελευταία είναι οι πόλοι και τα µηδενικά της Η(z). Η γραφική παράσταση µας δείχνει που βρίσκονται τα µηδενικά (o) και οι πόλοι (x) σε σχέση µε τον µοναδιαίο κύκλο. Η συνάρτηση H=tf([ 7 ],[ -],) δηµιουργεί την Η(z) ως συνάρτηση µεταφοράς µε θετικές δυνάµεις του z µε ορίσµατα σε πίνακες τους συντελεστές του αριθµητή, τους συντελεστές του παρανοµαστή και το για διακριτά συστήµατα. Η συνάρτηση H=filt([ 7 ],[ -]) δηµιουργεί την Η(z) ως συνάρτηση µεταφοράς µε αρνητικές δυνάµεις του z µε ορίσµατα σε πίνακες τους συντελεστές του αριθµητή και τους συντελεστές του παρανοµαστή. Η συνάρτηση pole(h) µας επιστρέφει τους πόλους της Η ενώ η συνάρτηση zero(h) µας επιστρέφει τα µηδενικά της Η. Ως όρισµα και οι δυο παίρνουν την συνάρτηση µεταφοράς Η. Η συνάρτηση pzmap(h) µας επιστρέφει την γραφική παράσταση των πόλων και των µηδενικών σε σχέση µε τον µοναδιαίο κύκλο. Με την βοήθεια αυτής της εντολής έχουµε την δυνατότητα να καταλάβουµε εάν το σύστηµα είναι ευσταθές ή όχι. Για είναι ευσταθές θα πρέπει οι πόλοι να βρίσκονται µέσα στον κύκλο. Απόκριση συστηµάτων Με την βοήθεια κάποιων εντολών θα σχεδιάσουµε την απόκριση του συστήµατος για διάφορες εισόδους. step(h); impulse(h); t=:*pi; u=sin(t); lsim(h,u,t); --
4 Step Response 35 3 5 Amplitude 5 5.5.5.5 3 3.5 4 4.5 5 Time (sec) 35 Impulse Response 3 5 5 Amplitude 5-5 - -5.5.5.5 3 3.5 4 4.5 5 Time (sec) -3-
3 x 8 Linear Simulation Results Amplitude - - -3-4 -5-6 5 5 5 3 35 Time (sec) Η πρώτη γραφική παράσταση µας δείχνει την απόκριση του συστήµατος µε είσοδο την µοναδιαία βηµατική συνάρτηση (u(). Η δεύτερη γραφική παράσταση µας δείχνει την απόκριση του συστήµατος µε είσοδο τον µοναδιαίο παλµό (δ(). Η τρίτη γραφική παράσταση µας δείχνει την απόκριση του συστήµατος µε είσοδο την ηµιτονοειδή συνάρτηση (sin(). Η συνάρτηση step(h) σχεδιάζει την απόκριση του Η µε είσοδο την µοναδιαία βηµατική συνάρτηση ενώ η step(h,tfinal) σχεδιάζει την απόκριση έως την τιµή tfinal. Η συνάρτηση impulse(h) σχεδιάζει την απόκριση του Η µε είσοδο τον µοναδιαίο παλµό ενώ η impulse(h,tfinal) σχεδιάζει την απόκριση έως την τιµή tfinal. Η συνάρτηση lsim(h,u,t) σχεδιάζει την απόκριση του Η µε είσοδο το διάνυσµα u υπολογισµένο στις χρονικές στιγµές t. -4-