• Aucun résultat trouvé

TP DSP

N/A
N/A
Protected

Academic year: 2022

Partager "TP DSP"

Copied!
12
0
0

Texte intégral

(1)

TP DSP

Kit de développement TEXAS C6713

Le kit de développement est constitué d’une carte TEXAS "C6713 DSK" intégrant le processeur de traitement de signal (DSP) TEXAS TMS320C6713 ; reliée à un PC via une liaison USB et du logiciel de développement TEXAS "Code Composer Studio".

C6713 DSK

La carte de traitement du signal "C6713 DSK" est une carte proposée par TEXAS pour l’évaluation de son processeur flottant TMS320C6713.

Elle contient suffisamment de mémoire pour mettre en œuvre des programmes assez complexes. Elle est équipée également du circuit d’entrée-sortie analogique TEXAS AIC23 16 bit dont la fréquence

d’échantillonnage est de 48kHz. Cet ensemble permet la mise en œuvre de programmes simples de traitement du signal ; notamment des filtres.

Code Composer Studio

"Code Composer Studio" est un environnement de développement logiciel qui intègre l’ensemble des éléments nécessaires à l’élaboration et à la mise au point des programmes :

• Editeur de texte multi-fenêtres

• Paramétrage du projet

• Assembleur, Compilateur C et C++, Editeur de liens

• Téléchargement dans la carte

• Exécution et débogage

• Aide

Démarrage

Il est impératif d’effectuer les opérations dans l’ordre où elles sont décrites ci-après.

Mise sous tension de la carte

Vérifier que la carte est bien connectée au PC grâce au câble USB.

Mettre sous tension la carte en connectant le jack d’alimentation. Si elle était déjà sous tension, débrancher puis rebrancher le jack d’alimentation. Vérifier que la carte s’initialise correctement : l’ordinateur doit signaler la connexion USB et les 4 diodes groupées présentes sur la carte doivent clignoter après une quinzaine de secondes.

Démarrage de "Code Composer Studio"

La carte étant sous tension et réagissant correctement, on peut démarrer le logiciel de développement

"Code Composer Studio". Double cliquer pour cela sur l’icône intitulée "6713 DSK CCStudio v3.1" . Patienter le temps que la fenêtre de "Code Composer Studio" apparaisse. Si un message d’erreur "Error initializing emulator" apparaît : choisir "Abandonner", vérifier les connexions de la carte puis relancer "Code Composer Studio".

Lorsque "Code Composer Studio" est correctement démarrer, il faut lui demander de se connecter à la carte DSP : Selectionner le menu "Debug" puis "Connect". Une indication doit apparaître dans le coin inférieur gauche de la fenêtre de "Code Composer Studio" indiquant "The target is now connected".

L’étape suivante est la création d’un projet ou l’ouverture d’un projet existant.

Ouverture du Projet

Dans le cadre des TP, le temps étant compté, un projet de départ est fourni. Pour l’ouvrir, sélectionner le menu "Project" puis "Open". Puis sélectionner le fichier :

C:\CCStudio_v3.1\MyProjects\TP_TSN\TP_TSN.pjt

Les fichiers constituant le projet apparaissent alors sous forme d’une arborescence dans la fenêtre de gauche de "Code Composer Studio" ; comme dans l’explorateur Windows.

Le projet, tel qu’il est, permet de programmer la carte de façon à transmettre les échantillons obtenus du convertisseur analogique-numérique d’entrée au convertisseur numérique-analogique de sortie.

(2)

Avant d’examiner en détail les fichiers constituant le projet et de les modifier pour mettre en œuvre des traitements plus complexes, nous pouvons l’utiliser tel qu’il est.

Produire un exécutable

Pour cela, sélectionner le menu "Project" puis "Build" (ou utiliser le bouton ). Une fenêtre apparaît au bas de l’écran, rendant compte des tâches effectuées pour construire le projet. Si tout ce passe bien, le

