12
Rapport TP DSP ENSEIRB 2009/2010 Lalaoui Jamal Renaudin Maxime Stein Jonathan Page 1 TP Développement de filtres numériques sur la carte DSK 5416

TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

  • Upload
    hadung

  • View
    225

  • Download
    1

Embed Size (px)

Citation preview

Page 1: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 1

TP Développement de filtres

numériques sur la carte DSK 5416

Page 2: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 2

I. Introduction

Le but de ce TP est de maitriser l’environnement sur DSP de Texas Instruments Code Composer Studio. Puis la méthodologie de développement d’algorithmes numériques sur plateforme embarquée. Certains concepts étudiés en cours (Utilisation de Look-Up Table, calculs en virgule fixe Qk….) seront approfondis.

II. Prise en main de l’environnement II.1. Architecture du système La figure ci-dessous présente le schéma de principe entre le flux données analogiques

entrant et le flux de données lui aussi analogiques sortant.

II.2. Techniques de débogage

La Watch Window (figure 1 ci-dessous) permet de visualiser des données en mémoire. Elle

permet d’afficher la valeur des variables du programme pendant son exécution ou bien même de

modifier leurs valeurs en cours d’exécution de manière à vérifier le bon fonctionnement du

programme dans divers cas.

PCM 3000

Codec

DSP

DRR

ABU

Mémoire RAM

SRC

Input

Data

Output

Data

DST

ABU

DXR PCM 3000

Codec

DMA

DMA

Processing

Stereo/Mono

Mono/Stereo BSP

BSP

Line in

Line out

Page 3: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 3

Figure 1 Utilisation de la « Watch Window » pour le débogage

Les figures 2 et 3 représentent les visualisations temporelles du signal d’entrée « src » ainsi

que du signal inputData. Le contenu de src (de taille LEN=512) a une allure hérissée tandis que

l’autre signal est lisse. En effet, le signal src (Stéréo) contient plus d’informations que le signal

inputdata (Mono), car un signal stéréo contient les échantillons de la piste audio gauche (G) et de la

piste audio droite (D) entrelacés. Ceux-ci n’étant pas corrélés, on observe ce phénomène

d’hérissement. Le signal lisse est obtenu par un moyennage des deux canaux de gauche et de droite,

de taille bien égale à N=LEN/2=256 .

Figure 2 Visualisation temporelle du signal “src” (Stéréo)

Page 4: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 4

Figure 3 Visualisation temporelle du signal “inputdata” (Mono)

Lorsque l’on place un breakpoint et que l’on utilise le mode Animate, le son en sortie semble

dégradé. Ce dernier effectue une pause à chaque breakpoint (donc dans chaque bloc), nous avons

ainsi une lecture saccadée des blocs. Ceci crée une impression de dégradation du son car un court

silence vient s’intercaler entre chaque bloc.

Lorsque l’on ne met pas de breakpoint, l’affichage du contenu des variables ou des graphe n’est pas

mis à jour. Ceci est lié au concept d’émulateur JTAG, qui est un protocole intégré au sein du

processeur à des fins de débogage. En effet, pendant l’émulation (contrôleur JTAG ou

BoundaryScan), l’unique moyen de regarder le contenu des variables ou de visualiser des graphiques

est d’interrompre l’exécution, et donc d’utiliser des breakpoints car sinon le DSP est déjà occupé à

traiter les données audio lui parvenant du codec et ne peut donc pas communiquer.

Nous avons ensuite mesuré le nombre de cycles nécessaires à l’exécution de la fonction

blockProcessing. Pour cela, nous avons utilisé l’outil clock du logiciel. Notons que le DSP est cadencé

à 160MHz, que le signal est lui échantillonné à 48KHz et que chaque bloc contient 256 échantillons.

Le pourcentage de temps CPU est défini comme le rapport entre le temps d’exécution de la fonction

blockProcessing et le temps entre deux appels de cette même fonction :

A l’aide de l’outil clock, nous avons trouvé et du calcul du nombre de cycles entre deux blocs

consécutifs:

Page 5: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 5

En utilisant des breakpoints et la Watch Window, nous pouvons étudier l’évolution de la valeur du

pointeur src au cours des appels successifs à blockProcessing. On remarque alors que l’adresse

mémoire du pointeur varie entre deux valeurs constantes au cours des réalisations. Ce mécanisme

correspond bien au principe du buffer ping‐pong utilisé par le DMA qui écrit tantôt dans le buffer

