You are on page 1of 74

Université Ibn Tofail

Ecole Nationale des Sciences Appliquées


Département Génie Electrique & Réseaux de Télécommunications
Kenitra

Module : Digital Signal Processing (DSP)

Filière Master : Electronique embarqué et Systèmes de


Télécommunications (Semestre 2)

Pr . R.ELGOURI

Année universitaire: 2019/2020


PLAN DU COURS

1ère Partie : Généralité sur les DSP……………………………3


- DSP de Texas Instrument …………………………20

2ième Partie: Traitement Numérique du Signale……………………..26


- Introduction aux Filtres Numériques
- Etude des Filtres Numériques
- Synthèse des Filtres Numériques

3ième Partie: Travaux Pratiques………………..……………………..60


-TP1 : Prise en main du logiciel Code Composer Studio (CCS)
-TP 2 : Exemples de programmation sur carte DSP
K
SA
EN
id

Page 3 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 4 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 5 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 6 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 7 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 8 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 9 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 10 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 11 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 12 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 13 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 14 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 15 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 16 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 17 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 18 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 19 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 20 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 21 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 22 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 23 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 24 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 25 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 26 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 27 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 28 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 29 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 30 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 31 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 32 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 33 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 34 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 35 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 36 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 37 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 38 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 39 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 40 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
RI U
GO
EL
K
SA
EN

Page 41 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 42 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 43 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 44 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 45 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 46 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 47 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 48 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 49 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 50 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 51 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 52 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 53 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 54 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 55 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 56 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 57 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 58 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN

Page 59 of 74
id
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
K
SA
EN
id

Page 60 of 74
ch
Ra
I
UR
GO
L
.E
Pr
I R
OU G
EL
TPN° 1: Initiation au Code Composer Studio (CCS)
et au kit DSP Starter KIT (DSK)

But de TP : Ce familiariser avec l’environnement de développement CCS (code composer


studio) et le starter kit DSP (DSK).

Présentation générale :
Le kit DSK comporte un processeur de traitement de signal de la génération 6x à virgule
flottante de Texas Instrument.
Les figures suivantes montrent les principales composantes de la carte c6713 DSK

Page 61 of 74
Mise en marche et diagnostique de la carte:
1. Alimentez le kit, Attendez que les LEDs clignotent puis restent allumées.
2. Branchez ensuite le câble USB.
Pour diagnostiquer le kit, lancez DSK Diagnostics Utility, puis cliquez sur ‘Start‘, et attendez
jusqu'à la fin.

Le diagnostique n’est pas obligatoire à chaque utilisation de la carte, il est facultatif pour
vérifier le bon fonctionnement des principaux composantes du kit.

Mon Premier projet :


Nous allons commencer à travailler sur un projet déjà existant, afin de se familiariser avec le
logiciel Code Composer Studio. Ce projet est un exemple fournit par le constructeur de la
carte.
Ce projet à la fonction :
 De clignoter la led_0 ;
 De commander le clignotement de la led_3 par l’interrupteur_3
Etapes à suivre : valable aussi pour tous les autres projets
1. Lancez le « 6713 DSK CCStudio v3.1.exe » (depuis le bureau de votre PC).
2. Après le lancement du CCS, cliquez sur (Debug  Connect) afin d’établir la
connexion entre le logiciel el le kit.
3. Cliquer sur: Project  Open.
4. Choisissez le fichier led.pjt qui existe déjà dans le dossier dont le chemin est :
(C:\CCStudio_v3.1\examples\dsk6713\bsl\led)
5. Pour visualiser le code du programme cliquez sur source  led.c

Page 62 of 74
6. Pour compiler le projet, cliquer sur (Project Build). Si la compilation se passe bien
vous devez avoir : 0 Errors, 0 Warning, 0 Remark.

7. Pour charger le programme dans le DSP, cliquer sur file --> load program puis
choisissez le fichier led.out : (dans le dossier Debug)