message suivant apparaît finalement : Build Complete,

0 Errors, 0 Warnings, 0 Remarks.

Téléchargement

L’étape suivante consiste à télécharger l’exécutable dans la carte. Pour cela, sélectionner le menu "File"

puis "Load Program…". Sélectionner alors le fichier "TP_TSN.out" (dont le nom est basé sur celui du projet).

Le téléchargement s’effectue.

Démarrage du traitement

Pour faire fonctionner le programme téléchargé, sélectionner le menu "Debug" puis "Run" (ou utiliser le bouton ).

Vérifier alors le bon fonctionnement du traitement en appliquant un signal à l’entrée analogique de la carte et visualiser le signal obtenu en sortie. Le signal de sortie doit être identique au signal d’entrée à une phase près. Ceci dans la mesure où il n’y a pas d’écrêtage ([-1.3v ; +1.3v]) et que la fréquence d’entrée est sensiblement inférieure à la demi-fréquence d’échantillonnage. Il peut apparaître un léger écart d'amplitude car les convertisseurs d'entrée et de sortie ne sont pas forcément parfaitement réciproques.

Arrêt du traitement

Avant de télécharger tout nouveau traitement, il faut stopper le traitement encours. Pour cela, sélectionner le menu "Debug" puis "Halt" (ou utiliser le bouton ).

Modification du traitement

De nombreux fichiers constituent le projet. Néanmoins, ce dernier a été construit de telle façon qu’un seul fichier est à modifier pour modifier le traitement. Il s’agit du fichier qui se nomme actuellement "pass.c".

Celui-ci se trouve dans l’arborescence du projet sous le nœud "Sources". Pour l’éditer, double cliquer sur ce nœud puis sur le fichier "pass.c". Une fenêtre d’édition apparaît. Elle présente le contenu du fichier :

#include <log.h>

extern far LOG_Obj trace;

// Définition des variables globales (si besoin)

// La fonction Init() est appelée une seule fois au lancement du programe.

// Elle est destinée à réaliser les taches d'initialisation.

void Init() {

LOG_printf(&trace, "Init OK !");

}

// La fonction Process() est appelée à chaque instant d'échantillonnage.

// Elle est destinée à réaliser le traitement des signaaux des 2 voies.

// Elle recoit les échantillons des 2 voies d'entrée dans le tableau io[].

// et place dans ce même tableau les échantillons destinés 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() n’est appelée qu’une seule fois au début de l’exécution du traitement. Elle est destinée à effectuer les initialisations des variables globales éventuellement nécessaires au traitement comme nous le verrons par la suite.

La fonction Process() est appelée à chaque nouvel instant d'échantillonnage. Elle reçoit les échantillons des deux voies d'entrée dans un tableau io[2]. En retour, elle place dans le même tableau les valeurs des deux échantillons destinées aux voies de sortie. Dans le cas du programme "pass.c", ce sont les

(3)

Nous allons maintenant modifier ce fichier pour mettre en œuvre un premier traitement réalisant un retard d'un instant d'échantillonnage sur la première voie :

) 1 ( )

