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 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 3 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 4 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 5 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 6 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 7 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 8 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 9 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 10 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 11 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 12 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 13 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 14 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 15 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 16 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 17 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 18 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 19 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 20 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 21 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 22 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 23 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 24 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 25 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 26 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 27 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 28 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 29 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 30 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 31 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 32 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 33 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 34 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 35 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 36 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 37 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 38 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 39 of 74 RI U GO EL Pr .E L GO UR I Ra ch id EN SA K Page 40 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 41 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 42 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 43 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 44 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 45 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 46 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 47 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 48 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 49 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 50 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 51 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 52 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 53 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 54 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 55 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 56 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 57 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 58 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 59 of 74 I G R OU EL Pr .E L GO UR I Ra ch id EN SA K Page 60 of 74 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 //pointeur de la table loop = 0; 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); output_sample(sine_table[loop]*gain); // allume la LED _0 //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 (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 csl6713.lib 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