Vous êtes sur la page 1sur 6

Conception et implantation d’un filtre numérique

Robin Gerzaguet

L’objectif de ce TP est de concevoir un filtre numérique à partir d’un gabarit et d’implanter celui-ci au sein du DSP virgule
fixe TMS320C5416 de Texas Instruments. Le cycle de conception et de développement de ce filtre est présenté à la figure 1.

La première partie correspond à la synthèse et à l’analyse du filtre. L’objectif est de déterminer les coefficients du filtre afin
qu’il respecte le gabarit souhaité. Ensuite, le filtre est analysé afin de vérifier sa stabilité et pour s’assurer que sa réponse
fréquentielle respecte le gabarit.
La seconde partie correspond à la conversion en virgule fixe de l’application. Tout d’abord, l’influence de la largeur des
coefficients sur la réponse fréquentielle du filtre est analysée afin de vérifier que le gabarit du filtre est toujours respecté.
Ensuite, les différentes données du filtre sont codées en virgule fixe et les opérations de recadrage nécessaires à l’obtention
d’une spécification virgule fixe correcte sont insérées au sein du filtre. Finalement, la précision des calculs est évaluée par
simulation afin de mesurer le rapport signal à bruit de quantification en sortie de l’application. Ces deux premières parties
sont réalisées sous Matlab et Simulink

Conception du filtre ./Matlab/ConceptionFiltre.m

H ( z ), H i ( z )

./Matlab/AnalyseFiltre.m
Analyse du filtre j Ω
H (e ), h ( n ), pi , zi

./Matlab/AnalyseCoefFix.m
Codage des coefficients
en virgule fixe Hˆ ( e

j
)

Codage des données


en virgule fixe ./Matlab/DeterminationDynamique.m

RSBQ ./Matlab/DeterminationFormatDirecte.m

Détermination du RSBQ ./Matlab/IIRDirecte.mdl

Signal d’entrée

Développement du code C ./CCSim/FiltreIIR.c


ou assembleur pour DSP

Test et évaluation
des performances

Développement du
code temps réel ./CCTR/FiltreIIR.c

Test temps réel

Figure 1: Flot de conception et d’implantation du filtre numérique

La troisième partie correspond à l’implantation du filtre dans le DSP TMS320C54x de Texas Instruments. La plate-forme
utilisée correspond à la carte d’évaluation DSK5416 et à l’environnement de développement Code Composer. Le
développement du code est réalisé en deux étapes. Tout d’abord, le code réalisant le filtrage est développé, testé et validé.
Ensuite, le code nécessaire au fonctionnement temps réel du filtre est mis en œuvre.
Sujet de TP Traitement numérique du signal

Copier le répertoire //ogam/!enssat/Elec/TPEnssat/TNS/TP2 sur votre compte. Les différents chemins spécifiés dans
la suite du document sont définis à partir de ce répertoire. Les différentes étapes de la conception du filtre sont réalisées à
partir du fichier principal ./Matlab/MainIIR.m .

1 Conception du filtre numérique

1.1 Spécification du filtre


Le gabarit du filtre numérique considéré est présenté à la figure 2. Celui-ci correspond à un filtre sélectif Passe Bande
centré sur la fréquence F0 , de bande passante [FP1 , FP2 ] et de bande atténuée [0, FS1 ] ∪ [FS2 Fe /2]; L’ondulation de la
courbe dans la bande passante est de 3 dB, l’affaiblissement dans la bande atténuée doit être de 30 dB. La fréquence
d’échantillonnage est égale à Fe . Les valeurs numériques des différents paramètres du filtre sont les suivantes :

• Fréquence d’échantillonnage : Fe = 12 KHz

• Bande passante : [1200, 2400] (Hz)


• Bande atténuée : [0, 1080] ∪ [2520, 6000] (Hz)

|G| (dB)
-0 dB
-3 dB

-30 dB

Fe
FS FS 2
1
FP FP 2
2

Figure 2: Gabarit du filtre numérique

1.2 Synthèse du filtre numérique


L’objectif de cette partie est de déterminer la valeur des coefficients du filtre numérique permettant de respecter le gabarit
présenté à la figure 2.

Compléter le code Matlab présent dans le fichier ./Matlab/ConceptionFiltre.m pour déterminer les éléments suivants
:

• l’ordre du filtre numérique permettant de respecter le gabarit pour le cas des filtres de Butterworth, de Chebyshev
(type I et II) et elliptique de Cauer;
• les coefficients du filtre numérique en utilisant le type de filtre permettant de minimiser l’ordre du filtre;
• les coefficients du filtre numérique cascadé composé de cellules d’ordre 2 à l’aide de la fonction dir2cas.

2
Sujet de TP Traitement numérique du signal