( n = x ny

Pour cela, de façon à ne pas perdre l’ancien 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 façon suivante :

#include <log.h>

extern far LOG_Obj trace;

// Définition des variables globales (si besoin) float x_retard;

// La fonction Init() est appelée une seule fois au lancement du programe.

// Elle est destinée à réaliser les taches d'initialisation.

void Init() { x_retard=0;

LOG_printf(&trace, "Init OK !");

}

// La fonction Process() est appelée à chaque instant d'échantillonnage.

// Elle est destinée à réaliser le traitement des signaaux des 2 voies.

// Elle recoit les échantillons des 2 voies d'entrée dans le tableau io[].

// et place dans ce même tableau les échantillons destinés 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, sélectionner le menu "Project" puis "Add Files to Project…".

On peut maintenant construire le nouveau programme (menu "Project" puis "Build"). S’il y a des erreurs de syntaxe dans ce que nous avons saisi, elles sont listées par le compilateur. Il faut les corriger et lancer à nouveau la construction.

L’édition de liens produit une erreur en nous indiquant que les fonctions Init() et Process() sont définies plusieurs fois. C’est normal, car elles sont définies à 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 sélectionner le fichier "pass.c" dans l’arborescence du projet et de presser la touche "Suppr" du clavier (ou d’utiliser le menu contextuel (bouton droit de la souris)). Le fichier est supprimé de l’arborescence mais il n’est pas effacé du disque pour autant.

Nous pourrons donc le réintégrer au projet si nous avons besoin de revenir à l’ancien traitement.

On peut maintenant reconstruire le projet pour obtenir l’exécutable "TP_TSN.out", le télécharger et le

"lancer".

Le résultat devrait être un retard d'un instant d'échantillonnage ( s

Te= Fe1 =20,8µ ) du signal de la voie 0.

Pour mettre en évidence le bon fonctionnement du traitement, on peut injecter un même signal sur les deux voies d'entrée et comparer les signaux des deux voies de sortie.

Si le traitement ne fonctionne pas correctement et que l’on ne découvre pas d’erreurs, on peut déboguer le programme en plaçant des points d’arrêt. Pour cela, arrêter le traitement puis placer le pointeur de la souris dans la zone grise de la fenêtre contenant le fichier "retard.c" en regard de l’instruction :

tmp=io[0];

et double cliquer. Un point rouge apparaît. C’est un point d’arrêt (pour le faire disparaître, il suffit de double cliquer à nouveau dessus).

Relancer le programme. Une flèche jaune apparaît au niveau de l’instruction : le programme est arrêté à ce niveau :

On peut alors examiner le contenu des variables pour déceler une erreur. Sélectionner par exemple la variable "x_retard" puis dérouler le menu contextuel (bouton droit de la souris) puis sélectionner "Add to

(4)

Watch Window". Une nouvelle fenêtre apparaît au bas de l’écran qui présente la liste des variables visualisées ainsi que leur valeur.

On peut relancer le programme et étudier les valeurs successives de ces variables.

Voilà pour l’essentiel. Procéder de façon analogue pour mettre en œuvre les autres traitements.

(5)

- TP DSP - - Prise en main -

Le but de cette première manipulation est de se familiariser avec le kit de développement Texas et de mesurer la fonction de transfert de la carte en absence de traitement numérique.

Préparation

Lire attentivement et entièrement le texte. Réfléchir à ce que signifie un traitement produisant une phase linéaire. Préparer, dans la mesure du possible, les réponses aux questions auxquelles il faudra répondre dans le compte-rendu.

Compte-rendu

Le compte rendu comprendra la préparation, les listings des différents programmes, et les réponses aux différentes questions.

Prise en main

Programmer la carte de façon à transmettre sans traitement les échantillons d’entrée en sortie (programme pass.c). Puis appliquer un signal en entrée et observer le signal produit en sortie.

Fonction de transfert globale

Il s'agit de déterminer la réponse en fréquence globale de la carte. Pour cela, appliquer un signal sinusoïdal en entrée de la carte et observer le signal en sortie. Mesurer le gain (ou l'affaiblissement) produit par la carte (module de la réponse en fréquence) ainsi que le déphasage (argument de la réponse en fréquence).

Mesurer ces grandeurs pour toutes les fréquences intéressantes de façon à pouvoir tracer la réponse en fréquence (module et phase) avec suffisamment de précision.

Module de la réponse en fréquence

Déterminer les fréquences de coupure basse et haute ainsi que les ondulations en bande passante. Tracer le module de la réponse en fréquence en utilisant une échelle linéaire.

Phase de la réponse en fréquence

Tracer la réponse en phase de la carte. Commenter la courbe obtenue (ruptures). S'agit-il d'un système à phase linéaire. Si oui, que peut-on en déduire ?

