TP DSP Kit de développement TEXAS C6713 C6713 DSK Code

Transcription

TP DSP Kit de développement TEXAS C6713 C6713 DSK Code
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.
-1-
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
échantillons d'entrée non modifiés par la fonction qui sont transmis aux sorties.
-2-
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 :
y (n) = x(n − 1)
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".
1
Le résultat devrait être un retard d'un instant d'échantillonnage ( Te =
= 20,8µs ) du signal de la voie 0.
Fe
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
-3-
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.
-4-
- 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é :
P=
1 N −1
x ( n) 2
N n =0
∑
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);
-5-
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 à
Essayer avec 3
Fe
.
2
Fe
par exemple puis avec d'autres fréquences. Expliquer le phénomène observé.
4
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 ?
-6-
- 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(n − L) où 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 :
y(n)=
N −1
∑h(i) x(n−i)
i =0
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.
-7-
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 :
|H(f)|
|H(f)| (dB)
1.5
20
0
1
-20
-40
0.5
-60
0
-80
0
0.5
1
0
h(n)
200
0.4
100
0.2
0
0
-100
0
5
1
Phase (°)
0.6
-0.2
0.5
10
15
-200
0
0.5
1
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
Fe
fréquence soit décalée de ±
. Comment faut-il modifier les coefficients de la réponse impulsionnelle.
2
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 :
-8-
|H(f)|
|H(f)| (dB)
1.5
50
1
0
0.5
-50
0
0
0.5
1
-100
0
h(n)
200
0.5
100
0
0
-0.5
-100
0
10
1
Phase (°)
1
-1
0.5
20
30
-200
0
0.5
1
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.
-9-
- 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 :
H (Z ) =
1
1 + b1 Z
−1
+ b2 Z −2
Fe
et que son amplitude soit
4
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 ?
Calculer les coefficients du filtre pour que la résonnance ait lieu à la fréquence
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 :
H (Z ) =
a 0 + a1 Z −1 + a 2 Z −2
1 + b1 Z −1 + b2 Z − 2
Conserver les coefficients du dénominateur déterminés précédemment pour obtenir une fréquence de
Fe
résonnance de
. 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
4
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
suivante :
- 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
N = 2
Wn = 0.3
0.1744
0.3953
Les caractéristiques fréquentielles de ce filtre sont les suivantes :
|H(f)|
|H(f)| (dB)
1
0
0.8
-20
0.6
-40
0.4
-60
0.2
0
-80
0
0.5
1
0
Groupe delay
50
2
0
1.5
-50
1
-100
0.5
-150
0
0.5
1
Phase (°)
2.5
0
0.5
1
-200
0
0.5
1
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 :
- 11 -
|H(f)|
|H(f)| (dB)
1.5
50
1
0
0.5
-50
0
-100
0
0.5
1
0
Groupe delay
200
15
100
10
0
5
-100
0
0.5
1
Phase (°)
20
0
0.5
1
-200
0
0.5
1
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
Fe
b1 et b2 pour que le pôle 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'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.
- 12 -

Documents pareils