INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2...

20
CHESTIN Myriam RAPPORT DSP ISEN4 MITCHELL Batiste Le but initial des DSP (Digital Signal Processor) est de traiter les signaux sonores. Ce sont des processeurs de traitement de signal. L’unité optionnelle DSP nous permet de mettre en application les notions de traitement du signal abordées au premier semestre. Le principal avantage des DSP comparés aux autres processeurs est qu’ils permettent d’effectuer plusieurs opérations dans le même cycle d’horloge, très utile pour la conception de filtres par exemple, comme nous le verrons dans ce rapport. Séance 1 Prise en main de la carte Les séances se déroulent grâce à notre PC avec l’atelier logiciel Code Composer Studio de Texas Instruments et une carte DSK TMS320C5510, comportant l’élément essentiel : un processeur TI 5510, nouvelle génération. Configuration software : nous faisons l’essai de la compilation d'un exercice (buid all) pour vérifier la bonne configuration du CCS grâce à l’exercice 1. Workspace Un programme pour ce DSP comporte plusieurs fichiers nécessaires à sa compilation : Debug : Dossier de sortie de compilation, contenant le .out .log de compilation 1

Transcript of INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2...

Page 1: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Le but initial des DSP (Digital Signal Processor) est de traiter les signaux sonores Ce sont des

processeurs de traitement de signal Lrsquouniteacute optionnelle DSP nous permet de mettre en application les

notions de traitement du signal abordeacutees au premier semestre

Le principal avantage des DSP compareacutes aux autres processeurs est qursquoils permettent drsquoeffectuer plusieurs

opeacuterations dans le mecircme cycle drsquohorloge tregraves utile pour la conception de filtres par exemple comme nous le

verrons dans ce rapport

Seacuteance 1Prise en main de la carte

Les seacuteances se deacuteroulent gracircce agrave notre PC avec lrsquoatelier logiciel Code Composer Studio de Texas Instruments et

une carte DSK TMS320C5510 comportant lrsquoeacuteleacutement essentiel un processeur TI 5510 nouvelle geacuteneacuteration

Configuration software nous faisons lrsquoessai de la compilation dun exercice (buid all) pour veacuterifier la bonne

configuration du CCS gracircce agrave lrsquoexercice 1

Workspace

Un programme pour ce DSP comporte plusieurs fichiers neacutecessaires agrave sa compilation

Debug Dossier de sortie de compilation contenant le out

log de compilation

asm programme en lui-mecircme langage assembleur appeleacute par leC

C programme contenant le lsquomainrsquo appelant le asm

ANNEXE 1 asm exo1

Seacuteance 2Instructions parallegraveles

Le DSP 5510 permet drsquoeffectuer au moins deux instructions en parallegravele dans le mecircme cycle drsquohorloge Il

permet notemment drsquoeffectuer ces opeacuterations dans la mecircle instruction et aussi entre deux instructions

1

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Analyse des modes drsquoadressage

En terme drsquoorganisation de la meacutemoire le DSP 5510 permet 3 types drsquoadressage

sect adressage absolu

On deacutesigne un endroit de la meacutemoire en donnant lrsquoadresse comme constante

sect adressage direct

Ceci permet lrsquoadressage par sauts (offset)

sect adressage indirect

Ce mode drsquoadressage utilise des pointeurs (ARn avec n de 0 agrave 7)

Organisation de la meacutemoire du DSP

Analyse fonctionnement exo1

ANNEXE 1 asm exo1

2

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 3Analyse de lrsquoadressage circulaire

Lrsquoadressage circulaire permet de ne pas faire de tests modulo sur les pointeurs On deacutefini la taille du Buffer

sur lequel pointe le pointeur en bout de Buffer le pointeur revient au deacutebut

Impleacutementation

1 initialiser la taille du buffer

2 configurer le bit ST2_55 pour deacutefinir la circulariteacute des pointeurs

3 Charger le registre de reacutefeacuterence pour la page de reacutefeacuterence

4 initialiser lrsquoadresse de deacutebut du buffer

5 Charger le pointeur avec des valeurs entre 0 et taille du buffer

Compilation et veacuterification du bon fonctionnement de lrsquoexercice 1 puis passage agrave lrsquoexercice 2

Seacuteance 4Cette seacuteance nous permis de mettre en application les notions drsquoadressage indirect et adressage

circulaire

On rentre dans un buffer les valeurs Q8 correspondantes aux lettres de lrsquoalphabet en majuscule

Lrsquoexercice consiste agrave transformer les majuscules en minuscules en pas agrave pas

1 Rentrer les majuscules

2 Effacer les majuscules

3 Ecrire les minuscules

Pour pouvoir visualiser dans la meacutemoire les diffeacuterentes eacutetapes nous avons utiliser le mode lsquoanimatersquo de

Code Composer Studio

ANNEXE 2 asm exo2 adressage direct

ANNEXE 3 asm exo3 adressage circulaire

3

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 5Le but de cette seacuteance a eacuteteacute de mettre au point un filtre agrave reacuteponse impulsionnelle infinie De faccedilon a pouvoir

tester notre filtre il a fallu geacuteneacuterer un eacutechelon de faccedilon software dans la meacutemoire du DSP

Le filtre numeacuterique est de la forme Y(n)=a1Y(n-1)+b1U(n-1)+ b0U(n)

Selon la freacutequence drsquoeacutechantillonnage a1= τ(Te+τ) b1= Te(Te+τ) et b0=0

Lrsquoeacutechelon est traiteacute par diffeacuterentes instructions notamment le MAC utiliseacute dans la multiplication

Partie filtrage

LT Y1 charge le multiplicateur dans le registre T

MPY XA1 multiplie

PAC place le reacutesultat de la multiplication dans

l rsquoaccumulateur

LT Y2 charge le multiplicateur dans le registre T

MPY XA2 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquoaccumulateur

LT U0 charge le multiplicateur dans le registre T

MPY XB0 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquo accumulateur

SACH Y04 stocke la partie haute du resultat ( 3 2 bi t s )

en le decalant de 4 bits a gauche = division