ping, tantôt dans le buffer ping. Ce processus permet de remplir un buffer (ping) pendant que le CPU

traite les données de l’autre buffer (pong). Lorsque le buffer est plein, interversion des rôles.

III. Modulation par une sinusoïde

On désire implémenter la modulation suivante pour mode=1 :

𝒚 𝒏 = 𝒙 𝒏 ∗ 𝒄𝒐𝒔(𝟐𝝅𝒇𝒎𝒏/𝒇𝒆) Où 𝒇𝒆 est la fréquence d’échantillonnage en Hz (48 kHz par défaut) 𝒇𝒎 est la fréquence de modulation en HZ. 𝒏 est l’indice temporel discret correspondant au temps 𝑡 = 𝑛/𝒇𝒆 en secondes

Voici le bloc de code correspondant au traitement du signal d’entrée pour correspondre à cette

modulation :

Voici l’allure des spectres du signal d’entré (inputData) :

case 1:

/* Modulation par une sinusoide */

for (i=0; i<N; i++){

outputData[i] = (Int16)((float)inputData[i] * cos(6.2832

* n *fm / freq));

n++;

if (n>=freq) n=0;

}

break;

Page 6: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 6

Figure 1 Spectre du signal d'entré (inputData)

Le pic est à 𝑓0

𝑓𝑒= 0.009 ou 𝑓0est la fréquence du signal et vaut 440 Hz.

Et voici le spectre du signal de sortie (outputData) :

Figure 2 Spectre du signal de sortie (outputData) aprés modulation

Les deux pics observés correspondent aux fréquences normalisées suivantes :

𝑓0+𝑓𝑚

𝑓𝑒= 0.03

𝑓𝑚 −𝑓0

𝑓𝑒= 0.011

Le spectre en fréquence normalisé a bien été transposé à 𝑓𝑚 /𝑓𝑒 et à −𝑓𝑚 /𝑓𝑒 . Voici l’explication mathématique qui explique les résultats :

Page 7: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 7

Voici l’expression du signal d’entré :

𝑠 𝑛 = 𝐴 ∗ sin(2𝜋 ∗ 𝑓0 ∗ 𝑛/𝑓𝑒) D’où un spectre :

𝑆(𝑓) =𝐴

2∗ (𝛿 𝑓 −

𝑓0

𝑓𝑒 + 𝛿 𝑓 +

𝑓0

𝑓𝑒 )

Après modulation, on obtient temporellement :

𝑠𝑚 𝑡 = 𝐴 ∗ sin 2𝜋 ∗ 𝑓0 ∗ 𝑛/𝑓𝑒 ∗ sin(2𝜋 ∗ 𝑓𝑚 ∗𝑛

𝑓𝑒)

D’où un spectre en sortie :

𝑆𝑚 (𝑓) =𝐴

