Vous êtes sur la page 1sur 16

Initiation à Matlab

Mathlab: Matrix laboratory (Mathworks.com)

à Matlab Mathlab: Matrix laboratory (Mathworks.com) 2 Editeurs dans mathlab: 1- Editeur de ligne >>

2 Editeurs dans mathlab:

1-

Editeur de ligne >> commande

2-

Editeur de page

Vecteur:

>> V=[1 2 3 4 5 6 7 8 9] V =

3

>> length(v)

1

2

4

5

6

7

8

9

9

>> cumsum(v)

 

ans =

1

3

6

10

15

21

28

36

45

>> V1=[1:9]

 

V1 =

1

2

3

4

5

6

7

8

9

>> V2=V1'

 

V2 =

1

2

3

4

5

6

7

8

9

>> V3=V1+V2'

 

V3 =

2

4

6

8

10

12

14

16

18

>> V3(1,6)=0

 

V3 =

2

4

6

8

10

0

14

16

18

>> V4=ones(1,9)

 

V4 =

1

1

1

1

1

1

1

1

1

>> V5=ones(9,1)

ans =

9

>> sum(v)

ans =

45

>> prod(v)

ans =

362880

>> max(v)

ans = 9 >> sum(v) ans = 45 >> prod(v) ans = 362880 >> max(v) ans

ans =

V5 =

1

1

1

1

1

1

1

1

1

ans = 9 >> sum(v) ans = 45 >> prod(v) ans = 362880 >> max(v) ans

>> V6=zeros(1,9)

V6 =

1 1

1

0

0

0

0

0

0

0

0

0

1 1

1

>> V7=[zeros(1,4) 1 zeros(1,4)]

 

1 1

1

V7 =

1 1

1

0

0

0

0

1

0

0

0

0

>> m7=zeros(4,3)

 

Matrice:

 

m7 =

>> m=[1 2 3;4 5 6;7 8 9]

0

0

0

m =

0

0

0

1

2

3

0

0

0

4

5

6

0

0

0

7

8

9

>> m8=eye(4)

>> m1=m'

m8 =

m1 =

1

0

0

0

1

4

7

0

1

0

0

2 5

8

0

0

1

0

3 6

9

0

0

0

1

>> m2=m+m1

 

>> det(m)

m2 =

ans =

2

6

10

0

6

10

14

>> diag(m)

10

14

18

Ans =

>> m3=m*m1

1

m3 =

5

14

32

50

9

32

77

122

>> eig(m)

50

122

194

ans =

>> m4=m.*m1

16.1168

m4 =

-1.1168

1

8

21

-0.0000

8

25

48

>> 1/0

21

48

81

ans =

>> m5=ones(4)

Inf

m5 =

>> 0/0

1

1

1

1

ans =

1

1

1

1

NaN

1

1

1

1

>> eps

1

1

1

1

ans =

Polynomes

 

>> z4=abs(z)

>> p=[1 0 -3 0 0 2 -7 8 2]

z4 =

p

=

6.4031

 

1

0

-3

0

0

2

-7

8

2

>> atan(5/4)

>> polyval(p,0)

 

ans =

ans =

0.8961

2

>> angle(z)

>> polyval(p,1)

ans =

ans =

0.8961

3

Représentation graphique:

>> r=roots(p)

Subplot(x,y,z)

r =

X: nombre de subdivision de l’écran dans l’axe horizontale x

-1.9838

-0.8613 + 1.0444i -0.8613 - 1.0444i

Y : nombre de subdivision de l’écran dans l’axe verticale

Z : Le numéro de l’image partant du haut vers le bas et de gauche vers la droite

partant du haut vers le bas et de gauche vers la droite   1.6595 1.2193 0.5185
 

1.6595

1.2193

0.5185

+ 1.0149i

0.5185

- 1.0149i

-0.2093

>> q=poly(r)

 

>> subplot(1,1,1)

q

=

>> subplot(4,1,1)

1.0000

0.0000

-3.0000

-0.0000

0.0000

2.0000

-7.0000

8.0000

>> subplot(4,1,2)

2.0000

 

>> subplot(4,1,3)