par 2^12

DMOV Y1 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y11048576gtY2)

DMOV Y0 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y01048576gtY1)

ANNEXE 4 asm exo4

4

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 6 Acquisition drsquoun signal venant de lrsquoexteacuterieur

Lors de cette seacuteance nous avons commenceacute par nous familiariser avec le codec

Le codec utiliseacute est un codec steacutereacuteo (sur deux voies) il preacutelegraveve les signaux analogiques preacutesents agrave son entreacutee

et les convertit en donneacutees numeacuteriques qui peuvent ecirctre ensuite traiteacutes par le DSPL il peut eacutegalement faire

lrsquoopeacuteration inverse cest-agrave-dire recevoir des informations numeacuteriques de la part du DSP et les convertir en

analogique de maniegravere agrave pouvoir les visualiser agrave lrsquooscilloscope dans notre cas

Cette exercice fait intervenir le principe de DMA (direct memory access)

Au niveau du DSP le DMA est un registre de 7 bits qui contient lrsquoadresse drsquoune donneacutee dans une page de

128 mots de la meacutemoire de donneacutees Drsquoun point de vue plus geacuteneacuteral le DMA est un module hardware qui

permet de deacutecharger le processeur lors drsquoune eacutechange de donneacutees avec un peacuteripheacuterique externe Le

microprocesseur est juste lagrave pour initier ou conclure le transfert

Les donneacutees numeacuteriques qui sont transmises par le codec au DSP doivent donc ecirctre stockeacutes quelque part

dans la meacutemoire Pour cela on utilise le principe du Ping et Pong

On a deux registres (droite et gauche ducirc au fait qursquoon utilise un codec steacutereacuteo) pour le ping et deux autres

registres pour le pong baseacutes sur le mecircme principe

Au deacutepart les donneacutees sont stockeacutes dans le PING une fois remplie on peut faire toutes les opeacuterations que

lrsquoon veut dessus pendant ce temps le registre PONG se remplit Cependant pour cette seacuteance il nrsquoeacutetait pas

demandeacute de faire drsquoopeacuterations sur la sinusoiumlde captureacutee

Manipulations

Lors de cette seacuteance en plus de comprendre le principe nous avons modifieacute la freacutequence drsquoeacutechantillonnage

et la freacutequence du signal captureacute nous avons pu observer le pheacutenomegravene de Gibbs qui apparaicirct quand on

prend fe = 2fsignal on a alors des freacutequences parasites qui apparaissent de quelques hertz De plus on

observe bien que quand Shannon nrsquoest pas respecteacute on nrsquoa plus rien en sortie

5

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 7

Filtrage drsquoune sinusoiumlde bruiteacutee

Dans un premier temps nous avons reacutecupeacutereacute les fichiers mis agrave notre disposition nous avons ainsi obtenu les

fichiers contenant toutes les valeurs de la sinusoiumlde bruiteacutee

Ces valeurs sont stockeacutees sur le mecircme principe que lrsquoacquisition du signal provenant de lrsquoexteacuterieur cest-agrave-

dire dans des buffers drsquoentreacutees Ping et Pong Cependant cette fois-ci on fait des opeacuterations sur les valeurs

contenues dans ces registres Selon la formule du filtre RII le calcul drsquoun eacutechantillon de sortie neacutecessite la

connaissance des quatre eacutechantillons drsquoentreacutee preacuteceacutedents Par conseacutequent en plus des buffer PING et PONG

on utilise deux autres buffers le delay buffer Ping et le delay buffer Pong

Le delay buffer ping dans notre cas il contient les 4 derniegraveres valeurs du buffer pong Il en est de mecircme

pour le delay buffer pong sauf qursquoil contient les quatre derniegraveres valeurs du buffer ping

Drsquoun point de vue meacutemoire afin de simplifier lrsquoutilisation des pointeurs on places ces registres agrave la suite

Delay buffer ping 0x003022

Sinusb_ping 0x003026

Delay buffer pong 0x003036

Sinusb pong 0x00303A

Enfin on impleacutemente le filtre RIF en utilisant lrsquoinstruction firsadd Ensuite nous avons fait tourner notre

programme et avons visualiser les courbes drsquoentreacutees et de sortie

ANNEXE 5 asm exo6

Seacuteance 8

Lrsquoexo 8 est un meacutelange de lrsquoexercice 7 et 6 il srsquoagit drsquoacqueacuterir une sinusoiumlde en temps reacuteel et de la filtrer

Pour nous lrsquointeacuterecirct de cet exercice eacutetait surtout de pouvoir comparer la vitesse drsquoexeacutecution selon si on

programmait en assembleur ou en C

6

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 2: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Analyse des modes drsquoadressage

En terme drsquoorganisation de la meacutemoire le DSP 5510 permet 3 types drsquoadressage

sect adressage absolu

On deacutesigne un endroit de la meacutemoire en donnant lrsquoadresse comme constante

sect adressage direct

Ceci permet lrsquoadressage par sauts (offset)

sect adressage indirect

Ce mode drsquoadressage utilise des pointeurs (ARn avec n de 0 agrave 7)

Organisation de la meacutemoire du DSP

Analyse fonctionnement exo1

ANNEXE 1 asm exo1

2

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 3Analyse de lrsquoadressage circulaire

Lrsquoadressage circulaire permet de ne pas faire de tests modulo sur les pointeurs On deacutefini la taille du Buffer

sur lequel pointe le pointeur en bout de Buffer le pointeur revient au deacutebut

Impleacutementation

1 initialiser la taille du buffer

2 configurer le bit ST2_55 pour deacutefinir la circulariteacute des pointeurs

3 Charger le registre de reacutefeacuterence pour la page de reacutefeacuterence

4 initialiser lrsquoadresse de deacutebut du buffer

5 Charger le pointeur avec des valeurs entre 0 et taille du buffer

Compilation et veacuterification du bon fonctionnement de lrsquoexercice 1 puis passage agrave lrsquoexercice 2

Seacuteance 4Cette seacuteance nous permis de mettre en application les notions drsquoadressage indirect et adressage

