0% ont trouvé ce document utile (0 vote)
64 vues27 pages

Mise en œuvre des filtres IIR et FIR

Ce document décrit différentes structures pour implémenter des filtres numériques à temps discret, notamment des filtres à réponse impulsionnelle infinie (IIR) et des filtres à réponse impulsionnelle finie (FIR). Il présente les éléments de base utilisés, puis décrit les structures de forme directe, en cascade et parallèle pour les filtres IIR, ainsi qu'une implémentation MATLAB.

Transféré par

Winnie Nyangono
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
64 vues27 pages

Mise en œuvre des filtres IIR et FIR

Ce document décrit différentes structures pour implémenter des filtres numériques à temps discret, notamment des filtres à réponse impulsionnelle infinie (IIR) et des filtres à réponse impulsionnelle finie (FIR). Il présente les éléments de base utilisés, puis décrit les structures de forme directe, en cascade et parallèle pour les filtres IIR, ainsi qu'une implémentation MATLAB.

Transféré par

Winnie Nyangono
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CHAPTER 6

IMPLÉMENTATION DE FILTRES À TEMPS


DISCRET

Dans les chapitres précédents, nous avons étudié la théorie des systèmes discrets dans
les domaines du temps et des fréquences. Nous allons maintenant utiliser cette théorie pour le
traitement des signaux numériques. Pour traiter les signaux, nous devons concevoir et mettre
en œuvre des systèmes appelés filtres (ou analyseurs de spectre dans certains contextes). La
question de la conception du filtre est influencée par des facteurs tels que le type de filtre (IIR
ou FIR) ou la forme de sa mise en œuvre (structures). C'est pourquoi, avant d'aborder la
question de la conception, nous nous intéressons d'abord à la manière dont elles peuvent être
mises en œuvre dans la pratique. Il s'agit là d'une préoccupation importante, car les
différentes structures de filtre dictent des stratégies de conception différentes.

Les filtres IIR, tels qu'ils sont conçus et utilisés dans le DSP, peuvent être modélisés
par des fonctions système rationnelles ou, de façon équivalente, par des équations de
différence. Ces filtres sont appelés moyenne mobile autorégressive (ARMA) ou, plus
généralement, filtres récursives. Bien que les filtres ARMA incluent des filtres à moyenne
mobile qui sont des filtres FIR, nous traiterons les filtres FIR séparément des filtres IIR pour
la conception et la mise en œuvre.

Nous commençons par une description des éléments de base qui sont utilisés pour
décrire les structures de filtre. Dans les sections suivantes, nous décrivons les structures des
filtres IIR et FIR, respectivement, et fournissons des fonctions MATLAB pour implémenter
ces structures. Ensuite, on traite brièvement de la représentation des nombres et des
caractéristiques d'erreur qui en résultent.

6.1 ELEMENTS DE BASE

Comme nos filtres sont des systèmes LTI, nous avons besoin des trois éléments
suivants pour décrire les structures de filtres numériques. Ces éléments sont illustrés à la
figure 6.1.

1. Additionneur : Cet élément a deux entrées et une sortie et est illustré à la


figure 6.1a. Notez que l'addition de trois signaux ou plus est réalisée par des
additionneurs successifs à deux entrées.
2. Multiplicateur (gain) : Il s'agit d'un élément à entrée unique et à sortie
unique, comme le montre la figure 6.1b. Notez que la multiplication par 1
est comprise et n'est donc pas explicitement indiquée.

3. Elément de retard (mémoire) : Cet élément retarde le signal qui le traverse


d'un échantillon, comme le montre la figure 6.1c. Elle est mise en œuvre à
l'aide d'un registre à décalage.

En utilisant ces éléments de base, nous pouvons maintenant décrire les différentes
structures des filtres IIR et FIR. MATLAB est un outil pratique pour le développement de ces
structures qui nécessitent des opérations sur les polynômes.

FIGURE 6.1 Trois éléments de base

6.2 STRUCTURES DE FILTRE IIR

La fonction système d'un filtre IIR est donnée par


M

B z b z n
n
b0  b1 z 1  ...  bM z  M
H  z   n 0
 ; a0  1 (6.1)
A z  N
1  a1 z 1  ...  aN z  N
a z
n 0
n
n

Où bn et an sont les coefficients du filtre. Nous avons supposé, sans perte de


généralité, que a0  1 . L'ordre d'un tel filtre IIR est appelé N si aN  0 . La représentation de
l'équation de différence d'un filtre IIR est exprimée comme suit
M N
y  n    bm x  n  m   am y  n  m  (6.2)
m0 m 1

Trois structures différentes peuvent être utilisées pour implémenter un filtre IIR:

1. Forme directe: Sous cette forme, l'équation de différence (6.2) est appliquée
directement telle quelle. Il y a deux parties à ce filtre, à savoir la partie moyenne
mobile et la partie récursive (ou de façon équivalente, les parties numérateur et
dénominateur). Cette mise en œuvre conduit donc à deux versions : les structures de
forme directe I et les structures de forme directe II.
2. Forme en cascade : Sous cette forme, la fonction système H  z  de l'équation (6.1)
est prise en compte dans des sections plus petites du deuxième ordre, appelées
biquads. La fonction du système est alors représentée comme un produit de ces
biquads. Chaque biquad est implémenté sous une forme directe, et l'ensemble de la
fonction système est implémenté en cascade de sections de biquad.

3. Forme parallèle : C'est semblable à la forme en cascade, mais après factorisation,


une expansion partielle de la fraction est utilisée pour représenter H  z  sous la forme
d'une somme de sections plus petites du deuxième ordre. Chaque section est à
nouveau mise en œuvre directement et l'ensemble de la fonction du système est mis
en œuvre sous la forme d'un réseau parallèle de sections.

Nous discuterons brièvement de ces formulaires dans cette section. Les filtres IIR sont
généralement décrits en utilisant la version de forme rationnelle (ou la structure de forme
directe) de la fonction système. C'est pourquoi nous fournirons des fonctions MATLAB pour
convertir des structures de formulaires directes en structures de formulaires en cascade et
parallèles.

6.2.1 Forme directe

