Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
CHESTIN Myriam RAPPORT DSP ISEN4MITCHELL Batiste
15