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