Comme son nom l'indique, l'équation de différence (6.2) est mise en œuvre telle
quelle en utilisant des retards, des multiplicateurs et des additionneurs. Aux fins de
l'illustration, Soit M  N  4 . L'équation de différence est la suivante

y  n   b0 x  n   b1 x  n  1  b2 x  n  2   b3 x  n  3  b4 x  n  4 
a1 y  n  1  a2 y  n  2   a3 y  n  3  a4 y  n  4 

FIGURE 6.2 Structure de la forme directe I

Qui peut être mis en œuvre comme le montre la figure 6.2. Ce schéma fonctionnel est
appelé structure en forme I directe.

La structure de forme directe I met en œuvre chaque partie de la fonction rationnelle


H  z  séparément avec une connexion en cascade entre eux. La partie numérateur est une
ligne à retard taraudée suivie de la partie dénominateur, qui est une ligne à retard taraudée de
rétroaction. Il y a donc deux lignes de retard distinctes dans cette structure, et il faut donc huit
éléments de retard. Nous pouvons réduire ce nombre d'éléments de retard ou éliminer une
ligne de retard en changeant l'ordre dans lequel les deux parties sont connectées dans la
cascade. Les deux lignes de retard sont maintenant proches l'une de l'autre, reliées par une
branche de gain unitaire. Par conséquent, une ligne à retard peut être supprimée, et cette
réduction conduit à une structure canonique appelée structure de forme II directe, comme le
montre la figure 6.3. Il convient de noter que les deux formes directes sont équivalentes du
point de vue des entrées-sorties. En interne, cependant, ils ont des signaux différents.

FIGURE 6.3 Structure de la forme directe II

6.2.2 STRUCTURE TRANSPOSÉE

Une structure équivalente à la forme directe peut être obtenue par une procédure
appelée transposition. Dans cette opération, trois étapes sont exécutées :

1. Toutes les directions des flèches sont inversées.

2. Tous les nœuds de branche sont remplacés par des nœuds additionneurs et tous les
nœuds additionneurs sont remplacés par des nœuds de branche.

3. Les nœuds d'entrée et de sortie sont interchangés.

La structure résultante s'appelle la structure de forme directe transposée. La figure


6.3b illustre la structure de la forme II directe transposée. Le problème P6.3 explique cette
structure équivalente

6.2.3 IMPLEMENTATION MATLAB

In MATLAB the direct form structure is described by two row vectors; b containing
the bn  coefficients and a containing the an  coefficients. The filter function, which is
discussed in Chapter 2, implements the transposed direct form II structure.
Dans MATLAB, la structure de forme directe est décrite par deux vecteurs de ligne, b
contenant les coefficients bn  et a contenant les coefficients an  . La fonction de filtre,
dont il est question au chapitre 2, met en œuvre la structure transposée de la forme directe II.

6.2.4FORME CASCADE

Sous cette forme, la fonction système H  z  est écrite comme un produit de sections
de second ordre avec des coefficients réels. Pour ce faire, on factorise les polynômes
numérateur et dénominateur dans leurs racines respectives, puis on combine soit une paire de
racines conjuguées complexes, soit deux racines réelles quelconques en polynômes de
deuxième ordre. Dans la suite de ce chapitre, nous supposons que N est un nombre entier
pair. Alors

b0  b1 z 1  ...  bN z  N
H  z 
1  a1 z 1  ...  aN z  N
b1 1 b
1 z  ...  N z  N
b0 b0
 b0 (6.3)
1  a1 z  ...  aN z  N
1

K
1  Bk ,1 z 1  Bk ,2 z 2
 b0 
k 1 1  Ak ,1 z 1  Ak ,2 z 2

N
Où K est égal à , et Bk ,1 , Ak ,1 et Ak ,2 sont des nombres réels représentant les
2
coefficients des sections du second ordre. La section du 2e ordre

Yk 1  z  1  Bk ,1 z 1  Bk ,2 z 2
Hk  z    ; k  1,..., K
Yk  z  1  Ak ,1 z 1  Ak ,2 z 2

Avec

Y1  z   b0 X  z  ; YK 1  z   Y  z 

s'appelle la section kth biquad. L'entrée de la section kth biquad est la sortie de la
section (k - 1)th biquad, et la sortie de la kth biquad est l'entrée de la (k + 1)th biquad.
Maintenant, chaque section de biquad H k  z  peut être mise en œuvre sous la forme directe
II, comme le montre la figure 6.4. L'ensemble du filtre est ensuite implémenté en cascade de
biquads.

A titre d'exemple, considérons N = 4. La figure 6.5 montre une structure de forme en


cascade pour ce filtre IIR d'ordre 4.
FIGURE 6.4 Structure de la section Biquad

6.2.5 IMPLEMENTATION MATLAB

Étant donné les coefficients bn  et an  du filtre de forme directe, nous devons obtenir les
coefficients b 0 , Bk ,i  , et  Ak ,i  . Ceci est fait par la fonction suivante dir2cas.

function [b0,B,A] = dir2cas(b,a);


% DIRECT-form to CASCADE-form conversion (cplxpair version)
% ---------------------------------------------------------
% [b0,B,A] = dir2cas(b,a)
% b0 = gain coefficient
% B = K by 3 matrix of real coefficients containing bk’s
% A = K by 3 matrix of real coefficients containing ak’s
% b = numerator polynomial coefficients of DIRECT form
% a = denominator polynomial coefficients of DIRECT form
% compute gain coefficient b0
b0 = b(1); b = b/b0; a0 = a(1); a = a/a0; b0 = b0/a0;
%
M = length(b); N = length(a);
if N > M
b = [b zeros(1,N-M)];
elseif M > N
a = [a zeros(1,M-N)]; N = M;
else
NM = 0;
end
%
K = floor(N/2); B = zeros(K,3); A = zeros(K,3);
if K*2 == N;
b = [b 0]; a = [a 0];
end
%
broots = cplxpair(roots(b)); aroots = cplxpair(roots(a));
for i=[Link]*K
Brow = broots(i:1:i+1,:); Brow = real(poly(Brow));
B(fix((i+1)/2),:) = Brow;
Arow = aroots(i:1:i+1,:); Arow = real(poly(Arow));
A(fix((i+1)/2),:) = Arow;
end
FIGURE 6.5 Structure de forme Cascade pour N=4

