You are on page 1of 7

BOURAS Farid

BEKANGBA Gracia

TP4 : FILTRAGE NUMERIQUE

OBJECTIF DU TP :
L’objectif du TP est de mettre en pratique les connaissances acquises sur le filtrage
numérique en cours de traitement du signal. On pourra par la suite réaliser différents types de
filtre que l’on appliquera à un signal audio.

PARTIE 1 : implantation d’un filtre FIR passe bas


En premier lieu nous allons mettre au point un filtre passe bas a réponse
impulsionnelle finie qui sera ensuite implanté sur la carte EZKIT LITE. Pour cela on fera
appel au TP 5 de l’unité de traitement du signal pour pouvoir via le logiciel Scilab calculer les
coefficients du filtre qui seront implanté dans un programme que l’on chargera sur la carte.

1) calcul des coefficients du filtre passe bas.

On peut classer les filtres de différentes manières :

Filtre récursif :
La sortie dépend des échantillons d’entrée mais aussi des échantillons de sortie des
instants précédents.

Filtre non récursif :


La sortie dépend uniquement des échantillons d’entrée.

Pour un filtre FIR qui est de type non récursif la formule de filtrage s’exprime de la façon
suivante (on notera h(t) la réponse impulsionnelle du filtre, y(t) la sortie et x(t) l’entrée).
y(t) = x(t) * h(t) =
T =∞

∫h(T)x(t −T)dT
T =0

Cette forme ne peu être directement utilisé en filtrage numérique on doit ainsi passer dans le
domaine numérique et on obtient :
y(n) =
k =N −1
∑h(k).x(n−k)
k =0

Les h(k) étant les coefficients de pondération du filtre.


Les coefficients du filtre représentent les coefficients de la réponse impulsionnelle
discrétisée ; on conçoit aisément alors que cette dernière va jouer un rôle important dans les
méthodes de synthèses. Nous allons ici aborder la méthode dite de la fenêtre.

Principe de la méthode des fenêtres :

Cette méthode consiste à partir d’un gabarit fréquentielle souhaité à déterminer une reponse
impulsionnelle réalisable. Les principaux points sont :
 Le choix d’un gabarit idéal
 La périodisation de ce gabarit due a l’échantillonnage
 La décomposition en série de Fourier du gabarit périodisé pour obtenir les coefficients
de la réponse impulsionnel ;
 La troncature symetrique de la réponse imlpulsionnelle de manière à limiter le
nombre d'échantillons ;
 Suivant le placement de la fenêtre de troncature le filtre sera a nombre d’échantillions
pair ou impair, avec les propriétés qui en découlent ;
 Le décalage de la réponse pour obtenir un filtre causal.

La décomposition en série de Fourier de notre filtre a pour expression

h(n) = (Vu en TP de traitement du signal).


2Fc.sin(2π.nFc/ Fe)
Fe.2π.Fc / Fe

h(n) constitue ainsi la réponse impulsionnelle du filtre.


On décale la réponse impulsionnelle de N échantillons pour rendre ce filtre causal. On obtient
ainsi l’expression suivante :

h(n) = = 2. . sinc(2 )
2.Fc.sin(2.π.(n−N / 2)Te.Fc) Fc π.(n− N / 2).Te.Fc
2.π.(n−N / 2).Fc Fe
Cette nouvelle expression va nous permettre de calculer les coefficients du filtre, mais si l’on
veut optimiser le gabarit de ce filtre il est nécessaire de considérer un grand nombre de
coefficient. Pour ce faire nous allons utiliser le logiciel de calcul matriciel Scilab qui va
générer un fichier contenant tout les coefficients.

Pour commencer nous allons réaliser se calcul pour notre filtre FIR passe bas a la fréquence
de coupure Fc de 2KHz avec un nombre de coefficients égal a 4.
La fréquence d’échantillonnage du CODEC a été fixée a 8KHz et d’après le théorème de
Shannon la fréquence de coupure doit être inférieur a la moitié de la fréquence
d’échantillonnage (Fe > 2Fc). Ainsi Fc ne doit pas dépasser les 4 KHZ pour éviter le
recouvrement spectral.
Cette condition étant bien respectée on calcul les coefficients par Scilab :

1.949D-17
0.3183099
0.5
0.3183099

Et voici le gabarit correspondant :


Ce gabarit ne correspond pas à nos
attentes bien évidemment car le
nombre d’échantillons calculés est
beaucoup trop faible.

2) Conception et algorithme de filtrage.

Dans cette partie nous allons aborder la conception du programme qui va permettre
d’effectuer le calcul du filtrage. Pour en simplifier la réalisation, nous allons résonner sur
l’exemple d’un filtre avec 4 coefficients puis nous généraliseronsl’algorithme à N
coefficients.
L’équation de filtrage pour N échantillons est la suivante :
y(n) = .
k = N −1
∑h(k).x(n−k)
k =0