circulaire

On rentre dans un buffer les valeurs Q8 correspondantes aux lettres de lrsquoalphabet en majuscule

Lrsquoexercice consiste agrave transformer les majuscules en minuscules en pas agrave pas

1 Rentrer les majuscules

2 Effacer les majuscules

3 Ecrire les minuscules

Pour pouvoir visualiser dans la meacutemoire les diffeacuterentes eacutetapes nous avons utiliser le mode lsquoanimatersquo de

Code Composer Studio

ANNEXE 2 asm exo2 adressage direct

ANNEXE 3 asm exo3 adressage circulaire

3

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 5Le but de cette seacuteance a eacuteteacute de mettre au point un filtre agrave reacuteponse impulsionnelle infinie De faccedilon a pouvoir

tester notre filtre il a fallu geacuteneacuterer un eacutechelon de faccedilon software dans la meacutemoire du DSP

Le filtre numeacuterique est de la forme Y(n)=a1Y(n-1)+b1U(n-1)+ b0U(n)

Selon la freacutequence drsquoeacutechantillonnage a1= τ(Te+τ) b1= Te(Te+τ) et b0=0

Lrsquoeacutechelon est traiteacute par diffeacuterentes instructions notamment le MAC utiliseacute dans la multiplication

Partie filtrage

LT Y1 charge le multiplicateur dans le registre T

MPY XA1 multiplie

PAC place le reacutesultat de la multiplication dans

l rsquoaccumulateur

LT Y2 charge le multiplicateur dans le registre T

MPY XA2 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquoaccumulateur

LT U0 charge le multiplicateur dans le registre T

MPY XB0 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquo accumulateur

SACH Y04 stocke la partie haute du resultat ( 3 2 bi t s )

en le decalant de 4 bits a gauche = division

par 2^12

DMOV Y1 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y11048576gtY2)

DMOV Y0 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y01048576gtY1)

ANNEXE 4 asm exo4

4

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 6 Acquisition drsquoun signal venant de lrsquoexteacuterieur

Lors de cette seacuteance nous avons commenceacute par nous familiariser avec le codec

Le codec utiliseacute est un codec steacutereacuteo (sur deux voies) il preacutelegraveve les signaux analogiques preacutesents agrave son entreacutee

et les convertit en donneacutees numeacuteriques qui peuvent ecirctre ensuite traiteacutes par le DSPL il peut eacutegalement faire

lrsquoopeacuteration inverse cest-agrave-dire recevoir des informations numeacuteriques de la part du DSP et les convertir en

analogique de maniegravere agrave pouvoir les visualiser agrave lrsquooscilloscope dans notre cas

Cette exercice fait intervenir le principe de DMA (direct memory access)

Au niveau du DSP le DMA est un registre de 7 bits qui contient lrsquoadresse drsquoune donneacutee dans une page de

128 mots de la meacutemoire de donneacutees Drsquoun point de vue plus geacuteneacuteral le DMA est un module hardware qui

permet de deacutecharger le processeur lors drsquoune eacutechange de donneacutees avec un peacuteripheacuterique externe Le

microprocesseur est juste lagrave pour initier ou conclure le transfert

Les donneacutees numeacuteriques qui sont transmises par le codec au DSP doivent donc ecirctre stockeacutes quelque part

dans la meacutemoire Pour cela on utilise le principe du Ping et Pong

On a deux registres (droite et gauche ducirc au fait qursquoon utilise un codec steacutereacuteo) pour le ping et deux autres

registres pour le pong baseacutes sur le mecircme principe

Au deacutepart les donneacutees sont stockeacutes dans le PING une fois remplie on peut faire toutes les opeacuterations que

lrsquoon veut dessus pendant ce temps le registre PONG se remplit Cependant pour cette seacuteance il nrsquoeacutetait pas

demandeacute de faire drsquoopeacuterations sur la sinusoiumlde captureacutee

Manipulations

Lors de cette seacuteance en plus de comprendre le principe nous avons modifieacute la freacutequence drsquoeacutechantillonnage

et la freacutequence du signal captureacute nous avons pu observer le pheacutenomegravene de Gibbs qui apparaicirct quand on

prend fe = 2fsignal on a alors des freacutequences parasites qui apparaissent de quelques hertz De plus on

observe bien que quand Shannon nrsquoest pas respecteacute on nrsquoa plus rien en sortie

5

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 7

Filtrage drsquoune sinusoiumlde bruiteacutee

Dans un premier temps nous avons reacutecupeacutereacute les fichiers mis agrave notre disposition nous avons ainsi obtenu les

fichiers contenant toutes les valeurs de la sinusoiumlde bruiteacutee

Ces valeurs sont stockeacutees sur le mecircme principe que lrsquoacquisition du signal provenant de lrsquoexteacuterieur cest-agrave-

dire dans des buffers drsquoentreacutees Ping et Pong Cependant cette fois-ci on fait des opeacuterations sur les valeurs

contenues dans ces registres Selon la formule du filtre RII le calcul drsquoun eacutechantillon de sortie neacutecessite la

connaissance des quatre eacutechantillons drsquoentreacutee preacuteceacutedents Par conseacutequent en plus des buffer PING et PONG

on utilise deux autres buffers le delay buffer Ping et le delay buffer Pong

Le delay buffer ping dans notre cas il contient les 4 derniegraveres valeurs du buffer pong Il en est de mecircme

pour le delay buffer pong sauf qursquoil contient les quatre derniegraveres valeurs du buffer ping

Drsquoun point de vue meacutemoire afin de simplifier lrsquoutilisation des pointeurs on places ces registres agrave la suite

Delay buffer ping 0x003022

Sinusb_ping 0x003026

Delay buffer pong 0x003036

Sinusb pong 0x00303A

Enfin on impleacutemente le filtre RIF en utilisant lrsquoinstruction firsadd Ensuite nous avons fait tourner notre

programme et avons visualiser les courbes drsquoentreacutees et de sortie

ANNEXE 5 asm exo6

Seacuteance 8