This function converts the b and vectors into K × 3 B and A matrices. It begins by
computing b0, which is equal to b 0 /a 0 (assuming a 0 = 1). It then makes the vectors b and
a of equal length by zero-padding the shorter vector. This ensures that each biquad has a
nonzero numerator and denominator. Next it computes the roots of the B(z) and A(z)
polynomials. Using the cplxpair function, these roots are ordered in complex conjugate pairs.
Now every pair is converted back into a 2nd-order numerator or denominator polynomial
using the poly function. The SP toolbox function, tf2sos (transfer function to 2nd-order
section), also performs a similar operation.

The cascade form is implemented using the following casfiltr function.

Cette fonction convertit les b et les vecteurs en matrices K  3B et A . Il commence


par calculer b 0 , qui est égal à b0 a0 (en supposant a0  0 ). Il rend alors les vecteurs b et a de
longueur égale en complétant les zéros sur le vecteur le plus court. Ceci garantit que chaque
biquad a un numérateur et un dénominateur différents de zéro. Ensuite, il calcule les racines
des polynômes B  z  et A(z). En utilisant la fonction cplxpair, ces racines sont ordonnées en
paires conjuguées complexes. Maintenant, chaque paire est reconvertie en un polynôme
numérateur ou dénominateur d'ordre 2 à l'aide de la fonction poly. La fonction de la boîte à
outils SP, tf2sos (fonction de transfert à la section d'ordre 2), effectue également une
opération similaire.

La forme en cascade est réalisée à l'aide de la fonction casfiltr suivante.


function y = casfiltr(b0,B,A,x);
% CASCADE form realization of IIR and FIR filters
% -----------------------------------------------
% y = casfiltr(b0,B,A,x);
% y = output sequence
% b0 = gain coefficient of CASCADE form
% B = K by 3 matrix of real coefficients containing bk’s
% A = K by 3 matrix of real coefficients containing ak’s
% x = input sequence
%
[K,L] = size(B);
N = length(x); w = zeros(K+1,N); w(1,:) = x;
for i = [Link]K
w(i+1,:) = filter(B(i,:),A(i,:),w(i,:));
end
y = b0*w(K+1,:);

Il utilise la fonction de filtre en boucle en utilisant les coefficients de chaque biquad


stockés dans les matrices B et A. L'entrée est mise à l'échelle par b0 , et la sortie de chaque
opération de filtrage est utilisée comme entrée pour l'opération de filtrage suivante. La sortie
du fonctionnement du filtre final est la sortie globale.

La fonction MATLAB suivante, cas2dir, convertit une forme en cascade en une forme
directe. Il s'agit d'une opération simple qui implique la multiplication de plusieurs polynômes
de second ordre. Pour ce faire, la fonction MATLAB conv est utilisée dans une boucle sur les
facteurs K. La fonction boîte à outils SP, sos2tf effectue également une opération similaire.

function [b,a] = cas2dir(b0,B,A);


% CASCADE-to-DIRECT form conversion
% ---------------------------------
% [b,a] = cas2dir(b0,B,A)
% b = numerator polynomial coefficients of DIRECT form
% a = denominator polynomial coefficients of DIRECT form
% b0 = gain coefficient
% B = K by 3 matrix of real coefficients containing bk’s
% A = K by 3 matrix of real coefficients containing ak’s
%
[K,L] = size(B);
b = [1]; a = [1];
for i=[Link]K
b=conv(b,B(i,:)); a=conv(a,A(i,:));
end
b = b*b0;

EXEMPLE 6.1 Un filtre est décrit par l'équation de différence suivante:

16 y  n   12 y  n  1  2 y (n  2)  4 y (n  3)  y (n  4)
 x  n   3x  n  1  11x(n  2)  27 x(n  3)  18x(n  4)

Déterminer sa structure en cascade.

Solution

Script MATLAB:
>> b=[1 -3 11 -27 18]; a=[16 12 2 -4 -1];
>> [b0,B,A]=dir2cas(b,a)
b0 = 0.0625
B=
1.0000 -0.0000 9.0000
1.0000 -3.0000 2.0000
A=
1.0000 1.0000 0.5000
1.0000 -0.2500 -0.1250
La structure qui en résulte est illustrée à la figure 6.6. Pour vérifier que notre structure en
cascade est correcte, calculons les 8 premiers échantillons de la réponse impulsionnelle en
utilisant les deux formes.

>> delta = impseq(0,0,7)


delta =
10000000
>> format long
>> hcas=casfiltr(b0,B,A,delta)
hcas =
Columns 1 through 4
0.06250000000000 -0.23437500000000 0.85546875000000 -2.28417968750000
Columns 5 through 8
2.67651367187500 -1.52264404296875 0.28984069824219 0.49931716918945
>> hdir=filter(b,a,delta)
hdir =
Columns 1 through 4
0.06250000000000 -0.23437500000000 0.85546875000000 -2.28417968750000
Columns 5 through 8
2.67651367187500 -1.52264404296875 0.28984069824219 0.49931716918945

FIGURE 6.6 Structure en cascade de l’exemple 6.1

6.2.6 FORME PARALLELE

Sous cette forme, la fonction système H  z  est écrite sous la forme d'une somme de
sections du deuxième ordre utilisant l'expansion partielle de fraction.

B z b0  b1 z 1  ...  bM z  M
H  z  
A z  1  a1 z 1  ...  aN z  N
bˆ0  bˆ1 z 1  ...  bˆN 1 z1 N M  N
 1 N
  Ck z  k (6.4)
1  a1 z  ...  aN z 0
only _ if _ M  N
1
K Bk ,0  Bk ,1 z M N
 1
 C z k

k 1 1  Ak ,1 z  Ak ,2 z 2
k
0
only _ if _ M  N
N
Où K est égal à , et Bk ,1 , Bk ,2 et Ak ,2 sont des nombres réels représentant les
2
coefficients des sections du second ordre. La section du 2e ordre

Yk 1  z  Bk ,0  Bk ,1 z 1
Hk  z    ; k  1,..., K
Yk  z  1  Ak ,1 z 1  Ak ,2 z 2

Avec

Yk  z   H k  z  X  z  , Y  z   Yk  z  , M < N

est la kième section biquad rationnelle. L'entrée filtre est disponible pour toutes les
sections biquad ainsi que pour la section polynomiale si M  N (qui est une partie FIR). La
sortie de ces sections est additionnée pour former la sortie du filtre. Maintenant, chaque
section de biquad H k  z  peut être implémentée sous la forme directe II. En raison de la
somme des sous-sections, une structure parallèle peut être construite pour réaliser H(z). A
titre d'exemple, considérons M  N  4 . La figure 6.7 montre une structure de forme
parallèle pour ce filtre IIR d'ordre 4.

6.2.7 IMPLEMENTATION MATLAB

La fonction suivante dir2par convertit les coefficients de forme directe bn  et an 
en coefficients de forme parallèle Bk ,i  et  Ak ,i  .

FIGURE 6.7 Structure de forme parallèle pour N=4


function [C,B,A] = dir2par(b,a);
% DIRECT-form to PARALLEL-form conversion
% --------------------------------------
% [C,B,A] = dir2par(b,a)
% C = Polynomial part when length(b) >= length(a)
% B = K by 2 matrix of real coefficients containing bk’s
% A = K by 3 matrix of real coefficients containing ak’s
% b = numerator polynomial coefficients of DIRECT form
% a = denominator polynomial coefficients of DIRECT form
%
M = length(b); N = length(a);
[r1,p1,C] = residuez(b,a);
p = cplxpair(p1,10000000*eps); I = cplxcomp(p1,p); r = r1(I);
K = floor(N/2); B = zeros(K,2); A = zeros(K,3);
if K*2 == N; %N even, order of A(z) odd, one factor is first order
for i=[Link]N-2
Brow = r(i:1:i+1,:); Arow = p(i:1:i+1,:);
[Brow,Arow] = residuez(Brow,Arow,[]);
B(fix((i+1)/2),:) = real(Brow); A(fix((i+1)/2),:) = real(Arow);
end
[Brow,Arow] = residuez(r(N-1),p(N-1),[]);
B(K,:) = [real(Brow) 0]; A(K,:) = [real(Arow) 0];
else
for i=[Link]N-1
Brow = r(i:1:i+1,:); Arow = p(i:1:i+1,:);
[Brow,Arow] = residuez(Brow,Arow,[]);
B(fix((i+1)/2),:) = real(Brow); A(fix((i+1)/2),:) = real(Arow);
end
end

La fonction dir2cas calcule d'abord l'expansion de la fraction partielle du domaine z


en utilisant la fonction residuez. Nous devons organiser les paires de pôles et de résidus en
paires complexes conjuguées de pôles et de résidus, suivies de vraies paires de pôles et de
résidus. Pour ce faire, on peut utiliser la fonction cplxpair de MATLAB, qui trie un tableau
complexe en paires conjuguées complexes. Cependant, deux appels consécutifs à cette
fonction, l'un pour les réseaux de pôles et l'autre pour les réseaux de résidus, ne garantissent
pas que les pôles et les résidus correspondront l'un à l'autre. C'est pourquoi une nouvelle
fonction cplxcomp est développée, qui compare deux tableaux complexes mélangés et
retourne l'index d'un tableau, qui peut être utilisé pour réarranger un autre tableau.

function I = cplxcomp(p1,p2)
% I = cplxcomp(p1,p2)
% Compares two complex pairs which contain the same scalar elements
% but (possibly) at differrent indices. This routine should be
% used after CPLXPAIR routine for rearranging pole vector and its
% corresponding residue vector.
% p2 = cplxpair(p1)
%
I=[];
for j=[Link]length(p2)
for i=[Link]length(p1)
if (abs(p1(i)-p2(j)) < 0.0001)
I=[I,i];
end
end
end
I=I’;
Après avoir collecté ces paires de pôles et de résidus, la fonction dir2cas calcule le
numérateur et le dénominateur des biquads en utilisant la fonction residuez à l'envers.
Ces coefficients de forme parallèle sont ensuite utilisés dans la fonction parfiltr, qui
implémente la forme parallèle. La fonction parfiltr utilise la fonction filtre en boucle en
utilisant les coefficients de chaque biquad stockés dans les matrices B et A. L'entrée est
d'abord filtrée à travers la partie C du FIR et stockée dans la première rangée d'une matrice w.
Ensuite, les sorties de tous les filtres biquad sont calculées pour la même entrée et stockées
dans la matrice w en tant que lignes suivantes. Enfin, toutes les colonnes de la matrice w sont
additionnées pour obtenir la sortie.

function y = parfiltr(C,B,A,x);
% PARALLEL form realization of IIR filters
% ----------------------------------------
% [y] = parfiltr(C,B,A,x);
% y = output sequence
% C = polynomial (FIR) part when M >= N
% B = K by 2 matrix of real coefficients containing bk’s
% A = K by 3 matrix of real coefficients containing ak’s
% x = input sequence
%
[K,L] = size(B); N = length(x); w = zeros(K+1,N);
w(1,:) = filter(C,1,x);
for i = [Link]K
w(i+1,:) = filter(B(i,:),A(i,:),x);
end
y = sum(w);

Pour obtenir une forme directe à partir d'une forme parallèle, la fonction par2dir peut être
utilisée. Il calcule les pôles et les résidus de chaque biquad approprié et les combine en pôles
et résidus du système. Un autre appel de la fonction residuez en ordre inverse calcule les
polynômes numérateur et dénominateur.

function [b,a] = par2dir(C,B,A);


% PARALLEL-to-DIRECT form conversion
% ----------------------------------
% [b,a] = par2dir(C,B,A)
% b = numerator polynomial coefficients of DIRECT form
% a = denominator polynomial coefficients of DIRECT form
% C = Polynomial part of PARALLEL form
% B = K by 2 matrix of real coefficients containing bk’s
% A = K by 3 matrix of real coefficients containing ak’s
%
[K,L] = size(A); R = []; P = [];
for i=[Link]K
[r,p,k]=residuez(B(i,:),A(i,:)); R = [R;r]; P = [P;p];
end
[b,a] = residuez(R,P,C); b = b(:)’; a = a(:)’;

EXEMPLE 6.2 Considérons le filtre donné dans l'exemple 6.1.

16 y  n   12 y  n  1  2 y (n  2)  4 y (n  3)  y (n  4)
 x  n   3x  n  1  11x(n  2)  27 x(n  3)  18x(n  4)
Déterminez maintenant sa forme parallèle.

Solution Script MATLAB:

>> b=[1 -3 11 -27 18]; a=[16 12 2 -4 -1];


>> [C,B,A]=dir2par(b,a)
C=
-18
B=
10.0500 -3.9500
28.1125 -13.3625
A=
1.0000 1.0000 0.5000
1.0000 -0.2500 -0.1250

La structure qui en résulte est illustrée à la figure 6.8. Pour vérifier notre structure
parallèle, calculons les 8 premiers échantillons de la réponse impulsionnelle en utilisant les
deux formulaires

>> format long; delta = impseq(0,0,7); hpar=parfiltr(C,B,A,delta)


hpar =
Columns 1 through 4
0.06250000000000 -0.23437500000000 0.85546875000000 -2.28417968750000
Columns 5 through 8
2.67651367187500 -1.52264404296875 0.28984069824219 0.49931716918945
>> hdir = filter(b,a,delta)
hdir =
Columns 1 through 4
0.06250000000000 -0.23437500000000 0.85546875000000 -2.28417968750000
Columns 5 through 8
2.67651367187500 -1.52264404296875 0.28984069824219 0.49931716918945

FIGURE 6.8 Structure de forme parallèle de l'exemple 6.2


EXEMPLE 6.3

Quelle serait la forme globale directe, en cascade ou parallèle si une structure contient
une combinaison de ces formes ? Considérons le schéma fonctionnel illustré à la figure 6.9.

Solution

Cette structure contient une cascade de deux sections parallèles. La première section
parallèle contient 2 biquads, tandis que la seconde contient 3 biquads. Nous devrons convertir
chaque section parallèle en une forme directe à l'aide de la fonction par2dir, ce qui nous
donnera une cascade de 2 formes directes. La forme globale directe peut être calculée en
convolutionnant les polynômes numérateur et dénominateur correspondants. La cascade
globale et les formes parallèles peuvent maintenant être dérivées de la forme directe.

Script MATLAB:
>> C0=0; B1=[2 4;3 1]; A1=[1 1 0.9; 1 0.4 -0.4];
>> B2=[0.5 0.7;1.5 2.5;0.8 1]; A2=[1 -1 0.8;1 0.5 0.5;1 0 -0.5];
>> [b1,a1]=par2dir(C0,B1,A1)
b1 =
5.0000 8.8000 4.5000 -0.7000

FIGURE 6.9 Block diagram in Example 6.3

a1 =
1.0000 1.4000 0.9000 -0.0400 -0.3600
>> [b2,a2]=par2dir(C0,B2,A2)
b2 =
2.8000 2.5500 -1.5600 2.0950 0.5700 -0.7750
a2 =
1.0000 -0.5000 0.3000 0.1500 0.0000 0.0500 -0.2000
>> b=conv(b1,b2) % Overall direct form numerator
b=
Columns 1 through 7
14.0000 37.3900 27.2400 6.2620 12.4810 11.6605 -5.7215
Columns 8 through 9
-3.8865 0.5425
>> a=conv(a1,a2) % Overall direct form denominator
a=
Columns 1 through 7
1.0000 0.9000 0.5000 0.0800 0.1400 0.3530 -0.2440
Columns 8 through 11
-0.2890 -0.1820 -0.0100 0.0720
>> [b0,Bc,Ac]=dir2cas(b,a) % Overall cascade form
b0 =
14.0000
Bc =
1.0000 1.8836 1.1328
1.0000 -0.6915 0.6719
1.0000 2.0776 0.8666
1.0000 0 0
1.0000 -0.5990 0.0588
Ac =
1.0000 1.0000 0.9000
1.0000 0.5000 0.5000
1.0000 -1.0000 0.8000
1.0000 1.5704 0.6105
1.0000 -1.1704 0.3276
>> [C0,Bp,Ap]=dir2par(b,a) % Overall parallel form
C0 = []
Bp =
-20.4201 -1.6000
24.1602 5.1448
2.4570 3.3774
-0.8101 -0.2382
8.6129 -4.0439
Ap =
1.0000 1.0000 0.9000
1.0000 0.5000 0.5000
1.0000 -1.0000 0.8000
1.0000 1.5704 0.6105
1.0000 -1.1704 0.3276

Cet exemple montre qu'en utilisant les fonctions MATLAB développées dans cette section,
nous pouvons sonder et construire une grande variété de structures.

6.3 STRUCTURES DE FILTRE FIR

Un filtre de réponse impulsionnelle à durée finie a une fonction système de la forme.

M 1
H  z   b0  b1 z 
1
 bM 1 z 1 M
  bn z  n (6.5)
n 0

La réponse impulsionnelle h(n) est donc


b , 0  n  M 1
h  n   n (6.6)
0, else

Et la représentation de l'équation de différence est la suivante

y  n   b0 x  n   b1 x  n  1   bM 1x  n  M  1 (6.7)

qui est une convolution linéaire du support fini.

L'ordre du filtre est M-1, et la longueur du filtre (qui est égale au nombre de
coefficients) est M. Les structures du filtre FIR sont toujours stables, et elles sont
relativement simples par rapport aux structures IIR. De plus, les filtres FIR peuvent être
conçus pour avoir une réponse en phase linéaire, ce qui est souhaitable dans certaines
applications.