Par exemple si on veut calculer l’équation de filtrage pour N=4 coefficients qui donne la
valeur de y(n=3), on obtient :

y(3)=h(0).x(3) + h(1).x(2) + h(2).x(1) + h(3).x(0).

Le programme qui réalise l’équation de filtrage sera donc le suivant :


#define n 4

.section/data dm_data;
.var/circ x[n]="entree.dat";
.section/data pm_data;
.var/circ h[n]="coeffir.dat";

.section/pm vect_ints;
jump start;rti;rti;rti; /*reset*/
rti;rti;rti;rti; /*IRQ2*/
rti;rti;rti;rti; /*IRQL1*/
rti;rti;rti;rti; /*IRQL0*/
rti;rti;rti;rti; /*Tx_SPORT0*/
rti;rti;rti;rti; /*Rx_SPORT0*/
rti;rti;rti;rti; /*IRQE*/
rti;rti;rti;rti; /*BDMA*/
rti;rti;rti;rti; /*Tx_SPORT1*/
rti;rti;rti;rti; /*Rx_SPORT1*/
rti;rti;rti;rti; /*TIMER*/
rti;rti;rti;rti; /*POWER DOWN*/

.section/pm pm_code;
start:
I0=x;
L0=n;
M0=1;
I6=h;
L6=n;
M6=1;
MR=0;
CNTR=n-1;
MX0=DM(I0,M0) , MY0=PM(I6,M6);
do loop1 until ce;
loop1: MR=MR+MX0*MY0(SS), MX0=DM(I0,M0),
MY0=PM(I6,M6);
MR=MR+MX0*MY0(SS);
wait:
idle ;
jump wait;
Si on calcul l’équation y(n=4), on obtient :

y(4)=h(0).x(4) + h(1).x(3) + h(2).x(2) + h(3).x(1)

On constate que x(4) vient remplacer x(0) en mémoire. Cependant nous savons qu’une fois
l’acquisition et l’enregistrement du nouvel échantillon effectué, le DAG2 pointe sur x(1)
tandis que le DAG1 pointe toujours sur h(3). Autrement dit, on va bien multiplier x(1) par
h(3) au départ puis x(2) par h(2),…De plus la boucle s’effectuant N fois le DAG2 reviendra
au départ et pointera sur x(4) qui sera alors multiplié par h(0). Ainsi il n’y a rien à modifier à
l’algorithme.
L’algorithme pour N coefficients reste quasiment inchangé. On utilisera simplement en plus
l’instruction « if MV SAT MR » pour gérer les dépassements éventuels de calcul de l’unité
MAC.

3) Test de l’algorithme.

Test de l’algorithme sur la carte.


A l’aide de Scilab on calcule un filtre passe bas comportant 128 coefficients avec une
fréquence de coupure égale a 3KHz. On prendra Fe = 8 Khz, Fc = 0,375.Fe.

Voici le gabarit obtenu :

Cette fois ci on voit bien qu’avec


un plus grand nombre
d’échantillons, on optimise le
gabarit du filtre. Aussi on relève
bien la fréquence de coupure
désirée.

Ce filtre est ensuite implanté dans le programme canevas en complétant les parties suivantes :

/* --- Définition de constantes éventuelles --- */


#define n 128

/*---------------- définitions des variables -----------------*/


.section/data dm_data;
// buffers circulaires nécessaires au fonctionnement du programme sinus
.var/circ x[n]="entree.dat";
// Activation des interruptions (Rx_SPORT0 Tx_SPORT0 éventuellement IRQE)

ax0=imask;
ay0=b#0001100000;
ar=ax0 or ay0;
imask=ar;

//initialisation du pointeur du DAG pour les buffer circulaires */

I0=x;
L0=n;
I4=h;
L1=n;
L4=n;

// Boucle d'attente d'interruption

boucle:
idle;
jump boucle;

// Programme d'interruption Rx SPORT0

/* Cette interruption est utilisé pour réceptionner les échantillons du tampon d'entée et les
dans le tampon de sortie.*/

sport0_rx_isr:
ena sec_reg; // activer les registre secondaires
ax0=dm(rx_buf+1); // réception du canal gauche
ay0=dm(rx_buf+2);
ar=ax0+ay0;
dm(I0,M0)=ar;

/* Ecrire l'algorithme du filtre à cet emplacement*/

DIS M_MODE;
CNTR=n-1;
PARTIE 2 : Implantation d’un filtre FIR passe bande.
Dans cette partie les mêmes méthodes que précédemment seront utilisées et le seul
changement proviendra du programme Scilab qui calculera les nouveaux coefficients d’un tel
filtre. Ainsi se programme est fourni sur le poly.
N=128 (de manière à obtenir un gabarit acceptable).
Fe=8KHz
Fc1=1KHz
Fc2=2KHz

Le gabarit obtenu sous Scilab est le suivant :

On observe bien le gabarit d’un


filtre passe bande

Faute de temps la simulation n’a pu être faite.

You might also like