Vous êtes sur la page 1sur 15

HEIG-Vd

Exercices DSP

Haute Ecole dIngnieurs et de Gestion du


canton de Vaud (HEIG-Vd)
Dpartement dlectricit et
dinformatique
Filire Informatique technique (IT)

Processeurs de Signaux (DSPs)


Exercices

in s t i t u t d '
Automatisation
in d u s t r i e l l e

Prof.Michel ETIQUE, mai 2005,


Yverdon-les-Bains

version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Table des matires


1 Programmation en C dun filtre numrique de type
1.1 Synthse et simulation du filtre . . . . . . . . . . . .
1.2 Programmation du filtre en C . . . . . . . . . . . . .
1.2.1 Ralisation du filtre numrique . . . . . . . .
1.2.2 Canevas du fichier regul.c . . . . . . . . . . . .
1.3 Test du filtre . . . . . . . . . . . . . . . . . . . . . .

IIR
. . .
. . .
. . .
. . .
. . .

.
.
.
.
.

2 Addition multiprcision 32 bits, entres/sorties, dcalages,


chements, directives assembleur
2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

3
3
4
4
7
8

bran.
.
.
.
.
.

9
9
9
9
10
10
10

3 Programmation dun filtre numrique de type FIR


3.1 Synthse du filtre laide de MATLAB . . . . . . . . . . . . . . .
3.2 Algorithme du filtre et adaptation larithmtique en virgule fixe
3.3 Assemblage et cration du code excutable . . . . . . . . . . . . .

11
11
11
12

4 Programmation dun rgulateur numrique de type PID


4.1 Algorithme du rgulateur numrique . . . . . . . . . . . . . . . .
4.2 Adaptation de lalgorithme du rgulateur larithmtique en virgule fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Implantation du code du rgulateur en assembleur, assemblage et
cration dun code excutable . . . . . . . . . . . . . . . . . . . .
4.4 Test du fonctionnement du rgulateur . . . . . . . . . . . . . . . .
4.5 Accs aux convertisseurs A/D et D/A . . . . . . . . . . . . . . . .
4.6 Application : rgulation de la "balle dans un tube" . . . . . . . .

13
13

version 1.8

.
.
.
.
.
.

.
.
.
.
.
.

13
13
14
14
14

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Programmation en C dun filtre numrique de


type IIR

Le but de cet exercice est de programmer en langage C un filtre IIR (i.e. un


filtre rponse impulsionnelle infinie). Le travail est divis en 9 tapes :
1. Synthse et simulation du filtre sous MATLAB et Simulink
2. Codage en C du filtre
3. Test du filtre sous Windows 2000 en temps rel avec le driver MapMemPlus
4. Test du filtre sur processeur de signal SHARC
5. Obtention du filtre sous forme dtat et test du filtre sous MATLAB et Simulink
6. Codage en C du modle dtat du filtre, compilation avec le compilateur
C/C++ WATCOM et test sous Simulink
7. Test du modle dtat du filtre sous Windows 2000
8. Test du modle dtat du filtre sur processeur de signal SHARC
9. Programmation en assembleur et test du modle dtat du filtre sur processeur de signal TMS320LF2407

1.1

Synthse et simulation du filtre

A laide de MATLAB , faire la synthse dun filtre numrique passe-bas de


Butterworth dordre n = 8. La frquence de fc de coupure devrait tre de 30 [Hz].
La priode dchantillonnage sera h = 2 [ms]. Vrifier son fonctionnement et
crer un schma de simulation Simulink pour ajuster interactivement le type et
la frquence du signal dexcitation.
Fonctions MATLAB utiles (tapez help nom_de_commande pour en savoir plus)
butter
dbode
dstep
pzmap
dlsim
tf2ss
Un fichier canevas est disponible par http
http ://iai.eivd.ch/users/mee/cours/cours_dsp/exercices/matlab/ex_dsp_04.txt
ou par http http ://iai.eivd.ch/users/mee/, en suivant le lien cours DSP. Le fichier
ex_dsp_04.txt est sauver dans d:\users avec lextension .m.
version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