Nous examinerons les quatre structures suivantes :

1. Forme directe : Sous cette forme, l'équation de différence (6.7) est implémentée
directement telle quelle ;

2. Forme en cascade : Sous cette forme, la fonction système H(z) dans (6.5) est prise en
compte dans les facteurs de second ordre, qui sont ensuite implémentés dans une connexion
en cascade ;

3. Forme en phase linéaire : Lorsqu'un filtre FIR a une réponse en phase linéaire, sa
réponse impulsionnelle présente certaines conditions de symétrie. Sous cette forme, nous
exploitons ces relations de symétrie pour réduire de moitié environ les multiplications.

4. Formulaire d'échantillonnage de fréquence : Cette structure est basée sur la DFT


de la réponse impulsionnelle h(n) et conduit à une structure parallèle. Il convient également à
un procédé de conception basé sur l'échantillonnage de la réponse en fréquence H  e jw  .

Nous décrirons brièvement ces quatre formulaires avec quelques exemples. La fonction
MATLAB dir2cas développée dans la section précédente est également applicable pour la
forme cascade.

FIGURE 6.10 Structure FIR sous forme directe


6.3.1 FORME DIRECTE

L'équation de différence (6.7) est implémentée comme une ligne à retard taraudée
puisqu'il n'y a pas de chemin de retour. Soit M = 5 (c'est-à-dire un filtre FIR d'ordre 4) ; puis

