Diapo.du cours Filtres RIF

Download Report

Transcript Diapo.du cours Filtres RIF

Calcul et implantation
des filtres numériques RIF
et RII dans un DSP
Bibliographie
• Traitements numériques des signaux M.KUNT (Dunod)
• Traitement du signal F.COTTET (Dunod)
• Cours d ’électronique numérique échantillonnée
A.DELUZURIEUX et M.RAMI (Eyrolles)
• Datasheet et documentation en ligne des fabricants de DSP
Filtres numériques linéaires
• Description des filtres RIF et RII
• Comment choisir RIF ou RII ?
• Algorithme et implantation dans le DSP 320LF2407
• Calcul des coefficients
Filtres RIF
Entrée
yn = a0xn + a1x(n-1) … + aMx(n-M)
x(n-M) ...x(n-1) xn
Calcul
Sortie
yn
Filtres RII
yn = a0xn + a1x(n-1) … + aMx(n-M) - b1y(n-1) - b2y(n-2)
…
… - bN y(n-N)
Entrée
x(n-M) ...x(n-1) xn
Calcul
Sortie
y(n-N) …y(n-1) y(n)
Comparaison RIF et RII
• Filtre à réponse impulsionnelle finie (FIR)
–
–
–
–
toujours stable
phase linéaire (retard constant indépendant de f)
les performances dépendent de M
Le calcul des coefficients est facile
• Filtres à réponse impulsionnelle infinie (IIR)
– grandes performances avec peu de calculs
– peuvent osciller : il faut étudier la stabilité
– on peut les calculer à partir des résultats des filtres analogiques
Calcul des coefficients d ’un filtre RIF passe-bas
• Les coefficients ai sont obtenus par échantillonnage de la
transformée de Fourrier inverse de la réponse fréquentielle
h(t) en bleu
|H(f)|
Tr.Fourier
1
0
fc
t
fe/2
Fonction de transfert
+fc
h(t) = e j2f t df = sin(2fct)
t
-fc
Coefficients
et
ak = Te h(kTe)
Décalage et fenêtrage temporel
ak
sin (2.(k-M/2). fc/fe)
ak =
.(k-M/2)
0
M/2
M
M+1 coefficients (M pair)
aM/2 = 2.fc/fe
Filtre RIF passe-haut
|H(f)|
sin (2(k-M/2). fc/fe)
ak =
(k-M/2)
-
1
0
fc
fe/2
aM/2= 1- 2fc/fe
Filtre RIF coupe-bande (rejecteur ou notch)
|H(f)|
1
0
fc1
fc2
fe/2
Coeff. = coeff. Passe Bas + coeff. Passe Haut
Filtre RIF passe-bande
|H(f)|
1
0
fc1
fc2
fe/2
Coeff. = - ( Passe Bas + Passe Haut)
Coeff M/2 = 1 - (PasseBasM/2 + PasseHautM/2 )
Oscillations dues à la limitation du nombre de coefficients
17 coefficients
|H(f/fe)|
20log(|H|)
Phase en deg.
Pondération des coeff. par une fenêtre de Hamming
ak’ = ak.[0.54+(1-0.54).cos(2..(k-M/2)/(M+1))]
17 coefficients
|H(f/fc)|
20log(|H|)
Phase en deg.
Calcul des filtres RII
à partir d ’un modèle analogique H(p)
La méthode présentée est basée sur une approximation de Z
Z = e pTe  (1 +pTe/2)/(1-pTe/2)
=>
p  2.Fe (1- z-1)/(1+ z-1)
1) On détermine H(p) à partir du gabarit en analogique
2) On remplace p par l ’expression ci-dessus.
2) H(z) permet d ’obtenir l ’équation de récurrence
yn = a0xn + a1x(n-1) … + aMx(n-M) - b1y(n-1) - b2y(n-2) …… - bN y(n-N)
Exemple
Soit un passe-bas du premier ordre fc = 1kHz
H(p) = 1/(1+ p/c)
En remplaçant p on obtient un équivalent numérique :
Avec fe = 10kHz on obtient:
H(z) = (0.24 + 0.24 z-1 ) / (1 - 0.52z-1)
On en déduit:
Yn = 0.24Xn +0.24 Xn-1 + 0,52 Yn-1
Programme de Filtrage RIF
– Initialisation
• Configuration des registres
– de contrôle: horloge, multiplexage des pattes, ADC, Timer, IRQ...
– Acquisition de l ’entrée x déclenchée par un Timer
•
•
•
•
•
Stockage des coefficients dans la mémoire « donnée Y »
Configurer les buffers circulaires et les registres pointeurs
Configurer CORCON (saturation, virgule fixe)
Autorisation de l ’ interruptions ADC
Puis boucle infinie ou autre tâches….
– Traitement par interruption ADC (ou Timer)
•
•
•
•
Lire et stocker xn en mémoire « données X»
Calculer yn
Envoyer yn en sortie
Fin d ’interruption
Stockage des données en RAM
Coefficients en « mémoire Y » :
Coeff:
.section .ydata, "d"
.word 0x1234, 0x5678, 0x9abc, 0xdef0, 0xabab
Réservation de mémoire pour stocker les échantillons « mémoire X »
.section .xbss, "b"
Buffer_X: .space 2*100 ; 100 mots de 16 bits = 200 octets réservés
Initialiser W10 , W8 et les buffers circulaires
(routines d ’initialisation)
Zone Données Y
W10
a0
Zone Données X
W8
xn
a1
x n-1
...
x n-2
..
..
aM-1
xn-M+1
aM
xn-M
Remarques:
Le buffer Y contient les coefficients
Le contenu du buffer X est nul au départ
Routine de traitement
Stocker l ’échantillon Xn
à l ’adresse pointée par W8
Zone Données Y
W10
a0
Zone Données X
W8
xn
a1
x n-1
...
x n-2
..
..
aM-1
xn-M+1
aM
xn-M
MOV ADCBUF0,W0
MOV W0, [W8]
Initialiser W4 et W5 et l ’accumulateur:
CLR A, [W8]+=2,W4, [W10]+=2,W5
Zone Données Y
a0
W10
Contenu de:
a1
Zone Données X
xn
W5
W8
x n-1
...
x n-2
..
..
aM-1
xn-M+1
aM
xn-M
W5 : a0
W4 : xn
A : 0000000000 hexa
W4
REPEAT #M-1 (ATTENTION =faire M fois)
MAC W4*W5, A, [W8]+=2,W4, [W10]+=2,W5
Zone Données Y
Zone Données X
a0
a1
W10
...
xn
x n-1
W5
W4
x n-2
Premier
..
..
« MAC »
aM-1
xn-M+1
aM
xn-M
Contenu de:
W8
W5 : a1
W4 : xn-1
A : a0Xn
REPEAT #M-1 (ATTENTION =faire M fois)
MAC W4*W5, A, [W8]+=2,W4, [W10]+=2,W5
Zone Données Y
a0
xn
a1
x n-1
...
W10
Zone Données X
..
x n-2
W5
W8
..
aM-1
xn-M+1
aM
xn-M
Contenu de:
W5 : a2
W4 : xn-2
A : a0Xn + a1Xn-1
W4
Deuxième
« MAC »
REPEAT #M-1 (ATTENTION =faire M fois)
MAC W4*W5, A, [W8]+=2,W4, [W10]+=2,W5
Zone Données Y
W10
a0
Zone Données X
xn
W8
a1
x n-1
...
x n-2
Fin de REPEAT
..
..
aM-1
xn-M+1
le calcul n ’est pas
terminé….
aM
Contenu de:
W5
xn-M
W4
W5 : a2
W4 : xn-2
A : a0Xn +a1Xn-1+…..a M-1 X n-M+1
MAC W4*W5, A, [W8]-=2,W4, [W10],W5
Zone Données Y
W10
Zone Données X
a0
xn
a1
x n-1
...
x n-2
..
..
aM-1
xn-M+1
aM
Contenu de:
W8
Fin du premier
calcul
les pointeurs sont
bien positionnés
xn-M
W5 : a0
W4 : xn-2
A : a0Xn +a1Xn-1+…..a M-1 X n-M
Envoyer le résultat en sortie
Fin de la routine de traitement
Stocker l ’échantillon suivant
à l ’adresse pointée par W8
Zone Données Y
W10
Zone Données X
a0
xn
a1
x n-1
...
x n-2
..
..
aM-1
xn-M+1
aM
W8
xn+1
L’échantillon le plus
ancien est écrasé
Les pointeurs sont
bien alignés pour la
suite du calcul….
Evolution des pointeurs W10 et W8
Zone Données Y
a0
W10
Zone Données X
W8
xn
a1
x n-1
...
x n-2
..
..
aM-1
xn-M+1
aM
xn+1
Fin du deuxième calcul
Zone Données Y
W10
Zone Données X
a0
xn
a1
x n-1
...
x n-2
..
..
aM-1
aM
W8
xn-M+1
xn+1
W8 pointe sur l’échantillon le plus ancien
Début du 3ième calcul
Zone Données Y
W10
Zone Données X
a0
xn
a1
x n-1
...
x n-2
..
..
aM-1
aM
W8
Xn+2
xn+1
Le nouvel échantillon remplace le plus ancien