Page 63 of 74
8. Pour exécuter le programme cliquer sur: Debug --> run

9. Pour arrêter l’exécution cliquer sur : Debug -->Halt

Création d’un nouveau projet :


Cette fois-ci, nous allons créer un nouveau projet intitulé Sine8_led, dont la fonction est de
générer en sortie un signal sinusoïdal puis, allumer la led_0 si l’interrupteur DIP_0 est actif
(DIP_0=1)
Les étapes à suivre
1. Démarrez CCS.
2. Créez un nouveau projet : Project -> new

Page 64 of 74
Puis donnez le nom du projet, La location (choisissez un dossier), le type de projet et le type
de DSP sur lequel vous allez travailler Target) :
Le nom: led
Location: c:\CCStudio_v3.1\myprojects\led
Type de projet : exécutable (.out)
Target : TMS320C67XX

3. Nous allons écrire notre premier programme en langage C (code source), pour cela
cliquer sur : File->New->Source File.
Sur votre nouveau fichier écrivez le texte suivant :
// Remarque: attention aux lettres majuscules et minuscules
#include "dsk6713_aic23.h" //le fichier support du convertisseur codec
Uint32 fs = DSK6713_AIC23_FREQ_8KHZ; // fréquence d’echantiollonnage
short loop = 0; //pointeur de la table
short gain = 10; //facteur de gain
short sine_table[8]={0,707,1000,707,0,-707,-1000,-707}; //les valeurs de la fonction sin
void main()
{
comm_poll(); //init DSK,codec,McBSP
DSK6713_LED_init(); //init LED
DSK6713_DIP_init(); //init DIP
while(1) // boucle infinie
{

Page 65 of 74
if(DSK6713_DIP_get(0)==0) //si l’interrupteur=1
{
DSK6713_LED_on(0); // allume la LED _0
output_sample(sine_table[loop]*gain); //faire sortir la valeur sur l’output
if (loop < 7) ++loop;
else loop = 0;
}
else DSK6713_LED_off(0); // éteint la LED _0
}
}
4. Enregistrez ce fichier dans le dossier de votre projet sous le nom Sine8_LED .c (ce
fichier doit avoir une extension .c).
5. Ajoutez le fichier Sine8_LED .c : Project -> Add Files to Project .
6. Ajoutez le fichier source c6713dskinit.c qui se trouve dans le dossier C:\fichierCCS
par Project -> Add Files to Project.
7. Ajoutez les fichiers support de librairie : rts6700.lib, dsk6713bsl.lib et csl6713.lib
(qui sont aussi dans le même dossier).

8. Puis ajouter le fichier de liaison c6713dsk.cmd.


9. Ajoutez aussi Vectors_poll.asm
10. Réglez les options de la compilation : Project->Build option

Page 66 of 74
Choisissez target version= C671x ( - mv6710) .

11. Dans la categorie advanced :choisir Memory Models = Far ( – mem_ model:data=far)

12. Dans la catégorie Préprocesseur réglez :


Pre - Defi ne Symbol= CHIP_6713
Include Search Path = c:\CCStudio_v3.1\C6000\dsk6713\include

13. Cliquez sur linker puis réglez l’options suivante :

Page 67 of 74
Library Search Path= c:\CCStudio_v3.1 \C6000 \dsk6713 \lib

14. Scannez les fichiers ajoutés : Project->Scan All File Dependencies

15. Vérifiez si tous les fichiers désirés sont ajoutés :


16. Exécutez le programme en suivant les étapes 2, 6 ,7 et 8 de la 1ér partie.
17. (Après la compilation il se peut que le CCS affiche des Warnings qui n’influencent
pas sur le fonctionnement du programme.)

18. Branchez la sortie de DSK LIGNE OUT à l’oscilloscope et fermez l’interrupteur_0.

Page 68 of 74
Instructions pour la déconnexion :

1) déconnecter la carte par debug->disconnect.