Lrsquoexo 8 est un meacutelange de lrsquoexercice 7 et 6 il srsquoagit drsquoacqueacuterir une sinusoiumlde en temps reacuteel et de la filtrer

Pour nous lrsquointeacuterecirct de cet exercice eacutetait surtout de pouvoir comparer la vitesse drsquoexeacutecution selon si on

programmait en assembleur ou en C

6

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 3: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 3Analyse de lrsquoadressage circulaire

Lrsquoadressage circulaire permet de ne pas faire de tests modulo sur les pointeurs On deacutefini la taille du Buffer

sur lequel pointe le pointeur en bout de Buffer le pointeur revient au deacutebut

Impleacutementation

1 initialiser la taille du buffer

2 configurer le bit ST2_55 pour deacutefinir la circulariteacute des pointeurs

3 Charger le registre de reacutefeacuterence pour la page de reacutefeacuterence

4 initialiser lrsquoadresse de deacutebut du buffer

5 Charger le pointeur avec des valeurs entre 0 et taille du buffer

Compilation et veacuterification du bon fonctionnement de lrsquoexercice 1 puis passage agrave lrsquoexercice 2

Seacuteance 4Cette seacuteance nous permis de mettre en application les notions drsquoadressage indirect et adressage

circulaire

On rentre dans un buffer les valeurs Q8 correspondantes aux lettres de lrsquoalphabet en majuscule

Lrsquoexercice consiste agrave transformer les majuscules en minuscules en pas agrave pas

1 Rentrer les majuscules

2 Effacer les majuscules

3 Ecrire les minuscules

Pour pouvoir visualiser dans la meacutemoire les diffeacuterentes eacutetapes nous avons utiliser le mode lsquoanimatersquo de

Code Composer Studio

ANNEXE 2 asm exo2 adressage direct

ANNEXE 3 asm exo3 adressage circulaire

3

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 5Le but de cette seacuteance a eacuteteacute de mettre au point un filtre agrave reacuteponse impulsionnelle infinie De faccedilon a pouvoir

tester notre filtre il a fallu geacuteneacuterer un eacutechelon de faccedilon software dans la meacutemoire du DSP

Le filtre numeacuterique est de la forme Y(n)=a1Y(n-1)+b1U(n-1)+ b0U(n)

Selon la freacutequence drsquoeacutechantillonnage a1= τ(Te+τ) b1= Te(Te+τ) et b0=0

Lrsquoeacutechelon est traiteacute par diffeacuterentes instructions notamment le MAC utiliseacute dans la multiplication

Partie filtrage

LT Y1 charge le multiplicateur dans le registre T

MPY XA1 multiplie

PAC place le reacutesultat de la multiplication dans

l rsquoaccumulateur

LT Y2 charge le multiplicateur dans le registre T

MPY XA2 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquoaccumulateur

LT U0 charge le multiplicateur dans le registre T

MPY XB0 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquo accumulateur

SACH Y04 stocke la partie haute du resultat ( 3 2 bi t s )

en le decalant de 4 bits a gauche = division

par 2^12

DMOV Y1 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y11048576gtY2)

DMOV Y0 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y01048576gtY1)

ANNEXE 4 asm exo4

4

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 6 Acquisition drsquoun signal venant de lrsquoexteacuterieur

Lors de cette seacuteance nous avons commenceacute par nous familiariser avec le codec

Le codec utiliseacute est un codec steacutereacuteo (sur deux voies) il preacutelegraveve les signaux analogiques preacutesents agrave son entreacutee

et les convertit en donneacutees numeacuteriques qui peuvent ecirctre ensuite traiteacutes par le DSPL il peut eacutegalement faire

lrsquoopeacuteration inverse cest-agrave-dire recevoir des informations numeacuteriques de la part du DSP et les convertir en

analogique de maniegravere agrave pouvoir les visualiser agrave lrsquooscilloscope dans notre cas

Cette exercice fait intervenir le principe de DMA (direct memory access)

Au niveau du DSP le DMA est un registre de 7 bits qui contient lrsquoadresse drsquoune donneacutee dans une page de

128 mots de la meacutemoire de donneacutees Drsquoun point de vue plus geacuteneacuteral le DMA est un module hardware qui

permet de deacutecharger le processeur lors drsquoune eacutechange de donneacutees avec un peacuteripheacuterique externe Le

microprocesseur est juste lagrave pour initier ou conclure le transfert

Les donneacutees numeacuteriques qui sont transmises par le codec au DSP doivent donc ecirctre stockeacutes quelque part

dans la meacutemoire Pour cela on utilise le principe du Ping et Pong

On a deux registres (droite et gauche ducirc au fait qursquoon utilise un codec steacutereacuteo) pour le ping et deux autres

registres pour le pong baseacutes sur le mecircme principe

Au deacutepart les donneacutees sont stockeacutes dans le PING une fois remplie on peut faire toutes les opeacuterations que

lrsquoon veut dessus pendant ce temps le registre PONG se remplit Cependant pour cette seacuteance il nrsquoeacutetait pas

demandeacute de faire drsquoopeacuterations sur la sinusoiumlde captureacutee

Manipulations

Lors de cette seacuteance en plus de comprendre le principe nous avons modifieacute la freacutequence drsquoeacutechantillonnage

et la freacutequence du signal captureacute nous avons pu observer le pheacutenomegravene de Gibbs qui apparaicirct quand on

prend fe = 2fsignal on a alors des freacutequences parasites qui apparaissent de quelques hertz De plus on

observe bien que quand Shannon nrsquoest pas respecteacute on nrsquoa plus rien en sortie

5

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 7

Filtrage drsquoune sinusoiumlde bruiteacutee

Dans un premier temps nous avons reacutecupeacutereacute les fichiers mis agrave notre disposition nous avons ainsi obtenu les

fichiers contenant toutes les valeurs de la sinusoiumlde bruiteacutee

Ces valeurs sont stockeacutees sur le mecircme principe que lrsquoacquisition du signal provenant de lrsquoexteacuterieur cest-agrave-

dire dans des buffers drsquoentreacutees Ping et Pong Cependant cette fois-ci on fait des opeacuterations sur les valeurs