>> poly2str(q,'x') ans = x^8 + 1.9429e-016 x^7 - 3 x^6 - 5.7732e-015 x^5 + 2.8311e-015 x^4 + 2 x^3 - 7 x^2 + 8 x + 2 Complexe

>> subplot(4,1,4) >> subplot(1,4,1) Exercice 1:

>> z=4+5i

 

>> subplot(1,1,1),grid

z

=

>> subplot(4,3,1),grid

4.0000

+ 5.0000i

>> subplot(4,3,[2,3]),grid

>> z1=conj(z)

>> subplot(4,3,[4:9]),grid

z1 =

 

>> subplot(4,3,[10,11]),grid

 

4.0000

- 5.0000i

>> subplot(4,3,12),grid

>> z3=sqrt(z*z1)

z3 =

, (z : l’image active)

y=4

X=1

- 5.0000i >> subplot(4,3,12),grid >> z3=sqrt(z*z1) z3 = , (z : l’image active) y=4 X=1 6.4031

Exercice 2:

Exercice 2: >> subplot(7,4,[1,2,5,6]) >> subplot(7,4,[3,4,7,8]) >> subplot(7,4,[9:4:21])

>> subplot(7,4,[1,2,5,6]) >> subplot(7,4,[3,4,7,8]) >> subplot(7,4,[9:4:21]) >> subplot(7,4,[10,11,14,15,18,19,22,23]) >> subplot(7,4,[12:4:24]) >> subplot(7,4,25) >> subplot(7,4,28) >> subplot(7,4,[26,27])

>> subplot(7,4,28) >> subplot(7,4,[26,27]) Les graph 2D : plot(continu) Stem(discret) Fe=1000 Hz

Les graph 2D :

plot(continu)

Stem(discret)

Fe=1000 Hz [300, 3400] Hz vocal Fe=8000 Hz [5-20, 20 000] audible Fe=44100 Hz

Fe=1000 ; Te=

Sig1: sin (2*Pi*50*t)

; N=1024

Sig2 : sin (2*Pi*50*t)+sin (2*Pi*10*t) Plot (abscisse, ordonnée,’couleur+format’)

; Rouge : r ; Jaune : Y ;

Magenta : m Plot (t, sig1,’m’) Exercice :

>> subplot(20,20,[141:280]),grid >> subplot(20,20,[8:13]),grid >> subplot(20,20,[26:35]),grid >> subplot(20,20,[44:57]),grid >> subplot(20,20,[63:78]),grid >> subplot(20,20,[83:98]),grid >> subplot(20,20,[102:119]),grid >> subplot(20,20,[122:139]),grid >> subplot(20,20,[282:299]),grid >> subplot(20,20,[302:319]),grid >> subplot(20,20,[323:338]),grid >> subplot(20,20,[344:357]),grid >> subplot(20,20,[365:376]),grid >> subplot(20,20,[387:394]),grid

Noir : K

Bleu : b vert : g Bleu ciel : C

>> subplot(20,20,[365:376]),grid >> subplot(20,20,[387:394]),grid Noir : K Bleu : b vert : g Bleu ciel :

TP: sur le traitement du signal

Transformé de Fourier rapide Le pas d’échantillonnage suite à la règle de shanon f e > 2*f max (signal) f e = 8000Hz f max = 3400 Hz f e > 2*3400 > 6800Hz [5- 20 KHz]

f max

=20KHz

f e > 2*20KHz > 40KHz

f e =44100Hz

fe=1000 ; te=1/fe

t=0 :te :1023*te

sig=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t)

f=(0 :N-1)*fe/N fsig=fft(sig,N)

subplot(2,1,1), plot(t,sig) , axis([0.1 0.2 -2 2]),grid %représentions temporelle

subplot(2,1,2),plot(f,abs(fsig))

save sig Analyse et caractérisation des signaux reels:

.ASC Load nom du fichier.asc Y= nom du fichier ;

clear all

load sig who subplot(1,1 ,1), plot(t,sig), axis([0.1 0.2 -2 2])

; N=1024 ; f1=100 ; f2=200 ;f3=300

%effacer tout les valeur précédentes

clear all load train who fe=Fs plot(y) sound(y)

ginput(4)

sig1=y(134:4029)

plot(sig1)

sound(sig1)

f=(0:Fs-1)

fsig1=fft(sig1,Fs)