1.2

Exercices DSP

Programmation du filtre en C

La programmation du filtre peut seffectuer en implantant son quation aux


diffrences
y(k) + a1 y(k 1) + ... + an1 y(kn + 1) + an y(kn)
= b0 u(kd) + b1 u(kd 1) + ... + bm1 u(kn + 1) + bm u(kn)
laquelle est la repsentation du systme discret (le filtre numrique) ayant pour
fonction de transfert
G(z) =

Y (z) d b0 + b1 z 1 + ... + bm1 z 1m + bm z m


=z
U (z)
1 + a1 z 1 + ... + an1 z 1n + an z n

En effet, la transforme en z des 2 membres de lquation aux diffrences donne :



1 + a1 z 1 + ... + an1 z 1n + an z n Y (z)

= z d b0 + b1 z 1 + ... + bm1 z 1m + bm z m U (z)

do :
G(z) =

Y (z) d b0 + b1 z 1 + ... + bm1 z 1m + bm z m


=z
U (z)
1 + a1 z 1 + ... + an1 z 1n + an z n

La multiplication des numrateur et dnominateur par z n permet de mettre cette


expression sous forme de puissances de z positives :
b0 z m + b1 z m1 + ... + bm1 z + bm
Y (z)
G(z) =
=
U (z)
z n + a1 z n1 + ... + an1 z + an
1.2.1

Ralisation du filtre numrique

La fonction filtre () programme sera code dans le fichier regul.c dont le


canevas est disposition (fichier regul.txt, voir 1.2.2 page 7). Il sagit du seul
fichier diter !
Lappel de la fonction filtre () chaque instant dchantillonnage est automatique et vous navez pas vous en proccuper.
Environnements matriel et logiciel disposition Il faut commencer par
charger le fichier
http ://iai.eivd.ch/users/mee/Cours/cours_dsp/Exercices/Filtre_num/filtre_num.zip
dans votre propre rpertoire (qui pourrait tre d:\users). On peut aussi accder
ce fichier au niveau http ://iai.eivd.ch/users/mee/, lien Processeurs de signaux.
version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Edition du fichier regul.c, programmation du rgulateur La seule unique


fonction que lon vous demande de programmer devra se trouver dans le fichier
regul.c.
Pour diter le code, lditeur " PFE " est install et son utilisation est recommande. On peut lappeler par son icne partir du bureau.
Le canevas de ce fichier vous est fourni ( 1.2.2 page 7). Il montre que le signal
provenant de la carte dacquisition est disponible dans la variable globale in0,
alors que le signal de sortie peut tre modifi en affectant la variable out0.
/
V a r i a b l e s , c o n s t a n t e s e t f o n c t i o n s r e l a t i v e s au f i l t r a g e
/
float u, y ;
/ s i g n a u x d e n t r e e e t de s o r t i e du f i l t r e /
f l o a t out0 , out1 ;
/ s o r t i e s a n a l o g i q u e s /
f l o a t in0 ;
/ e n t r e e s a n a l o g i q u e s /
f l o a t Te = 0 . 0 1 ;
/ p e r i o d e d e c h a n t i l l l o n n a g e ( ne peut e t r e m o d i f i e e en l i g n e )/
f l o a t umax ;
/ l i m i t e de l a s o r t i e du f i l t r e /

Les paramtres du filtre peuvent quant eux tre dclars comme variables globales ou locales la fonction filtre (), par exemple comme suit :
/ Parametres du f i l t r e /
float b [ 9 ] ;
float a [ 9 ] ;

De faon ce que certains paramtres et variables soient visibles et modifiables


en ligne partir de RTPWatch, il faut les enregistrer dans le tableau var comme
suit :
/
D e c l a r a t i o n des v a r i a b l e s a c c e s s i b l e s d e p u i s l e PC v i a RTPWatch
/
t_var var [ ] = {
var_float ( u ),
var_float ( y ),
v a r _ f l o a t ( Te ) ,
var_int (T_u) ,
v a r _ f l o a t (A_u) ,
end_var_list
};