contenues dans ces registres Selon la formule du filtre RII le calcul drsquoun eacutechantillon de sortie neacutecessite la

connaissance des quatre eacutechantillons drsquoentreacutee preacuteceacutedents Par conseacutequent en plus des buffer PING et PONG

on utilise deux autres buffers le delay buffer Ping et le delay buffer Pong

Le delay buffer ping dans notre cas il contient les 4 derniegraveres valeurs du buffer pong Il en est de mecircme

pour le delay buffer pong sauf qursquoil contient les quatre derniegraveres valeurs du buffer ping

Drsquoun point de vue meacutemoire afin de simplifier lrsquoutilisation des pointeurs on places ces registres agrave la suite

Delay buffer ping 0x003022

Sinusb_ping 0x003026

Delay buffer pong 0x003036

Sinusb pong 0x00303A

Enfin on impleacutemente le filtre RIF en utilisant lrsquoinstruction firsadd Ensuite nous avons fait tourner notre

programme et avons visualiser les courbes drsquoentreacutees et de sortie

ANNEXE 5 asm exo6

Seacuteance 8

Lrsquoexo 8 est un meacutelange de lrsquoexercice 7 et 6 il srsquoagit drsquoacqueacuterir une sinusoiumlde en temps reacuteel et de la filtrer

Pour nous lrsquointeacuterecirct de cet exercice eacutetait surtout de pouvoir comparer la vitesse drsquoexeacutecution selon si on

programmait en assembleur ou en C

6

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 4: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 5Le but de cette seacuteance a eacuteteacute de mettre au point un filtre agrave reacuteponse impulsionnelle infinie De faccedilon a pouvoir

tester notre filtre il a fallu geacuteneacuterer un eacutechelon de faccedilon software dans la meacutemoire du DSP

Le filtre numeacuterique est de la forme Y(n)=a1Y(n-1)+b1U(n-1)+ b0U(n)

Selon la freacutequence drsquoeacutechantillonnage a1= τ(Te+τ) b1= Te(Te+τ) et b0=0

Lrsquoeacutechelon est traiteacute par diffeacuterentes instructions notamment le MAC utiliseacute dans la multiplication

Partie filtrage

LT Y1 charge le multiplicateur dans le registre T

MPY XA1 multiplie

PAC place le reacutesultat de la multiplication dans

l rsquoaccumulateur

LT Y2 charge le multiplicateur dans le registre T

MPY XA2 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquoaccumulateur

LT U0 charge le multiplicateur dans le registre T

MPY XB0 multiplie

APAC ajoute le reacutesultat de la multiplication agrave

l rsquo accumulateur

SACH Y04 stocke la partie haute du resultat ( 3 2 bi t s )

en le decalant de 4 bits a gauche = division

par 2^12

DMOV Y1 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y11048576gtY2)

DMOV Y0 deacuteplace drsquoun emplacement de meacutemoire data

pour creacuteer le deacutelai ( Y01048576gtY1)

ANNEXE 4 asm exo4

4

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 6 Acquisition drsquoun signal venant de lrsquoexteacuterieur

Lors de cette seacuteance nous avons commenceacute par nous familiariser avec le codec

Le codec utiliseacute est un codec steacutereacuteo (sur deux voies) il preacutelegraveve les signaux analogiques preacutesents agrave son entreacutee

et les convertit en donneacutees numeacuteriques qui peuvent ecirctre ensuite traiteacutes par le DSPL il peut eacutegalement faire

lrsquoopeacuteration inverse cest-agrave-dire recevoir des informations numeacuteriques de la part du DSP et les convertir en

analogique de maniegravere agrave pouvoir les visualiser agrave lrsquooscilloscope dans notre cas

Cette exercice fait intervenir le principe de DMA (direct memory access)

Au niveau du DSP le DMA est un registre de 7 bits qui contient lrsquoadresse drsquoune donneacutee dans une page de

128 mots de la meacutemoire de donneacutees Drsquoun point de vue plus geacuteneacuteral le DMA est un module hardware qui

permet de deacutecharger le processeur lors drsquoune eacutechange de donneacutees avec un peacuteripheacuterique externe Le

microprocesseur est juste lagrave pour initier ou conclure le transfert

Les donneacutees numeacuteriques qui sont transmises par le codec au DSP doivent donc ecirctre stockeacutes quelque part

dans la meacutemoire Pour cela on utilise le principe du Ping et Pong

On a deux registres (droite et gauche ducirc au fait qursquoon utilise un codec steacutereacuteo) pour le ping et deux autres

registres pour le pong baseacutes sur le mecircme principe

Au deacutepart les donneacutees sont stockeacutes dans le PING une fois remplie on peut faire toutes les opeacuterations que

lrsquoon veut dessus pendant ce temps le registre PONG se remplit Cependant pour cette seacuteance il nrsquoeacutetait pas

demandeacute de faire drsquoopeacuterations sur la sinusoiumlde captureacutee

Manipulations

Lors de cette seacuteance en plus de comprendre le principe nous avons modifieacute la freacutequence drsquoeacutechantillonnage

et la freacutequence du signal captureacute nous avons pu observer le pheacutenomegravene de Gibbs qui apparaicirct quand on

prend fe = 2fsignal on a alors des freacutequences parasites qui apparaissent de quelques hertz De plus on

observe bien que quand Shannon nrsquoest pas respecteacute on nrsquoa plus rien en sortie

5

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 7

Filtrage drsquoune sinusoiumlde bruiteacutee

Dans un premier temps nous avons reacutecupeacutereacute les fichiers mis agrave notre disposition nous avons ainsi obtenu les

fichiers contenant toutes les valeurs de la sinusoiumlde bruiteacutee

Ces valeurs sont stockeacutees sur le mecircme principe que lrsquoacquisition du signal provenant de lrsquoexteacuterieur cest-agrave-

dire dans des buffers drsquoentreacutees Ping et Pong Cependant cette fois-ci on fait des opeacuterations sur les valeurs