2) Fermer Code Composer Studio, et tous programmes qui se connectent à la
carte DSK.
3) Débrancher le câble USB.
4) Débrancher l’alimentation de la carte DSK, d’abord l’alimentation continue
de la carte, puis l’alimentation au secteur.

Très important :

Avant toute connexion ou déconnexion de la carte, s’assurer que Code


Composer Studio est fermé, ainsi que tous autres programmes qui pourraient
chercher à communiquer avec la carte.

En cas de problème avec la carte (erreurs inexpliquées lors du ‘Load


Program ’…):
Fermer Code Composer Studio (CCS)
Déconnecter le câble USB, appuyer sur le bouton reset de la carte, attendez un
peu, puis reconnecter.
Relancer CCS.

Page 69 of 74
TPN° 2: Echantillonnage et reconstruction

But :
- Mode d’acquisition des échantillons.
- Mètre en considération le filtre d’anti-repliement et de reconstruction.
- Observation de l’effet du lissage.

Généralités :
Le kit DSK possède deux convertisseurs analogique/numérique et
numérique/analogique qui permettent d’interfacer avec le monde extérieur, dédier en générale
au traitement des signaux BF, avec une fréquence d’échantillonnage programmable de 8 à
96Khz.

Pour éviter le phénomène de repliement, le convertisseur filtre le signal avant


l’échantillonnage avec un filtre passe-bas programmable de fréquence de coupure fc=fs/2.

Pour la reconstruction du signal analogique on utilise un filtre passe bas (de lissage).

Le AIC32 (les convertisseurs CAN et CNA) permet de coder une tension d’entre
entre +/- 1v sur 16 bit pour chaque canal (canal gauche et droit) pour former un mot de 32
bit. Il permet aussi la conversion d’un mot de 32bit (16bit pour chaque canal) en une tension
de sortie comprise entre +/- 1v.

Page 70 of 74
Première Partie :
- Créez un nouveau projet (voir TP 1) en ajoutant le fichier victor_poll.asm au lieu de
victor_intr.asm.

- Copiez le code C suivant (voir l’annexe pour les fonctions appelées).


/*Reconstruction1.c programme de lecture d’une valeur et écriture sur la sortie*/

#include "DSK6713_AIC23.h" //support du codec


Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //Fréquence d’echant fs
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource=DSK6713_AIC23_INPUT_LINE; // type d’entrée

void main()
{
short sample_data; //variable temporaire
comm_poll(); //init du DSK, codec
while(1) //boucle infinie
{
sample_data = input_left_sample(); //stockage l’echant
output_left_sample(sample_data); //écriture
}
}c
- appliquer un signal sinusoïdale sur LINE INPUT (vérifiez que l’amplitude est < à 1v
avant le branchement) d’une fréquence < 4khz et visualisez la sortie sur LINE OUTPUT.

- Tracez la fonction de transfert (200 <f< 8khz).

- Changez le signal sinusoïdal par un signal carré.

- Donnez la plage des fréquences qui permet d’avoir le signal de sortie avec une distorsion
minimale par rapport a l’entrée.

- Changez DSK6713_AIC23_FREQ_8KHZ par DSK6713_AIC23_FREQ_48KHZ et


donnez la plage des fréquences qui permet d’avoir le signal de sortie avec une distorsion

minimale par rapport a l’entrée.

- Conclure

Page 71 of 74
Deuxieme Partie
- supprimer la bibliothèque victor_poll.asm (remove from project) et ajoutez
victor_intr.asm et changez comm_poll par comm_intr.
- Modifiez le programme, comme ci-dessous :

/*Reconstruction.c programme de lecture d’une valeur et écriture sur la sortie */

#include "DSK6713_AIC23.h" //support du codec


Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //Fréquence d’echant fs
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource=DSK6713_AIC23_INPUT_LINE; // type d’entrée