plot(f,abs(fsig1))

axis([0 Fs/2 0 350])

ginput(6)

sig2=y(4636:12807);

plot(sig2)

sound(sig2)

fsig2=fft(sig2,Fs);

plot(f,abs(fsig2))

axis([0 Fs/2 0 900]);

Format musicale [sig,fe]=wavread('tada.wav'); plot(sig); size(sig);

sig1=sig(:,1);

plot(sig1);

subplot(2,1,1),plot(sig1) ; subplot(2,1,2) ,plot(sig2) ;

%pour afficher les deux courbes

Filtre numérique et filtrage sur Mathlab

I- Filtre numérique : est un dispositif logique constitué d’un programme qui exécute sur un processeur numérique (DSP adapté pour les exécutions en temps réel mieux que les micropross) Il existe deux types de filtres numériques -Filtres non récursifs -Filtres récursifs

numériques -Filtres non récursifs -Filtres récursifs - Un filtre récursif : la sortie dépond des entrées

-Un filtre récursif : la sortie dépond des entrées et des sorties précédentes L’équation temporelle de ce filtre est donné par

L’ordre du filtre est donné par P du point de vue fréquentiel La transformée de Laplace

Avec

La transformée en Z n’est appliqué que si le signal est échantillonné :

Z n’est appliqué que si le signal est échantillonné : -filtres non récursifs : Equation temporelle

-filtres non récursifs :

Equation temporelle

: -filtres non récursifs : Equation temporelle a(i) et b(i) s'appellent les coefficient du filtre Pour

a(i) et b(i) s'appellent les coefficient du filtre

Pour la détermination des coefficients pour les filtres non récursifs (on utilise les séries de Fourier)

Pour les filtres non récursifs -on retient 2 méthodes qui sont efficaces *invariance impulsionel Par le calcul de la transformée en Z

*transformée bilinéair

2 méthodes qui sont efficaces *invariance impulsionel Par le calcul de la transformée en Z *transformée

Filtre Polynômiaux

fft : faste Fourier transformer :

Soit le vecteur

sa transformée de Fourier est un vecteur W tel que:

[H,f]=freqz(num,den,1024,fe); %freqz Retourne la réponse en fréquence aux fréquences "fe"

g=20*log10(abs(H));

[num1,den1]=butter(3,fcn);

[H1,f1]=freqz(num1,den1,1024,fe);

g1=20*log10(abs(H1));

[num2,den2]=butter(4,fcn);

[H2,f2]=freqz(num2,den2,1024,fe);

g2=20*log10(abs(H2));

 

plot(f,g,f1,g1,f2,g2),grid; axis([0 fe/2 -10 0])

fe=1000 ;

fc=200

;

fcn=fc/(fe/2);

[num,den]=cheby1(2,1,fcn);

D'une manière général pour un vecteur de n éléments on peut exprimer sa transformée de Fourier par:

Et la transformée inverse par:

Butterworth >> [z,p,k]=buttap(2)

>> [num,den]=zp2tf(z,p,k) %à partir des zéros et des pôles trouve la fonction de transfert >> [z,p,k]=buttap(3) >> [num,den]=zp2tf(z,p,k) Chebybichev

>>

>> [num,den]=zp2tf(z,p,k)

>> den/1.1025

[z,p,k]=cheb1ap(2,1)

%1 représente le taux d’ondulation

fe=1000 ;

fc=200 ; fcn=fc/(fe/2);

[num,den]=butter(2,fcn);

[H,f]=freqz(num,den,1024,fe) ;

g=20*log10(abs(H));

[num1,den1]=cheby1(3,1,fcn);

[H1,f1]=freqz(num1,den1,1024,fe);

g1=20*log10(abs(H1));

[num2,den2]=cheby1(4,1,fcn);

[H2,f2]=freqz(num2,den2,1024,fe);

g2=20*log10(abs(H2));

plot(f,g,f1,g1,f2,g2),grid; axis([0 fe/2 -10 0])

Passe bas butter Passe haut butter Passe bande butter

Rejecteur de bande (n,*fcn1 fcn2+,’stop’)

(n,fcn,’low’) (n,fcn,’high’) (n ,[fcn1 fcn2])