contenues dans ces registres Selon la formule du filtre RII le calcul drsquoun eacutechantillon de sortie neacutecessite la

connaissance des quatre eacutechantillons drsquoentreacutee preacuteceacutedents Par conseacutequent en plus des buffer PING et PONG

on utilise deux autres buffers le delay buffer Ping et le delay buffer Pong

Le delay buffer ping dans notre cas il contient les 4 derniegraveres valeurs du buffer pong Il en est de mecircme

pour le delay buffer pong sauf qursquoil contient les quatre derniegraveres valeurs du buffer ping

Drsquoun point de vue meacutemoire afin de simplifier lrsquoutilisation des pointeurs on places ces registres agrave la suite

Delay buffer ping 0x003022

Sinusb_ping 0x003026

Delay buffer pong 0x003036

Sinusb pong 0x00303A

Enfin on impleacutemente le filtre RIF en utilisant lrsquoinstruction firsadd Ensuite nous avons fait tourner notre

programme et avons visualiser les courbes drsquoentreacutees et de sortie

ANNEXE 5 asm exo6

Seacuteance 8

Lrsquoexo 8 est un meacutelange de lrsquoexercice 7 et 6 il srsquoagit drsquoacqueacuterir une sinusoiumlde en temps reacuteel et de la filtrer

Pour nous lrsquointeacuterecirct de cet exercice eacutetait surtout de pouvoir comparer la vitesse drsquoexeacutecution selon si on

programmait en assembleur ou en C

6

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 5: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 6 Acquisition drsquoun signal venant de lrsquoexteacuterieur

Lors de cette seacuteance nous avons commenceacute par nous familiariser avec le codec

Le codec utiliseacute est un codec steacutereacuteo (sur deux voies) il preacutelegraveve les signaux analogiques preacutesents agrave son entreacutee

et les convertit en donneacutees numeacuteriques qui peuvent ecirctre ensuite traiteacutes par le DSPL il peut eacutegalement faire

lrsquoopeacuteration inverse cest-agrave-dire recevoir des informations numeacuteriques de la part du DSP et les convertir en

analogique de maniegravere agrave pouvoir les visualiser agrave lrsquooscilloscope dans notre cas

Cette exercice fait intervenir le principe de DMA (direct memory access)

Au niveau du DSP le DMA est un registre de 7 bits qui contient lrsquoadresse drsquoune donneacutee dans une page de

128 mots de la meacutemoire de donneacutees Drsquoun point de vue plus geacuteneacuteral le DMA est un module hardware qui

permet de deacutecharger le processeur lors drsquoune eacutechange de donneacutees avec un peacuteripheacuterique externe Le

microprocesseur est juste lagrave pour initier ou conclure le transfert

Les donneacutees numeacuteriques qui sont transmises par le codec au DSP doivent donc ecirctre stockeacutes quelque part

dans la meacutemoire Pour cela on utilise le principe du Ping et Pong

On a deux registres (droite et gauche ducirc au fait qursquoon utilise un codec steacutereacuteo) pour le ping et deux autres

registres pour le pong baseacutes sur le mecircme principe

Au deacutepart les donneacutees sont stockeacutes dans le PING une fois remplie on peut faire toutes les opeacuterations que

lrsquoon veut dessus pendant ce temps le registre PONG se remplit Cependant pour cette seacuteance il nrsquoeacutetait pas

demandeacute de faire drsquoopeacuterations sur la sinusoiumlde captureacutee

Manipulations

Lors de cette seacuteance en plus de comprendre le principe nous avons modifieacute la freacutequence drsquoeacutechantillonnage

et la freacutequence du signal captureacute nous avons pu observer le pheacutenomegravene de Gibbs qui apparaicirct quand on

prend fe = 2fsignal on a alors des freacutequences parasites qui apparaissent de quelques hertz De plus on

observe bien que quand Shannon nrsquoest pas respecteacute on nrsquoa plus rien en sortie

5

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 7

Filtrage drsquoune sinusoiumlde bruiteacutee

Dans un premier temps nous avons reacutecupeacutereacute les fichiers mis agrave notre disposition nous avons ainsi obtenu les

fichiers contenant toutes les valeurs de la sinusoiumlde bruiteacutee

Ces valeurs sont stockeacutees sur le mecircme principe que lrsquoacquisition du signal provenant de lrsquoexteacuterieur cest-agrave-

dire dans des buffers drsquoentreacutees Ping et Pong Cependant cette fois-ci on fait des opeacuterations sur les valeurs

contenues dans ces registres Selon la formule du filtre RII le calcul drsquoun eacutechantillon de sortie neacutecessite la

connaissance des quatre eacutechantillons drsquoentreacutee preacuteceacutedents Par conseacutequent en plus des buffer PING et PONG

on utilise deux autres buffers le delay buffer Ping et le delay buffer Pong

Le delay buffer ping dans notre cas il contient les 4 derniegraveres valeurs du buffer pong Il en est de mecircme

pour le delay buffer pong sauf qursquoil contient les quatre derniegraveres valeurs du buffer ping

Drsquoun point de vue meacutemoire afin de simplifier lrsquoutilisation des pointeurs on places ces registres agrave la suite

Delay buffer ping 0x003022

Sinusb_ping 0x003026

Delay buffer pong 0x003036

Sinusb pong 0x00303A

Enfin on impleacutemente le filtre RIF en utilisant lrsquoinstruction firsadd Ensuite nous avons fait tourner notre

programme et avons visualiser les courbes drsquoentreacutees et de sortie

ANNEXE 5 asm exo6

Seacuteance 8

Lrsquoexo 8 est un meacutelange de lrsquoexercice 7 et 6 il srsquoagit drsquoacqueacuterir une sinusoiumlde en temps reacuteel et de la filtrer

Pour nous lrsquointeacuterecirct de cet exercice eacutetait surtout de pouvoir comparer la vitesse drsquoexeacutecution selon si on

programmait en assembleur ou en C

6

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 6: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

Seacuteance 7

Filtrage drsquoune sinusoiumlde bruiteacutee

Dans un premier temps nous avons reacutecupeacutereacute les fichiers mis agrave notre disposition nous avons ainsi obtenu les

