Ministère de l’enseignement supérieur et de la recherche scientifique
Université de Sousse
Institut Supérieur d’Informatique et des
Techniques de Communication _ Hammam Sousse
TP 2 : Implantation d'un filtre FIR sur DSK
C6713
3éme licence en Technologies de l’Information et
de la Communication
Enseignante : Sana BOUGHARRIOU
[email protected]
2020/2021
TP 2 : Implantation d'un filtre FIR sur DSK C6713 Sana BOUGHARRIOU
2020 / 2021
1. Objectifs
L’objectif de ce TP est d’analyser l’implantation du filtrage FIR sur DSK C6713 et de
tester cette implantation avec CCS(code composer studio).
2. Généralités
Un signal est la représentation physique de l’information qu’il transporte de sa source à
son destinataire. Il sert de vecteur à une information. Il constitue la manifestation physique
d’une grandeur mesurable (courant, tension, force, température, pression, etc.). Les signaux
sont des grandeurs électriques variant en fonction du temps x(t) obtenues à l’aide de capteurs.
Tout signal physique comporte une composante aléatoire (perturbation externe, bruit,
erreur de mesure, etc. …). Le bruit est défini comme tout phénomène perturbateur gênant la
perception ou l'interprétation d'un signal, par analogie avec les nuisances acoustiques
(interférence, bruit de fond, etc.).
Afin de diminuer ou d'éliminer le bruit et les perturbations, une étape de filtrage est
nécessaire. Le filtrage du signal numérique intervient dans de nombreux domaines :
transmission du signal, traitement du son, des images, traitement des données scientifiques,
etc.
Les filtres numériques peuvent être classés selon plusieurs critères : la longueur de la
réponse impulsionnelle implique deux types de filtres :
RIF, i.e. Filtres à réponse impulsionnelle finie
RII, i.e. Filtres à réponse impulsionnelle infinie
Un filtre numérique à réponse impulsionnelle finie réalise le calcul d'un signal de sortie
𝒚𝒏 en fonction du signal d'entrée 𝒙𝒏 de la manière suivante :
𝑵−𝟏
𝒚𝒏 = 𝒌=𝟎 𝒉 𝒌 𝒙 𝒏−𝒌 𝒉(𝒏) ˂∞
Où, h(n) est la réponse impulsionnelle du filtre et N est sa longueur.
Page 1
TP 2 : Implantation d'un filtre FIR sur DSK C6713 Sana BOUGHARRIOU
2020 / 2021
Le gabarit réel d'un filtre FIR est le suivant :
3. Création d’un filtre FIR passe-bas
3.1 Calcul des coefficients
Pour calculer les coefficients de la réponse impulsionnelle, on a recours à deux
méthodes : la première est celle du calcul manuel, qui demande beaucoup de temps, et que
nous ne traitons pas dans ce travail, tandis que la deuxième méthode est celle du calcul à l'aide
de l'outil "fdatool" de Matlab. Pour y arriver, il nous faut qu'à taper dans la fenêtre de
commande Matlab "fdatool", cette commande permet d'ouvrir la fenêtre suivante.
Figure 1. Fenêtre "fdatool" du MATLAB
Page 2
TP 2 : Implantation d'un filtre FIR sur DSK C6713 Sana BOUGHARRIOU
2020 / 2021
A ce niveau, nous précisons le type, les caractéristiques (citées ci-dessus), la méthode de
conception du filtre, Sélectionner ensuite « Design Filter », puis (Target Generate C
Header…) pour générer les coefficients de la réponse impulsionnelle dans un fichier en-tête
(fichier).
3.2 Implémentation du filtre sur le DSP
Pour implémenter ce filtre FIR sur le DSP qui fait objet de notre étude, il faut réserver
une partie de la mémoire pour stocker les N coefficients de la réponse impulsionnelle, une
autre partie sera consacrée pour les échantillons de l’entrée. Cette dernière devra mettre à jour
à chaque réception d’une nouvelle donnée x(n). En effet, chaque nouvel échantillon doit
écraser l’avant dernière en gardant la même taille du tableau comme le montre Figure 2.
Figure 2. Mémoire de donnée pour un filtre FIR
Pour tester ce filtre et s'assurer de son bon fonctionnement, nous avons passé par les
étapes suivantes :
a) La création d’un projet nommé « filtre_fir.pjt » en CCS : pour y arriver, il faut
joindre au programme principal en langage C « filtre_fir.c » (voir annexe A), les fichiers
Page 3
TP 2 : Implantation d'un filtre FIR sur DSK C6713 Sana BOUGHARRIOU
2020 / 2021
suivants : c6713dskinit.c, Vectors_intr.asm, c6713dsk.cmd, rts6700.lib, dsk6713bsl.lib et
csl6713.lib.
b) Construire le projet (Project Rebuild All) qui génère le fichier exécutable
"filtre_fir.out" et finalement charger ce fichier exécutable sur le DSP (File Load).
b) La création d'un script MATLAB pour la génération d'une somme de deux signaux
sinusoïdaux, la première sinusoïde a une fréquence de 1 kHz et la deuxième de 2 kHz (le
signal qui sera filtré) (voir script dans l'annexe B).
c) Relier l'entrée "LINE IN" du DSK avec le PC à l'aide d'un câble JACK.
d) Relier la sortie de la carte à un oscilloscope pour visualiser le signal de sortie.
e) Lancer le programme.
Le résultat obtenu sur l’oscilloscope est présenté au niveau de la Figure 3.
Figure 3. Résultat de filtrage
La sortie de la carte (signal en bleu) est un signal de fréquence de 1.02 kHz, d’ou la
validité du résultat escompté. En effet, le filtre a laissé passer le premier signal (de fréquence
de 1KHz) et il a rejeté le deuxième (de 2 KHz).
La Figure 4 montre la réponse réelle du filtre implémenté sur le DSP
Page 4
TP 2 : Implantation d'un filtre FIR sur DSK C6713 Sana BOUGHARRIOU
2020 / 2021
Figure 4. Réponse du filtre FIR de fréquence de coupure de 1500HZ sur DSP
La réponse du filtre qui nous a généré les coefficients de la réponse impulsionnelle est
donnée dans la Figure 5.
Figure 5. Réponse du filtre FIR désigné par "fdatool" dans MATLAB
Nous constatons qu’il y a une ressemblance entre la réponse théorique et pratique du
filtre implémenté sur le DSP, au niveau de la bande passante et de la bande de transition.
Page 5
Annexe A : Programme principal en langage C du filtre FIR
passe-bas de fréquence de coupure 1500Hz
#include "dsk6713_aic23.h" // fichier support pour le codec et le DSK
#define Nbr_coeff 81
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; // fréquence d’échantillonnage
int sortie = 0; //initialiser la sortie du filtre
short h[Nbr_coeff]=
{
-6, 13, 42, 52, 14, -40, -45, 18, 74, 35, -70, -100, 12, 137, 89, -105, -192, -14,
228, 188, -142, -338,-76,361, 361, -179, -579, -208, 569, 685, -209, -1040, 519, 992,
1496,
-229, -2492, -1827, 3237, 9832, 12872, 9832, 3237, -1827, -2492, -229, 1496, 992, -
519,
-1040, -209, 685, 569, -208, -579, -179, 361, 361, -76, -338, -142,188,228, 14, -192, -
105, 89, 137, 12, -100, -70, 35, 74, 18, -45, -40, 14, 52, 42, 13, -6};
short X_retard[Nbr_coeff]; //échantillons retardés
interrupt void c_int11() //ISR
{
short i;
X_retard [0]= input_sample(); //le nouvel échantillon d’entrée
sortie = 0; // initialiser la sortie du filtre
for (i = 0; i< N; i++)
sortie =sortie+ (h[i] * X_retard [i]); //sortie(n) += h(i)* x(n-i)
for (i = Nbr_coeff-1; i > 0; i--)
X_retard [i] = X_retard [i-1]; // déplacer les échantillons retardés
output_sample(sortie >> 15); //échantillon de sortie du filtre en format short
return;
}
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Annexe B: Script MATLAB pour la génération de la somme de deux
signaux sinusoïdaux de fréquences 1kHz et 2kHz
F1=1000; % fréquence du premier signal
F2=2000; % fréquence du deuxième signal
fe=8000; % fréquence de l’échantillonnage
N= 2^16; % Nombre d’échantillons
temps=(0:N-1)/fe; %axe temporel en seconde
x1=sin(2*pi*F1*temps); %premier signal
x2=sin(2*pi*F2*temps); %deuxième signal
for u=1:100,
sound(x1+x2) ; %écouter le mélange des deux fréquences
end