Si vous lestimez ncessaire, vous pouvez bien sr crer dautres fonctions prives
de regul.c, comme par exemple une fonction de limitation de la sortie du filtre.

version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Notez que les valeurs numriques initiales, "par dfaut" des paramtres peuvent
tre spcifies dans regul.c : la fonction regulation_init est appele au dmarrage et vous pouvez donc y placer vos initialisations :
/
I n i t i a l i s a t i o n du f i l t r e
/
void r e g u l a t i o n _ i n i t ( void )
{
/ D e f i n i t i o n de l a f o n c t i o n e f f e c t u a n t l e f i l t r a g e /
regulation_boucle_interne = f i l t r e ;
/ I n i t i a l i s a t i o n des parametres du f i l t r e /
umax = 1 0 . 0 ;
}

Les valeurs pourront ensuite tre modifies en ligne via linterface RTPWatch,
condition quelles soient rendues publiques, i.e. dclares dans le tableau var
comme indiqu ci-dessus.
Compilation du fichier regul.c

Vous pouvez compiler votre programme en lanant un compilateur C/C++


partir de lditeur PFE, menu Execute DOS Command and Capture Output. La
commande make ou make -B (quivalente lopration build) doit tre tape.
Si aucune erreur nest dtecte, le fichier objet (regul.obj) est gnr. Dans la
ngative, la fentre PFE ouverte indique le message derreur.

version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

1.2.2

Exercices DSP

Canevas du fichier regul.c

/
REGUL. C
/
/
Version
Date
Auteur
Motif
1
04/05/98 MEE
R e g u l a t e u r s c a l a i r e de courant
R e g u l a t e u r PID de p o s i t i o n
2
14/08/99 MEE
Mise a j o u r
3
06/09/99 MEE
Ada pta ti on pour temps r e e l NT
4
07/02/01 MEE
Labo PID numerique
5
11/03/02 MEE
Labo PID numerique avec c a r t e NI
6
11/04/02 MEE
Labo DSP f i l t r e numerique avec c a r t e NI
/
#define REGUL_C
#include " r e g u l . h" / e n t t e de l u n i t /
/
V a r i a b l e s , c o n s t a n t e s e t f o n c t i o n s r e l a t i v e s au f i l t r a g e
/
float u, y ;
/ s i g n a u x d e n t r e e e t de s o r t i e du f i l t r e /
f l o a t out0 , out1 ;
/ s o r t i e s a n a l o g i q u e s /
f l o a t in0 ;
/ e n t r e e s a n a l o g i q u e s /
f l o a t Te = 0 . 0 1 ;
/ p e r i o d e d e c h a n t i l l l o n n a g e ( ne peut e t r e m o d i f i e e en l i g n e )/
f l o a t umax ;
/ l i m i t e de l a s o r t i e du f i l t r e /
/
D e c l a r a t i o n des v a r i a b l e s a c c e s s i b l e s d e p u i s l e PC v i a RTPWatch
/
t_var var [ ] = {
var_float ( u ),
var_float ( y ),
v a r _ f l o a t ( Te ) ,
var_int (T_u) ,
v a r _ f l o a t (A_u) ,
end_var_list
};
/
F i l t r e numerique
/
void f i l t r e ( )
{
// Mesures
u = in0 ;
/ A lgo ri thme /
y = u;
// F i l t r e p a s s e t o u t
out0 = y ;
// S o r t i e du f i l t r e
}
/
I n i t i a l i s a t i o n du f i l t r e
/
void r e g u l a t i o n _ i n i t ( void )
{
/ D e f i n i t i o n de l a f o n c t i o n e f f e c t u a n t l e f i l t r a g e /
regulation_boucle_interne = f i l t r e ;
/ I n i t i a l i s a t i o n des parametres du f i l t r e /
umax = 1 0 . 0 ;
}

version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

1.3

Exercices DSP

Test du filtre

Lorsque le code temps rel a t compil sans erreur, il faut lancer RTPWatch
et utiliser loutil Enregistreur. Slectionner Autre code temps rel dans le menu et
choisir votre DLL se trouvant dans votre rpertoire de travail.