fichiers contenant toutes les valeurs de la sinusoiumlde bruiteacutee

Ces valeurs sont stockeacutees sur le mecircme principe que lrsquoacquisition du signal provenant de lrsquoexteacuterieur cest-agrave-

dire dans des buffers drsquoentreacutees Ping et Pong Cependant cette fois-ci on fait des opeacuterations sur les valeurs

contenues dans ces registres Selon la formule du filtre RII le calcul drsquoun eacutechantillon de sortie neacutecessite la

connaissance des quatre eacutechantillons drsquoentreacutee preacuteceacutedents Par conseacutequent en plus des buffer PING et PONG

on utilise deux autres buffers le delay buffer Ping et le delay buffer Pong

Le delay buffer ping dans notre cas il contient les 4 derniegraveres valeurs du buffer pong Il en est de mecircme

pour le delay buffer pong sauf qursquoil contient les quatre derniegraveres valeurs du buffer ping

Drsquoun point de vue meacutemoire afin de simplifier lrsquoutilisation des pointeurs on places ces registres agrave la suite

Delay buffer ping 0x003022

Sinusb_ping 0x003026

Delay buffer pong 0x003036

Sinusb pong 0x00303A

Enfin on impleacutemente le filtre RIF en utilisant lrsquoinstruction firsadd Ensuite nous avons fait tourner notre

programme et avons visualiser les courbes drsquoentreacutees et de sortie

ANNEXE 5 asm exo6

Seacuteance 8

Lrsquoexo 8 est un meacutelange de lrsquoexercice 7 et 6 il srsquoagit drsquoacqueacuterir une sinusoiumlde en temps reacuteel et de la filtrer

Pour nous lrsquointeacuterecirct de cet exercice eacutetait surtout de pouvoir comparer la vitesse drsquoexeacutecution selon si on

programmait en assembleur ou en C

6

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 7: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste Au mecircme titre que pour lrsquoexercice 7 on a plusieurs buffers

- deux buffers drsquoentreacutee

- un buffer de sortie

- un buffer contenant les coefficients

Dans un premier temps nous avons programmeacute le filtre en assembleur et nous lrsquoavons appeleacute agrave partir du

programme en C Au deacutepart cela ne fonctionnait pas ni le filtre ni lrsquoacquisition de la sinusoiumlde en entreacutee

Nous en avons donc deacuteduis que le problegraveme ne venait pas de notre programme Dans un premier temps nous

avons effectueacute un reset soft mais cela nrsquoa rien changeacute enfin nous avons fait un reset hardware et ensuite

notre programme a fonctionneacute Nous en avons deacuteduis que crsquoeacutetait juste la carte qui avait planteacutee

Dans un deuxiegraveme temps nous programmons notre filtre directement en C au premier essai nous nrsquoavons

eu aucun reacutesultat cependant le programme compilait bien En scrutant les buffers de sortie nous avons

remarqueacute pratiquement aucune variation des eacutechantillons autour de zeacutero ce qui expliquait lrsquoabsence de signal

agrave lrsquooscilloscope Nous avons tregraves vite deacutecouvert le problegraveme au deacutepart comme on lrsquoavait fait en assembleur

on divise par 256 dans ce cas les eacutechantillons ont des valeurs beaucoup trop petites pour pouvoir le

visualiser agrave lrsquooscilloscope Nous avons donc diviser par 128 et lagrave nous avons obtenu une belle sinusoiumlde

atteacutenueacutee par rapport agrave lrsquoentreacutee

Cependant nous nrsquoavons pas eu le temps de comparer le temps de calcul selon si on programmait le filtre en

assembleur ou en C Mais a priori lorsqursquoon programme en assembleur le temps drsquoexeacutecution est plus cours

que lorsqursquoon programme en C

7

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 8: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 1 title Exercice 1 bss MAJUSCULE 26 permet dallouer de la meacutemoire ici 26 cases de

16 bits

minuscule byte abcdefghijklmnopqrstuvwxyz minuscule est un pointeur sur octet qui pointe sur z (premiegravere donneacutee) (=signifie quon travaille en ASCI)

text global _ex1

_ex1 _xx passerelle assembleurC

efface mov MAJUSCULE ar2 charge la valeur majuscule(adresse) dans ar2 mov 26AC1

mov 0 AC0suivant mov AC0 ar2+ on charge le contenu de AC0 dans ar2

puis on increacutemente ar2 sub 1 AC1 bcc suivant AC1=0 branchement conditionnel (bcc label condition)

debut mov 12BK47bset AR4LCamov 000000hXAR4mov minusculeBSA45mov 0000hAR4 on stocke des adresses

dans ar1 et ar2 mov 6BK03 modulo 6 bset AR2LC initialisation en mode adressage circulaire amov 000000hXAR2 on travaille sur la page 0 mov MAJUSCULEBSA23 mov 0000hAR2 mov 26AC1 loop mov ar4+ AC0 on met z dans Ar1 ensuite on vient pointer sur y

sub 20h AC0 20h correspond a la marge entre minuscule et majuscule en ASCI)

mov AC0 ar2+ on charge AC0 dans une premiegravere case de majuscule

sub 1 AC1 on soustrait 1 a AC1 (initialiseacute agrave 26) compteur de bouclebcc loop AC1=0 branchement conditionnel

ret le pgme est fini on revient au main

8

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 9: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 2ercice 2 title Exercice 2

data minuscule byte zyxwvutsrqponmlkjihgfedcba bss MAJUSCULE 26 text global _ex2_ex2

efface mov MAJUSCULE ar2 mov ST1AC1 configuration de ST1 si cela nest pas automatique or 0x8000AC1 mov AC1ST1

mov 26 BRC0mov 0 A

rptb finblocksuivant mov AC0 ar2+finblock nopdebut nop

mov minuscule ar1 mov MAJUSCULE ar2 mov 26 AC1 loop mov ar1+ AC0 sub 20h AC0 mov AC0 ar2+

sub 1 AC1

bcc loop AC1=0

ret

end