y  n   b0 x  n   b1 x  n  1  b2 x  n  2  b3 x  n  4  b4 x  n  4 

La structure de la forme directe est donnée à la figure 6.10. Notez que puisque le
dénominateur est égal à l'unité, il n'y a qu'une seule structure de forme directe.

6.3.2 IMPLEMENTATION MATLAB

Dans MATLAB, la structure FIR de forme directe est décrite par le vecteur de ligne b
contenant les coefficients bn  . La structure est mise en œuvre par la fonction de filtrage,
dans laquelle le vecteur a est réglé sur la valeur scalaire 1, comme indiqué au chapitre 2.

6.3.3 FORME EN CASCADE

Cette forme est similaire à celle de la forme de IIR. La fonction système H(z) est
convertie en produits de sections du deuxième ordre avec des coefficients réels. Ces sections
sont implémentées sous forme directe et l'ensemble du filtre sous forme de cascade de
sections du second ordre. De (6.5).

H  z   b0  b1 z 1  ...  bM 1 z1 M
 b b 
 b0 1  1 z 1  ...  M 1 z1 M  (6.8)
 b0 b0 

 b0  1  Bk ,1 z 1  Bk ,2 z 2 
K

k 1

Where K is equal to , and Bk,1 and Bk,2 are real numbers representing the
coefficients of 2nd-order sections. For M = 7 the cascade form is shown in Figure 6.11.

