Professional Documents
Culture Documents
C6713 DSK
La carte de traitement du signal "C6713 DSK" est une carte propose par TEXAS pour lvaluation de son processeur flottant TMS320C6713. Elle contient suffisamment de mmoire pour mettre en uvre des programmes assez complexes. Elle est quipe galement du circuit dentre-sortie analogique TEXAS AIC23 16 bit dont la frquence dchantillonnage est de 48kHz. Cet ensemble permet la mise en uvre de programmes simples de traitement du signal ; notamment des filtres.
Dmarrage
Il est impratif deffectuer les oprations dans lordre o elles sont dcrites ci-aprs.
Ouverture du Projet
Dans le cadre des TP, le temps tant compt, un projet de dpart est fourni. Pour louvrir, slectionner le menu "Project" puis "Open". Puis slectionner le fichier : C:\CCStudio_v3.1\MyProjects\TP_TSN\TP_TSN.pjt Les fichiers constituant le projet apparaissent alors sous forme dune arborescence dans la fentre de gauche de "Code Composer Studio" ; comme dans lexplorateur Windows. Le projet, tel quil est, permet de programmer la carte de faon transmettre les chantillons obtenus du convertisseur analogique-numrique dentre au convertisseur numrique-analogique de sortie.
-1-
Avant dexaminer en dtail les fichiers constituant le projet et de les modifier pour mettre en uvre des traitements plus complexes, nous pouvons lutiliser tel quil est.
Produire un excutable
Pour cela, slectionner le menu "Project" puis "Build" (ou utiliser le bouton ). Une fentre apparat au bas de lcran, rendant compte des tches effectues pour construire le projet. Si tout ce passe bien, le message suivant apparat finalement : Build Complete, 0 Errors, 0 Warnings, 0 Remarks.
Tlchargement
Ltape suivante consiste tlcharger lexcutable dans la carte. Pour cela, slectionner le menu "File" puis "Load Program". Slectionner alors le fichier "TP_TSN.out" (dont le nom est bas sur celui du projet). Le tlchargement seffectue.
Dmarrage du traitement
Pour faire fonctionner le programme tlcharg, slectionner le menu "Debug" puis "Run" (ou utiliser le ). bouton Vrifier alors le bon fonctionnement du traitement en appliquant un signal lentre analogique de la carte et visualiser le signal obtenu en sortie. Le signal de sortie doit tre identique au signal dentre une phase prs. Ceci dans la mesure o il ny a pas dcrtage ([-1.3v ; +1.3v]) et que la frquence dentre est sensiblement infrieure la demi-frquence dchantillonnage. Il peut apparatre un lger cart d'amplitude car les convertisseurs d'entre et de sortie ne sont pas forcment parfaitement rciproques.
Arrt du traitement
Avant de tlcharger tout nouveau traitement, il faut stopper le traitement encours. Pour cela, slectionner le menu "Debug" puis "Halt" (ou utiliser le bouton ).
Modification du traitement
De nombreux fichiers constituent le projet. Nanmoins, ce dernier a t construit de telle faon quun seul fichier est modifier pour modifier le traitement. Il sagit du fichier qui se nomme actuellement "pass.c". Celui-ci se trouve dans larborescence du projet sous le nud "Sources". Pour lditer, double cliquer sur ce nud puis sur le fichier "pass.c". Une fentre ddition apparat. Elle prsente le contenu du fichier :
#include <log.h> extern far LOG_Obj trace; // Dfinition des variables globales (si besoin) // La fonction Init() est appele une seule fois au lancement du programe. // Elle est destine raliser les taches d'initialisation. void Init() { LOG_printf(&trace, "Init OK !"); } // La fonction Process() est appele chaque instant d'chantillonnage. // Elle est destine raliser le traitement des signaaux des 2 voies. // Elle recoit les chantillons des 2 voies d'entre dans le tableau io[]. // et place dans ce mme tableau les chantillons destins aux 2 voies de sortie. void Process(float io[2]) { }
Il s'agit d'instructions crites en langage C. Le fichier contient essentiellement deux fonctions : Init() et Process(). La fonction Init() nest appele quune seule fois au dbut de lexcution du traitement. Elle est destine effectuer les initialisations des variables globales ventuellement ncessaires au traitement comme nous le verrons par la suite. La fonction Process() est appele chaque nouvel instant d'chantillonnage. Elle reoit les chantillons des deux voies d'entre dans un tableau io[2]. En retour, elle place dans le mme tableau les valeurs des deux chantillons destines aux voies de sortie. Dans le cas du programme "pass.c", ce sont les chantillons d'entre non modifis par la fonction qui sont transmis aux sorties.
-2-
Nous allons maintenant modifier ce fichier pour mettre en uvre un premier traitement ralisant un retard d'un instant d'chantillonnage sur la premire voie :
y (n) = x(n 1)
Pour cela, de faon ne pas perdre lancien traitement, nous allons sauver le fichier "pass.c" sous un nouveau nom : "retard.c" par exemple (menu "File" puis "Save as"). Puis nous allons modifier son contenu de la faon suivante :
#include <log.h> extern far LOG_Obj trace; // Dfinition des variables globales (si besoin) float x_retard; // La fonction Init() est appele une seule fois au lancement du programe. // Elle est destine raliser les taches d'initialisation. void Init() { x_retard=0; LOG_printf(&trace, "Init OK !"); } // La fonction Process() est appele chaque instant d'chantillonnage. // Elle est destine raliser le traitement des signaaux des 2 voies. // Elle recoit les chantillons des 2 voies d'entre dans le tableau io[]. // et place dans ce mme tableau les chantillons destins aux 2 voies de sortie. void Process(float io[2]) { float tmp; tmp=io[0]; io[0]=x_retard; x_retard=tmp; }
Avant de construire le nouveau traitement, il faut encore inclure le nouveau fichier dans le projet. Pour cela, slectionner le menu "Project" puis "Add Files to Project". On peut maintenant construire le nouveau programme (menu "Project" puis "Build"). Sil y a des erreurs de syntaxe dans ce que nous avons saisi, elles sont listes par le compilateur. Il faut les corriger et lancer nouveau la construction. Ldition de liens produit une erreur en nous indiquant que les fonctions Init() et Process() sont dfinies plusieurs fois. Cest normal, car elles sont dfinies la fois dans le fichier "pass.c" et dans le nouveau fichier "retard.c". Il faut donc supprimer le fichier "pass.c" du projet. Pour cela, il suffit de slectionner le fichier "pass.c" dans larborescence du projet et de presser la touche "Suppr" du clavier (ou dutiliser le menu contextuel (bouton droit de la souris)). Le fichier est supprim de larborescence mais il nest pas effac du disque pour autant. Nous pourrons donc le rintgrer au projet si nous avons besoin de revenir lancien traitement. On peut maintenant reconstruire le projet pour obtenir lexcutable "TP_TSN.out", le tlcharger et le "lancer". 1 Le rsultat devrait tre un retard d'un instant d'chantillonnage ( Te = = 20,8s ) du signal de la voie 0. Fe Pour mettre en vidence le bon fonctionnement du traitement, on peut injecter un mme signal sur les deux voies d'entre et comparer les signaux des deux voies de sortie. Si le traitement ne fonctionne pas correctement et que lon ne dcouvre pas derreurs, on peut dboguer le programme en plaant des points darrt. Pour cela, arrter le traitement puis placer le pointeur de la souris dans la zone grise de la fentre contenant le fichier "retard.c" en regard de linstruction :
tmp=io[0];
et double cliquer. Un point rouge apparat. Cest un point darrt (pour le faire disparatre, il suffit de double cliquer nouveau dessus). Relancer le programme. Une flche jaune apparat au niveau de linstruction : le programme est arrt ce niveau :
On peut alors examiner le contenu des variables pour dceler une erreur. Slectionner par exemple la variable "x_retard" puis drouler le menu contextuel (bouton droit de la souris) puis slectionner "Add to
-3-
Watch Window". Une nouvelle fentre apparat au bas de lcran qui prsente la liste des variables visualises ainsi que leur valeur. On peut relancer le programme et tudier les valeurs successives de ces variables. Voil pour lessentiel. Procder de faon analogue pour mettre en uvre les autres traitements.
-4-
- TP DSP - Prise en main Le but de cette premire manipulation est de se familiariser avec le kit de dveloppement Texas et de mesurer la fonction de transfert de la carte en absence de traitement numrique.
Prparation
Lire attentivement et entirement le texte. Rflchir ce que signifie un traitement produisant une phase linaire. Prparer, dans la mesure du possible, les rponses aux questions auxquelles il faudra rpondre dans le compte-rendu.
Compte-rendu
Le compte rendu comprendra la prparation, les listings des diffrents programmes, et les rponses aux diffrentes questions.
Prise en main
Programmer la carte de faon transmettre sans traitement les chantillons dentre en sortie (programme pass.c). Puis appliquer un signal en entre et observer le signal produit en sortie.
P=
1 N 1 x ( n) 2 N n =0
puis imprimer la valeur de P ou la valeur efficace du signal dduite de P ou encore, la valeur crte du signal. L'affichage de la valeur de P peut tre obtenu de la manire suivante : LOG_printf(&trace, "%f",P);
-5-
L'affichage a lieu dans la fentre "Message Log" qui peut tre active dans le menu "DSP/BIOS" de Code Composeur Studio. La fonction LOG_printf() fonctionne comme la fonction printf() en C ceci prs qu'une seule valeur peut tre affiche la fois ; l'instruction suivante ne fonctionne pas : LOG_printf(&trace, "%f %f",P1,P2); Ce programme fonctionnant, comparer dans un premier temps l'estimation obtenue pour diffrentes valeurs de N . Comment faut-il choisir cette valeur pour obtenir une estimation de qualit. Aprs avoir rgl correctement cette valeur, relever et tracer le module de la rponse en frquence du filtre anti-repliement. Comparer la fonction de transfert globale. Suggestion : Vous pouvez rflchir d'autres faon de procder pour mesurer l'amplitude du signal numrique. Vos propositions seront apprcies. Est-il possible de mesurer de manire quivalente, la contribution du filtre anti-repliement la phase de la fonction de transfert globale ? Si oui, dcrire de quelle faon procder.
Fe . 2
-6-
Prparation
Lire attentivement et entirement le texte. Calculer les rponses en frquences thoriques (module et phase) des filtres devant tre mis en uvre (lorsqu'elles ne sont pas fournies). Rflchir au moyen de mettre en vidence la phase linaire des diffrents filtres (en comprenant videmment ce qu'est une phase linaire ; point dj abord lors du premier TP). Prparer les rponses aux questions auxquelles il faudra rpondre dans le compte-rendu.
Compte-rendu
Le compte-rendu comprendra la prparation, les listings des diffrents programmes, et les rponses aux diffrentes questions.
Introduction
Commencer trs simplement en implantant les rponses impulsionnelles : { 1 ; 1 } et { 1 ; -1 }. Il s'agit simplement de dlivrer en sortie la somme ou la diffrence de deux chantillons successifs d'entre. Les programmes C relatifs ces deux filtres s'appelleront rif1.c et rif2.c. Vrifier rapidement les rponses en frquence (module) de ces filtres trs simples en les comparant aux rponses thoriques (utiliser une chelle linaire). La convolution des rponses impulsionnelles prcdentes (mise en srie des filtres) donne : { 1 ; 0 ; -1 }. Implanter ce nouveau filtre via le programme rif3.c. Vrifier la justesse de sa rponse en frquence. Ce filtre est-il phase linaire ? Si oui, quelle est cette phase et quel est le retard introduit par ce filtre (thoriques et mesurs (attention au retard introduit par la carte elle-mme)) ? Pour mesurer plus justement le dphasage engendr par le traitement numrique uniquement, on pourra dlivrer sur l'une des sorties de la carte le signal filtr y(n) et sur l'autre le signal d'entre x(n) (ou encore x(n L) o L est un retard judicieusement choisi pour mettre en vidence la phase linaire du traitement).
Convolution
Ecrire un programme rif4.c destin mettre en uvre des filtres R.I.F. de faon plus systmatique, cest-dire en effectuant lopration de convolution :
N 1 i =0
y(n)=
h(i) x(ni)
Pour cela, dfinir la dimension du filtre grce un define au dbut du programme : #define N 10 Et dclarer les tableaux destins recevoir les coefficients de la rponse impulsionnelle ainsi que les chantillons du signal dentre devant tre mmoriss : float h[N], x[N]; Puis initialiser la rponse impulsionnelle : h[0]= ...; h[1]= ...; h[N-1]= ...; Remarque : on pourra galement initialiser la rponse impulsionnelle en la dclarant : float h[]={ 1 , 0, -1 }; Ces variables correctement dclares et initialises, programmer le traitement : y=0; for(i=0; i<N; ++i){ y=y+ ... } ainsi que la mise jour du tableau des chantillons dentre ncessaires au traitement. Dans un premier temps, on pourra fixer N 3 et chercher la ralisation du filtre prcdent de rponse : { 1 ; 0 ; -1 } et vrifier le bon fonctionnement du programme.
-7-
0.5
10
15
0.5
Il suffira pour cela d'adapter N la dimension du filtre et d'initialiser le tableau contenant les coefficients du filtre. Le fichier contenant le programme s'appellera rif5.c. On relvera la rponse en frquence et on la comparera celle attendue. On vrifiera galement la phase linaire du filtre en mesurant le retard introduit par le filtre (procder comme auparavant).
Filtre de Hilbert
On implantera pour finir un filtre coefficients complexes (rif7.c) obtenu avec Matlab : h = [ 0 -0.0267j 0 -0.0584j 0 -0.1049j 0 -0.1991j 0 -0.6323j 1 0.6323j 0 0.1991j 0 0.1049j 0 0.0584j 0 0.0267j 0 0 ] de la faon suivante : N=21; h=hilbert([zeros(1,(N-1)/2) 1 zeros(1,(N+1)/2)]); Les caractristiques de la partie imaginaire de ce filtre sont les suivantes :
-8-
|H(f)| 1.5 50
|H(f)| (dB)
0.5
-50
0.5 h(n)
-100
0.5 Phase ( )
1 0.5 0 -0.5 -1
10
20
30
0.5
Le programme appliquera le filtre une des voies d'entre et les parties relle et imaginaire du signal produit seront dlivres sur les deux voies de sortie. Comparer les signaux de sortie. Quelle est la particularit de ce genre de filtres ? A quoi peuvent-ils servir ? Calculer avec Matlab puis mettre en uvre un filtre plus long et donc plus efficace (N=101 par exemple). Quelle serait la rponse en frquence idale ? En dduire la rponse impulsionnelle associe.
-9-
- TP DSP -
Prparation
Lire attentivement et entirement le texte. Dterminer les coefficients des filtres devant tre calculs ainsi que les facteurs dchelle. Prparer les rponses aux questions auxquelles il faudra rpondre dans le compte-rendu.
Compte-rendu
Le compte-rendu comprendra la prparation, les listings des diffrents programmes, et les rponses aux diffrentes questions.
Introduction
Les filtres rponse impulsionnelle infinie sont plus dlicats implanter que les filtres rponse impulsionnelle finie car leur caractre rcursif (contre raction) les expose la divergence. Ceci est d'autant plus vrai que leurs ples sont proches du cercle unit. On dit alors qu'on a affaire des filtres rsonnants. De tels filtres requirent une grande prcision au niveau de leurs coefficients, des chantillons et des calculs.
H (Z ) =
1 1 + b1 Z
1
+ b2 Z 2
Calculer les coefficients du filtre pour que la rsonnance ait lieu la frquence
Fe et que son amplitude soit 4 de 10. Tracer la rponse en frquence. Quel facteur dchelle faut-il appliquer au signal pour quil ny ait pas saturation en sortie ?
Programmer ce filtre (rii1.c) et comparer la rponse en frquence obtenue sa valeur thorique. De quel type de filtres sagit-il ? A quoi peuvent-ils servir ? Comment varie leur phase ?
1 + b1 Z 1 + b2 Z 2 Conserver les coefficients du dnominateur dtermins prcdemment pour obtenir une frquence de Fe rsonnance de . Calculer les coefficients du numrateur pour obtenir des zros sur le cercle unit en 4 Fe . Evaluer la rponse en frquence grce linterprtation gomtrique. Quel facteur dchelle faut-il 4 appliquer au signal pour quil ny ait pas saturation en sortie ?
Programmer ce filtre (rii2.c) et comparer la rponse en frquence obtenue sa valeur thorique. De quel type de filtres sagit-il ? A quoi peuvent-ils servir ? Comment varie la phase ?
H (Z ) =
a 0 + a1 Z 1 + a 2 Z 2
- 10 -
[N, Wn] = ellipord(0.3, 0.7, 0.9, 26); [B,A] = ellip(N, 0.9, 26, Wn); B = 0.1744 A = 1.0000 0.2419 -0.7400 0.1744 0.3953
N = 2
Wn = 0.3
Ordre lev Il sagit dun filtre elliptique dordre 6 obtenu de la faon suivante avec Matlab : [N, Wn] = ellipord(0.4, 0.6, 0.09, 60); N = 6 Wn = 0.4 [B,A] = ellip(N,0.09,60,Wn); B = 0.0207 0.0585 0.1060 0.1255 0.1060 0.0585 0.0207 A = 1.0000 -1.9673 2.9074 -2.5353 1.5771 -0.5972 0.1163 Les caractristiques frquentielles de ce filtre sont les suivantes :
- 11 -
|H(f)| 1.5 50
|H(f)| (dB)
0.5
-50
0.5
0.5
Programmer ce filtre (rii4.c) et comparer la rponse en frquence obtenue sa valeur thorique. Que peut-on dire de sa phase ? Passe-haut Expliquer comment il faudrait modifier les coefficients du filtre passe-bas dordre 6 pour obtenir un filtre passe-haut de mme largeur de bande. Justifier votre rponse. Programmer ce filtre (rii5.c) et vrifier la justesse de la transformation. Existe-il une mthode analogue pour obtenir un filtre passe-bande ? Si oui, laquelle ? Peut-on lappliquer au filtre passe-bas dordre 6 ? Si oui, quelle est la bande passante du filtre ?
Oscillateur
Reprendre le programme rii1.c (le recopier dans un programme oscil.c) et modifier les coefficients Fe b1 et b2 pour que le ple soit sur le cercle unit en et initialiser les chantillons y (1) et y (2) pour 8 que le signal de sortie y (n) produit en absence de signal d'entre ( x(n) = 0 ) soit une cosinusode d'amplitude unit. Vrifier le bon fonctionnement de l'oscillateur ainsi produit. L'amplitude drive-t-elle ? Proposer une explication. Discuter la prcision frquentielle.
- 12 -