Professional Documents
Culture Documents
BEKANGBA Gracia
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.
Filtre récursif :
La sortie dépend des échantillons d’entrée mais aussi des échantillons de sortie des
instants précédents.
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
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.
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
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 :
.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 :
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.
Ce filtre est ensuite implanté dans le programme canevas en complétant les parties suivantes :
ax0=imask;
ay0=b#0001100000;
ar=ax0 or ay0;
imask=ar;
I0=x;
L0=n;
I4=h;
L1=n;
L4=n;
boucle:
idle;
jump boucle;
/* 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;
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