Académique Documents
Professionnel Documents
Culture Documents
Filière Ingénieur
Systèmes Intelligents, Communicants et Mobiles
(SICoM)
Travaux pratiques
Processeurs de traitement numérique
du signal (DSP)
Auteur :
Pr. Hicham GHENNIOUI
A.U. 2018-2019
Page 2/23
A.U. 2018-20119
Page 3/23
SOMMAIRE
OBJET ...................................................................................................................... 4
DOCUMENTS DE REFERENCE .......................................................................... 5
GLOSSAIRE ET ABREVIATIONS ....................................................................... 5
1. TP 1 – INTERFACAGE AVEC LE MONDE REEL ....................................... 7
A.U. 2018-20119
Page 4/23
OBJET
Les activités pratiques sont basées sur l’utilisation des équipements et des composants suivants,
- Un Kit de développement (disponible à la FST de Fès) DSK (DSP Starter Kit), développé
par TI (Texas Instruments) et conjointement avec Spectrum Digital, est une plate-forme de
développement "Low-Cost" constituée de,
o Un câble USB.
Des documentations de ces équipements sont disponibles en salle de TP et peuvent être consultées à
chaque moment.
Pour en tirer un bon profit de ces séances de travaux pratiques, il est conseillé de préparer
théoriquement tous les travaux avant l’arrivé en salle de TP.
A.U. 2018-20119
Page 5/23
DOCUMENTS DE REFERENCE
Intitulé Référence
4. Cours Processeurs de traitement numérique du signal (DSP) H. Ghennioui, F.I. SICoM, FST-Fès, A.U.
2018-2019
GLOSSAIRE ET ABREVIATIONS
Terme Définition
AM Analog Modulation
BP Bande Passante
BSL Board Support Library
CCS Code Composer Studio
CSL Chip Support Library
Codec Codage-Décodage
DIP Dual In-line Package
DSB Double Side Band
DSK DSP Starter Kit
DSP Digital Signal Processor
FFT Fast Fourier Transform
GBF Générateur Basse Fréquence
GEL General Extension Language
LED Light-Emitting Diode
MA Modulation d’Amplitude
MIC Modulation par Impulsions et Codage
RAM Random Access Memory
RIF Réponse Impulsionnelle Finie
ROM Read-Only Memory
TC Transmitted Carrier
TP Travaux Pratiques
SDRAM Synchronous Dynamic Random Access Memory
SRAM Static Random Access Memory
A.U. 2018-20119
Page 6/23
Travail pratique n° 1
- Interfaçage avec le monde réel -
A.U. 2018-20119
Page 7/23
- Ordinateur personnel.
- Oscilloscope.
Les fonctions du switch DIP et LED sont fournies dans ‘‘dsk6713bsl.lib’’. Le tableau suivant
présente les principales fonctions pour manipuler le switch DIP et les LEDs,
Fonction Description
A.U. 2018-20119
Page 8/23
- Le programme de test (stocké dans la mémoire FLASH, le code disponible sur le CD-
ROM de DSK) fonctionne à chaque fois que DSK est sous tension et réinitialisé.
Le tableau 1.2 résume les différents états des LEDS,
1.3.1 EXERCICE : ALLUMER LES LEDS LES UNES A LA SUITE DES AUTRES
4. Ecrire un programme qui fait allumer et éteindre les quatre LEDs les unes à la suite des autres de
manière permanente.
A.U. 2018-20119
Page 9/23
Le codec AIC23 est stéréo permettant d’acquérir les signaux analogiques reçus sur l’entrée de la
carte (line in) afin de les convertir en données numériques utilisables par le DSP. Il permet
également de retranscrire les données numériques en signaux analogiques afin de pouvoir par
exemple les visualiser à l’oscilloscope.
Le fichier “dsk6713.h” doit être rajouté dans tout programme utilisant la librairie BSL. Les
fonctions du codec AIC32 sont fournies dans le fichier header “dsk6713_aic23.h”.
La description des principales fonctions prédéfinies pour manipuler le codec AIC23 est donnée dans
le tableau suivant,
Fonction Description
DSK6713_AIC23_setFreq(hCodec,DSK6713_ Configuration de fs
AIC23_FREQ_48KHZ)
A.U. 2018-20119
Page 10/23
Les trois étapes nécessaires pour faire fonctionner le codec AIC23 sont,
- Initialiser, ouvrir et modifier la fréquence d’échantillonnage
DSK6713_init();
hCodec = DSK6713_AIC23 openCodec ( 0 , &c o n f i g );
DSK6713_AIC23_setFreq(hCodec,DSK6713_AIC23_FREQ_8KHZ);
- Lire et écrire les données en utilisant le polling
while(! DSK6713_AIC23_read(hcodec,&1x)); Codec stéréo
while(! DSK6713_AIC23_read(hcodec,&2x)); 2 canaux
while(! DSK6713_AIC23_write(hcodec,y1));
while(! DSK6713_AIC23_write(hcodec,y1));
- Fermer le Codec
DSK6713 AIC23 closeCodec ( hCodec) ;
Ouvrir le projet « tone.pjt » : CCStudio_v3.1\examples\dsk6713\bsl, charger ensuite le fichier .out
du projet dans la cible DSP
1. Afficher une période de la sinusoïde dans le domaine temporel (faire attention le type de
données).
2. Quelles sont les valeurs maximales et minimales de la sinusoïde considérée ?
3. Afficher le spectre d’amplitude de la sinusoïde (dans la boite de propriétés de graphe,
sélectionner « FFT magnitude » comme valeur de la propriété « Display Type »)
4. Utiliser un oscilloscope pour afficher la sinusoïde ou bien un haut-parleur pour écouter la
fréquence
5. Générer maintenant la sinusoïde à l’aide de la fonction sin (insérer le fichier header «
math.h ») et refaire les questions précédentes
6. Générer maintenant une sinusoïde à 2 kHz et refaire les questions.
A.U. 2018-20119
Page 11/23
Travail pratique n° 2
- Implémentation de la
modulation d’amplitude -
A.U. 2018-20119
Page 12/23
- Ordinateur personnel.
- Oscilloscope.
Le principe de la modulation d’amplitude double bande latérale sans porteuse est schématisé au
niveau de la figure suivante,
Figure 2.1 - Schéma à bloc fonctionnel de la modulation d’amplitude double bande latérale
sans porteuse.
A.U. 2018-20119
Page 13/23
La transformée de Fourier du signal modulé est le suivant,
Le signal modulant, la porteuse et le signal modulé sont représentés à gauche et leurs spectres
d’amplitude à droite de la figure 2.2.
Figure 2.2 - Modulation d’amplitude double bande latérale sans porteuse d’un signal
sinusoïdal.
On constate que,
- le spectre du signal modulé reproduit celui du signal modulant mais décalé de +fc pour f>0 et
de –fc pour f<0.
- Pour fc, la bande latérale supérieure est celle située au-delà de fc et la bande latérale
inférieure en dessous de fc.
- La modulation d’amplitude sans porteuse réalise une transposition de fréquence autour de fc.
Le principe de la modulation d’amplitude double bande latérale avec porteuse est schématisé au
niveau de la figure suivante,
A.U. 2018-20119
Page 14/23
Figure 2.3 - Schéma à bloc fonctionnel de la modulation d’amplitude double bande latérale
avec porteuse
où sm (t ) Amem (t ) , Am est la valeur maximale de sm (t ) et kAm est appelé taux (ou indice) de modulation.
Le signal modulant, la porteuse et le signal modulé sont représentés à gauche et leurs spectres
d’amplitude à droite de la figure 2.4.
Figure 2.4 - Modulation d’amplitude double bande latérale avec porteuse d’un signal
sinusoïdal.
On constate que le spectre du signal modulé a une allure identique à celle de la modulation
d’amplitude sans porteuse mais 2 raies apparaissent à fc.
1. Ouvrir le projet « tone.pjt » et modifier le programme pour générer deux sinusoïdes : une de
fréquence 400 Hz et l’autre de 2 kHz (porteuse).
5. Faire sortir maintenant les trois signaux sur la sortie « Line » et utiliser les switchs DIP 0, 1
et 2 pour afficher respectivement sur un oscilloscope le signal modulant, la porteuse et le
signal modulé.
6. Refaire les étapes précédentes en considérant cette fois ci, un signal modulant généré par un
GBF en utilisant l’entrée « Line ».
A.U. 2018-20119
Page 16/23
Travail pratique n° 3
- Implémentation d’un filtre
numérique -
A.U. 2018-20119
Page 17/23
- Ordinateur personnel.
- Oscilloscope.
A.U. 2018-20119
Page 18/23
Cet exemple génère une sinusoïde de 1 KHz de fréquence avec huit points. Le plus important
dans ce programme est la capacité de CCS de tracer les courbes dans le domaine temporel et
fréquentiel.
Le programme principal sine8_buf.c (programme en langage C) de cet exemple crée une mémoire
tampon pour y stocker les données de sortie. Ces dernières vous servent pour tracer les graphes dans
le domaine temporel et le domaine fréquentiel.
Pour y arriver, Suivez les étapes ci-dessous,
A.U. 2018-20119
Page 19/23
1. Créer un projet (sine8_buf.pjt) et préciser sa location et la carte utilisée (c671x pour votre cas).
Joindre tous les fichiers indispensables à savoir,
- Le programme source sine8_buf.c et le fichier source C6713dskinit.c.
- Les bibliothèques : rts6700.lib, dsk6713bsl.lib, csl6713.lib.
- Le fichier de commande : C6713dsk.cmd.
- Le fichier vectors_intr.asm qui gère les interruptions.
2. Sélectionner (Project Scan All File Dependencies) afin de rajouter tous les fichiers en-tête
dépendant du projet.
3. Configurer les options de compilation et de lien (Project build options),
- Appuyer sur « Compiler » puis « Basic » et choisir,
target version=C671x(-mv6710).
- Appuyer dans la même fenêtre sur « advanced » et choisir,
Memory Models=Far(-mem_model :data=far).
- De même appuyer sur « Preprocesseur » et régler,
Pre-Define Symbol=CHIP_6713 (attention CHIP en majuscule)
Include Search Path= C:\CCStudio_v3.1\C6000\dsk6713\include
- Appuyer sur le menu « linker » dans la même fenêtre, puis indiquer l’emplacement des
librairies. Vous pouvez les rassembler dans un dossier ‘comme cité ci-dessus’ sur le
bureau nommé ‘support’. En effet, spécifier le chemin, library Search Path=
C:\DocumentsandSettings\Administrateur\Bureau\support\lib
- Finalement, appuyer sur OK.
4. Construire le projet (Project Rebuild All) qui génère le fichier exécutable ‘sine8_buf.out’.
5. Charger ce fichier exécutable sur le DSP (File Load).
6. Visualiser le signal de sortie : vous devez connecter la sortie ‘line out’ de la carte à un
oscilloscope.
A.U. 2018-20119
Page 20/23
7. Quelle est la valeur de gain fixé dans le programme et celle de la tension crête à crête
Vcc=0.8 x gain =0.8 x 10= 8 V.
8. Visualiser le même résultat sur le CCS dans le domaine temporel et/ou dans le domaine
fréquentiel.
9. Refaire les questions précédentes en utilisant la fonction « cos » de la librairie « math.h »
(choisir une fréquence de 1.5 kHz).
Ce deuxième exemple permet de vérifier le bon fonctionnement des différentes entrées/sorties ainsi
que leur utilisation.
Le programme principal en langage C est le suivant,
//passe_tout.c. programme en c d’un filtre passe tout
#include "dsk6713_aic23.h" // fichier support pour le codec et le DSK
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; // fréquence d’échantillonnage
interrupt void c_int11() { //interrupt service routine
short sample_data;
sample_data = input_sample(); //échantillons d’entrée
output_sample(sample_data); // échantillons de sorties
return;
}
void main(){
comm_intr(); //init DSK, codec, McBSP
while(1); //boucle infinie
}
Pour créer le fichier exécutable, il faut suivre les mêmes étapes citées dans l’exemple précèdent.
Vérifier le bon fonctionnement de ce filtre par les deux méthodes suivantes,
1. Méthode 1 : attaquer la carte par un signal vocal à travers l’entrée ‘MIC IN’ et récupérer la
sortie à l’aide d’un écouteur branché dans la sortie ‘HEADPHONE’, dans ce cas il faut
changer la valeur initiale du registre 4 0x0011 par 0x0015 dans le fichier en-tête
c6713dskinit.h.
2. Méthode 2 :
a. attaquer l’entrée ‘LINE IN’ par un signal sinusoïdal fourni par un GBF, dont la tension
crête à crête ne doit pas dépasser 6 V.
A.U. 2018-20119
Page 21/23
b. Visualiser la sortie à l’aide d’un oscilloscope en le connectant à la sortie ‘LINE OUT’
de la carte.
c. Que constatez-vous ?
d. Changer la valeur initiale du registre 0 dans le fichier c6713dskinit.h 0x0017 par
0x001c. Commentez le résultat obtenu.
A.U. 2018-20119
Page 22/23
Pour implémenter un filtre FIR sur le DSP qui fait objet de ce travail pratique, 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 le schéma suivant :
Afin de tester le filtre généré précédemment et s’assurer de son bon fonctionnement, suivez les
étapes suivantes :
1. Créer un projet nommé « filtre_fir.pjt » en CCS : pour y arriver, il faut joindre au programme
principal en langage C « filtre_fir.c » (voir programme ci-dessous), les fichiers suivants (dont
l’utilité est déjà mentionnée précédemment), c6713dskinit.c, Vectors_intr.asm,
c6713dsk.cmd, rts6700.lib, dsk6713bsl.lib et csl6713.lib.
#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 sorie = 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
A.U. 2018-20119
Page 23/23
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).
2. Générer une sinusoïde à l’aide d’un GBF
3. Relier l’entrée ‘LINE IN’ du DSK avec le GBF et relier la sortie de la carte à un oscilloscope
pour visualiser le signal de sortie.
4. Lancer le programme.
5. Choisir une amplitude de 2 volts et faire varier la fréquence de la sinusoïde. Remplir le tableau
ci-dessous.
f (kHz) 0.5 0.8 1 1.2 1. 1.4 1.5 1.5 1.5 1.5 1.6 1.7 1.8 1.9 2 2.5
4 8 2 4 6
Vs (V)
Vs/ Ve
6. Que constatez-vous ?
A.U. 2018-20119