Filtre passe haut fe=1000 ; fc=200 ; fcn=fc/(fe/2) ; [num,den]=butter(2,fcn,'high') ;

[H,f]=freqz(num,den,1024,fe);

g=20*log10(abs(H));

plot(f,g) ; axis([0 fe/2 -10 0]),grid

Filtre passe bande fe=1000 ; fc1=200 ; fc2=300; fcn1=fc1/(fe/2) ;

fcn2=fc2/(fe/2);

[num,den]=butter(2,[fcn1 fcn2]) ;

[H,f]=freqz(num,den,1024,fe);

g=20*log10(abs(H));

plot(f,g) ; axis([0 fe/2 -10 0]),grid

Filtre coupe bande

fe=1000 ; fc1=200 ; fc2=300; fcn1=fc1/(fe/2) ;

fcn2=fc2/(fe/2);

[num,den]=butter(2,[fcn1 fcn2], 'stop') ;

[H,f]=freqz(num,den,1024,fe);

g=20*log10(abs(H));

plot(f,g) ; axis([0 fe/2 -10 0]),grid

f=(0 :1023)*fe/1024 ; fsig=fft(sig,1024) ;

[num,den]=cheby1(2,3,fcn,'high');

sig_filtre=filter(num,den,sig);

fsig_filtre=fft(sig_filtre,1024);

subplot(4,1,1),plot(t,sig),axis([0.1 0.2 -2 2]) subplot(4,1,2),plot(f,abs(fsig)),axis([0 fe/2 0 500]) subplot(4,1,3),plot(t,sig_filtre),axis([0.1 0.2 -2 2]) subplot(4,1,4),plot(f,abs(fsig_filtre)),axis([0 fe/2 0 500])

Passe bande:

fe=1000 ; fc1=150 ;fc2=350; fcn1=fc1/(fe/2);fcn2=fc2/(fe/2)

; Te=1/fe;

fe=1000 ; fc=200 ; fcn=fc/(fe/2) ; te=1/fe; t=0 :te:1023*te ;

sig=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*300*t)+sin(2*pi *400*t) ;

*400*t) ; f=(0 :1023)*fe/1024 ; fsig=fft(sig,1024) ;

t=0 :Te:1023*Te ;

sig=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*300*t)+sin(2*pi

f=(0 :1023)*fe/1024 ; fsig=fft(sig,1024) ; [num,den]=butter(6,[fcn1 fcn2]); sig_filtre=filter(num,den,sig);

fsig_filtre=fft(sig_filtre,1024);

subplot(4,1,1),plot(t,sig),axis([0.1 0.2 -2 2]) subplot(4,1,2),plot(f,abs(fsig)),axis([0 fe/2 0 500]) subplot(4,1,3),plot(t,sig_filtre),axis([0.1 0.2 -2 2]) subplot(4,1,4),plot(f,abs(fsig_filtre)),axis([0 fe/2 0 500])

Rejecteur du bande:

fe=1000 ; fc1=150 ;fc2=350; fcn1=fc1/(fe/2);fcn2=fc2/(fe/2)

; Te=1/fe;

t=0 :Te:1023*Te ;

sig=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*300*t)+sin(2*pi

*400*t) ; f=(0 :1023)*fe/1024 ; fsig=fft(sig,1024) ;

[num,den]=butter(6,[fcn1 fcn2],'stop'); sig_filtre=filter(num,den,sig);

fsig_filtre=fft(sig_filtre,1024);

subplot(4,1,1),plot(t,sig),axis([0.1 0.2 -2 2]) subplot(4,1,2),plot(f,abs(fsig)),axis([0 fe/2 0 500]) subplot(4,1,3),plot(t,sig_filtre),axis([0.1 0.2 -2 2]) subplot(4,1,4),plot(f,abs(fsig_filtre)),axis([0 fe/2 0 500])

[num,den]=butter(2,fcn);

sig_filtre=filter(num,den,sig);

fsig_filtre=fft(sig_filtre,1024);

subplot(4,1,1), plot(t,sig), axis([0.1 0.2 -2 2]) subplot(4,1,2), plot(f,abs(fsig)), axis([0 fe/2 0 500]) subplot(4,1,3), plot(t,sig_filtre), axis([0.1 0.2 -2 2]) subplot(4,1,4), plot(f,abs(fsig_filtre)), axis([0 fe/2 0

500])