Proposer une méthode temporelle directe pour mesurer le retard introduit par la carte. Effectuer la mesure.

La valeur obtenue est-elle cohérente avec la fonction de transfert précédemment mesurée ?

Fonction de transfert d'entrée

Le but est de mesurer la contribution à la fonction de transfert du filtre anti-repliement situé en entrée avant le convertisseur analogique-numérique. Pour cela, il faut comparer le signal analogique présent en entrée au signal numérique obtenu à l'intérieur du processeur. Nous nous intéresserons essentiellement au module de la réponse en fréquence pour déterminer si l'allure du module de la fonction de transfert globale provient principalement du filtre anti-repliement ou pas. Mesurer l'amplitude du signal analogique en entrée ne pose pas de problème. Par contre, la mesure de l'amplitude du signal discret à l'intérieur du processeur n'est pas immédiate. Pour cela, il faut mettre au point un petit traitement à l'intérieur du processeur pour mesurer l'amplitude du signal et l'imprimer à l'écran. Pour obtenir une mesure fiable, nous pouvons estimer la puissance du signal discret en calculant la quantité :

1 2

0

1 ( )

N n

P x n

N

=

=

puis imprimer la valeur de P ou la valeur efficace du signal déduite de P ou encore, la valeur crête du signal. L'affichage de la valeur de P peut être obtenu de la manière suivante :

LOG_printf(&trace, "%f",P);

(6)

L'affichage a lieu dans la fenêtre "Message Log" qui peut être activée dans le menu "DSP/BIOS" de Code Composeur Studio.

La fonction LOG_printf() fonctionne comme la fonction printf() en C à ceci près qu'une seule valeur peut être affichée à 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 différentes valeurs de N. Comment faut-il choisir cette valeur pour obtenir une estimation de qualité.

Après avoir réglé correctement cette valeur, relever et tracer le module de la réponse en fréquence du filtre anti-repliement. Comparer à la fonction de transfert globale.

Suggestion : Vous pouvez réfléchir à d'autres façon de procéder pour mesurer l'amplitude du signal numérique. Vos propositions seront appréciées.

Est-il possible de mesurer de manière équivalente, la contribution du filtre anti-repliement à la phase de la fonction de transfert globale ? Si oui, décrire de quelle façon procéder.

Fonction de transfert de sortie

Il s'agit de mesurer la réponse en fréquence du filtre de reconstruction présent en sortie de la carte. Nous ne nous intéresserons encore une fois, qu'au module de la réponse en fréquence. Pour mesurer cette

grandeur, il faut maintenant générer un signal sinusoïdal d'amplitude déterminée à l'intérieur du processeur et relever l'amplitude du signal obtenu en sortie de la carte. On pourra pour cela utiliser l'instruction suivante:

io[0]=A*sin(2*pi*f*(n++)*Te);

Cependant, cette instruction peut poser problème du fait que la variable n grandit continuellement et peut arriver à saturation. Proposer un algorithme pour résoudre ce problème.

Le programme fonctionnant correctement, relever et tracer le module de la réponse en fréquence du filtre de reconstruction. Comparer à la fonction de transfert globale. Les fonctions de transfert d'entrée et de sortie confirment-elles la fonction de transfert globale ?

Que se passe-t-il si le signal sinusoïdal généré par le processeur est à une fréquence supérieure à 2 Fe.

Essayer avec 3 4

Fe par exemple puis avec d'autres fréquences. Expliquer le phénomène observé.

Rapport Signal à Bruit

Le but est d'évaluer la dégradation du rapport signal à bruit entre l'entrée et la sortie. Pour cela, injecter un signal sinusoïdal en entrée de la carte puis utiliser le module fft de l'oscilloscope pour caractériser le bruit introduit par la carte. Quelle est la nature de ce bruit (blanc, harmonique, etc …). Evaluer le rapport signal à bruit en sortie. Le comparer au rapport signal à bruit d'entré. En déduire la dégradation introduite par la carte. La puissance et la nature du bruit observé en sortie sont-elles normales ?