4∗ (𝛿 𝑓 −

𝑓0 + 𝑓𝑚𝑓𝑒

+ 𝛿 𝑓 − (𝑓0 − 𝑓𝑚

𝑓𝑒 + 𝛿 𝑓 +

𝑓0 + 𝑓𝑚𝑓𝑒

+ 𝛿 𝑓 + (𝑓0 − 𝑓𝑚

𝑓𝑒) )

Ainsi lorsqu’on observe le spectre sur 0: 1/2 , on observera que les deux premiéres composantes du spectre de sortie, c'est-à-dire :

𝑆𝑚 (𝑓) =𝐴

4∗ 𝛿 𝑓 −

𝑓0 + 𝑓𝑚𝑓𝑒

+ 𝛿 𝑓 + (𝑓0 − 𝑓𝑚

𝑓𝑒)

Après application numérique on trouve que 𝑓0+𝑓𝑚

𝑓𝑒= 0.03

𝑓0−𝑓𝑚

𝑓𝑒= 0.011. La figure

représente le signal de sortie dans le domaine fréquentielle représenté sur −1/2: 1/2

IV. Filtre d’écho

On désire à présent implémenter un filtre d’écho :

𝑦 𝑛 = 𝑥 𝑛 + 𝑔 ∗ 𝑥(𝑛 − 𝐷)

𝑆𝑚 (𝑓)

𝑓

𝑓𝑒

𝑓0

𝑓𝑒

−𝑓0

𝑓𝑒

𝑓0 + 𝑓𝑚𝑓𝑒

𝑓𝑚 − 𝑓0

𝑓𝑒

−(𝑓0 + 𝑓𝑚 )

𝑓𝑒

−(𝑓𝑚 − 𝑓0)

𝑓𝑒

Page 8: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 8

Ou 𝐷 est la valeur du délai en nombre d’échantillons, et 𝑔 un gain réel.

Le lien entre le délai 𝑑 en sécondes et le délai 𝐷 en échantillons fait intervenir la fréquence d’échantillonnage du signal notée𝑓𝑒 . La relation est :

𝐷 = 𝑑 ∗ 𝑓𝑒 L’application numérique donne (avec 𝑑 = 0.350𝑠 et 𝑓𝑒 = 48 𝑘𝐻𝑧 ) :

𝐷 = 16800 é𝑐𝑕𝑎𝑛𝑡𝑖𝑙𝑙𝑜𝑛𝑠 Les informations contenues dans inputData ne suffisent pas pour calculer l’ensemble des valeurs d’outputData. En effet pour calculer un tel filtre il est nécessaire d’avoir un buffer de taille au moins égale à 16800 or le buffer que nous utilisons pour contenir les données de inputData est de taille 256. Néanmoins même si ce buffer était de taille suffisante, l’implémentation d’un tel filtre poserait des problèmes. En effet, lorsque les échantillons du tableau inputData ont été entièrement traités par le DSP, ce tableau disparaît pour accueillir les nouveaux échantillons apportés par le codec perdant ainsi les informations des anciens échantillons avant que ceux-ci n’aient pu être utilisés. Ce filtre nécessite donc pour être implémenté d’une part qu’un tableau supplémentaire de taille suffisante soit instancié en mémoire et d’autre part que ce tableau supplémentaire soit sans discontinuité (donc un buffer circulaire par exemple). Le buffer circulaire peut contenir 20000 échantillons à une 𝑓𝑒 = 48 kHz. Ainsi la durée maximum du signal est donné par :

𝑑𝑚𝑎𝑥 =𝑀𝐴𝑋𝐵𝑈𝐹𝑆𝐼𝑍𝐸

𝑓𝑒= 0.42 𝑠𝑒𝑐𝑜𝑛𝑑𝑒

Voici le schéma mémoire de l’algorithme :

M-1

M-2

M-3

D

0

X(0)

X(1)

X(2)

X(M-D)

X(M-1) G

Y(0)

idx

Idd

Page 9: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 9

Le gain 𝑔 de notre filtre d’écho peut prendre des valeurs dans l’intervalle −2,2 , à l’aide d’un entier G sur 16 bits signés. Ainsi le format adéquat pour coder ce gain est le format Q14. Pour 𝑔 = 0.8, G vaut :

𝐺 = 𝑟𝑜𝑢𝑛𝑑 214 ∗ 𝑔 = 13 107 Voici l’algorithme que nous proposons pour calculer un échantillon du filtre d’écho : Voici ci-dessous les signaux d’entré inputData et de sortie outputData avec le traitement DSP visant à rajouter de l’echo.

Figure 3 visualisation de l’écho : signal inputData en haut, signal ouputData en bas

Sur cette figure, le graphique supérieur est notre signal d’entrée : il a une allure de porte afin

de bien visualiser l’écho mais aussi de s’assurer qu’il possède le bon délai et le bon gain. Le graphique

Int16 processingEcho(Int16 *buffer, Uint16 M, Uint16 *p_idx, Int16 x, Uint16

D, Int16 G){

Int16 y;

//Insere x dans le buffer circulaire

if (*p_idx>0)

(*p_idx)--;

else

{

(*p_idx)=M-1;

}

buffer[*p_idx]=x;

// Calcul de y

y = buffer[*p_idx] + (Int16)((Int32)G*buffer[(*p_idx + D)%M] >>14);

return y;

}

Page 10: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 10

inférieur est notre signal de sortie. Pour cette expérimentation, nous avons demandé un écho de

délai D = 100 échantillons afin qu’il puisse correctement être visualisé dans notre fenêtre de tampon

256 échantillons. De plus, le gain G retenu est très élevé (12 000) afin d’obtenir une écho important

(donc visible). Grace aux curseurs (barres verticales vertes), nous remarquons que notre porte arrive

à l’échantillon 40 et que son écho arrive à l’échantillon 140. On retrouve bien notre écho de délai D.

V. Filtre Reverb

Voici le schéma mémoire de l’algorithme :

A part le fait qu’ici, ce n’est pas le signal d’entrée (x) qui est bufferisé mais le signal de sortie

(y), la différence par rapport au calcul du filtre d’écho est que dans le cas présent, l’ajout de la valeur

courante de y doit être réalisé après le calcul de la sortie.

Voici le code qui calcul le filtre de reverb :

Int16 processingEcho(Int16 *buffer, Uint16 M, Uint16 *p_idx, Int16 x,

Uint16 D, Int16 G){

Int16 y;

//Insere x dans le buffer circulaire

if (*p_idx>0)

(*p_idx)--;

else

.....

.....

y(n-1-D)

.....

.....

y(n-2)

y(n-1)

y(n-N)

Page 11: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 11

{

(*p_idx)=M-1;

}

buffer[*p_idx]=x;

// Calcul de y

y = buffer[*p_idx] + (Int16)((Int32)G*buffer[(*p_idx + D)%M] >>14);

return y;

} Voici la représentation temporelle d’un filtre d’écho récursif (reverb) :

𝑦 𝑛 = 𝑥 𝑛 + 𝑔 ∗ 𝑦 𝑛 − 𝑑 Lorsqu’on calcule la transformé en Z, on obtient :

𝑌 𝑧 = 𝑋 𝑧 + 𝑔 ∗ 𝑧−𝐷 ∗ 𝑌 𝑧 Soit la réponse impulsionnelle du filtre :

𝐻 𝑧 =𝑌(𝑧)

𝑋(𝑧)=

1

1 − 𝑔 ∗ 𝑧−𝐷

𝐻(𝑓) =1

1 − 𝑔 ∗ 𝑒−

𝑗2𝜋𝑓𝐷𝑓𝑒

La résonance est atteinte lorsque :

1 − 𝑔 ∗ 𝑒−

𝑗2𝜋𝑓𝐷𝑓𝑒 = 0

↔ 𝑓 = 𝑓𝑒

2𝜋𝐷∗ cos−1

𝑔² + 1

2 ∗ 𝑔

Il existe deux valeurs de 𝑔 pour que −1 ≤ 𝑔²+1

2∗𝑔 ≤ 1

- 𝑔 = 1 -> Résonances tout les 2𝑛𝑓𝑒

𝐷

- 𝑔 = −1 -> Résonances tout les (2𝑛+1)𝑓𝑒

𝐷

Page 12: TP Développement de filtres numériques sur la carte …jonhson63.free.fr/ENSEIRB/uploads/projet/Compte-rendu-DSP_Lalaoui... · Rapport TP DSP – ENSEIRB 2009/2010 ... Les coefficients

Rapport TP DSP – ENSEIRB 2009/2010

Lalaoui Jamal – Renaudin Maxime – Stein Jonathan Page 12

VI. Filtre RIF

Les coefficients des filtre passe-bas (cas 4) et passe-haut (cas 5) sont générés grâce au logiciel Matlab. Une fonction permet de les exporter en langage C et ainsi les utiliser dans la fonction fir. Cette fonction crée les filtres RIF.

Conclusion

Un Digital Signal Processor ou DSP en anglais, soit « processeur de signal numérique », est un

microprocesseur optimisé pour les calculs complexes en un coup d’horloge mais aussi pour accéder

très facilement à un grand nombre d'entrées-sorties numériques ou analogiques. Son application

principale est le traitement du signal numérique (filtrage, extraction de signaux, etc.).

Les DSP sont utilisés dans la plupart des applications du traitement numérique du signal en temps

réel. On les trouve dans les modems (modem RTC, modem ADSL), les téléphones mobiles, les

appareils multimédia (lecteur MP3), les récepteurs GPS... Ils sont également utilisés dans des

systèmes vidéo, les chaînes de traitement de son, partout où l'on reçoit un signal complexe que l'on

doit modifier à l'aide du filtrage.

Ce TP nous a permis de découvrir l’environnement de développement Code Composer Studio

mais aussi de mieux comprendre le fonctionnement du DSP afin d’approfondir nos connaissances

théoriques vues en cours. Ainsi nous avons étudié différents filtres tels que écho, reverb, modulation

et RIF couramment utilisés dans les applications citées précédemment.

case 4:

/* Filtre RIF passe-bas */ fir(inputData, coefs, outputData, &dbptr, filterLength, N);

break;

case 5:

/* Filtre RIF passe-haut */ fir(inputData, coefs_high, outputData, &dbptr, filterLength, N);

break;