fe=1000 ; fc=150 ; fcn=fc/(fe/2) ; Te=1/fe; t=0 :Te:1023*Te ;

sig=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*300*t)+sin(2*pi

*400*t) ; f=(0 :1023)*fe/1024 ; fsig=fft(sig,1024) ;

[num,den]=cheby1(2,3,fcn);

sig_filtre=filter(num,den,sig);

fsig_filtre=fft(sig_filtre,1024);

subplot(4,1,1),plot(t,sig),axis([0.1 0.2 -2 2]) subplot(4,1,2),plot(f,abs(fsig)),axis([0 fe/2 0 500]) subplot(4,1,3),plot(t,sig_filtre),axis([0.1 0.2 -2 2]) subplot(4,1,4),plot(f,abs(fsig_filtre)),axis([0 fe/2 0 500])

fe=1000 ; fc=350 ; fcn=fc/(fe/2) ; Te=1/fe; t=0 :Te:1023*Te ;

sig=sin(2*pi*100*t)+sin(2*pi*200*t)+sin(2*pi*300*t)+sin(2*pi

*400*t) ;

Virgule fixe et virgule flottante

2.75 = 2 + 0.75

Virgule fixe et virgule flottante 2.75 = 2 + 0.75 Alors 2.75 = (10.11) B Q

Alors 2.75 = (10.11) B Q k = 5 sur une taille de n = 8 bits :

Partie entière p= n k = 3

010 | 11000

---------------------------------------------------------------------------------------------------------

IEEE

IEEE DSP TMS 320C 30

DSP TMS 320C 30

IEEE DSP TMS 320C 30

---------------------------------------------------------------------------------------------------------------------

Virgule fixe :

Codage des entiers :

Codage des Réels :

Poids

-2 5

2

4

2

3

2

2

2

1

2

0

2

-1

2

-2

2

-3

2

-4

2

-5

16.25

0

1

0

0

0

0

0 1

 

0

0

0

-9.40625

1

1

0

1

1

0

1 0

 

0

1

1

Virgule flottante : (sous forme mantisse-exposant) L’opération directe :

16.25= (10000.01) B

1.000001×2 4

Décalage= 2 n-1 1

Si l’exposant est exprimé sur n= 8 bits Décalage= 2 7 1= 127 Puissance= exposant décalage Exposant= puissance+décalage

Puissance= 4

=4+127

=131

=(10000011) B

Mantisse= 000001

D’où

%mantisse :partie fractionaire

0100 0001 1000 0010 0000 0000 0000 0000

4

1

8

2

0

0

0

0

L’opération inverse :

Puissance = exposant décalage

= 131 127

= 4

(1) 0 × 1.mantisse × 2 puissance

(S=0)

1.000001× 2 4 = 10000.01= 16.25 Les opérations arithmétiques en virgule flottante :

1-L’addition :

16.25 + 406.125 = 422.375 10000.01 + 110010110.001 = 1.000001×2 4 + 1.10010110001 × 2 8

1.10010110001 × 2 8 + 0.00010000010 × 2 8

------------------------------

= 1.10100110011 × 2 8 = 110100110.011

En virgule flottante :

1.0010 × 2 1

S=0

× 1.1001 × 2 1

Exposant = 8 + 127 = 135 =10000111

-------------------

0100 0011 1101 0011 0011 0000 0000 0000

4

2-La Soustraction :

406.125 16.25 > 0 16.25 406.125 < 0

3

D

3

3

0

0

0

1.10010110001 × 2 8 - 0.00010000010 × 2 8

------------------------------

= 1.10000101111 × 2 8 (110000101.111) B =389.875 Exposant = 8 +127 =135 = 10000111

0100 0011 1100 0010 1111 0000 0000 0000

4

3

C

2

F

0

0

0

---------------------------------------------------------------------------------------------------

0.00010000010 × 2 8 - 1.10010110001 × 2 8

----------------------------

= 10.01111010001 × 2 8

1 : bit de signe Après le décalage : 1001111010.001 On s’intéresse à la partie entière : 1.111010001 × 2 6 Puissance = 6 Exposant = 6 + 127 = 133 =10000101