M 
où K est égal à   , et Bk ,1 et Bk ,2 sont des nombres réels représentant les
2
coefficients des sections du second ordre. Pour M=7, la forme en cascade est illustrée à la
figure 6.11.
FIGURE 6.11 Structure FIR en forme de cascade

6.3.4 IMPLEMENTATION MATLAB

Bien qu'il soit possible de développer une nouvelle fonction MATLAB pour la forme de
cascade FIR, nous utiliserons notre fonction dir2cas en réglant le vecteur dénominateur a
égal à 1. cas2dir peut également être utilisé pour obtenir la forme directe de la forme en
cascade.

6.3.5 FORME LINÉAIRE-PHASE

Pour les filtres sélectifs en fréquence (par exemple, les filtres passe-bas), il est
généralement souhaitable d'avoir une réponse en phase qui est une fonction linéaire de la
fréquence ; c'est-à-dire, nous voulons

H  e jw      w,  < w   (6.9)

où   0 ou  / 2 et  est une constante. Dans le cas d'un filtre FIR causal avec la réponse
impulsionnelle dans l'intervalle 0, M  1 , la condition de phase linéaire (6.9) impose les
conditions de symétrie suivantes à la réponse impulsionnelle h  n  (voir problème P6.16) :

M 1
h  n   h  M  1  n  ;   0,   , 0  n  M 1 (6.10)
2

M 1
h  n   h  M  1  n  ;    / 2,  , 0  n  M 1 (6.11)
2

Une réponse impulsionnelle qui satisfait (6.10) s'appelle une réponse impulsionnelle
symétrique, et qui dans (6.11) s'appelle une réponse impulsionnelle anti-symétrique. Ces conditions
de symétrie peuvent maintenant être exploitées dans une structure appelée forme de phase linéaire.

Considérons l'équation de différence donnée en (6.7) avec une réponse impulsionnelle


symétrique en (6.10). Nous avons

y  n  b0 x  n   b1 x  n  1  ...  b1 x  n  M  2   b0 x  n  M  1
 b0  x  n   x  n  M  1  b1  x  n  1  x  n  M  2   ...
L'implémentation de cette équation de différence sous forme de schéma fonctionnel est
illustrée à la figure 6.12 pour M pair et impair.

De toute évidence, cette structure nécessite 50 % moins de multiplications que la forme


directe. Une structure similaire peut être dérivée pour une réponse impulsionnelle anti-symétrique.

6.3.6 IMPLEMENTATION MATLAB

La structure en phases linéaires est essentiellement une forme directe dessinée différemment
pour éviter les multiplications. Par conséquent, dans un MATLAB, la représentation de la structure en
phase linéaire est équivalente à la forme directe.

FIGURE 6.12 Structures FIR en phase linéaire (réponse impulsionnelle symétrique)

EXEMPLE 6.4 Un filtre FIR est donné par la fonction système

1 4
H  z   1  16 z  z 8
16

Déterminer et dessiner les structures directes, en phase linéaire et en cascade.

a. Forme directe : L'équation de différence est donnée par

y  n   x  n   16.0625x  n  4  x  n  8

et la structure de la forme directe est illustrée à la figure 6.13(a).

b. Forme à phase linéaire: L'équation de différence peut être écrite sous la forme

y(n) = [x(n) + x(n − 8)] + 16.0625x(n − 4)

et la structure qui en résulte est illustrée à la figure 6.13b.

c. forme Cascade: Nous utilisons le script MATLAB suivant.

>> b=[1,0,0,0,16+1/16,0,0,0,1]; [b0,B,A] = dir2cas(b,1)


b0 = 1
B=
1.0000 2.8284 4.0000
1.0000 0.7071 0.2500
1.0000 -0.7071 0.2500
1.0000 -2.8284 4.0000
A=
100
100
100

