Implémentation de filtre FIR sur DSP

Transcription

Implémentation de filtre FIR sur DSP
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Prénom :
Option
Groupe :
TP - DSP
Implémentation de filtre FIR sur DSP
L’objectif de ce TP est d’implanter des filtres FIR en temps réel sur une plate
forme de type DSP (dans une version limitée par rapport aux amplificateurs
modernes).
Le DSP utilisé est de la famille BlackFin (BF561) du fabriquant Analog Devices.
L’égalisation des diverses bandes du signal audio (Basse, Medium et Aigue)
seront réalisées par le biais de différents traitement numériques et algorithmes
implémentés sur le DSP puis testés auditivement.
Codec
DSP
Figure n°1 - synoptique du traitement processeur
Le principe de fonctionnement est le suivant ; les échantillons du flux audio sont
acquis par le biais du CODEC audio AD1836 sur l’entrée « LINE IN ». La
communication entre le DSP et le CODEC audio peut se faire de deux manières
différentes ; soit par le port série SPORT0 ou soit par le port série SPI. Le
transfert des échantillons par DMA en mémoire permet de décharger le DSP lors
de cette opération mais aussi de pouvoir récupérer les échantillons afin de les
traiter par la suite. Après un traitement adéquat, les échantillons audio traités
sont envoyés par le biais du SPORT0 ou du SPI au CODEC afin d’être convertis
Olivier ROMAIN
1
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
en niveaux analogiques. Ce nouveau flux traité est alors disponible sur la sortie
« LINE OUT » et peut être écouté sur une paire d’enceintes.
Le principe d’égalisation (equalizer) consiste à développer trois filtres
numérique de type Butterworth, un passe bas, un passe bande et un passe haut
respectivement pour filtrer les basses, les medium et les aigues. Les échantillons
acquis par le CODEC passent parallèlement dans les trois filtres munis de gains
variables. Le flux audio traité représente alors la somme de ces trois opérations.
Ainsi en augmentant ou en diminuant les gains des filtres, une voire plusieurs
bandes peuvent être accentuées au profit d’une autre. Le principe de l’égaliseur
est résumé ci-dessous :
+
Echantillon
Traité
Echantillon
+
+
Figure n°2 - synoptique du traitement processeur
Manipulation
1. Recopiez le répertoire Q :⧵TP_DSP sur votre compte P :
2. Lancez VisualDSP++ et ouvrez le projet. Menu File-> Open -> Project
Group
Le projet comporte deux les programmes qui seront exécutés par les deux DSP.
Exercice 1 :
1. Compiler et exécuter le projet Talkthrough_TDM_C
2. Sur l’entrée Audio J5, injecter un signal sinusoïdal de fréquence variable
et d’amplitude 1V.
3. Brancher la sortie Audio Out (J4) sur un oscilloscope
Olivier ROMAIN
2
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
4. Faite varier la fréquence et remplissez le tableau ci-dessous :
Fréquence
1kHz
11kHz
21kHz
31kHz
41kHz
51kHz
Gain
5. Faite varier la fréquence et déterminer la fréquence d’échantillonnage du
codec audio1836.
Fréquence échantillonnage
6. A l’aide du datasheet de l’AD1836 et du programme main_core_A.c,
déterminer le nom du registre qui permet de paramétrer la fréquence
d’échantillonnage. Si nous voulons une fréquence d’échantillonnage de
96kHz qu’elle est la nouvelle valeur ?
Nom du registre
Valeur du registre pour fs=96kHz
Exercice 2 : Gain programmable yn=G.xn
1. Analyser le programme Process_data.c pour le coreA. Déterminer le
fonctionnement de la fonction void Process_Data(void)
2. Dessiner le schéma fonctionnel de l’acquisition, du traitement et de la
restitution. On ferra apparaître xn (l’échantillon acquit) et yn (l’échantillon
traité en entrée du CNA)
Olivier ROMAIN
3
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
3. On désire programmer la fonction suivante yn = G . xn avec G=10. Donner
le programme ci-dessous
4. Injecter en entrée Audio In un signal de 1v. Mesurer l’amplitude en sortie
et en déduire le gain obtenu.
Amplitude signal sortie
Gain
Exercice 3 : Programmation d’un filtre FIR
Le CODEC acquiert un échantillon à la fois. On souhaite programmer un filtre
FIR dont l’équation est yn=Somme(xn.an) avec an les coefficients du filtre. Il sera
nécessaire de mémoriser les échantillons xn au cours du temps. Mettre le code du
filtre FIR ci-dessous. On utilisera une variable N pour le nombre de coefficient.
Olivier ROMAIN
4
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
Exercice 4 : Détermination des filtres sous Matlab Sptool
Les coefficients des 3 filtres seront déterminés à l’aide de l’outil Sptool sous
l’environnement Matlab.
1. Lancer le programme Matlab. Dans la fenêtre commande windows, tapez
« sptool ». Une nouvelle fenêtre apparaît. Au centre, dans la partie filter
tapez new. Une nouvelle fenêtre apparaît qui vous permettra de
paramétrer la réponse de votre filtre. Dans « filter order » spécifier
l’ordre : 30. Préciser la fréquence d’échantillonnage déterminée
précédemment.
2. On veut un filtre passe-bas dont le gabarit est donné ci-dessous. Lorsque
les paramètres sont rentrés, nous pouvons récupérer les coefficients du
filtre à l’aide du menu target/Generate C header. On exportera les
coefficients en signed 8 bits comme fichier de type header avec
l’extension .dat
Fpass = 200Hz ; Fstop = 2kHz.
0dB
-1dB
200
2000 Hz
-20 dB
Coefficients passe-bas
A0
Olivier ROMAIN
5
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
A1
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
A21
A22
A23
A24
A25
A26
A27
A28
A29
A30
A31
On veut un filtre passe-haut dont le gabarit est donné ci-dessous.
Déterminer les coefficients avec Fpass = 8kHz ; Fstop = 6kHz.
3.
0dB
-1dB
Olivier ROMAIN
-20 dB
6kHz
8 kHz
6
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
Coefficients passe-haut
A0
A1
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
A21
A22
A23
A24
A25
A26
A27
A28
A29
A30
A31
Olivier ROMAIN
7
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
4. On veut un filtre passe-bande dont les paramètres sont les suivants :
Fstop1 = 2kHz ; Fpass1 = 4kHz ; Fpass2 = 6 kHz ; Fstop2 = 8kHz.
Coefficients passe-haut
A0
A1
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
A16
A17
A18
A19
A20
A21
A22
A23
A24
A25
A26
A27
A28
A29
A30
A31
Avant de passer au prochain exercice vérifiez que vous avez vos trois fichiers de
coefficients.
Olivier ROMAIN
8
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
Exercice 5 : Tests filtre passe-bas
En C, on peut récupérer les coefficients des filtres et les enregistrer directement
en mémoire dans un tableau, en utilisant le routine ci-dessous.
// Recuperation des coeffs a partir des fichiers
int coefs_bas[NUM_TAPS]= {
#include "coefficients_filtrebas.dat"
};// Passe Bas
1. Programmer le filtre passe-bas à l’aide des coefficients déterminés
précédemment.
2. Injecter en entrée un signal sinusoïdal d’amplitude 1v et déterminer
expérimentalement :
Fréquence de coupure en Hz
Gain bande passante en dB
Atténuation hors bande en dB
3. Injecter en entrée un signal issu d’un lecteur MP3 et écouter sur des
enceintes la sortie de la carte. Quelles sont les fréquences qui sont
accentuées ?
Fréquences accentuées
Exercice 6 : Tests filtre passe-haut
En C, on peut récupérer les coefficients des filtres et les enregistrer directement
en mémoire dans un tableau, en utilisant le routine ci-dessous.
// Recuperation des coeffs a partir des fichiers
int coefs_haut[NUM_TAPS]= {
#include "coefficients_filtrehaut.dat"
};// Passe Haut
Olivier ROMAIN
9
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
1. Programmer le filtre passe-haut à l’aide des coefficients déterminés
précédemment.
2. Injecter en entrée un signal sinusoïdal d’amplitude 1v et déterminer
expérimentalement :
Fréquence de coupure en Hz
Gain bande passante en dB
Atténuation hors bande en dB
3. Injecter en entrée un signal issu d’un lecteur MP3 et écouter sur des
enceintes la sortie de la carte. Quelles sont les fréquences qui sont
accentuées ?
Fréquences accentuées
Exercice 7 : Tests filtre passe-bande
En C, on peut récupérer les coefficients des filtres et les enregistrer directement
en mémoire dans un tableau, en utilisant le routine ci-dessous.
// Recuperation des coeffs a partir des fichiers
int coefs_bas[NUM_TAPS]= {
#include "coefficients_filtrebande.dat"
};// Passe Bande
1. Programmer le filtre passe-bande à l’aide des coefficients déterminés
précédemment.
2. Injecter en entrée un signal sinusoïdal d’amplitude 1v et déterminer
expérimentalement :
Fréquence basse de coupure en Hz
Fréquence haute de coupure en Hz
Gain bande passante en dB
Atténuation hors bande en dB
Olivier ROMAIN
10
IUT Cergy Pontoise – Dept GE2I Neuville
Nom :
Option
Prénom :
Groupe :
TP - DSP
3. Injecter en entrée un signal issu d’un lecteur MP3 et écouter sur des
enceintes la sortie de la carte. Quelles sont les fréquences qui sont
accentuées ?
Fréquences accentuées
Fin TP
Olivier ROMAIN
11