1100 0010 1111 0100 0100 0000 0000 0000

C 3- La multiplication :

2

F

4

4

0

0

0

1001 × 2 2

1001

----------------------

1.1100001 × 2 2 = 111.00001 = 7.03125 Transformée en virgule flottante :

S=0

Exposant = 2 +127 = 129 =10000001 01000 0000 1110 0001 0000 0000 0000 0000

4

0

E

1

0

0

0

0

1001 .

Programmation de DSP

DémarrerExecuter→cmd C:\Documents and Settings\Reda>cd\ C:\>cd dsp1 C:\dsp1>asm30 1.asm 1.obj 1.lst

TMS320C3x/4x COFF Assembler

Copyright (c) 1987-1992 Texas Instruments Incorporated PASS 1 PASS 2 No Errors, No Warnings C:\dsp1>lnk30 1.obj -o 1.out

C:\dsp1>sim3x

Version 4.50

Adressage Immédiat :

.text

ldi

22H,r0

; Charger R0 par 22H

addi

44H,R0

; Additionner 44H à la valeur de R0

sti

R0,@10H

; stocker la valeur de R0 dans l’adresse mémoire 10H

.end

Adressage direct :

 

.text

ldi

@10H,R0 ; Charger R0 par la donnée de l’adresse 10H @11H,R0 ; Additionner à R0 le contenu d’adresse 11H R0,@12H ; Stocker dans l’adresse 12H le contenu de R0

addi

sti

.end

 

.data

val1

.set

10H

; val1=10H

val2

.set

11H

; val2=11H

resul .set

12H

; resul=12H

 

.text

ldi

@val1,R0

addi

@val2,R0

 

sti

R0,@resul

.end

 

.data

val1

.int

22H

val2

.int

44H

resul .space

1H

 

.text

ldi

@val1,R0

addi

@val2,R0

sti

R0,@resul

.end

.start ".data",10H

val1

.int

22H

val2

.int

44H

resul .space

1H

 

.text

ldi

@val1,R0

addi

@val2,R0

sti

R0,@resul

.end

Adressage indirect :

.data

adress

.word 80H

.text

ldi

@adress, AR0 ;on charge 80 dans AR0

ldi

45, R2

;on charge 45 dans R2

sti

R2, *AR0

;on stocke R2 à l’@pointée par AR0

ldi

55, R2

;on charge 55 dans R2

mpyi *AR0, R2

;on multiplie le contenu de l’@ pointée

sti

.end

par AR0 par le contenu de R2 R2, *+AR0(1) ;on stocke le contenu de R2 à l’@ qui suit

(+1) l’@ pointée par AR0

Les instructions de répétition

RPTS :répéter l’instruction qui suit le mot rpts (RC-1) fois. RPTB : répétera un bloc d’instructions repéré par une étiquette (RC- 1) fois. Exemple :

.data

tab_ad

.word tab

1

2

.

.

.

9

tab

.int

1,2,3,4,5,6,7,8,9

resul .space

1

 

.text

Ldi

@tab_ad,AR0 ; AR0 reçoit l’@ de la 1 ere valeur du tab (l’@ ou 1 est stocké)

Ldi

0,R0

;

Ldi

9,RC

;

Rpts

RC

; Répéter 9+1 fois l’instruction suivante

Addi

*AR0++,R0

; additionner à R0 la valeur de l@ Pointée par AR0 et incrémenter AR0

Sti

R0,*AR0

;

Sti

R0,@resul

;

.end

 

.data

tab_ad

.word tab

resul .space

1

 

.text

Ldi

@tab_ad,AR0

Ldi

0,R0

Ldi

9,RC

Rptb

et

; Répéter 9+1 fois le bloc ET

et

Addi

*AR0++,R0

Sti

R0,*AR0

Sti

R0,@resul

.end

Instruction du parallelism // Cumul des produits Cumul des sommes

.data

tab_ad1

tab_ad2

.word x

 

.word a

.int

x 1,2,3,4,5,6,7,8,9

.int

a 2,4,6,8,1,3,5,7,9

.text

Ldi

@tab_ad1,AR0

Ldi

@tab_ad2,AR1

Ldi

0,R0

Ldi

0,R2

Ldi

9,RC

Rpts