La structure en cascade est illustrée à la figure 6.13c.

FIGURE 6.13 Structures de filtre FIR dans l'exemple 6.4

EXEMPLE 6.5 pour le filtre de l'exemple 6.4, quelle serait la structure si nous désirions une
forme en cascade contenant des composantes de phase linéaire à coefficients réels.

Solution

Nous nous intéressons aux sections en cascade qui ont une symétrie et des coefficients réels.
D'après les propriétés des filtres FIR à phase linéaire (voir chapitre 7), si un tel filtre a un zéro
arbitraire à z  r , alors il doit y avoir 3 autres zéros à z  1/ r   , z  r   et
z  1/ r     pour avoir des coefficients de filtre réels. Nous pouvons maintenant utiliser cette
propriété. Tout d'abord, nous déterminerons les positions zéro du polynôme d'ordre 8 donné. Nous
regrouperons ensuite 4 zéros qui satisfont à cette propriété pour obtenir une section de phase linéaire
(de 4ème ordre). Il y a deux sections de ce type, que nous allons connecter en cascade.

Script MATLAB:

>> b=[1,0,0,0,16+1/16,0,0,0,1]; broots=roots(b)


broots =
-1.4142 + 1.4142i
-1.4142 - 1.4142i
1.4142 + 1.4142i
1.4142 - 1.4142i
-0.3536 + 0.3536i
-0.3536 - 0.3536i
0.3536 + 0.3536i
0.3536 - 0.3536i
>> B1=real(poly([broots(1),broots(2),broots(5),broots(6)]))
B1 =
1.0000 3.5355 6.2500 3.5355 1.0000
>> B2=real(poly([broots(3),broots(4),broots(7),broots(8)]))
B2 =
-3.5355 6.2500 -3.5355 1.0000

FIGURE 6.14 Cascade des d'éléments du FIR à phase linéaire

6.3.7 FORME D'ÉCHANTILLONNAGE DE FÉQUENCE

Dans cette forme, nous utilisons le fait que la fonction système H  z  d'un filtre FIR peut être
reconstruite à partir de ses échantillons sur le cercle unitaire. D'après nos discussions sur le DFT au
chapitre 5, nous rappelons que ces échantillons sont en fait les valeurs de la DFT M-point
H  k  , 0  k  k  M 1 de la réponse impulsionnelle du M-point h  n  . C'est pourquoi nous
avons

H  z   Ζ h  n   Z  IDFT {H  k }

En utilisant cette procédure, on obtient[voir (5.17) au Chapitre 5][voir (5.17)].

 1  z  M  M 1 H  k 
H  z     k 1
(6.12)
 M  k 0 1  WM z

L'utilisation de cette procédure montre que c'est le DFT H(k), plutôt que la réponse impulsionnelle
h  n  (ou l'équation de différence), qui est utilisé dans cette structure. Notez également que le filtre
FIR décrit par (6.12) a une forme récursive similaire à un filtre IIR car (6.12) contient à la fois des
pôles et des zéros. Le filtre obtenu est un filtre FIR puisque les pôles à WM k sont annulés par les
racines de,

1  zM  0

La fonction du système dans (6.12) conduit à une structure parallèle, comme le montre la figure 6.15
pour M=4.
L'un des problèmes de la structure de la figure 6.15 est qu'elle nécessite une mise en œuvre
arithmétique complexe. Comme un filtre FIR est presque toujours un filtre à valeur réelle, il est
possible d'obtenir une réalisation alternative dans laquelle seule l'arithmétique réelle est utilisée. Cette
réalisation est obtenue en utilisant les propriétés de symétrie du DFT et du facteur WM k . Ensuite
(6.12) peut être exprimé de la manière suivante (voir Problème P6.19)

1 zM  L H  0 H  M / 2 
H  z   2 H  k  H k  z     (6.13)
M  k 1 1  z 1 1  z 1 

FIGURE 6.15 Structure d'échantillonnage de fréquence pour M = 4

M 1
 1 pour M pair, et H k  z  , k  1,, L sont des sections de
M
où L = pour M impair, L =
2 2
2e ordre données par

 2 k 
cos H  k    z 1 cos H  k  
 M 
Hk  z   (6.14)
 2 k  2
1  2 z 1 cos   z
 M 

Notez que les échantillons DFT H  0  et H  M / 2  sont en valeur réelle et que le troisième terme à
droite de (6.13) est absent si M est impair. En utilisant (6.13) et (6.14), nous montrons une structure
d'échantillonnage de fréquence à la figure 6.16 pour M = 4 contenant des coefficients réels.
FIGURE 6.16 Structure d'échantillonnage en fréquence pour M = 4 avec coefficients réels

6.3.8 IMPLEMENTATION MATLAB

Compte tenu de la réponse impulsionnelle h  n  ou de la DFT H  k  , nous devons déterminer les


coefficients en (6.13) et (6.14). La fonction MATLAB suivante, dir2fs, convertit une forme directe [
h  n  valeurs] en forme d'échantillonnage de fréquence en implémentant directement (6.13) et (6.14).

function [C,B,A] = dir2fs(h)


% Direct form to Frequency Sampling form conversion
% -------------------------------------------------
% [C,B,A] = dir2fs(h)
% C = Row vector containing gains for parallel sections
% B = Matrix containing numerator coefficients arranged in rows
% A = Matrix containing denominator coefficients arranged in rows
% h = impulse response vector of an FIR filter
%
M = length(h); H = fft(h,M);
magH = abs(H); phaH = angle(H)’;
% check even or odd M
if (M == 2*floor(M/2))
L = M/2-1; % M is even
A1 = [1,-1,0;1,1,0]; C1 = [real(H(1)),real(H(L+2))];
else
L = (M-1)/2; % M is odd
A1 = [1,-1,0]; C1 = [real(H(1))];
end
k = [1:L]’;
% initialize B and A arrays
B = zeros(L,2); A = ones(L,3);
% compute denominator coefficients
A(1:L,2) = -2*cos(2*pi*k/M); A = [A;A1];
% compute numerator coefficients
B(1:L,1) = cos(phaH(2:L+1));
B(1:L,2) = -cos(phaH(2:L+1)-(2*pi*k/M));
% compute gain coefficients
C = [2*magH(2:L+1),C1]’;

Dans cette fonction, les valeurs de réponse impulsionnelle sont fournies par le tableau h.
Après conversion, le tableau C contient les valeurs de gain pour chaque section parallèle. Les valeurs
de gain pour les sections parallèles d'ordre 2 sont données en premier, suivies de H(0) et H (M/2) (si
M est pair). La matrice B contient les coefficients du numérateur, qui sont disposés en vecteurs de
longueur 2 rangées pour chaque section du 2ème ordre. La matrice A contient les coefficients du
dénominateur, qui sont disposés en vecteurs de longueur à 3 rangées pour les sections du 2ème ordre
correspondant à celles de B, suivis des coefficients pour les sections du 1er ordre.

