Вы находитесь на странице: 1из 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*(7+6)=10400

Résultats par simulation :

Niveau Nombre Efficacité en Temps


d’optimisation de cycles MAC/cycle D’exécution(ms)
off 483676 0.0215019972 2.14967111
0 371672 0.0142140194 1.651875556
1 247648 0.0419950898 1.100657778
2 81260 0.1279842481 0.361155556
3 81260 0.1279842481 0.361155556

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 81256 0. 36113777777 0,127990548
Coefficients et X_buffer L1
Input et Output L2 81256 0.36113777777 0,127990548
Coefficients et X_buffer L2
Input et Output DRAM 1617652 7. 18956444 0,0064290712
Coefficients et X_buffer DRAM
Input et Output DRAM 168192 0.74752 0,061834094
Coefficients et X_buffer L1
Input et Output L1 1521532 6.7623644 0,0068352160
Coefficients et X_buffer DRAM

Conclusion :

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


DRAM.

Вам также может понравиться