Υλοποίηση ψηφιακών φίλτρων Αναπλ. Καθηγητής Γεώργιος Ευθύμογλου December 29, 2017 Module Title
Εισαγωγή Υλοποίηση ψηφιακών φίλτρων Direct forms Cascade form Parallel form Module Title
Συνάρτηση Μεταφοράς Τα γραμμικά χρονικά αναλλοίωτα συστήματα χαρακτηρίζονται από την εξίσωση διαφοράς: Παίρνοντας το μετασχηματισμό Ζ, έχουμε: Από τη Η(z), λαμβάνουμε τα μηδενικά και τους πόλους της συνάρτησης μεταφοράς, οποίοι εξαρτώνται από την επιλογή των συντελεστών {bk} και {ak} της εξίσωσης διαφοράς, τα οποία καθορίζουν τα χαρακτηριστικά της απόκρισης συχνότητας του συστήματος.
Υλοποίηση Ψηφιακών Φίλτρων Τα βασικά στοιχεία για να περιγράψουμε τις δομές ψηφιακών φίλτρων: (α) στοιχείο καθυστέρησης, (β) αθροιστής, (γ) πολλαπλασιαστής με σταθερά.
Υλοποίηση Ψηφιακών Φίλτρων Finite Impulse Response (FIR) (1ης τάξης) Infinite Impulse Response (IIR) (1ης τάξης)
Υλοποίηση Ψηφιακών Φίλτρων IIR Άμεση μορφή (Direct form) Σε σειρά μορφή (Cascade form) Παράλληλη μορφή
Υλοποίηση Ψηφιακών Φίλτρων: Direct I Σε αυτή την μορφή, η εξίσωση διαφοράς εφαρμόζεται απευθείας χρησιμοποιώντας τις καθυστερήσεις, τους πολλαπλασιαστές, και τους αθροιστές. Για παράδειγμα, αν υποθέσουμε Μ = Ν = 4, θα έχουμε
Υλοποίηση Ψηφιακών Φίλτρων: Direct I Η άμεση μορφή Ι υλοποιεί κάθε μέρος (αριθμητή και παρονομαστή) της συνάρτησης H(z) χωριστά, με μια σύνδεση σε σειρά μεταξύ τους. Το μέρος του αριθμητή είναι μια γραμμή καθυστέρησης που ακολουθείται από το μέρος του παρανομαστή, το οποίο είναι μια ανατροφοδότηση της γραμμής καθυστέρησης. Κατά συνέπεια υπάρχουν δύο χωριστές γραμμές καθυστέρησης σε αυτήν την δομή, και ως εκ τούτου απαιτεί οκτώ στοιχεία καθυστέρησης για την περίπτωση Μ=Ν=4.
Υλοποίηση Ψηφιακών Φίλτρων: Direct I
Υλοποίηση Ψηφιακών Φίλτρων: Direct IΙ Μπορούμε να μειώσουμε των αριθμό των στοιχείων καθυστέρησης με το να αφαιρέσουμε μια γραμμή καθυστέρησης με την ανταλλαγή της τάξης στην οποία τα δύο μέρη συνδέονται στην cascade μορφή. Οι δύο γραμμές καθυστέρησης είναι η μια κοντά στην άλλη και συνδέεται με έναν κλάδο κέρδους ενότητας (unity gain branch). Επομένως μια γραμμή καθυστέρησης μπορεί να αφαιρεθεί, και αυτή η μείωση να οδηγήσει σε μια κανονική δομή αποκαλούμενη δομή άμεσης μορφής ΙΙ.
Υλοποίηση Ψηφιακών Φίλτρων: Direct IΙ Άμεση μορφή ΙI (direct form II) με Μ=Ν=4
Υλοποίηση Ψηφιακών Φίλτρων: Direct IΙ
Direct form I of 2nd order
Direct form II of 2nd order
Υλοποίηση Ψηφιακών Φίλτρων: Cascade Με παραγοντοποίηση του αριθμητή και του παρονομαστή της συνάρτησης μεταφοράς έχουμε όπου Κ=Ν/2 και είναι πραγματικοί αριθμοί.
Cascade 2ης τάξης Τα τμήματα δεύτερης τάξης με και με και ονομάζονται τμήματα kth biquad. Η είσοδος από το kth biquad είναι η έξοδος στο (k-1)th τμήμα biquad, ενώ η έξοδος από το kth biquad είναι η είσοδος στο (k+1)th biquad. Τώρα κάθε biquad μπορεί να υλοποιηθεί με την άμεση μορφή ΙΙ. Ολόκληρο το φίλτρο μπορεί στην συνέχει να υλοποιηθεί ως μια σειρά από biquads.
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (1/8) Biquad 2nd order in direct II form Example with M=N=4
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (2/8) Example:
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (3/8) H dir2cas(b,a) function (δείτε το Παράρτημα στις Σημειώσεις) υπολογίζει τις ρίζες των πολυωνύμων B(z) και A(z) χρησιμοποιώντας την συνάρτηση cplxpair ώστε αυτές οι ρίζες να εμφανίζονται σε συζυγή ζευγάρια (complex conjugate pairs). b=[1 -2 18 -3 9]/5; % divide with a(1) to get y(n) in the difference equation >>broots = cplxpair(roots(b)); broots = 0.0585 - 0.7198i 0.0585 + 0.7198i 0.9415 - 4.0462i 0.9415 + 4.0462i
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (4/8) H dir2cas(b,a) function (δείτε το Παράρτημα στις Σημειώσεις) υπολογίζει τις ρίζες των πολυωνύμων B(z) και A(z) χρησιμοποιώντας την συνάρτηση cplxpair ώστε αυτές οι ρίζες να εμφανίζονται σε συζυγή ζευγάρια (complex conjugate pairs). a=[5 7 -4 -23 8]/5; % divide with a(1) to get y(n) in the difference equation >>aroots = cplxpair(roots(a)); aroots = -1.5101 - 1.1726i -1.5101 + 1.1726i 0.3426 1.2775
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (5/8) Τώρα κάθε ζευγάρι ριζών (i:1:i+1,:) μετατρέπεται σε second-order πολυώνυμο χρησιμοποιώντας τη συνάρτηση poly(). Π.χ. για το 1ο ζευγάρι: Η συνολική συνάρτηση μεταφοράς H(z) γράφεται ως ένα γινόμενο από τμήματα δεύτερης τάξης με πραγματικούς συντελεστές.
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (6/8) Τώρα κάθε ζευγάρι ριζών (i:1:i+1,:) μετατρέπεται σε second-order πολυώνυμο χρησιμοποιώντας τη συνάρτηση poly() Το κάθε polynomial του αριθμητή αποθηκεύεται σε μία γραμμή του Β Το κάθε polynomial του παρονομαστή αποθηκεύεται σε γραμμή του Α for i=1:2:2*K %(Κ = Ν/2 for N even) Brow = broots(i:1:i+1,:); % a pair of roots Brow = real(poly(Brow)); % make 2nd order polynomial B(fix((i+1)/2),:) = Brow; % store this in a row of matrix B Arow = aroots(i:1:i+1,:); Arow = real(poly(Arow)); A(fix((i+1)/2),:) = Arow; end
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (7/8)
Υλοποίηση Ψηφιακών Φίλτρων: Cascade (8/8) Direct I
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (1/10) H συνάρτηση μεταφοράς του συστήματος H(z) γράφεται ως άθροισμα τμημάτων δεύτερης τάξης χρησιμοποιώντας τη μέθοδο ανάπτυξη σε μερικά κλάσματα (partial fraction expansion) if M>=N where K=N/2 and are real numbers.
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (2/10) Τμήμα 2ης τάξης k=1,...,Κ με και ονομάζεται τμήμα k-th biquad. Η έξοδος αυτών των τμημάτων αθροίζεται για να διαμορφώσει την έξοδο των φίλτρων. Τώρα σε κάθε τμήμα biquad μπορεί να υλοποιηθεί με την άμεση μορφή ΙΙ. Εξαιτίας του αθροίσματος των υποτμημάτων, μια παράλληλη δομή μπορεί να δημιουργηθεί για να πραγματοποιήσει την Η(z).
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (3/10) Παράλληλη Υλοποίηση:
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (4/10) Example M=N=4
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (5/10) Example M=N=4
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (6/10) Η dir2par function (δείτε το Παράρτημα στις Σημειώσεις) πρώτα υπολογίζει το partial fraction expansion της H(z) χρησιμοποιώντας την συνάρτηση residuez. [r,p,C] = residuez(b,a); Στη συνέχεια θα πάρουμε 2 πόλους κάθε φορά και θα υπολογίσουμε τα πολυώνυμο 2ου βαθμού (τα οποία θα αθροιστούν) κτλ...
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (7/10) Χρησιμοποιούμε πάλι την residuez αλλά αυτή τη φορά δίνουμε τον vector r=[r(i), r(i+1)] στο Brow και p=[p(i), p(i+1)] στο Arow και παίρνουμε πίσω τους συντελεστές του πολυωνύμου 2ου βαθμού: Β_{i,0}, B_{i,1} στο Brow και Α_{i,0}=1, Α_{i,1}, Α_{i,1} στο Αrow [Brow,Arow] = residuez(Brow,Arow,[]); %write over Brow and Arow %since initial values not needed
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (8/10) for i=1:2:N-1 % for N even Brow = r(i:1:i+1,:); Arow = p(i:1:i+1,:); % obtain 2nd order polynomial using residuez function with 3 parameters: poles (2 poles given by Arow),residues (2 residues given by Brow), and constant (here constant=[]) [Brow,Arow] = residuez(Brow,Arow,[]); B(fix((i+1)/2),:) = real(Brow); A(fix((i+1)/2),:) = real(Arow); end
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (9/10)
Υλοποίηση Ψηφιακών Φίλτρων: Parallel (10/10) Για να ελέγξουμε ότι η παράλληλη δομή είναι σωστή, υπολογίζουμε τα πρώτα 8 δείγματα της κρουστικής απόκρισης χρησιμοποιώντας direct και parallel forms
Υλοποίηση Ψηφιακών Φίλτρων FIR Direct I Cascade form
Υλοποίηση Ψηφιακών Φίλτρων FIR Cascade form