Rappord DSP
Rappord DSP
Rappord DSP
Module : DSP
Filière : GSEII
Réalisé par:
Hamza NAEM
Samuel KUMA YAO
1-1- Objectifs du TP
L’objectif de ce TP est de se familiariser avec l’environnement de
développement CCS de Texas Instruments et le starter kit DSP (DSK) en plus
d’être capable d’estimer les performances du DSP C67, utiliser les capacités
de l’environnement de développement CCS, manipuler et afficher des données
ainsi que tester un traitement élémentaire.
1-2- Présentation de la plateforme DSP
La carte STN1 est un système didactique spécialement conçu pour permettre
à l’utilisateur d’acquérir une expérience pratique dans le traitement des
signaux, STN1 peut être utilisé :
2-1- Objectifs du TP
L’objectif de ce TP est de se familiariser avec l’environnement de
développement CCS de Texas Instruments et le starter kit DSP (DSK) en plus
d’être capable d’estimer les performances du DSP C67, utiliser les capacités
de l’environnement de développement CCS, manipuler et afficher des données
ainsi que tester un traitement élémentaire.
2-2- Création d’un projet sur starter kit DSP (DSK)
On crée un répertoire à notre nom dans D:\TP_2\Manip1 et puis on Lance le
setup de code composer studio (CCS) :
Pour charger le programmer dans le DSP, on clique sur le file load program
puis on choisit le fichier led.out.
Dans cette phase on donne le nom du projet et on choisit la version DSP avec
lequel on veut travailler, Dans notre cas on choisit TMS320C67XX, et on
choisit aussi la location de notre projet.
Q1-Pour que l'acquisition se fasse sur les deux canaux gauche et droit, et que
le signal soit dirigé vers le canal droit si SW3 est sélectionné et vers le canal
gauche si SW1 est sélectionné, nous devons effectuer les modifications
suivantes :
#include "DSK6713_AIC23.h"
Uint32 fs = DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource = DSK6713_AIC23_INPUT_LINE;
void main()
{
short sample_data;
comm_poll();
while (1)
{
sample_data = input_sample(); // Acquisition des échantillons sur les deux
canaux
if ((SW3 == 1) && (SW1 == 0))
{
output_right_sample(sample_data); // Sortie sur le canal droit
}
else if ((SW3 == 0) && (SW1 == 1))
{
output_left_sample(sample_data); // Sortie sur le canal gauche }
else if ((SW3 == 1) && (SW1 == 1))
{
output_left_sample(sample_data); // Sortie sur les deux canaux
output_right_sample(sample_data);
}}}
Q2-Pour appliquer un signal sinusoïdal sur LINE INPUT et visualiser la sortie
sur LINE OUTPUT, vous devez vous assurer que l'amplitude du signal est
inférieure à 1V avant la connexion. Vous pouvez utiliser des fonctions
supplémentaires pour générer le signal sinusoïdal et le configurer comme
entrée. Voici un exemple de modification :
#include "DSK6713_AIC23.h"
#include Uint32 fs = DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource = DSK6713_AIC23_INPUT_LINE;
void main()
{
short sample_data;
float amplitude = 0.5; // Amplitude sinusoïdale (ajustez selon les besoins) float frequency =
1000; // Fréquence sinusoïdale (ajustez selon les besoins) float phase = 0; // Phase sinusoïdale
(ajustez selon les besoins)
comm_poll();
while (1)
{
// Génération du signal sinusoïdal
sample_data = (short)(amplitude * sin(2 * M_PI * frequency * phase));
input_sample(sample_data); // Appliquer le signal sinusoïdal sur LINE INPUT phase += 1.0 / fs;
// Mise à jour de la phase en fonction de la fs output_sample(sample_data); // Visualisation
du signal sur LINE OUTPUT
}}
Q4-Pour changer le signal sinusoïdal en un signal carré, vous pouvez utiliser
une fonction de génération de signal carré et l'appliquer de la même manière
que le signal sinusoïdal précédent. Voici un exemple de modification :
#include "DSK6713_AIC23.h"
Uint32 fs = DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource = DSK6713_AIC23_INPUT_LINE;
void main()
{
short sample_data;
float amplitude = 0.5; // Amplitude du signal carré (ajustez selon les besoins) float frequency
= 1000; // Fréquence du signal carré (ajustez selon les besoins)
float phase = 0; // Phase du signal carré (ajustez selon les besoins) comm_poll();
while (1)
{
if (phase < 0.5)
{
sample_data = (short)(amplitude);
}
else
{
sample_data = (short)(-amplitude);
}
input_sample(sample_data); // Appliquer le signal carré sur LINE INPUT phase += 1.0 / (2 *
frequency); // Mise à jour de la phase en fonction de fs
output_sample(sample_data); // Visualisation du signal sur LINE OUTPUT
}}
Q6-Pour changer DSK6713_AIC23_FREQ_8KHZ en
DSK6713_AIC23_FREQ_48KHZ, vous devez effectuer les modifications
suivantes dans le code :
#include "DSK6713_AIC23.h"
Uint32 fs = DSK6713_AIC23_FREQ_48KHZ; // Modifier la fs
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource = DSK6713_AIC23_INPUT_LINE;
// Reste du code inchangé
void main()
{
short sample_data;
float amplitude = 0.5; // Amplitude du signal carré (ajustez selon les besoins) float frequency
= 1000; // Fréquence du signal carré (ajustez selon les besoins)
float phase = 0; // Phase du signal carré (ajustez selon les besoins) comm_poll();
while (1)
{
if (phase < 0.5)
{
sample_data = (short)(amplitude);
}
else
{
sample_data = (short)(-amplitude);
}
input_sample(sample_data); // Appliquer le signal carré sur LINE INPUT phase += 1.0 / (2 *
frequency); // Mise à jour de la phase en fonction de fs
output_sample(sample_data); // Visualisation du signal sur LINE OUTPUT
}}
Q7-En conclusion, ce programme vous a permis d'explorer différentes
fonctionnalités et manipulations du signal à l'aide de la carte DSK6713 et de
la bibliothèque DSK6713_AIC23. Vous avez appris à acquérir et à traiter des
signaux audios, à générer des signaux sinusoïdaux et carrés, à contrôler les
canaux de sortie en fonction des commutateurs (SW1 et SW3), et à analyser
la réponse en fréquence du système. Vous avez également examiné l'impact
de la fréquence d'échantillonnage sur la qualité du signal de sortie. Ces
expérimentations vous ont donné une meilleure compréhension du traitement
du signal audio en utilisant le DSP et la carte DSK6713. 12
• Deuxième Partie : Mode Intr
On Supprime la bibliothèque victor_poll.asm (remove from project) et ajoutez
victor_intr.asm et changez comm_poll par comm_intr et on Modifiez le
programme, comme ci-dessous :
#include "DSK6713_AIC23.h" //support du codec
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource=DSK6713_AIC23_INPUT_LINE;
interrupt void c_int11()
{
short sample_data;
sample_data = input_left_sample();
output_left_sample(sample_data);
return;
}
void main()
{
comm_intr();
while(1);
}
Q1-Pour faire le traitement sur le canal droit, vous pouvez modifier le code
comme suit :
#include "DSK6713_AIC23.h"
Uint32 fs = DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource = DSK6713_AIC23_INPUT_LINE;
interrupt void c_int11()
{
short sample_data;
sample_data = input_right_sample(); // Traitement sur le canal droit
output_right_sample(sample_data);
return;
}
void main()
{
comm_intr();
while (1);
}
Q2-Pour faire le traitement sur les deux canaux simultanément, vous pouvez
utiliser les fonctions input_sample() pour acquérir les échantillons des deux
canaux et output_sample() pour les sortir simultanément. Voici un exemple
de modification :
#include "DSK6713_AIC23.h"
Uint32 fs = DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource = DSK6713_AIC23_INPUT_LINE;
interrupt void c_int11()
{
short sample_data;
// Traitement sur les deux canaux simultanément
sample_data = input_sample();
output_sample(sample_data);
return;
}
void main()
{
comm_intr();
while (1);
}
Q3-Le problème majeur de l'utilisation du mode poll est qu'il nécessite une
vérification constante de l'état des entrées/sorties. Cela peut entraîner une
utilisation intensive du processeur et une inefficacité énergétique, car le
processeur est constamment sollicité même lorsqu'il n'y a pas de changements
significatifs dans les données d'entrée. De plus, cela limite la capacité du
processeur à effectuer d'autres tâches pendant l'attente des données d'entrée.
• Troisième Partie : LookUpTable
- 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 :
#include "DSK6713_AIC23.h"
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource=DSK6713_AIC23_INPUT_LINE;
#define LOOPLENGTH 8
short loopindex = 0; //table index
short gain = 10; //gain
short sine_table[LOOPLENGTH]= {0,707,1000,707,0,-707,-1000,-707};
interrupt void c_int11()
{
output_left_sample(sine_table[loopindex++]*gain);
if (loopindex >= LOOPLENGTH) loopindex = 0;
return;
}
void main()
{
comm_intr();
while(1);
}
3-1- Objectifs du TP
Les effets sonores sont les premières applications du DSP dans le monde du
son, ils exploitent le traitement en temps réel et quelques propriétés naturelles
de l’acoustique telle que le retard, l’écho ou le fading. L’objectif de ce TP est de
comprendre comment utiliser les options de débogage disponibles dans
l’environnement de développement CCS (Code Composer Studio), et d’exploiter
le DSP pour réaliser des traitements sur des signaux audio.
3-2- Interfaces CCS :
Pour manipuler cette interface on va commencer par le programme suivant :
#include "dsk6713_aic23.h" //codec support
Uint32 fs = DSK6713_AIC23_FREQ_8KHZ;
#define DSK6713_AIC23_INPUT_LINE 0x0011
Uint16 inputsource=DSK6713_AIC23_INPUT_LINE;
#define LOOPLENGTH 8
short loopindex = 0; //table index
short gain =10; //gain
short sine_table[LOOPLENGTH]= {0,707,1000,707,0,-707,-1000,-707}; //sine
interrupt void c_int11()
{
output_left_sample(sine_table[loopindex++]*gain);
if (loopindex >= LOOPLENGTH) loopindex = 0; //reset index
return;
}
void main()
{
comm_intr(); //init DSK,codec,McBSP
while(1);
}
FIN.