version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Addition multiprcision 32 bits, entres/sorties,


dcalages, branchements, directives assembleur
Les fichiers ncessaires se trouvent ladresse

http ://iai.eivd.ch/profs/mee/cours/cours_dsp/exercices/ex_01/tms2407/ex_01_etudiant.zip
Une liste des instructions assembleur du DSP TMS2407 utilis est disponible
ladresse :
http ://iai.eivd.ch/profs/mee/cours/cours_dsp/doc/spru160c.zip

2.1
Les variables 32 bits PHIC et PHI sont codes chacune sur 2 mots de 16 bits,
les MSWs (Most Significant Word) PHICH et PHIH et les LSWs (Least Significant
Word) PHICL et PHIL.
Ecrire le code assembleur (processeur Texas TMS320F2407) effectuant laddition des deux variables PHIC et PHI et sauver le mot de 16 [bit] form avec les
bits 27. . . 12 du rsultat 32 [bit] dans la variable SUM.
Instructions particulires :
LACC dma,16
ADDS dma
SACH dma,4

2.2
Lire le contenu du port 2, qui correspond par exemple au registre de sortie
dun convertisseur A/D 12 [bit], cbl sur D11..D0, et le sauvegarder dans la
variable ANA.
Instruction particulire :
IN dma, PA2

2.3
Additionner SUM et ANA et sauvegarder le rsultat dans la variable RES, sachant
que le MSB (Most Significant Bit) du registre de sortie du convertisseur A/D a
le mme poids que le MSB de SUM.
version 1.8

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

2.4
Effectuer la multiplication de RES par le coefficient 2.71828, celui-ci tant
cod avec une prcision infrieure au millime, et sauvegarder le rsultat dans la
variable SORTIE.
Instructions particulires :
LT dma
MPY #valeur immdiate

2.5
Refaire le point prcdent en multipliant 2.71828 par :
RES si ABS(RES) < 0fffh
RES^2 si ABS(RES) > 0fffh
Instruction particulire :
BCND LT

2.6
Complter le programme constitu des points prcdents par les instructions
et directives assembleur ncessaires son assemblage sans erreur. Les donnes
se trouvent dans la premire page de 128 mots disponible (rfre par le symbole VP0 dans le fichier DEFVAR.ASM, zone dsigne ON_CHI30 dans le fichier de
configuration LINK.CMD).
Directives particulires :
.title "titre"
.length 60
.width 80
.mmregs
.def
.ref
.bss symbole, taille en mots
.text
symbole .set valeur
.end

version 1.8

10

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Programmation dun filtre numrique de type


FIR

On souhaite mettre en oeuvre un filtre numrique rponse impulsionnelle


finie (FIR) dont les caractristiques sont les suivantes :
ordre : n = 8
pulsation de coupure (relative 2e ) : c = 0.1.

3.1

Synthse du filtre laide de MATLAB

A laide de MATLAB et surtout de sa bote outils Signal Processing, calculer


les coefficients b0 , b1 et b2 du filtre par les commandes (celles-ci peuvent tre
runies dans un fichier dextension .M sauv dans D:\USERS et excutes dans
lespace de commande MATLAB en tapant son nom) :
n = 8;
Wn = 0.1;
numG = fir1(n,Wn);
denG = [1,zeros(1,n)];
numG est un ici un vecteur-ligne contenant les coefficients des puissances dcroissantes de z, i.e. les valeurs b0 , b1 et b2 . Il correspond au numrateur de la fonction
de transfert du filtre, le dnominateur tant denG. En tapant par exemple numG,
sans point-virgule, les coefficients saffichent.
On peut alors tracer la rponse harmonique du filtre pour une priode dchantillonnage h valant par exemple 1 [ms] :
h = 1e-3;
figure(1),dbode(numG,denG,h)
On peut vrifier que la rponse indicielle du filtre est bel et bien finie en en
calculant et traant les 10 premiers chantillons :
figure(2),dstep(numG,denG,10)