interrupt void c_int11(){


short sample_data; //variable temporaire
sample_data = input_left_sample(); // stockade l’echant
output_left_sample(sample_data); //écriture
return; }

void main()
{
comm_intr(); //init du DSK, codec
while(1); //boucle infinie
}

- Citez le problème majeur de l’utilisation du mode poll.

- Introduisez un signal sinusoïdale dans LINE INPUT (vérifiez que l’amplitude est < à 1v)
d’une fréquence < 4khz et visualisez la sortie.

- Changez le programme pour faire le traitement sur le canal droit (voir annexe).

- Changez le programme pour faire le traitement sur les deux canaux simultanément.

Page 72 of 74
Troisième partie :
- Cette partie permettra de générer un signal sinusoïdale sur le canal gauche par la méthode
LookUpTable afin d’observer le rôle du filtre de reconstruction.

- Le programme est le suivant :

//Sinus.c programme delivre en sortie un Sin


#include "DSK6713_AIC23.h" //support du codec
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //Fréquence d’echant fs
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource=DSK6713_AIC23_INPUT_LINE; // type d’entrée
#define LOOPLENGTH 8
short loopindex = 0; //table index
short gain = 10; //gain
short sine_table[LOOPLENGTH]=
{0,707,1000,707,0,-707,-1000,-707}; //valeur de la sin

interrupt void c_int11(){


output_left_sample(sine_table[loopindex++]*gain); //sortie
if (loopindex >= LOOPLENGTH) loopindex = 0; //mise à zero
return; }

void main()
{
comm_intr(); //init du DSK, codec
while(1); //boucle infinie
}
- Esquissez un graphe des valeurs de la table en fonction de temps et calculez sa fréquence.

- Visualisez la sortie (notez la fréquence et l’amplitude).

- Changez LOOPLENGTH 8 par LOOPLENGTH 4 et changez les coefficients par


{0,1000, 0,-1000}, refaire le même travail que précédemment.

- Changez les coefficients par {1000,1000,-1000,-1000,} Visualisez la sortie.

- Modifiez les coefficients précédents pour obtenir la fréquence maximale (4khz).

- Changez LOOPLENGTH 4 par LOOPLENGTH 64 et changez les coefficients pour avoir


32 valeurs de 1000 et 32 autres de -1000. Visualisez la sortie.

Page 73 of 74
Annexe
Mode de communication avec AIC32 :

- Mode Poll, dans ce mode le dsp interroge et attend le AIC32 jusqu’il soit prêt a une
Ecriture /Lecture du mot

o L’utilisation du ce mode nécessite l’ajout de la bibliothèque Vector_poll.asm. et


l’initialisation avec comm_poll() au début du programme.

o Pour faire une lecture d’un canal (droite / gauche) input_left_sample() /


input_right_sample(), la fonction ne nécessite aucun argument, et donne en sortie
une valeur de 16bit (short). Pour la lecture des deux canaux en même temps
(Uint32 ) on utilise la fonction input_sample() .

o Pour faire une écriture dans un canal (droite / gauche) : ouput_left_sample( ) /


output_right_sample( ), la fonction nécessite comme argument la variable a
transmettre (16 bits). Pour l’écriture des deux données en même temps
output_sample( ) avec une variable de donnée de 32 bits (Uint32).

- Mode Int, dans ce mode le AIC32 génère une interruption chaque fois qu’il est prêt à
recevoir/émettre une donnée (dépend de la fréquence d’échantillonnage choisie par
‘’Uint32 fs=DSK6713_AIC23_FREQ_XXKHZ’’ ou XX=8,16,32,48,96).

o L’ulilisation du ce mode nécessite l’ajout du fichier Vector_intr.asm et


l’initalisation avec comm_intr() au début du programme . Le sous-programme
d’interruption est de la forme suivante :

interrupt void c_int11(){ ………


………
return;//obligatoire
}

o La lecture/écriture des canaux est identique au mode Poll.

Page 74 of 74

You might also like