TP Traitement de signal 2003/2004 PROCESSEUR DE TRAITEMENT DE SIGNAL DSP56002 DE MOTOROLA Adrien Bérard Max Prat Carrabin Classe 35 ESIEA Paris Avril 2004 ESIEA Paris 2 / 24 Table des Matières I. II. INTRODUCTION .......................................................................................................................................... 4 INITIATION AU DSP ................................................................................................................................... 6 1. Etude du kit .......................................................................................................................................... 6 a. b. c. 2. III. 3. 4. 5. 6. 7. 8. 9. IV. Emplacement mémoire .................................................................................................................................... 6 Étude des ports A, B et C ................................................................................................................................. 6 Fonctions circuit CODEC CS-4215 ................................................................................................................. 7 Etude du soft ........................................................................................................................................ 7 APPLICATIONS ...................................................................................................................................... 9 Configuration du port B en entrées/sorties TTL .................................................................................. 9 Dérive d’un signal.............................................................................................................................. 10 Intégrale d’un signal .......................................................................................................................... 11 Synthèse d’un signal........................................................................................................................... 13 Oscillateur numérique........................................................................................................................ 15 Filtre RIF ........................................................................................................................................... 17 Applications personnelles .................................................................................................................. 20 CONCLUSION ...................................................................................................................................... 23 ESIEA Paris 3 / 24 I. Introduction Cette semaine de TP avait pour objectif de nous familiariser avec le DSP de chez Motorola, le DSP56002, ainsi que divers algorithmes de traitement de signal. Nous avons tout d’abord suivi pas à pas les étapes de la partie « Initiation au DSP » ce qui nous a permi de prendre en main le debuggeur 56k et l’assembleur 5600x. Les manuels que nous avions a disposition se sont avérés indispensables pour comprendre le fonctionnement du DSP56002, et pour correctement le programmer en assembleur. Durant cette semaine de TP, nous nous sommes familiarisés avec le MOTOROLA DSP56002, et la manière de le programmer en assembleur. Nous avons ainsi écrit plusieurs algorithmes correspondant aux exercices de traitement de signal et à nos applications personnelles. Nous avons étudié le kit en précisant les emplacements mémoires disponibles, puis en identifiant les trois ports A, B et C et en nous intéressant au CAN (Convertisseur Analogique Numérique) CS-4215 intégré au DSP56002. Puis, nous avons abordé l’utilisation du compilateur et du débuggeur Motorola grâce au programme « suiveur ». Ce programme simple nous a permis de comprendre et de pouvoir utiliser par la suite les entrées/sorties Jack IN et OUT. Enfin, dans la partie « Applications » nous avons programmé en assembleur 7 programmes de traitement de signal : - configuration du port B en entrées/sorties TTL - dérivée d’un signal - intégrale d’un signal - synthèse d’un signal - oscillateur numérique - filtre RIF ESIEA Paris 4 / 24 - application personnelle : l’écho L’objectif du TP et les moyens donnés sont rappelés dans le sujet. ESIEA Paris 5 / 24 II. Initiation au DSP 1. Etude du kit a. Emplacement mémoire D’après la documentation constructeur, le DSP Motorola 56002 possède deux types de mémoire : - la mémoire appellée « programme » ou « program memery »: une RAM de 512 mots de 24 bits. - la mémoire des données appelée « data » ou « data memory » : deux ROM de 256 mots de 24 bits (X et Y). La mémoire est répartie en 3 domaines : P qui est utilisé pour le corps du programme, X et Y pour stocker des données utilisées par le programme. La Ram se trouve entre les adresses $0000 et $3FFF. Le DSP56002 attribue pour P 512 mots de 24 bits mappés entre $000 et $1FF. Une EPROM programmable se trouve entre les adresses $8000 et $FFFF. Il y a aussi : - une ROM à l’adresse $FFC0 longue de 64 mots gérant les entrées/sorties. - il y a une ROM dite « bootstrap » de 64 mots de 24 bits - deux ROM de 256 mots de 24 bits contenant les tables des sinus et cosinus. b. Étude des ports A, B et C Le port A peut être utilisé pour rajouter différents types de mémoire. Il est composé : - d’un bus d’adresse sur 16bits, - d’un bus de donnée bidirectionnel sur 24bits - et d’un bus de contrôle (pour la lecture/écriture, la sélection de la ressource mémoire ou le contrôle l’accès aux bus) Le port B peut être utilisé pour communiquer un calculateur externe. Il est composé de 15 broches et peut fonctionner sous différents mode. Le registre PBC (à l’adresse $FFE0) permet de choisir le mode du port : PBC0 0 0 ESIEA Paris PBC1 0 1 Mode du port B Port parallèle E/S : TTL Interface hôte 6 / 24 1 1 0 1 Interface hôte avdc Aknowledgement Réservé Constructeur En mode Port parallèle, le port B est contrôlé par les deux registres PBDDR (Port B Data Direction Register) et PBD (Port B Data Register). L’interface hôte est une interface full-duplex asynchrone qui peut être connectée directement au bus de données d’un processeur dit hôte avec une architecture DMA ou compatible avec celle du DSP. Le port C se compose de neuf broches. De la même façon que le port B, il peut fonctionner sous différents modes. Le registre PCC situé à l’adresse X :$FFE1 permet de choisir parmi les modes proposés : - port parallèle E/S TTL (le registre PCDDR (adresse $FFE3) est utilisé pour choisir le sens de la communication des lignes que le registre PCD permet de gérer) - interface de communication série synchrone SSI - interface de communication série synchrone/asynchrone SCI c. Fonctions circuit CODEC CS-4215 Le circuit CS-4215 est un Crystal CS 4215 est un convertisseur analogique/numérique et convertisseur numérique/analogique. Il possède deux canaux de 16 bits servant à la conversion analogique/numérique et deux canaux de 16 bits dédiés à la conversion numérique/analogique. On peut choisir la fréquence d’échantillonnage (de 4kHz à 48kHz), la qualité (8 ou 16bits) et le nombre de voix (mono ou stéréo). 2. Etude du soft Nous avons chargé le programme suiveur.asm dans le DSP. Ce programme récupère le signal du port IN et le retranscrit à son identique dans le port OUT. Ce programme simple nous a permis de prendre en main le debuggeur et d’apprendre à gérer en assembleur les entrée/sortie du DPS56002 pour traiter le signal dans la suite du TD. ce programme nous a servi de base pour les autres programmes. ESIEA Paris 7 / 24 Suiveur.asm fait appel à ada_init.asm qui permet d’initialier et de configurer le CS-4215. En éditant le fichier ada_init.asm nous avons changer la fréquence d’échantillonnage. Pour un taux d’échantillonnage de 48kHz, le signal disparaît si la fréquence appliquée en entrée est supérieure à 24 kHz Pour une fréquence d’échantillonnage de 9kHz, on constate que la fréquence de coupure est de 4.5 kHz. L’observation nous montre donc que la fréquence de coupure est moitié moins la fréquence d’échantillonnage : c’est la condition d’échantillonnage de Shannon-Nyquist. ESIEA Paris 8 / 24 III. Applications 1. Configuration du port B en entrées/sorties TTL Principe du programme : Le programme suivant configure le port B et génère un signal d’horloge de fréquence 2000Hz. Pour ce faire nous avons configurer le port B en entrée/sortie TTL. Le registre PBDDR permet ensuite de mettre chaque bit en sortie. Le bit PB0 est mis alternativement à 0 ou à 1 indéfiniment. La temporisation est assurée par la subroutine pause. C’est le nombre de répétition de l’opération nop (no operation) qui permet de définir une fréquence. L’horloge du DSP est de 2Mhz, une instruction dure 0,5 micro-seconde. Pour obtenir un isgnal d’horloge de 2Mhz nous devons répéter l’opération nop ??? fois. Prorgamme : PBC equ PBDDR PBD equ org org jmp org $FFE0 equ $FFE2 $FFE4 ;initialisation de l'adresse du port BC ;initialisation de l'adresse du port BDDR ;initialisation de l'adresse du port BD x:$0 p:0 debut p:$40 ;x commence à 0 ; début du programme debut movep #$0,x:PBC movep #$7fff,x:PBDDR horloge movep #$00,x:PBD jsr pause movep #$01,x:PBD jsr pause jmp horloge pause rep #500 nop rts ESIEA Paris ;données à l'adresse 0 voont sur le port BC ;données dans 7fff sur PBDDR ; B = 00 ;appel de la fonction pause ; B = 01 ;appel de la fonction pause ;boucle infinie du sous-programme horloge ;Répétition de l'instruction nop pour temporiser 9 / 24 2. Dérive d’un signal Principe du programme : Pour dériver le signal nous avons suivi l’algorithme suivant : - acquisition du signal e(n) - mémorisation du signal e(n) - calcul de s(n) = e(n) – e(n-1) - sortie de s(n) - répéter Ici nous travaillons en mono : nous recevons le signal du côté droit que nous plaçons dans la variable a, et nous sortons à droite et à gauche le même signal. Programme : START EQU $40 org jmp p:$0 START org jsr jsr jsr jsr p:$000c ssi_rx_isr ssi_rx_isr ssi_tx_isr ssi_tx_isr org ;SSI receive data ;SSI receive data with exception ;SSI transmit data ;SSI transmit with exception p:START movep #$261009,x:PLL ;these labels are defined in the movep #0000,x:BCR ;ada_init.asm program ori #3,mr ;mask interrupts movec #0,sp ;clear hardware stack pointer move #0,omr ;operating mode 0 move #$40,r6 ; initialise stack pointer move #-1,m6 ; linear addressing include 'ada_init.asm' TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(LEFT_ATTN)+(RIGHT_ATTN) TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) ESIEA Paris 10 / 24 loop_1 jset #2,x:SSISR,* ;wait for frame sync to pass jclr #2,x:SSISR,* ;wait for frame sync ;move x:RX_BUFF_BASE,a move x:RX_BUFF_BASE+1,a jsr process_stereo move a,x:TX_BUFF_BASE move a,x:TX_BUFF_BASE+1 move move move move jmp ;receive left ;receive right ;transmit left ;transmit right #TONE_OUTPUT,y0 ;set up control words y0,x:TX_BUFF_BASE+2 #TONE_INPUT,y0 y0,x:TX_BUFF_BASE+3 loop_1 process_stereo move a,X0 ; on place le signal dans une variable temporaire sub b,a ; on fait la derivation : on soustrait la valeur précédente (b) à la valeur actuelle (a) move X0,b ; on place la valeur actuelle (qui est dans la variable temporaire) dans b rts include 'txrx_isr.asm' end 3. Intégrale d’un signal Principe du programme : Pour intégrerle signal nous avons suivi l’algorithme suivant : - acquisition du signal e(n) - calcul de s(n) = s(n-1) + e(n) ESIEA Paris 11 / 24 - mémorisation de s(n) pour l’utiliser à la boucle suivante sortie de s(n) répéter Ici nous travaillons en mono : nous recevons le signal du côté droit que nous plaçons dans la variable a, et nous sortons à droite et à gauche le même signal. Programme : START EQU $40 org jmp p:$0 START org jsr jsr jsr jsr p:$000c ssi_rx_isr ssi_rx_isr ssi_tx_isr ssi_tx_isr org ;SSI receive data ;SSI receive data with exception ;SSI transmit data ;SSI transmit with exception p:START movep #$261009,x:PLL ;these labels are defined in the movep #0000,x:BCR ;ada_init.asm program ori #3,mr ;mask interrupts movec #0,sp ;clear hardware stack pointer move #0,omr ;operating mode 0 move #$40,r6 ; initialise stack pointer move #-1,m6 ; linear addressing include 'ada_init.asm' TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(LEFT_ATTN)+(RIGHT_ATTN) TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) loop_1 jset #2,x:SSISR,* ;wait for frame sync to pass jclr #2,x:SSISR,* ;wait for frame sync ;move x:RX_BUFF_BASE,a move x:RX_BUFF_BASE+1,a jsr move ESIEA Paris ;receive left ;receive right process_stereo a,x:TX_BUFF_BASE ;transmit left 12 / 24 move a,x:TX_BUFF_BASE+1 move move move move #TONE_OUTPUT,y0 ;set up control words y0,x:TX_BUFF_BASE+2 #TONE_INPUT,y0 y0,x:TX_BUFF_BASE+3 jmp ;transmit right loop_1 process_stereo add b,a move a,b rts include 'txrx_isr.asm' end Le principe est le même que pour la dérivée à l’exception près que l’on additionne le signal à la somme des signaux précédents. 4. Synthèse d’un signal Principe du programme : A partir des valeurs de la fonction sinus présentes dans la ROM du DSP56002, nous allons générer un signal sinusoidale en envoyant successivement et en boucle les valeurs de la fonction sinus comprises entre les adresses $100 et $1FF. Pour ce faire il faut initialiser OMR pour accéder à la table des sinus : une partie de l'adressage de la RAM pointe vers la ROM. Le registre R0 pointe vers le début de la table à l’adresse $100. Nous plaçons la valeur $FF dans le registre M0 pour pouvoir répéter la lecture de la table modulo 255. On change le mode de la mémoire (OMR=4). La vitesse d’exécution de chaque instruction étant la même, nous obtenons un signal sinusoidal en sortie. Programme : ESIEA Paris 13 / 24 START EQU $40 org jmp p:$0 START org jsr jsr jsr jsr p:$000c ssi_rx_isr ssi_rx_isr ssi_tx_isr ssi_tx_isr org ;SSI receive data ;SSI receive data with exception ;SSI transmit data ;SSI transmit with exception p:START movep #$261009,x:PLL ; Ces labels sont d‚finis dans movep #0000,x:BCR ; le programme ada_init.asm ori #3,mr ; Interruption du masque movec #0,sp ; Vide les stack machines move #4,omr ; perating mode 4 move #$40,r6 ; initialise stack pointer move #-1,m6 ; Adressage lin‚aire include 'ada_init.asm' TONE_OUTPUT HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) move #$100,r0 move #$FF,m0 EQU ;adresse de la ROM sinus dans r0 loop_1 jset #2,x:SSISR,* ;wait for frame sync to pass jclr #2,x:SSISR,* ;wait for frame sync ; move x:RX_BUFF_BASE,a ;receive left do #500,fin jsr process_sinus move a,x:TX_BUFF_BASE ;transmit left do #1000,fin2 jsr process_sinus move a,x:TX_BUFF_BASE ;transmit left do #300,fin3 jsr process_sinus move a,x:TX_BUFF_BASE ;transmit left fin fin2 ESIEA Paris 14 / 24 fin3 move #TONE_OUTPUT,y0 ;set up control words move y0,x:TX_BUFF_BASE+2 move #TONE_INPUT,y0 move y0,x:TX_BUFF_BASE+3 jmp loop_1 process_sinus move y:(r0)+,a nop rts include 'txrx_isr.asm' end 5. Oscillateur numérique Principe du programme : Nous avons réaliser un osciallteur de 2000Hz en programmant un filtre RIF instable. Comme indiqué dans le sujet, il convient de sortir le signal y(k) = A*y(k-1) + B*y(k2) avec A = 2*cos(teta), B=-1 et teta = 2 * pi * Fdésirée / Féchantillonage Programme : START EQU pi ;pi set set $40 @ACS(-1.0) 3.14 Fdesire set 2000.0 Fechan set 48000.0 teta set 2.0*pi*(Fdesire/Fechan) cte_A set @COS(teta) ; il s'agit de la constante A/2 cte_C set @SIN(teta) org org org x:$100 y:$100 p:$0 jmp START org p:$000c jsr ssi_rx_isr jsr ssi_rx_isr jsr ssi_tx_isr ESIEA Paris ; champs mem x commencant a l'adresse 100 ;SSI receive data ;SSI receive data with exception ;SSI transmit data 15 / 24 jsr org ssi_tx_isr ;SSI transmit with exception p:START movep #$261009,x:PLL ;these labels are defined in the movep #0000,x:BCR ;ada_init.asm program ori #3,mr movec #0,sp move #0,omr move #$40,r6 move #-1,m6 ;mask interrupts ;clear hardware stack pointer ;operating mode 0 ; initialise stack pointer ; linear addressing include 'ada_init.asm' TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) TONE_INPUT move move move EQU #cte_A,y1 #0,x0 #cte_C,x1 MIC_IN_SELECT+(15*MONITOR_ATTN) ;dans y1 est stock‚ la constante A/2 ;dans x0 est stok‚ y(n-2) ;dans x1 est stock‚ y(n-1) move x0,x:TX_BUFF_BASE ;transmission de y(0) = 0 move x0,x:TX_BUFF_BASE+1 move x1,x:TX_BUFF_BASE ;transmission de y(1) = C move x1,x:TX_BUFF_BASE+1 loop jset #2,x:SSISR,* ;wait for frame sync to pass jclr #2,x:SSISR,* ;wait for frame sync jsr proc move move move move jmp #TONE_OUTPUT,y0 ;set up control words y0,x:TX_BUFF_BASE+2 #TONE_INPUT,y0 y0,x:TX_BUFF_BASE+3 loop ESIEA Paris 16 / 24 proc ;y1 = A/2 et x1 = y(n-1) car correspond au signal envoye juste avant ;x0 = y(n-2) car correspond au signal envoye 2 coups avant mpy x1,y1,a move x0,b subl b,a ;a = A/2*y(n-1) ;b = y(n-2) ;a=2*a-b a = A*y(n-1) - y(n-2) move x1,x0 ; a cet instant x0 = y(n-1) donc au coup d'apres x0 = y(n-2) move a,x1 ; a cet instant x1 = y(n) donc au coup suivant x1=y(n-1 ) move move a,x:TX_BUFF_BASE ;transmission de y(n) a,x:TX_BUFF_BASE+1 rts include 'txrx_isr.asm' end 6. Filtre RIF Principe du programme : On désire implanter sur le DSP5600 un filtre numérique passe-bas dont la fréquence de coupure Fc est égale à 1000Hz et pour une fréquence d’échantillonnage de Fe = 9600Hz. Nous avons utilisé la méthoe dite de la fenêtre avec les coefficients indiqués dans le sujet. Nous allons calculer et sortir le signal s(n) = a0*e(n) + a1*e(n-1) + … + aL-1 * e(n-(L-1)) avec a0 … aL-1 les coefficients et e(n) … e(n-(L-1)) les signaux d’entrée successfis avec retard. Programme : h0 h1 ESIEA Paris org x:$300 dc dc -0 -0.02078865 17 / 24 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 e21 e20 e19 e18 e17 e16 e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 ESIEA Paris dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc -0.03784134 -0.04324724 -0.03118298 0 0.04677446 0.10091023 0.15136535 0.18709786 0.2 0.18709786 0.15136535 0.10091023 0.04677446 0 -0.03118298 -0.04324724 -0.03784134 -0.02078865 -0 org x:$1000 dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc dc 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 org p:$0 jmp Start 18 / 24 org p:$0c jsr jsr jsr jsr ssi_rx_isr ssi_rx_isr ssi_tx_isr ssi_tx_isr org p:$40 ; SSI receive data ; SSI receive data with exception ; SSI transmit data ; SSI transmit with exception Start movep #$261009,x:PLL movep #0000,x:BCR ori #3,mr movec #0,sp move #0,omr move #$40,r6 move #-1,m6 ; these labels are defined in the ; ada_init.asm program ; mask interrupts ; clear hardware stack pointer ; operating mode 0 ; initialise stack pointer ; linear addressing include 'ada_init.asm' TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) ;move move move move #$1000,R1 #$300,R2 #$0,b #$0,a jset jclr #2,x:SSISR,* #2,x:SSISR,* Boucle ESIEA Paris ; wait for frame sync to pass ; wait for frame sync move x:RX_BUFF_BASE,a dans a ; acquisition du signal à gauche move x:RX_BUFF_BASE+1,b dans b ; acquisition du signal à droite 19 / 24 jsr rif move a,x:TX_BUFF_BASE move b,x:TX_BUFF_BASE+1 move move move move #TONE_OUTPUT,y0 y0,x:TX_BUFF_BASE+2 #TONE_INPUT,y0 y0,x:TX_BUFF_BASE+3 jmp Boucle ; renvoi la valeur de a à gauche ; renvoie la valeur de b à droite ; set up control words rif move #$1000,R1 (e21) move a,X0 move X0,X:(R1) move #$1014,R1 move #$300,R2 ;initialisation du registre R1 sur do #21,fin1 entre ici et fin1 ;on répète 21 fois les instructions move move mac move move X:(R1)-,X0 X:(R2)+,Y0 X0,Y0,b X:(R1)+,X0 X0,X:(R1)- ;on décrémente R1 et on le met dans X0 ;on incrémente R2 et on le met dans Y0 ;b= b + e(k)*h(k-1) ;on incrémente R1 et on le met dans X0 ;e(k) devient e(k-1) ;e21=a, acquisition dans e21 ;on met e1 dans R1 ;on met h0 dans R2 fin1 move b,a rts include 'txrx_isr.asm' end 7. Applications personnelles Principe du programme : ESIEA Paris 20 / 24 Le programme suivant permet de générer un écho en ajoutant au signal le signal précédent tout en diminuant l’amplitude de celui-ci . Le signal réceptionné se propage durant tout la durée d’émission du signal. Mais comme les valaurs d’amplitude sont entières, et qu’elles diminuent à chaque fois pour chaque signal, celui finit par s’annuler. L’addition de chaque répétition des signaux qui s’amenuisent avec le temps donne l’effet d’écho. Programme : START equ $40 org y:$0 org p:$0 jmp START org jsr jsr jsr jsr p:$000C ssi_rx_isr ssi_rx_isr ssi_tx_isr ssi_tx_isr org p:START movep #$261009,x:PLL movep #$0000,x:BCR ori #3,mr movec #0,sp move #0,omr move #$40,r6 move #-1,m6 include 'Ada_init.asm' TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(3*LEFT_ATTN)+(3*RIGHT_ATTN) TONE_INPUT EQU MIC_IN_SELECT+(2*MONITOR_ATTN) move #$4000,R0 ; adresse de d‚part pour les stockage de l'écho move #$9FFF,M0 Boucle jset #2,x:SSISR,* jclr #2,x:SSISR,* move x:RX_BUFF_BASE,a ESIEA Paris 21 / 24 move add asr a move rep #2 asl move x:(R0),x0 ; echo dans x0 x0,a ; addition de l'echo au signal ; affaiblissement du signal a,x:(R0)+ ; amplifie le signal avant de l'envoyer a a,x:TX_BUFF_BASE ;envoi le signal move #TONE_OUTPUT,y0 move y0,x:TX_BUFF_BASE+2 move #TONE_INPUT,y0 move y0,x:TX_BUFF_BASE+3 jmp Boucle include 'txrx_isr.asm' ESIEA Paris 22 / 24 IV. Conclusion Ce TP nous aura permit de mieux comprendre et surtout de mettre en application les cours que nous avons étudier en cours de signal ; et plus particulièrement les notions de dérivation et d’intégration. Nous avons tout de même rencontré quelques difficultés. En effet, la sortie de la carte du DSP avait un problème au niveau de son ressort et cela nous a obligé a emprunter des cartes DSP à d’autres groupes pour vérifier nos programmes. De plus, nous avons des problèmes de visualisation dû au mauvais réglages du GBF et de l’oscilloscope. Cette semaine nous a donc permit de nous familiariser avec le DSP 56002, qui offre une large gamme de traitement de signaux, qu'ils soient à vocation purement électronique ou musicale. Cette application s'est donc révélée être très instructive mais aussi très ludique. Le DSP (digital signal processor) comme son nom l’indique est un processeur de signaux. Ainsi, nous avons pu réaliser d’intéressants programmes depuis la simple dérivée d’un signal jusqu’à l’écho, l’inversion périodique des canaux gauche - droite, … Les DSP sont très efficaces pour gérer les sons et ont donc une bonne place sur les cartes son pour PC comme celles de Creative Labs (DSP Emu 10k). Ils sont aussi plus que de simples processeurs car on peut facilement les reprogrammer. Avec l’essor des GSM, des lecteurs DVD et des modems de tous genres (câble, xDSL, RTC 56kbits/s pour lesquels une bonne gestion des signaux reçus est très importante), les DSP ont un bel avenir devant eux. Au cours de cette semaine de TP, nous avons pu mettre en application et mieux comprendre les cours que nous avons eu sur le signal. Ainsi les notions d’intégration, de dérivation, d’échantillonnage de signal sont maintenant plus claires. Enfin, nous avons eu quelques difficultés dans la semaine. La plupart concernaient le réglage de l’oscilloscope et du générateur basse tension pour visualiser les résultats de nos programmes. Nous avons eu également des problèmes dû au comportement parfois incohérent du kit. Nous avons ainsi réalisé un programme qui générait un bruit rappelant celui d’un spray. Le vendredi matin le programme fonctionnait bien mais l’après-midi alors que nous n’y avions pas touché, le programme ne fonctionnait plus. De même pour le filtre RIF, lors de la soutenance et malgré avoir modifié le programme ada_init.asm, la coupure ne se produisait ESIEA Paris 23 / 24 qu’à 3 kHz. En prenant le programme ada_init.asm d’un autre groupe, cela a tout de suite fonctionné. En ce qui concerne les applications personnelles, nous avons voulu faire une mélodie en utilisant le DSP pour générer les notes mais nous avons eu des problèmes pour trouver les fréquences correspondant aux notes, pour les enchaîner afin de créer la mélodie et un manque de temps. ESIEA Paris 24 / 24