1.3 Analyse du filtre numérique


L’objectif de cette partie est d’analyser les caractéristiques du filtre non-cascadé H(z) à travers la détermination des pôles,
des zéros et des réponses fréquantielles et impulsionnelles du filtre H(z).
Compléter le code Matlab présent dans le fichier ./Matlab/AnalyseFiltre.m pour déterminer les éléments suivants :

• Réponse impulsionnelle h(n);


• Réponse fréquentielle H(ejΩ );
• Pôles pi et zéros zi .

A partir de ces résultats, analyser la stabilité du filtre H(z)

2 Codage en virgule fixe


L’objectif de cette partie est de déterminer la spécification virgule fixe du filtre H(z) sous forme cascadée et non-cascadée.

2.1 Codage en virgule fixe des coefficients


Le codage des coefficients en virgule fixe se traduit par une modification de la fonction de transfert du filtre par rapport à
celle obtenue en précision infinie. En conséquence, la réponse fréquentielle du filtre est modifiée. L’objectif de cette partie
est de déterminer la largeur minimale des coefficients permettant d’obtenir un réponse fréquentielle respectant toujours le
gabarit du filtre.

Compléter le code Matlab présent dans le fichier ./Matlab/AnalyseCoefFixe.m pour déterminer les réponses
fréquentielles des filtres sous forme cascadée et non-cascadée utilisant des coefficients en précision finie.

Comparer les réponses fréquentielles des filtres sous forme cascadée et non-cascadée pour les largeurs de coefficient de 8,
10, 12, 16, 20 et 24 bits . Expliquer les différences obtenues.

Analyser la stabilité des filtres sous forme cascadée et non-cascadée en fonction de la largeur des coefficients.

Déterminer la largeur minimale des coefficients permettant d’obtenir une réponse fréquentielle respectant le gabarit présenté
à la figure 2 pour le filtre sous forme cascadée et non-cascadée.

2.2 Codage en virgule fixe des données


2.2.1 Détermination de la dynamique des données

Pour le filtre sous forme non-cascadée, la structure directe est utilisé. Déterminer la dynamique de la sortie y(n)
à l’aide de de la norme L1 et de la norme de Chebyshev. Il faudra compléter les codes présents dans les fonctions
./Matlab/Fonctions/NormL1.m et ./Matlab/Fonctions/NormChebychev.m

Pour le filtre sous forme cascadée, les structures directes et transposées sont utilisées. Pour simplifier le code, les différentes
cellules sont codées de la même manière. Ce codage doit permettre de représenter l’ensemble des valeurs prises par les
données au sein de chaque cellule. Ainsi, pour les données wi (n) et yi (n) nous prenons la valeur maximale obtenue au sein
de chaque cellule i:
 
max(|y(n)|) = max max(|yi (n)|) (1)
n i n

 
max(|w(n)|) = max max(|wi (n)|) (2)
n i n

Déterminer la dynamique des données wi (n) et yi (n) pour chaque cellule et en déduire la dynamique de w(n) et de y(n).

3
Sujet de TP Traitement numérique du signal

2.2.2 Détermination du format des données

Dans cette partie, on veillera à utiliser (et à ajouter dans le code) la fonction AfficheFormat.m qui affiche le castage des
données.

Pour le filtre sous forme non-cascadé, déterminer le codage des données dans le cas d’une structure directe. Pour initialiser
le format des données en vue de la simulation de ce filtre en virgule fixe, compléter le code Matlab présent dans le fichier
: ./Matlab/DeterminationFormatIirDirecte8.m

Pour le filtre sous forme cascadé, déterminer le codage des données d’une cellule dans le cas des structures directe et
transposée. Pour initialiser le format des données en vue de la simulation en virgule fixe, compléter le code Matlab
présent dans le fichier ./Matlab/DeterminationFormatIirDirecte.m pour la structure directe et dans le fichier
./Matlab/DeterminationFormatIirTranspose.m pour la structure transposée.

2.3 Evaluation de la précision du filtre


La précision des calculs est évaluée par simulation selon le principe exposé à la figure 3. Le filtre est simulé en virgule
fixe et en virgule flottante. Le bruit de quantification en sortie du filtre est obtenu à partir de la différence entre la sortie
en virgule flottante et la sortie en virgule fixe. La puissance du bruit est déterminée en mesurant la variance du bruit de
quantification obtenu par simulation.

Simulation en
virgule flottante

S y
float float

by N pts
1
~ - Pb y = ∑ (y float − y fixed ) 2

N pts n =0
Entrée du S y
fixed fixed
système
Simulation en
virgule fixe

Figure 3: Evaluation de la puissance du bruit de quantification par simulation

Déterminer la puissance du bruit dans le cas d’une implantation dans le DSP C54x pour les différents cas suivants :

