calcul et implantation des filtres numériques rif et rii dans un dsp
DESCRIPTION
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) - PowerPoint PPT PresentationTRANSCRIPT
Calcul et implantation des filtres numériques RIF
et RII dans un DSP
• 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
Bibliographie
• Description des filtres RIF et RII
• Comment choisir RIF ou RII ?
• Algorithme et implantation dans le DSP 320LF2407
• Calcul des coefficients
Filtres numériques linéaires
Filtres RIF yn = a0xn + a1x(n-1) … + aMx(n-M)
Entrée
SortieCalcul
x(n-M) ...x(n-1) xn
yn
Filtres RII yn = a0xn + a1x(n-1) … + aMx(n-M) - b1y(n-1) - b2y(n-2) …
… - bN y(n-N)
Entrée
SortieCalcul
x(n-M) ...x(n-1) xn
y(n-N) …y(n-1) y(n)
• 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
Comparaison RIF et RII
• Les coefficients ai sont obtenus par échantillonnage de la transformée de Fourrier inverse de la réponse fréquentielle
Calcul des coefficients d ’un filtre RIF passe-bas
|H(f)|
0 fc fe/2
Fonction de transfert Coefficients
Tr.Fourier1
h(t) en bleu
t
et ak = Te h(kTe)+fc
h(t) = e j2f t df =-fc
tsin(2fct)
Décalage et fenêtrage temporel
M+1 coefficients (M pair)
0 M/2 M
a k
sin (2.(k-M/2). fc/fe) .(k-M/2)ak =
aM/2 = 2.fc/fe
Filtre RIF passe-haut
|H(f)|
0 fc fe/2
1
aM/2= 1- 2fc/fe
sin (2(k-M/2). fc/fe)(k-M/2)
ak = -
Filtre RIF coupe-bande (rejecteur ou notch)
|H(f)|
0 fc1 fc2 fe/2
1
Coeff. = coeff. Passe Bas + coeff. Passe Haut
Filtre RIF passe-bande
|H(f)|
0 fc1 fc2 fe/2
1
Coeff. = - ( Passe Bas + Passe Haut)
Coeff M/2 = 1 - (PasseBasM/2 + PasseHautM/2 )
Oscillations dues à la limitation du nombre de coefficients
Phase en deg.20log(|H|)
17 coefficients|H(f/fe)|
Pondération des coeff. par une fenêtre de Hamming
Phase en deg.20log(|H|)
17 coefficients |H(f/fc)|
ak’ = ak.[0.54+(1-0.54).cos(2..(k-M/2)/(M+1))]
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
– 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
Programme de Filtrage RIF
Coefficients en « mémoire Y » :
.section .ydata, "d"
Coeff: .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
Stockage des données en RAM
Initialiser W10 , W8 et les buffers circulaires (routines d ’initialisation)
Zone Données Y Zone Données X
a0
a1
...
..
aM-1
aM
W10 W8 xn
x n-1
x n-2
..
xn-M+1
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 Zone Données X
a0
a1
...
..
aM-1
aM
W10 W8 xn
x n-1
x n-2
..
xn-M+1
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 Zone Données X
Contenu de: W5 : a0
W4 : xn
A : 0000000000 hexa
a0
a1
...
..
aM-1
aM
W10 W8
xn
x n-1
x n-2
..
xn-M+1
xn-M
W5 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
...
..
aM-1
aM
W10 W8
xn
x n-1
x n-2
..
xn-M+1
xn-MContenu de: W5 : a1
W4 : xn-1
A : a0Xn
Premier
« MAC »
W5 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
...
..
aM-1
aM
W10 W8
xn
x n-1
x n-2
..
xn-M+1
xn-MContenu de: W5 : a2
W4 : xn-2
A : a0Xn + a1Xn-1
Deuxième
« MAC »
W5 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
...
..
aM-1
aM
W10 W8 xn
x n-1
x n-2
..
xn-M+1
xn-MContenu de: W5 : a2
W4 : xn-2
A : a0Xn +a1Xn-1+…..a M-1 X n-M+1
Fin de REPEAT
le calcul n ’est pas terminé….
W5 W4
MAC W4*W5, A, [W8]-=2,W4, [W10],W5
Zone Données Y Zone Données X
a0
a1
...
..
aM-1
aM
W10
W8
xn
x n-1
x n-2
..
xn-M+1
xn-MContenu de: W5 : a0
W4 : xn-2
A : a0Xn +a1Xn-1+…..a M-1 X n-M
Fin du premier calcul
les pointeurs sont bien positionnés
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 Zone Données X
a0
a1
...
..
aM-1
aM
W10
W8
xn
x n-1
x n-2
..
xn-M+1
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 Zone Données X
a0
a1
...
..
aM-1
aM
W10
W8 xn
x n-1
x n-2
..
xn-M+1
xn+1
Fin du deuxième calcul
Zone Données Y Zone Données X
a0
a1
...
..
aM-1
aM
W10
W8
xn
x n-1
x n-2
..
xn-M+1
xn+1
W8 pointe sur l’échantillon le plus ancien
Début du 3ième calcul
Zone Données Y Zone Données X
a0
a1
...
..
aM-1
aM
W10
W8
xn
x n-1
x n-2
..
Xn+2
xn+1
Le nouvel échantillon remplace le plus ancien