(7)

- TP DSP -

- Filtrage à Réponse Impulsionnelle Finie -

Préparation

Lire attentivement et entièrement le texte. Calculer les réponses en fréquences théoriques (module et phase) des filtres devant être mis en œuvre (lorsqu'elles ne sont pas fournies). Réfléchir au moyen de mettre en évidence la phase linéaire des différents filtres (en comprenant évidemment ce qu'est une phase linéaire ; point déjà abordé lors du premier TP). Préparer les réponses aux questions auxquelles il faudra répondre dans le compte-rendu.

Compte-rendu

Le compte-rendu comprendra la préparation, les listings des différents programmes, et les réponses aux différentes questions.

Introduction

Commencer très simplement en implantant les réponses impulsionnelles : { 1 ; 1 } et { 1 ; -1 }. Il s'agit simplement de délivrer en sortie la somme ou la différence de deux échantillons successifs d'entrée. Les programmes C relatifs à ces deux filtres s'appelleront rif1.c et rif2.c. Vérifier rapidement les réponses en fréquence (module) de ces filtres très simples en les comparant aux réponses théoriques (utiliser une échelle linéaire).

La convolution des réponses impulsionnelles précédentes (mise en série des filtres) donne : { 1 ; 0 ; -1 }.

Implanter ce nouveau filtre via le programme rif3.c. Vérifier la justesse de sa réponse en fréquence.

Ce filtre est-il à phase linéaire ? Si oui, quelle est cette phase et quel est le retard introduit par ce filtre (théoriques et mesurés (attention au retard introduit par la carte elle-même)) ? Pour mesurer plus justement le déphasage engendré par le traitement numérique uniquement, on pourra délivrer sur l'une des sorties de la carte le signal filtréy(n) et sur l'autre le signal d'entrée x(n) (ou encore x(nL)L est un retard judicieusement choisi pour mettre en évidence la phase linéaire du traitement).

Convolution

Ecrire un programme rif4.c destiné à mettre en œuvre des filtres R.I.F. de façon plus systématique, c’est- à-dire en effectuant l’opération de convolution :

=

= 1

