Liste des cours‎ > ‎

Décodeur audio (5 décembre)

Sujet

Le but de ce TD est de réaliser dans un FPGA le décodage d'un flux audio encodé selon une méthode bien connue des chaînes de télévision françaises : le retournement de spectre.

On procédera en deux temps :
  1. réalisation d'un décodeur avec une fréquence d'inversion de 12kHz
  2. réalisation d'un décodeur avec une fréquence d'inversion de 12.8kHz (toute ressemblance avec une chaîne réelle ne serait que pure coïncidence)

Le flux audio

Sur la carte DE2 se trouve un circuit appelé CODEC. Il est en charge de :
  • numériser un flux audio analogique qui arriverait sur la carte par la prise jack LINE_IN (bleue) ou MIC (ROSE),
  • produire un signal audio analogique sur la prise LINE_OUT (verte, sur laquelle on pourra brancher un casque de baladeur) à partir d'échantillons numériques.
La première étape est faite par un ADC (Analog to Digital Converter), la deuxième est faite par un DAC (Digital to Analog Converter). En plus de l'ADC et du DAC, le circuit intégré contient pas mal de filtres et un bus permettant de régler les volumes, choisir la source d'entrée, etc..

Nous vous fournissons (voir pièce jointe) un module qui se charge de configurer le CODEC de la façon suivante :
  • Le son d'entrée est sur LINE_IN (prise bleue), avec un gain de 1 (0dB).
  • Le gain de la sortie (le volume) est de 0dB.
  • L'ADC produit deux flux de données, un pour la voir gauche l'autre pour la droite, à un rythme de 48k échantillons par seconde (48kHz).
  • Le DAC attend qu'on lui fournisse deux flux (un par voie) au même rythme (48kHz).
  • Chaque flux est codé en CA2 sur 16 bits : les données sont donc de type logic signed [15:0] et les ports : input logic signed [15:0] et output logic signed [15:0]
  • Un signal (audio_data_enable) passe à 1 pendant 1 cycle pour indiquer qu'un nouvel échantillon est disponible sur adc_data_r/l et que l'échantillon présent sur dac_data_r/l vient d'être envoyé au DAC.
La seule horloge qu'on utilisera est aud_mclk, qui est une horloge à 12MHz.

Préparation des choses

  1. Synthétisez le projet qu'on vous a préparé, et flashez le FPGA avec.
  2. Branchez votre casque sur la prise verte de la maquette (LINE_OUT). Important : NE LE METTEZ PAS TOUT DE SUITE SUR VOTRE TÊTE !
  3. Mettez le switch 17 à 0 (poussez le vers l'extérieur de la carte) : vous devez entendre un gros sifflement dans le casque. C'est pour ça qu'il ne faut pas l'avoir sur les oreilles à ce moment là.
  4. Passez le switch 17 à 1 pour éteindre le sifflement.
  5. Reliez par le cordon jack-jack la prise bleue de la maquette (LINE_IN) à la sortie son de votre PC (en façade, la prise avec l'icône de casque)
  6. Faites jouer un fichier son par le PC (youtube, mp3, ...)
  7. Vérifiez que vous entendez dans le casque le son prévu. Si ce n'est pas le cas, cliquez sur l'icône haut-parleur en haut à droite du bureau, et vérifiez que "sourdine" n'est pas coché et que le volume est au maximum.
C'est bon, on peut se mettre à travailler.

Première étape

  1. Réalisez la multiplication du flux d'entrée par une sinusoïde à 12kHz.
  2. Le son produit n'est pas très bon : il reste des fréquences indésirables (cf cours de traitement du signal pour savoir pourquoi). Réalisez un filtre basique pour les éliminer implémentant la fonction de transfert suivante : outn = outn-1/2 + in-1/2, avec n représentant le numéro de l'échantillon traité.

Deuxième étape

On a en fait un peu triché : la vraie fréquence utilisée d'habitude est 12.8kHz. On a commencé par 12kHz car c'était beaucoup plus simple.

Réalisez maintenant une inversion de spectre par rapport à une fréquence de 12.8kHz (on prendra le même filtre de sortie qu'à l'étape précédente). Rappelez-vous que si vous avez besoin de générer des tables de constantes, vous pouvez utiliser un langage de programmation que vous connaissez pour cela (Python, Java, …).

Bravo, vous avez maintenant un décodeur audio D+ fonctionnel. Reste l'image, mais c'est pour le prochain chapitre !

ċ
Decodeur.tgz
(1105k)
Alexis Polti,
28 nov. 2011 à 11:39
ċ
test_scrambled_12k.ogg
(1731k)
Alexis Polti,
28 nov. 2011 à 11:40
ċ
test_scrambled_12k8.ogg
(1746k)
Alexis Polti,
28 nov. 2011 à 11:40