9

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 10: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 3 title Exercice 3 filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un

data echelon word 00000000unununununununununununununununununununununununun

coefficient word b1b0a1 bss sortie 32

un set 0x0100

a1 set 0x00D1 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0017b0 set 0x0017

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex2

_ex2mov echelonar2mov 0ar2mov sortiear3mov 0ar3mov 32AC1

loopmov coefficientar1mov 0AC0MACM ar2+ar1+AC0MACM ar2ar1+AC0MACM ar3+ar1AC0mov -8T0sftl AC0T0AC0mov AC0AR3

sub 1AC1bcc loopAC1=0ret

10

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 11: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

end

ANNEXE 4 title Exercice 4 adressage immediateAbsoluteIndirect avec increacutementation avec repeat block explication adressage circulaire dans le poly voir lexplication de linstruction mac filtre passe bas du 1er ordre (11+To) discreacutetiseacute yn= a1Yn-1 + b1Un-1 + b0Un on va utiliser linstruction MACM[R][40] [T3 = ][uns(]Xmem[)] [uns(]Ymem[)] ACx gtgt 16[ ACy] ACy = (ACx gtgt 16) + (Xmem Ymem) il nous faut plusieurs pointeurs AR1 pointe sur les eacutechantillons dentreacutee AR2 pointe sur les eacutechantillons de sortie AR3 pointe sur les coefficients qui sont rangeacutes de la maniegravere suivante a1 b1 b0 dans un premier temps on fait une boucle 32 on verra par la suite si on ajoute des delais buffers

data

input word

00000000unununununununununununununununununununununununun placeacute agrave ladresse h dans la data memory

coeff word a1b1b0 bss OUTPUT 32

placeacute agrave ladresse h dans la data memory

un set 0x0100 pour info codage Q8

a1 set 0x0000 agrave deacutefinir par calcul coeff sur Yn-1b1 set 0x0000b0 set 0x0000

exposant set -8 exposant nombre de deacutecalage agrave reacutealiser apregraves multiplication

text global _ex4

11

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 12: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

_ex4

efface mov OUTPUT ar2 mov 32AC1 mov AC1 BRC0

mov 0AC0

rptb finblockfinblock mov AC0 ar2+

debut_filtre mov input ar1 mov OUTPUT ar2

mov 0AC0

mov 32AC2

loop mov coeff ar3 yn= a1Yn-1 + b1Un-1 + b0Un ACy = (ACx gtgt 16) + (Xmem Ymem)

MACM ar2+ ar3+ AC0 gtgt 16 AC0 ytemp=a1Yn-1 il est neacutecessaire davoir un premier eacutechantillon de sortie agrave 0 MACM ar1+ ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1

MACM ar1 ar3+ AC0 gtgt 16 AC0 ytemp=ytemp+b1Un-1+b0un il est neacutecessaire davoir un premier eacutechantillon dentreacutee on na pas modifier le pointeur detreacutee pour quil soit en position au tour suivant

sfta AC0exposant mov AC0 ar2 rangement de leacutechantillon de sortie agrave veacuterifier

sub 1 AC2 bcc loop AC2=0

ret

end

12

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 13: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

ANNEXE 5-----------------------------------EX8- FIR en C -------------------------------

---------------------------DECLARATIONS--------------------------------------

int COEFF[4]=00x00090x00330x0052 les coefficients h0 agrave h3 du filtre FIR int COEFF[4]=00x00000x00000x0100 les coefficients h0 agrave h3 du filtre FIR agrave 1 ne filtre pas

coeff[0] nest pas utiliseacute on garde cette forme pour la compatibiliteacute avec lassembleur

-----------------------------FONCTION FIR----------------------------------------

void cfir(Int16 data int coeff Int16 results Int16 blksize) int i long addsamp long samp_out

i va balayer lensemble du buffer il indique agrave un instant leacutechantillon le plus ancien pour effectuer notre filtre on devra donc additionner xn-4 et xn soit data[i] et data[i+4] multiplier par h1 coeff[0] additionner xn-3 et xn-1 soit data[i+1] et data[i+3] multiplier par h2 coeff[1] multiplier xn-2 data[i+2] par h3 coeff[2] attention aux deacutebordements si on ne respecte pas le format des variables il est indispensable de faire passer lechantillon int dans un long avant de faire les calculs

dans ce cas on implante le Cfir dans lexercice 7 (qui devient ex8) le buffer data est le delaybuffer (suivi du vrai buffer) Ping ou Pong les coeffs le result sera le gbuffer lordre du filtre nest pas passeacute en paramegravetre blocksize deacutefinit la taille du buffer sur laquelle on passe le filtre BUFFSIZE2 attention on a ajouteacute agrave blocksize order-1 eacutechantillons dans le delaybuffer le filtre deacuteborde donc sur un nombre +grand deacutechantillons toutefois lordre na pas besoin decirctre passeacute en paramegravetre on le retrouve de faccedilon implicite dans le i+4

for (i = 0 i lt blksize i++) DSK5510_LED_toggle(1) DSK5510_LED_toggle(1)

13

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 14: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste DSK5510_LED_toggle(1)

addsamp=data[i] addsamp=addsamp+data[i+4]

samp_out=(coeff[1]addsamp) samp_out=(coeff[1](addsamp+data[i+4])) addsamp=data[i+1] addsamp=addsamp+data[i+3] samp_out= samp_out+(coeff[2]addsamp) addsamp=data[i+2] samp_out= samp_out+(coeff[3]addsamp) results[i]= data[i] pour test

results[i] = samp_out256 256 lorsque lon met en place ce filtre le deacutebit musical est saccadeacute et deacuteformeacute on a pourtant mis le coeff agrave 1 pour ne pas filtrer DSK5510_LED_toggle(1)

14

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15

Page 15: INTRO - Freelionel.goub.free.fr/==COURS==/N4/OPTIONS/Archive/UO DSP... · Web view.global _ex2 _ex2 efface mov #MAJUSCULE, ar2; mov ST1,AC1 configuration de ST1 si cela n'est pas

CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste

15