0

) ( ) ( ) (

N

i

i n x i h n y

Pour cela, définir la dimension du filtre grâce à un define au début du programme :

#define N 10

Et déclarer les tableaux destinés à recevoir les coefficients de la réponse impulsionnelle ainsi que les échantillons du signal d’entrée devant être mémorisés :

float h[N], x[N];

Puis initialiser la réponse impulsionnelle : h[0]= ...;

h[1]= ...;

h[N-1]= ...;

Remarque : on pourra également initialiser la réponse impulsionnelle en la déclarant : float h[]={ 1 , 0, -1 };

Ces variables correctement déclarées et initialisées, programmer le traitement : y=0;

for(i=0; i<N; ++i){

y=y+ ...

}

ainsi que la mise à jour du tableau des échantillons d’entrée nécessaires au traitement.

Dans un premier temps, on pourra fixer N à 3 et chercher la réalisation du filtre précédent de réponse : { 1 ; 0 ; -1 } et vérifier le bon fonctionnement du programme.

(8)

Filtre passe bas

Le programme générique fonctionnant correctement, on pourra implanter facilement un filtre passe bas obtenu avec Matlab :

h=[ 0.0537 0 -0.0916 0 0.3131 0.5 0.3131 0 -0.0916 0 0.0537 ] de la façon suivante :

N = 11;

F = [ 0 2*0.2 2*0.3 2*0.5 ];

M = [ 1 1 0 0 ];

h=remez(N-1,F,M);

Les caractéristiques de ce filtre sont les suivantes :

0 0.5 1

0 0.5 1 1.5

|H(f)|

0 0.5 1

-80 -60 -40 -20 0 20

|H(f)| (dB)

0 5 10 15

-0.2 0 0.2 0.4 0.6

h(n)

0 0.5 1

-200 -100 0 100 200

Phase (°)

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 relèvera la réponse en fréquence et on la comparera à celle attendue. On vérifiera également la phase linéaire du filtre en mesurant le retard introduit par le filtre (procéder comme auparavant).

Filtre passe haut

Transformer le filtre passe bas précédent en filtre passe haut en faisant en sorte que la réponse en fréquence soit décalée de

2

±Fe. Comment faut-il modifier les coefficients de la réponse impulsionnelle.

Mettre en œuvre le filtre (programme rif6.c)et vérifier la nouvelle réponse en fréquence. Peut-on

appliquer une méthode analogue pour passer d'un filtre passe bas à un filtre passe bande ? Si oui, expliquer comment.

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 façon suivante :

N=21; h=hilbert([zeros(1,(N-1)/2) 1 zeros(1,(N+1)/2)]);

Les caractéristiques de la partie imaginaire de ce filtre sont les suivantes :

(9)

0 0.5 1 0

0.5 1 1.5

|H(f)|

0 0.5 1

-100 -50 0 50

|H(f)| (dB)

0 10 20 30

-1 -0.5 0 0.5 1

h(n)

0 0.5 1

-200 -100 0 100 200

Phase (°)

Le programme appliquera le filtre à une des voies d'entrée et les parties réelle et imaginaire du signal produit seront délivrées 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 réponse en fréquence idéale ? En déduire la réponse impulsionnelle associée.

(10)

- TP DSP -

- Filtrage à Réponse Impulsionnelle Infinie -

Préparation

Lire attentivement et entièrement le texte. Déterminer les coefficients des filtres devant être calculés ainsi que les facteurs d’échelle. Préparer les réponses aux questions auxquelles il faudra répondre dans le compte-rendu.

Compte-rendu

Le compte-rendu comprendra la préparation, les listings des différents programmes, et les réponses aux différentes questions.

Introduction

Les filtres à réponse impulsionnelle infinie sont plus délicats à implanter que les filtres à réponse

impulsionnelle finie car leur caractère récursif (contre réaction) les expose à la divergence. Ceci est d'autant plus vrai que leurs pôles sont proches du cercle unité. On dit alors qu'on a affaire à des filtres résonnants.

De tels filtres requièrent une grande précision au niveau de leurs coefficients, des échantillons et des calculs.

Cellule du second ordre purement récursive

Soit la fonction de transfert est la suivante :

2 2 1

1 1

) 1

(

+

= +

Z b Z b Z H

Calculer les coefficients du filtre pour que la résonnance ait lieu à la fréquence 4

Fe et que son amplitude soit de 10. Tracer la réponse en fréquence. Quel facteur d’échelle faut-il appliquer au signal pour qu’il n’y ait pas saturation en sortie ?

Programmer ce filtre (rii1.c) et comparer la réponse en fréquence obtenue à sa valeur théorique.

De quel type de filtres s’agit-il ? A quoi peuvent-ils servir ? Comment varie leur phase ?

Cellule du second ordre générale

Soit la fonction de transfert est la suivante :

2 2 1 1

2 2 1 1 0

1 )