• forme non-cascadée et structure directe (./Matlab/IIR8Directe.mdl);


• forme cascadée et structure directe (./Matlab/IIRDirecte.mdl);
• forme cascadée et structure transposée (./Matlab/IIRTranspose.mdl).

Comparer les résultats obtenus pour les différents cas.

3 Développement du code pour DSP


Le filtre est implanté dans la plate-forme DSK5416. Ce système est composé d’une carte intégrant le DSP TMS320C54X
de Texas instruments et l’environnement de développement Code Composer. Le synoptique de cette carte et les différents
éléments la composant sont détaillés en annexe. La communication entre la carte DSP et Code Composer est réalisée par
l’intermédiaire d’une liaison USB.

L’environnement de développement intègre les différents outils suivants :

4
Sujet de TP Traitement numérique du signal

• éditeur de code et gestionnaire de projets;


• Générateur de code (compilateur C et assembleur);
• Debugger;
• Profiler;
• OS Temps réel et outil d’analyse temps réel;
• Outil de configuration du DSP;
• Librairies :
– CSL : (Chip Support Library ) gestion des périphériques de la carte;
– DSPLib : routines de traitement du signal (filtres, Transformation, . . .);
– IMGLib : routines de traitement d’images;
• Utilitaire de test de la carte.

L’implantation du filtre dans le DSP TMS320C54X est réalisée en deux étapes. Tout d’abord, le code réalisant le filtrage
est développé, testé et validé. Ensuite, le code nécessaire au fonctionnement temps réel du filtre est mis en œuvre.

3.1 Développement du code de filtrage


L’objectif de cette partie est de développer le code correspondant au filtrage sans mettre en œuvre les aspects temps réel.
Dans ce cadre, le filtrage d’un vecteur présent en mémoire est réalisé et le résultat est sauvegardé en mémoire.

Les différentes étapes nécessaires pour la mise en œuvre de ce filtrage de vecteur sont les suivantes :

• Initialisation du vecteur d’entrée V ecteurX;


• Pour chaque éléments i du vecteur réalisation du filtrage :
– Lecture du signal d’entrée x(n) = V ecteurX[i];
– Calcul de la sortie du filtre y(n) = x(n) ∗ h(n);
– Mémorisation du signal de sortie V ecteurY [i] = y(n).

Compléter le code C présent dans le fichier ./CCSim/FiltreIIR.c pour réaliser le filtre cascadé dans le cas de la forme
transposée et de la forme directe. Cette fonction de filtrage nécessite de réaliser les étapes suivantes :

• Initialisation du filtre :
– Initialisation des coefficients;
– Initialisation des lignes à retard (x(n − i) = y(n − i) = w(n − i) = 0);
• Filtrage :
– Calcul du produit de convolution;
– Vieillissement des signaux.

Tester et valider le code développé.

Mesurer le nombre de cycles d’horloge nécessaires pour réaliser le filtrage d’un échantillon. En déduire le temps d’exécution.

L’utilisation de l’environnement de développement Code Composer est brièvement expliquée en annexe. Code Composer
permet de visualiser un vecteur présent en mémoire. Ceci permet de tester le filtre en analysant les signaux présents en

5
Sujet de TP Traitement numérique du signal

entrée et en sortie du filtre. De plus, il est possible de réaliser une transformée de Fourier rapide d’un signal. La mise en
œuvre de cette fonctionnalité est détaillée en annexe dans la partie Displaying Graphs. De plus, Code Composer permet
de mesurer le nombre de cycles nécessaires pour réaliser une portion de code. La mise en œuvre de cette fonctionnalité est
détaillée en annexe dans la partie Profiling. Vous utiliserez la fenêtre Profile by range et sélectionnerez à l’aide de la souris
la portion de code à mesurer.

3.2 Développement du code temps réel


L’objectif de cette partie est de mettre en œuvre le code du filtre fonctionnant en temps réel. Dans ce cadre, l’entrée du
filtre provient d’un convertisseur analogique-numérique. Celui-ci envoie au DSP, à travers une liaison série, un échantillon
à chaque période d’échantillonnage. Un générateur de signaux est utilisé pour fournir en entrée de la carte un signal
sinusoı̈dal. La sortie du filtre est envoyée à travers une liaison série à un convertisseur numérique-analogique fonctionnant à
la fréquence d’échantillonnage. Le signal analogique correspondant à la sortie du filtre est visualisé à l’aide d’un oscilloscope.

Compléter le code C présent dans le fichier ./CCTR/FiltreIIR.c pour obtenir le filtre cascadé fonctionnant en temps
réel et interfacé avec les convertisseurs A/N et N/A.

Relever la réponse fréquentielle du filtre.