RC

Mpyi3

*AR0++,*AR1++,R0

||Addi

R0, R2 ; Exécution de deux instructions parallèle

(Mpyi3||Addi).additionner R2 à l’ancien valeur de R0 (avant Mpyi3) et met le résultat dans R2

Addi

R0,R2

ldi

1,R0

Sti

R2,*AR0

Ldi

9,RC

.end

Rpts

RC

.data

Addi3 *AR0++,*AR1++,R3

tab_ad1

.word x .word a

||Mpyi

R3,R0

tab_ad2

Sti

R0,*AR0

.int

x 1,2,3,4,5,6,7,8,9

.end

.int

a 2,4,6,8,1,3,5,7,9

.text

Ldi

Ldi

Ldi

Ldi

Ldi

Rptb

Mpyi3

@tab_ad1, AR0 @tab_ad2, AR1 0, R0 0, R2 9, RC et

*AR0++,*AR1++, R0 ; Boucle

et

Addi

R0, R2

Addi

R0, R2

Sti

R2,*AR0

.end

 

.data

tab_ad1

.word x .word a

tab_ad2

.int

x 1,2,3,4,5,6,7,8,9

.int

a 2,4,6,8,1,3,5,7,9

.text

Ldi

Ldi

ldi

@tab_ad1,AR0

@tab_ad2,AR1

1,R3

Intercorrelation avec décalage de 1

V 1 =[1 2

3

4

5

6

V 2 =

[2

4

6

8

1

Ґ= 4+12+24+40+6+21+40+63=210 Décalage de 2

V 1 =[1 2 V

Ґ= 6+16+30+48+7+24+45+0+0

3

4

5

6

[2

4

6

8

2 =

7

8

9]

3

5

7

9]

7

8

9]

1

3

5

7

9]

.data

tab_ad1

.word

x

tab_ad2

.word

a

x .int

1,2,3,4,5,6,7,8,9

a .int

2,4,6,8,1,3,5,7,9

.text

Ldi

@tab_ad1,AR0

Ldi

@tab_ad2,AR1

Ldi

0,R0

Ldi

0,R2

Ldi

8,RC

Rpts

RC

Mpyi3 *AR0++,*AR1++,R0 ||Addi R0,R2

Addi

.end

R0,R2

Produit matriciel

 

.data

tab1

.word

A

tab2

.word

B

A

.int

1,2,3,4,5,6,7,8,9

B

.int

1,2,3

resul

.word

30H

.text

debut

ldi

@tab1,AR0

ldi

@tab2,AR1

ldi

@resul, AR2

ldi

3, R4

;le nombre de ligne de la matrice A

loopi

ldi

0, R0

ldi

2, AR4 ; compteurs d’opérations

loopj

mpyi

*AR0++,*AR1++,R1

Addi

R1, R0

Db

AR4, loopj

Sti

R0,*AR2++

Ldi

@tab2, AR1

subi

1,R4

; soustraction R4-1

bnz

loopi

.end

Mode d’adressage circulaire Le mode d’adressage circulaire 07 1- si 0 ≤ index+pas < BK alors L’index = index + pas

2- si index + pas ≥ BK alors

Index= index + pas BK > 0

Si non Index = index + pas +BK < 0

Exemple

00

01

02

03

04

05

06

07

08

09

0A

0B

0C

0D

< 0 Exemple 00 01 02 03 04 05 06 07 08 09 0A 0B 0C
 

.data

tab

.word

x

x

.int

2,6,8,0Ah,30,22,44,66,10,11,14,16,26,36

.text

Ldi

@tab,AR0

Ldi

7,BK

Ldi

*AR0++(5)%,R1

.end

 

.data

tab

.word

x

x

.int

2,6,8,0Ah,30,22,44,66,10,11,14,16,26,36

.text

Ldi

@tab,AR0

Ldi

7,BK

Ldi

*AR0++(5)%,R1

Ldi

*AR0++(4)%,R1

.end

 

.data

.text

tab

.word

x

x

.int

1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh

x

.int

2,6,8,0Ah,30,22,44,66,10,11,14,16,26,36

h

.int

2,4,6,8,0Ah,0Ch,0Eh,1,3,5,7,9,0Bh,0Dh,0fh

.text

