Sie sind auf Seite 1von 4

Département : Génie électrique

Filière d’Ingénieur : Génie électrique


Option Electrotechnique et Electronique Industrielle

TP3 :

Optimisation du filtre FIR

sur la carte DSK6713

Réalisé par :
 TAHIR Badr

Encadré par :
Mr : Abdessamd KLILOU
Année universitaire 2019-2020
TP3 : Optimisation du filtre FIR sur la carte DSK6713

1- Objectifs du TP :
Les objectifs de ce TP sont :
Mesurer le temps d’exécution du programme à l’aide du périphérique Timer.

 Calcul de l’efficacité en MAC/cycle.

 Réduction du temps d’exécution en utilisant les options de la compilation.

 Maitrise de l’emplacement des données.

2- Mesure de temps d’exécution :

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "FIR_Coeff.h"
#include "Input.h"
#include "Output_Ref.h"
#include "csl_timer.h"

#pragma DATA_SECTION(Input, ".Input_DATA");


#pragma DATA_SECTION(Output, ".Output_DATA");

#pragma DATA_SECTION(X_BUF, ".X_BUF_DATA");


#pragma DATA_SECTION(Coeff, ".Coeff_DATA");

float X_BUF[N+1];
float Output[Taille_Input];
unsigned long int start,stop,overhead,diff;

float Filtre_FIR(float xn);


void main(){
int i;
int Not_OK=0;
int OK= 0 ;
float erreur;
printf("start of program\n");

TIMER_Handle hTimer;
hTimer = TIMER_open(TIMER_DEVANY, 0);
TIMER_configArgs(hTimer, 0x000002C0, 0xFFFFFFFF, 0x00000000);

start = TIMER_getCount(hTimer);
stop = TIMER_getCount(hTimer);
overhead = stop - start;

for(i=0; i <= N; i++){

2
X_BUF[i]=0;
}

for(i=0; i <= Taille_Input; i++){


Output[i]=0;
}

start = TIMER_getCount(hTimer);

for(i=0; i < Taille_Input ; i++)


Output[i] = Filtre_FIR(Input[i]);

stop = TIMER_getCount(hTimer);
diff = (stop -start) -overhead;
printf("le nombre de cycle est : %d cycles \n",diff*4);

for(i=0;i<Taille_Input;i++)
{
erreur = fabs(Output_Ref[i] - Output[i]);
if (erreur > 0.001)
Not_OK++;
else
OK++;
}
printf("OK : %d\n",OK);
printf("Not_OK : %d\n",Not_OK);

TIMER_close(hTimer);
printf("end of program\n");

float Filtre_FIR(float xn){


float yn=0;
int k;
X_BUF[0] = xn;
for(k=N-1;k>=0;k--)
{
yn+= X_BUF[k]*Coeff[k];
X_BUF[k+1] = X_BUF[k];
}
return(yn);
}

3- Calcule de l’efficacité :
Efficacité (MAC/CYCLE)=(𝑛𝑜𝑚𝑏𝑟𝑒 𝑑𝑒 𝑀𝐴𝐶 𝑡ℎé𝑜𝑟𝑖𝑞𝑢𝑒)/(𝑛𝑜𝑚𝑟𝑒 𝑑𝑒 𝑐𝑦𝑐𝑙𝑒
𝑚𝑒𝑠𝑢𝑟é𝑒)
Pour le cas d’un filtre FIR, on a :
 Nombres des coefficients du filtre : N=101

3
 Taille de signal d’entrée : 800
Donc le nombre total de MAC théorique est égal à 800*101=808000

Résultats par simulation :

Niveau Nombre Efficacité en Temps


d’optimisation de cycles MAC/cycle D’exécution(ms)
off 3358276 0.0240599641 14.92567111
0 2615736 0.03088996749 11.62549333
1 1720532 0.04696221866 7.646808889
2 173492 0.4657275263 0.7710755556
3 173492 0.4657275263 0.7710755556

C- tester la vitesse d’exécution du programme en fonction d’emplacement des


coefficient, Xbuffer, Input et Output :

Scénario Nombre de cycle Temps d’exécution Efficacité


mesure (ms) (MAC/cycle)
Input et Output L1 173372 0.7705422222 0.4660498812
Coefficients et X_buffer L1
Input et Output L2 173360 0.7704888889 0.4660821412
Coefficients et X_buffer L2
Input et Output DRAM 11304152 50.24067556 0.00714781613
Coefficients et X_buffer DRAM
Input et Output DRAM 259512 1.153386667 0.3113536176
Coefficients et X_buffer L1
Input et Output L1 11203232 49.79214222 0.007212204478
Coefficients et X_buffer DRAM

Conclusion :

Il faut éviter de mettre les coefficients (X-BUFFER) dans la mémoire externe


DRAM.