3.2

Algorithme du filtre et adaptation larithmtique en


virgule fixe

Programmer en assembleur (exceptionnellement en C, mais cest plus difficile !) lalgorithme du filtre FIR.
Pour limplmentation des coefficients et des variables, on suivra les premires
indications donnes dans le chapitre 3 du cours. On pourra ensuite complter le
fichier ini_filt.asm avec les les valeurs numriques manquantes de B0 B8.
Enfin, le code du filtre (somme de produits) devra tre crit en ditant le
programme assembleur filtre.asm, quil sagira de complter par les instructions
mathmatiques manquantes.
version 1.8

11

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

3.3

Exercices DSP

Assemblage et cration du code excutable

Lancer lassemblage du fichier (le point dentre de la routine dinterruption


devrait tre FILTRE).
Si lassemblage est en ordre, il reste xcuter ldition de liens (Menu Projet
Build).

version 1.8

12

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Exercices DSP

Programmation dun rgulateur numrique de


type PID

On souhaite implanter, dimensionner et tester un rgulateur numrique de


type PID. La loi de commande de la version analogique tant


1
u (t) = Kp e (t) +

Ti

de
e ( ) d + Td
dt

o e(t) est le signal derreur et u(t) la commande. Lapplication vise tant


la "balle dans un tube", les valeurs numriques des coefficients sont dans les
gammes :
0.1 Kp 10, rsolution 0.1
0.1 [s] Ti 100 [s], rsolution 0.05 [s]
0 [s] Td 1 [s], rsolution 0.05 [s]

4.1

Algorithme du rgulateur numrique

Discrtiser la loi de commande du rgulateur afin den obtenir lquation aux


diffrences. Traiter sparment laction intgrale afin de pouvoir la contrler (limitation, annulation) plus facilement.

4.2

Adaptation de lalgorithme du rgulateur larithmtique en virgule fixe

Les signaux dentre (consigne w(k), grandeur rgle y(k)) comme le signal de
sortie (commande u(k)) tant reprsents sur 14bits, reprsenter les coefficients
du rgulateur PID sous forme de nombres entiers (processeur 16bits, virgule fixe).
Tester le bon fonctionnement sous MATLAB par exemple.

4.3

Implantation du code du rgulateur en assembleur, assemblage et cration dun code excutable

Implanter en assembleur lalgorithme du rgulateur PID.


Les coefficients et les variables pourront tre dclares dans le fichier ini_filt.asm.
Le code du rgulateur devra tre crit en ditant le programme assembleur
filtre.asm, quil sagira de complter.
Lancer lassemblage du fichier (le point dentre de la routine dinterruption
devrait tre FILTRE).
Si lassemblage est en ordre, il reste xcuter ldition de liens (Menu Projet
Build).
version 1.8

13

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

4.4

Exercices DSP

Test du fonctionnement du rgulateur

Le test du fonctionnement du rgulateur doit ensuite tre effectu avant de le


mettre en oeuvre en asservissement dun systme.

4.5

Accs aux convertisseurs A/D et D/A

Complter le code assembleur du rgulateur par les accs aux convertisseur


A/D et D/A ainsi que par la programmation du timer afin de pouvoir fixer la
priode dchantillonnage.

4.6

Application : rgulation de la "balle dans un tube"

Le rgulateur, une fois test, peut tre mis en oeuvre sur lun des systmes
du laboratoire dautomatique (balle dans un tube). Se rfrer au site
http ://iai.eivd.ch/users/mee/
pour obtenir le protocole de mise en oeuvre de ce systme.

version 1.8

14

MEE \dsp_exercice.tex\25 mai 2005

HEIG-Vd

Version du document
v1.0
v1.1
v1.5
v1.6
v1.7
v1.8

Exercices DSP

Date

Notes

12 avril 2002
12 mai 2003
5 novembre 2003
28 janvier 2004
18 mai 2005
25 mai 2005
Tab. 1 Versions publies

version 1.8

15

MEE \dsp_exercice.tex\25 mai 2005