Un problème pratique avec la structure de la figure 6.16 est qu'elle a des pôles sur le cercle
unitaire, ce qui rend ce filtre très instable. Si le filtre n'est pas excité par l'une des fréquences polaires,
la sortie est limitée. On peut éviter ce problème en échantillonnant H(z) sur un cercle |z|=r, où le rayon
r est très proche de 1 mais inférieur à 1 (p. ex., r = 0.99), ce qui résulte en

1  r M zM M 1
H k 
H  z   1  rW k k
; H  k   H  re j 2 k / M  (6.15)
M k 0 M z

  
Maintenant en approximant H re j 2 k / M  H re j 2 k / M  pour r  1 . Nous pouvons obtenir une
structure stable similaire à celle de la figure 6.16 contenant des valeurs réelles. Le problème P6.20
traite de cette question.

1
EXEMPLE 6.6 Soit h  n   1, 2,3, 2,1 . Déterminez et dessinez la forme d'échantillonnage de
9
fréquence.

Solution

Script MATLAB:

>> h = [1,2,3,2,1]/9; [C,B,A] = dir2fs(h)


C=
0.5818
0.0849
1.0000
B=
-0.8090 0.8090
0.3090 -0.3090
A=
1.0000 -0.6180 1.0000
1.0000 1.6180 1.0000
1.0000 -1.0000 0

Puisque M=5 est impair, il n'y a qu'une seule section de 1er ordre. D'où

1  z 5  0.809  0.809 z 1 0.309  0.309 z 1 1 


H  z    
1  z 1 
0.5818 1 2
0.0848 1 2
5  1  0.618 z  z 1  1.618 z  z

La forme d'échantillonnage de fréquence est illustré à la figure 6.17.


FIGURE 6.17 Structure d'échantillonnage de fréquence dans l'exemple 6.6

EXEMPLE 6.7 Les échantillons de fréquence d'un filtre FIR à 32 points en phase linéaire sont
donnés par

1 k  0,1, 2

H  k   0.5 k 3
0 k  4,5,...,15

Déterminer sa forme d'échantillonnage en fréquence et comparer sa complexité de calcul avec la


forme de phase linéaire.

Solution

Dans cet exemple, puisque les échantillons du DFT H(k) sont donnés, nous pourrions utiliser (6.13) et
(6.14) directement pour déterminer la structure. Cependant, nous utiliserons la fonction dir2fs pour
laquelle nous devrons déterminer la réponse impulsionnelle h(n). En utilisant la propriété de symétrie
et la contrainte de phase linéaire, nous assemblons le DFT H(k) comme suit

H k   H k  e
jH  k 
, k  0,1,...,31
H  k   H  32  k  , k  1, 2,...,31; H  0   1
31 2
H  k    k  H  32  k  , k  0,1,...,31
2 32

Maintenant, l'IDFT de H (k) donnera la réponse impulsionnelle souhaitée.

Script MATLAB:

>> M = 32; alpha = (M-1)/2;


>> magHk = [1,1,1,0.5,zeros(1,25),0.5,1,1];
>> k1 = 0:15; k2 = 16:M-1;
>> angHk = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)];
>> H = magHk.*exp(j*angHk); h = real(ifft(H,M)); [C,B,A] = dir2fs(h)
C=
2.0000
2.0000
1.0000
0.0000
0.0000
0.0000
0.0000
0
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
1.0000
0
B=
-0.9952 0.9952
0.9808 -0.9808
-0.9569 0.9569
-0.8944 0.3162
0.9794 -0.7121
0.8265 0.2038
-0.6754 0.8551
1.0000 0.0000
0.6866 -0.5792
0.5191 0.9883
-0.4430 0.4993
-0.8944 -0.3162
-0.2766 0.3039
0.9343 0.9996
-0.9077 -0.8084
A=
1.0000 -1.9616 1.0000
1.0000 -1.8478 1.0000
1.0000 -1.6629 1.0000
1.0000 -1.4142 1.0000
1.0000 -1.1111 1.0000
1.0000 -0.7654 1.0000
1.0000 -0.3902 1.0000
1.0000 0.0000 1.0000
1.0000 0.3902 1.0000
1.0000 0.7654 1.0000
1.0000 1.1111 1.0000
1.0000 1.4142 1.0000
1.0000 1.6629 1.0000

Notez que seuls 4 coefficients de gain sont différents de zéro. Par conséquent, la forme
d'échantillonnage de fréquence est la suivante

1  z 32  0.9952  0.9952 z 1 0.9808  0.9808 z 1 0.9569  0.9569 z 1 1 


H  z   2  
1  z 1 
2 1 2 1 2 1 2
32  1  1.9616 z  z 1  1.8478 z  z 1  1.6629 z  z

Pour déterminer la complexité de calcul, notez que puisque H  0   1 , la section du 1er ordre ne
nécessite aucune multiplication, alors que les trois sections du 2ème ordre nécessitent 3
multiplications chacune pour un total de 9 multiplications par échantillon de sortie. Le nombre total
d'ajouts est de 13. Pour mettre en œuvre la structure de phase linéaire, il faudrait 16 multiplications et
31 ajouts par échantillon de sortie. Par conséquent, la structure d'échantillonnage en fréquence de ce
filtre FIR est plus efficace que la structure en phase linéaire.

Vous aimerez peut-être aussi