Vous êtes sur la page 1sur 6

Tp3 DSP

Ahlem Mhelheli et Oumayma Hamdi

2GII1

6- filtre RIF

a-

// L138_loop_intr.c
//

#include "L138_LCDK_aic3106_init.h"

interrupt void interrupt4(void) // interrupt service routine


{
uint32_t sample;

sample= input_sample(); // lecture des échantillons des voies L + R depuis l'ADC


output_sample(sample); // ecrire les échantillons L + R vers le DAC
return;
}

int main(void)
{
L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB,LCDK_LINE_INPUT);
while(1);
}

Filtre passe haut


#include "L138_LCDK_aic3106_init.h"
//#include "rif2.h" //tableau des coefficients du filtre passe bas
#include "haut.h" //tableau des coefficients du filtre passe bas

float x[N]; // tableau pour stocker les échantillons

interrupt void interrupt4(void)


{
short i;
float yn =0;

x[0] = (float)(input_left_sample()); // lecture échantillon


for (i=0 ; i<N ; i++) // Calculer la sortie filtrée
yn +=fhaut[i]*x[i];

for (i=N-1 ; i>0; i--) // Mettre à jour le tableau de échantillons


x[i] = x[i-1];
output_left_sample((int)(yn)); // écriture de la sortie filtrée*/

return;
}

int main(void)
{

L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB,LCDK_LINE_INPUT);

while(1);
}

Fichier haut.h

Filtre passe bas

#include "L138_LCDK_aic3106_init.h"
#include "bas.h" //tableau des coefficients du filtre passe bas
//#include "haut.h" //tableau des coefficients du filtre passe bas
float x[N]; // tableau pour stocker les échantillons

interrupt void interrupt4(void)


{
short i;
float yn =0;

x[0] = (float)(input_left_sample()); // lecture échantillon


for (i=0 ; i<N ; i++) // Calculer la sortie filtrée
yn +=fbas[i]*x[i];

for (i=N-1 ; i>0; i--) // Mettre à jour le tableau de échantillons


x[i] = x[i-1];
output_left_sample((int)(yn)); // écriture de la sortie filtrée*/

return;
}

int main(void)
{

L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB,LCDK_LINE_INPUT);

while(1);
}

Fichier bas .h

d-

// Programme qui gère les deux filtres passe haut et passe bas
//

#include "L138_LCDK_aic3106_init.h"

#include "bas.h"
#include "haut.h"

uint32_t numero_RIF =0; // sans filtrage par défaut


float dly[N]; // tableau des échantillons
float h[2][N]; // tableau pour stocker les coefficients des deux
filtres bas et haut
interrupt void interrupt4(void) // routine d'interruption
{
int i;
float yn = 0.0;
if (numero_RIF!=0) // filtre passe bas ou haut
{
dly[0] = (float)(input_left_sample()); // lecture échantillon gauche
for (i = 0; i< N; i++) // calcul de la sortie filtrée
yn +=(h[numero_RIF][i]*dly[i]);
for (i = N-1; i > 0; i--) // mise à jaour du tableau des
échantillons
dly[i] = dly[i-1];
output_left_sample((uint16_t)(yn));
}
else
output_left_sample(input_left_sample()); // sans filtrage

return;
}

int main()
{

int i;

for (i=0; i<N; i++) // initialisation du tableau des coefficients des deux
filtres passe bas et haut
{
dly[i] = 0.0;
h[0][i] = fbas[i];
h[1][i] = fhaut[i];
}

L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB,LCDK_LINE_INPUT);
while(1);

}
Part 4