tab1

.word

x

Ldi

@tab,AR0

tab2

.word

h

Ldi

7,BK

Ldi

@tab1,AR0

Ldi

*AR0++(5)%,R1

Ldi

@tab2,AR1

Ldi

*AR0++(4)%,R1

Ldi

10,BK

ldi

*AR0--(5)%,R1

Ldi

99,RC

.end AR0 = B ; R1 = 2 AR0 = 08 ;R1 = 22 AR0 = 0A ; R1 = 08

   

Rptb

et

Mpyi3 *AR0++%,*AR1++%,R0

et

addi

R0,R2

Sti

R2,*AR1

 

.text

.end

x

.int

.text

1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh,10h,11h,12h,13h,14h,15h

x

.int

1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh

tab

.word

x

h

.int

2,4,6,8,0Ah,0Ch,0Eh,1,3,5,7,9,0Bh,0Dh,0fh

Ldi

10,BK

tab1

.word

x

Ldi

@tab,AR0

tab2

.word

h

Ldi

99,RC

Ldi

@tab1,AR0

Rptb

et

Ldi

@tab2,AR1

et

addi

*AR0++%,R0

Ldi

8,RC

sti

R0,*AR0

Rptb

et

.end

Mpyi3 *AR0++%,*AR1++%,R0

Filtres numériques non récursifs

et

addi

R0,R2

Sti

R2,*AR1

 

.end

Filtre sous Matlab

Cahier de charge Filtre RIF (FIR) F e =8000 F C1 =300 Hz F C2 =3400 Hz Extraction des coefficients par mathlab

Fir1(N-1,fcn,fenètre)

Fir2(N-1,f,A,fenetre)

N:longueur du filter Fc: fréququence de coupure normalisé

F :vecteur fréquence du gabarit

A :amplitudes du filtre dans le Gabarit Fir1 pour les 4 types des filtres Passe bas

Cahier de charge

Fe = 8000 ; fc=1000

Programme:

fe=8000;fc=1000;fcn=fc/(fe/2);N=30;

num=fir1(N-1,fcn,blackman(N)) ;rectwin or hamming

[h,f]=freqz(num,1,1024,fe)

g=20*log10(h)

plot(f,g),axis([0 fe/2 -100 0]),grid

fe=8000;fc=1000;fcn=fc/(fe/2);N=30;

num=fir1(N-1,fcn,kaiser(N,10))

[h,f]=freqz(num,1,1024,fe)

g=20*log10(h)

plot(f,g),axis([0 fe/2 -200 0]),grid

fe=8000;fc=1000;fcn=fc/(fe/2);N=29;

num=fir1(N-1,fcn,'high',hamming(N))

[h,f]=freqz(num,1,1024,fe)

g=20*log10(h)

plot(f,g),axis([0 fe/2 -200 0]),grid

passé bande

fe=8000;fc1=300;fc2=3400;fcn1=fc1/(fe/2);fcn2=fc2/(fe/2

);N=29;

num=fir1(N-1,[fcn1 fcn2],hamming(N))

[h,f]=freqz(num,1,1024,fe)

g=20*log10(h)

plot(f,g),axis([0 fe/2 -60 0]),grid

fe=8000;fc1=300;fc2=3400;fcn1=fc1/(fe/2);fcn2=fc2/(fe/2

);N=29;

num=fir1(N-1,[fcn1 fcn2],'stop',hamming(N))

[h,f]=freqz(num,1,1024,fe)

g=20*log10(h)

plot(f,g),axis([0 fe/2 -60 0]),grid

fe=8000;fc=1000;fcn=fc/(fe/2);N=29;

ff=[0 fcn fcn 1] A=[1 1 0 0]

num=fir2(N-1,ff,A,hamming(N));

[h,f]=freqz(num,1,1024,fe)

g=20*log10(abs(h))

plot(f,g),axis([0 fe/2 -10 0]),grid

fe=8000;fc=1000;fcn=fc/(fe/2);N=29;

ff=[0 fcn fcn 1] A=[0 0 1 1]

num=fir2(N-1,ff,A,hamming(N));

[h,f]=freqz(num,1,1024,fe)

g=20*log10(abs(h))

plot(f,g),axis([0 fe/2 -10 0]),grid