(

+ +

+

= +

Z b Z b

Z a Z a Z a

H

Conserver les coefficients du dénominateur déterminés précédemment pour obtenir une fréquence de résonnance de

4

Fe. Calculer les coefficients du numérateur pour obtenir des zéros sur le cercle unité en

4

Fe. Evaluer la réponse en fréquence grâce à l’interprétation géométrique. Quel facteur d’échelle faut-il appliquer au signal pour qu’il n’y ait pas saturation en sortie ?

Programmer ce filtre (rii2.c) et comparer la réponse en fréquence obtenue à sa valeur théorique.

De quel type de filtres s’agit-il ? A quoi peuvent-ils servir ? Comment varie la phase ?

Filtre elliptique passe-bas

Ordre 2

Il s’agit pour commencer d’un filtre d'ordre 2 obtenu avec la méthode elliptique sous Matlab de la façon

(11)

[N, Wn] = ellipord(0.3, 0.7, 0.9, 26); N = 2 Wn = 0.3 [B,A] = ellip(N, 0.9, 26, Wn);

B = 0.1744 0.2419 0.1744 A = 1.0000 -0.7400 0.3953

Les caractéristiques fréquentielles de ce filtre sont les suivantes :

0 0.5 1

0 0.2 0.4 0.6 0.8 1

|H(f)|

0 0.5 1

-80 -60 -40 -20 0

|H(f)| (dB)

0 0.5 1

0 0.5 1 1.5 2 2.5

Groupe delay

0 0.5 1

-200 -150 -100 -50 0 50

Phase (°)

Programmer ce filtre (rii3.c) et comparer la réponse en fréquence obtenue à sa valeur théorique.

Ordre élevé

Il s’agit d’un filtre elliptique d’ordre 6 obtenu de la façon 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 caractéristiques fréquentielles de ce filtre sont les suivantes :

(12)

0 0.5 1 0

0.5 1 1.5

|H(f)|

0 0.5 1

-100 -50 0 50

|H(f)| (dB)

0 0.5 1

0 5 10 15 20

Groupe delay

0 0.5 1

-200 -100 0 100 200

Phase (°)

Programmer ce filtre (rii4.c) et comparer la réponse en fréquence obtenue à sa valeur théorique. Que peut-on dire de sa phase ?

Passe-haut

Expliquer comment il faudrait modifier les coefficients du filtre passe-bas d’ordre 6 pour obtenir un filtre passe-haut de même largeur de bande. Justifier votre réponse.

Programmer ce filtre (rii5.c) et vérifier la justesse de la transformation.

Existe-il une méthode analogue pour obtenir un filtre passe-bande ? Si oui, laquelle ? Peut-on l’appliquer au filtre passe-bas d’ordre 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 b1 et b2 pour que le pôle soit sur le cercle unité en

8

Fe et initialiser les échantillons y(−1) et y(−2) pour que le signal de sortie y(n) produit en absence de signal d'entrée (x(n)=0) soit une cosinusoïde d'amplitude unité. Vérifier le bon fonctionnement de l'oscillateur ainsi produit.

L'amplitude dérive-t-elle ? Proposer une explication.

Discuter la précision fréquentielle.

Références

Documents relatifs

b- Etape 2 : Testez votre module à l’aide d’un programme qui fera appel à ces fonctions à plusieurs reprises, avec des arguments variés pour dessiner une série de carrés et

Ensuite le Seigneur leur a dit : “L’homme est maintenant devenu comme l’un de nous, pour la connaissance du bien et du mal, il ne faut pas lui permettre de tendre la main pour

Vmoyen11-13-15-17 en fonction du niveau réglé pour éclairage Par quelle méthode est réglée l'éclairage. Etude de l'alimentation des

1) Lancer l’éditeur MU. 2) Reprendre les scripts suivants.. 3) En déduire le rôle de la structure for.

Nous avons vu précédemment que du fait de l’ellipticité de la trajectoire de la terre et de l’inclinaison de son axe de rotation par rapport au plan de l’écliptique, deux

Toutefois, son traitement (salaire) est assuré par la structure d’accueil. De même, le fonctionnaire détaché est soumis à l'ensemble des règles régissant la fonction qu'il

Ce support sera utilisé pour réaliser une présentation orale de votre travail, de 5 à 10 minutes, et en supposant que votre public ignore tout de votre système.. Chaque membre du

Un générateur de tension est un dipôle actif capable de maintenir une tension quasi constante à ses bornes pour toutes valeurs de R c pour lesquelles il est