Rapport de stage. Implantation en virgule fixe d un codeur audio. Romain Serizel

Documents pareils
Chaine de transmission

Systèmes de transmission

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

Intérêt du découpage en sous-bandes pour l analyse spectrale

ISO/CEI NORME INTERNATIONALE

Bandes Critiques et Masquage

Projet audio. Analyse des Signaux ELE2700

LES DIFFÉRENTS FORMATS AUDIO NUMÉRIQUES

Transmission d informations sur le réseau électrique

Enregistrement et transformation du son. S. Natkin Novembre 2001

Chapitre 2 Les ondes progressives périodiques

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Codage d information. Codage d information : -Définition-

Numérisation du signal

Quantification Scalaire et Prédictive

UE 503 L3 MIAGE. Initiation Réseau et Programmation Web La couche physique. A. Belaïd

Projet de Traitement du Signal Segmentation d images SAR

TP Modulation Démodulation BPSK

M1 Informatique, Réseaux Cours 9 : Réseaux pour le multimédia


Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Chap17 - CORRECTİON DES EXERCİCES

Chapitre 18 : Transmettre et stocker de l information

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

Chapitre 2 : communications numériques.

$SSOLFDWLRQGXNULJHDJHSRXUOD FDOLEUDWLRQPRWHXU

TD : Codage des images

Les techniques de multiplexage

LES CARACTERISTIQUES DES SUPPORTS DE TRANSMISSION

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Echantillonnage Non uniforme

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

Étude des Corrélations entre Paramètres Statiques et Dynamiques des Convertisseurs Analogique-Numérique en vue d optimiser leur Flot de Test

Expérience 3 Formats de signalisation binaire

Liste de vérification des exigences Flexfone

Chapitre 13 Numérisation de l information

Dan Istrate. Directeur de thèse : Eric Castelli Co-Directeur : Laurent Besacier

Représentation des Nombres

Filtrage stochastique non linéaire par la théorie de représentation des martingales

Introduction à MATLAB R

Technique de codage des formes d'ondes


J AUVRAY Systèmes Electroniques TRANSMISSION DES SIGNAUX NUMERIQUES : SIGNAUX EN BANDE DE BASE

Communication parlée L2F01 TD 7 Phonétique acoustique (1) Jiayin GAO <jiayin.gao@univ-paris3.fr> 20 mars 2014

La nouvelle dimension de l analyse acoustique et vibratoire

Outils permettant la diffusion de l information. Un point sur le droit numérique

Conversion d un entier. Méthode par soustraction

TP: Représentation des signaux binaires. 1 Simulation d un message binaire - Codage en ligne

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

LABO 5 ET 6 TRAITEMENT DE SIGNAL SOUS SIMULINK

Réseaux grande distance

Chapitre 22 : (Cours) Numérisation, transmission, et stockage de l information

ACOUSTIQUE 3 : ACOUSTIQUE MUSICALE ET PHYSIQUE DES SONS

Livrable 2.1 Rapport d analyse et de restructuration de code monothread des modules P, T, Q et F de l encodage MPEG-4 AVC

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Dans la série Les tutoriels libres présentés par le site FRAMASOFT. <Handbrake> <Utilisation d'handbrake pour les débutants> Par <OLIVIER LECLERCQ>

Transmission de données. A) Principaux éléments intervenant dans la transmission

TD séance n 10 Multimédia Son

Formats d images. 1 Introduction

Mesure agnostique de la qualité des images.

Analyse d images. Edmond.Boyer@imag.fr. Edmond Boyer UFRIMA 1

Limitations of the Playstation 3 for High Performance Cluster Computing

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

V- Manipulations de nombres en binaire

TD1 Signaux, énergie et puissance, signaux aléatoires

Université de La Rochelle. Réseaux TD n 6

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Introduction à l informatique temps réel Pierre-Yves Duval (cppm)

Comment enregistrer simplement toute musique restituée par votre PC

données en connaissance et en actions?

Qualité perçue de parole transmise par voie téléphonique large-bande

Conception des systèmes répartis

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours n 12. Technologies WAN 2nd partie

La couche physique de l ADSL (voie descendante)

Correction de l examen de la première session

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

P2: Perception auditive

En DV (PAL ou NTSC), la largeur est toujours de 720 pixels, c'est la proportion du pixel qui change la proportion de l'image.

Multimedia. Systèmes, Communications et Applications. Ahmed MEHAOUA

LABO PROJET : IMPLEMENTATION D UN MODEM ADSL SOUS MATLAB

Chapitre 2 : Systèmes radio mobiles et concepts cellulaires

Modélisation géostatistique des débits le long des cours d eau.

Informatique Générale

Chapitre I La fonction transmission

Rappels sur les suites - Algorithme

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

A la découverte du Traitement. des signaux audio METISS. Inria Rennes - Bretagne Atlantique

Exercices Alternatifs. Quelqu un aurait-il vu passer un polynôme?

Exercices Alternatifs. Quelqu un aurait-il vu passer un polynôme?

TP SIN Traitement d image

UNE EXPERIENCE, EN COURS PREPARATOIRE, POUR FAIRE ORGANISER DE L INFORMATION EN TABLEAU

Accédez au test ici

Information. BASES LITTERAIRES Etre capable de répondre à une question du type «la valeur trouvée respecte t-elle le cahier des charges?

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

SIMULATION HYBRIDE EN TEMPOREL D UNE CHAMBRE REVERBERANTE

Transcription:

Tuteur : Daniel Menard Maître de Conférences Laboratoire R2D2/IRISA 6, rue de Kérampont 22305 Lannion Email : daniel.menard@enssat.fr Correspondant ENSSAT : Olivier Sentieys Professeur des Universités Laboratoire R2D2/IRISA 6, rue de Kérampont 22305 Lannion Email : olivier.sentieys@enssat.fr Rapport de stage Implantation en virgule fixe d un codeur audio Romain Serizel ENSSAT - Master STI Université de Rennes 1 - Année 2005/2006

Résumé Dans le contexte actuel d évolution rapide des réseaux de télécommunication (mobiles notamment), il parait important de pouvoir mettre à disposition rapidement des médias contenant, entre autres choses, de l information audio de haute qualité (caméras, enregistreurs audio portables...). Pour respecter les contraintes imposées par de tels systèmes, aussi bien au niveau de la consommation que de l encombrement, il est nécessaire d utiliser l arithmétique virgule fixe. Ce rapport présente : une étude théorique (sur le format MP3 et les techniques de conversion en virgule fixe), la méthodologie à mettre en place pour faire un lien entre bruit de quantification et qualité de la compression et les résultats des différentes expérimentations. Cette étude sur l implémentation en virgule fixe d un codeur audio large bande permet de dégager plusieurs résultats intéressants. Le modèle de bruit utilisé a été vérifié dans le cadre du filtre polyphase et de la mdct. Les hypothèses qui avaient été faites quant aux paramètres statistiques du bruit se sont révélées justifiées. L encodeur a été simulé avec le filtre polyphase et la mdct en virgule fixe. Ces blocs sont ceux présents dans les décodeurs. Il semble donc possible d utiliser les résultats obtenus pour implémenter un décodeur audio large bande en virgule fixe en assez peu de temps. Mots clés : traitement du signal, codeur audio, évaluation de la qualité d encodage, arithmétique virgule fixe, bruit de quantification, variables aléatoires.

Abstract Present context of fast evolution in telecommunication networks (espacially mobile networks), induces needs for high quality audio media transmissions (for example in digital cameras or portable audio recorders...). Such systems involve constraints, for both consumption and size, which respect of lead to the use of fixed-point arithmetic. This report presents : a theoritical study (about mp3 format and fixed-point conversion methods), the way to link compression quality and quantization noise and results of the assorted experimentations. This study on fixed-point implementation of wide band audio coder led to several interesting results. The noise model which has been worked with has been validated in both polyphase filter and mdct frameworks. Hypotheses on statistical parameters were right. The coder has been simulated with both polyphase filter and mdct in fixed-point. These two blocs are the ones used in the decoders, so we can assume that the work done could be easily used to implement fixed-point mp3 decoders. Keywords : signal processing, audio coder, encoding quality evaluation, fixed-point arithmetic, quantization noise, random variables.

Remerciements Ce stage de master recherche a été effectué au sein de l équipe Reconfigurable and Retargetable Digital Devices (R2D2) de l Institut de Recherche en Informatique et Systemes Aleatoires (IRISA) à Lannion. Aussi je tiens à remercier monsieur O. Sentieys de m avoir accueilli dans son équipe de recherche. Je tiens également à remercier vivement monsieur D. Menard mon tuteur, pour son aide et ses conseils lors de la rédaction de ce rapport ainsi que pour m avoir fait profiter de ses connaissances dans le domaine de l arithmétique virgule fixe. Je tiens enfin à remercier tous les membres de l équipe (R2D2) pour leur accueil et l ensemble des stagiaires en master pour leurs conseils et avis.

Sommaire Introduction 4 1 Étude bibliographique 5 1.1 Compression MP3.................................. 5 1.1.1 Description générale du fonctionnement.................. 5 1.1.2 Algorithme.................................. 6 1.1.2.1 Banque de filtres.......................... 6 1.1.2.2 Modèle perceptuel......................... 8 1.1.2.3 Quantification........................... 8 1.1.3 L implantation en virgule fixe........................ 9 1.2 Techniques de conversion virgule flottante vers virgule fixe............ 9 1.2.1 Arithmétique virgule fixe.......................... 9 1.2.1.1 Codage des nombres........................ 9 1.2.1.2 Conversion en virgule fixe..................... 10 1.2.1.3 Évaluation de la précision..................... 10 1.2.2 Outils de conversion............................. 11 1.2.2.1 Autoscaler for C.......................... 11 1.2.2.2 FRIDGE.............................. 11 1.2.2.3 Méthodologie mise en place au sein de l équipe R2D2..... 12 1.3 Mesures de qualité d un algorithme de compression audio............ 13 1.3.1 Différentes techniques de mesure...................... 13 1.3.1.1 Tests d écoute........................... 13 1.3.1.2 Modélisation du système..................... 13 1.3.2 Approche perceptuelle............................ 14 1.3.2.1 Modélisation de l oreille...................... 14 1.3.2.2 Coefficients de l algorithme PEAQ................ 15 2 Méthodologie de l étude 17 2.1 Évaluation du bruit admissible........................... 17 2.1.1 Définition du panel de test.......................... 17 2.1.2 Choix du codec................................ 18 2.1.2.1 Encodeur.............................. 18 2.1.2.2 Décodeur.............................. 19 2.1.3 Ajout du bruit................................ 19 2.1.3.1 Modèle du bruit.......................... 19 2.1.3.2 Mesures de bruit admissible.................... 20 2.2 Étude des bloc fonctionnels............................. 21 1

2.2.1 Principe général............................... 21 2.2.2 Filtre polyphase............................... 21 2.2.3 MDCT.................................... 23 2.2.3.1 Fenêtres courtes.......................... 23 2.2.3.2 Fenêtres longues.......................... 24 2.2.3.3 Fenêtres de transition....................... 26 2.3 Simulation en virgule fixe.............................. 26 2.3.1 Principe de la simulation.......................... 27 2.3.2 Protocoles de tests.............................. 27 2.3.2.1 Méthode actuelle.......................... 27 2.3.2.2 Perspectives............................ 28 3 Éxpérimentations 29 3.1 Bruits admissibles.................................. 29 3.1.1 Banque de filtres............................... 29 3.1.1.1 Filtre polyphase.......................... 29 3.1.1.2 MDCT............................... 31 3.1.1.3 Bruit dans les deux blocs..................... 32 3.1.2 Modèle perceptuel.............................. 33 3.1.2.1 FFT................................ 33 3.1.2.2 Modèle psycho-acoustique..................... 34 3.1.2.3 Bruit dans les deux blocs..................... 34 3.1.3 Influence entre les deux canaux de traitement............... 35 3.2 Modèles de bruit................................... 37 3.2.1 Filtre polyphase............................... 37 3.2.2 MDCT.................................... 39 3.2.2.1 Fenêtres courtes.......................... 39 3.2.2.2 Fenêtres longues.......................... 39 3.3 Comparaison entre la simulation et le modèle de bruit.............. 40 3.3.1 Filtre polyphase............................... 40 3.3.2 MDCT.................................... 41 4 Travaux complémentaires sur le modèle de bruit 43 4.1 Principe de l étude.................................. 43 4.1.1 Loi L 0..................................... 43 4.1.2 Test du χ 2................................... 44 4.1.3 Algorithme de recherche........................... 45 4.1.4 Exemple simple : le filtre fir........................ 45 4.2 Résultats....................................... 47 Conclusion 49 Tables des figures Tables des tableaux Glossaire i ii iii 2

Bibliographie iv A Choix de l encodeur vi A.1 Panel de test..................................... vi A.2 tests des différents encodeurs............................ vi B Notations ix B.1 Matrices de calcul du bruit............................. ix B.1.1 Papillons anti-recouvrement......................... ix B.2 Coefficients des fenêtres de transitions....................... x B.2.1 Transition long vers court.......................... x B.2.2 Transition long vers court.......................... x C Modèles de bruit xi C.1 Filtre polyphase.................................... xi C.1.1 Code source.................................. xi C.1.2 Vérification du modèle............................ xiii C.2 MDCT........................................ xvi C.2.1 Code source.................................. xvi C.2.2 Fenêtres courtes............................... xvi C.2.3 Vérification du modèle............................ xviii C.2.4 Fenêtres longues............................... xx C.2.5 Code source.................................. xx C.2.6 Vérification du modèle............................ xxiii D Extraits de codes en virgule fixe xxvi D.1 Fonction recadrage.................................. xxvi D.2 Filtre polyphase.................................... xxvii D.3 MDCT........................................ xxx E Organisation des fichiers xxxvi E.1 Répertoire : rapport................................. xxxvi E.2 Répertoire : résultats................................ xxxvii E.3 Répertoire : src.................................... xxxvii E.3.1 répertoire blade_bruits........................... xxxvii E.3.2 répertoire bruits............................... xxxix E.3.3 répertoire chi2................................ xli E.3.4 répertoire virgulefixe........................... xlii 3

Introduction L expansion des réseaux de télécommunications mobiles et de l internet haut débit a changé la conception que tout un chacun pouvait se faire de l utilisation de contenus multimédias, que ce soit pour les communications, les loisirs ou le partage de données. Dans ce contexte, il parait important de pouvoir mettre à disposition rapidement des médias contenants notamment de l information audio de haute qualité (caméras, enregistreurs audio portables...). Pour ce faire il peut donc être nécessaire d avoir à disposition un codeur audio qui soit à la fois performant, économique en énergie et peu encombrant. L implantation de ce type d algorithmes dans des systèmes embarqués, nécessite le respect de contraintes aussi bien au niveau de la consommation que de l encombrement. Pour les respecter il est nécessaire d utiliser l arithmétique virgule fixe. La mise au point d un tel produit requiert de plus des temps de développement très courts, tout en essayant de s assurer que l erreur due à la conversion en virgule fixe soit tolérable. Ainsi il semble utile de pouvoir compter sur un outil permettant, une fois l algorithme écrit en virgule flottante dans un langage de haut niveau de le convertir en virgule fixe sous le respect de certaines contraintes imposées. De tels systèmes existent déjà, il est cependant nécessaire, si on désire les utiliser pour ce genre d applications, de déterminer le type de contraintes à imposer afin que la conversion paraisse transparente pour l utilisateur final. Dans le cas des codeurs audio (AAC, MP3, Ogg...) l impression de qualité est fortement influencée par la perception humaine, c est pourquoi il n est pas raisonnable de se contenter d utiliser un simple rapport signal sur bruit comme critère. Ce rapport présente tout d abord, une étude théorique du format MP3 et un aperçu des techniques existantes de conversion en virgule fixe et de mesure de la qualité d une compression. Le passage en virgule fixe introduit nécessairement un bruit, c est le thème de la deuxième partie qui présente la méthodologie à mettre en place pour faire un lien entre bruit de quantification et qualité de la compression, déterminer les modèles de bruit dans les blocs fonctionnels et les simuler. La dernière partie du rapport présente enfin les résultats des différentes expérimentations. 4

Chapitre 1 Étude bibliographique Cette étude bibliographique se concentre sur l algorithme de compression audio MP3 qui est devenu avec le temps un incontournable. La première partie en décrit le fonctionnement, la seconde présente un bref état de l art des techniques de conversion virgule fixe vers virgule flottante. La dernière aborde les critères permettant de juger la qualité d un algorithme de compression basé sur un modèle perceptuel. 1.1 Compression MP3 Ces dernières années, les encodeurs audio se sont multipliés. Cependant le MP3, étant l un des plus anciens, s est imposé comme un des formats incontournables ; même si les remplaçants arrivent (AAC par exemple). Avec le temps, le fait que cette norme soit ouverte 1, a permis de voir se constituer à son sujet, une importante base de données (publications, codes sources...). Le format MP3 apparaît donc comme le candidat idéal pour l étude à mener. 1.1.1 Description générale du fonctionnement Le MP3 (pour MPEG 2 Layer-3) a été défini en 1991. Il s agit de la troisième couche de la compression audio du standard MPEG-1/2. Cette compression se divise en trois couches, chacune apportant des améliorations à la précédente. La troisième couche est donc celle qui autorise la meilleure compression, mais aussi celle qui nécessite les algorithmes les plus complexes. MPEG définit un standard de compression de la vidéo et de l audio. C est un standard ouvert, accessible en s acquittant de droits. C est ainsi que de nombreux encodeurs et décodeurs satisfaisant cette norme sont disponibles. L encodage peut être réalisé en mono, sur deux pistes indépendantes, en stéréo ou encore en codage dit joint stereo où les pistes sont encodées l une par rapport à l autre de manière à réaliser une meilleure compression. Suivant les standards, la fréquence d échantillonnage du signal s échelonne entre 16 khz et 48 khz (32, 44,1 et 48 khz pour la norme MPEG-1 auxquelles on ajoute les fréquences 16, 22,05 et 24 khz pour MPEG-2) 3. Le débit du fichier compressé peut être aussi bien variable que constant. Il est compris entre 32 kbit/s et 320 kbits/s [Bra03]. 1 Contrairement aux formats propriétaires (WMA, Realmedia...) 2 Moving Picture Experts Group 3 Il existe une extension propriétaire de chez Fraunhofer qui autorise l utilisation des fréquences 8, 11,05 et 12 khz 5

Le principe de la compression MP3 repose sur la psychoacoustique, c est de là que vient l appellation de codeur basé sur un modèle perceptuel. La psychoacoustique est l ensemble des phénomènes régissant la perception d un son. Elle comprend le masquage (aussi bien fréquentiel que temporel) d un son par un autre de plus forte intensité qui lui est proche et la prise en compte des seuils de perception d un son suivant sa fréquence. Toutes ces notions sont détaillées dans [Bar06]. L algorithme fait intervenir, entre autre, un banc de filtre, une boucle de quantification ou encore un codage Huffman. Notons que pour les couches 1 et 2 celui-ci ayant lieu après la quantification la notion de virgule flottante/fixe n a pas lieu d être. Pour la 3 e couche en revanche le codage fait partie de la boucle de quantification, il peut donc avoir une influence sur la façon d effectuer la conversion. Le diagramme par blocs d un encodeur MP3 est présenté sur la figure 1.1. Fig. 1.1 Schéma bloc d un encodeur MP3 [Bra03]. 1.1.2 Algorithme (basé sur [Pan95]) Afin de mieux comprendre le fonctionnement de la compression, il convient d étudier l algorithme et plus particulièrement les trois étapes importantes que sont la décomposition du signal par la banque de filtres, le modèle perceptuel et enfin la quantification, qui peut avoir une influence sur les parties précédentes [Bra03]. 1.1.2.1 Banque de filtres Le banc de filtres sert à répartir le signal sur 32 bandes de fréquence de largeurs égales. Dans le cas du MP3, ce banc peut se décomposer en un «filtre polyphase» mis en cascade avec une transformation en cosinus modifiée. 6

Filtre polyphase Le filtre polyphase est un filtre qui sépare le signal sur les 32 bandes de sorties. Son équation est : 63 7 s t [i] = M[i][k] (C[k + 64j] x[k + 64j]) (1.1) k=0 j=0 Où i est l index de la bande de fréquence allant de 0 à 31. s t [i] est la sortie du filtre pour la bande i à l instant t. C[n] est l ensemble des coefficients de la fenêtre de filtrage. x[n] est l entrée. Les 512 échantillons d entrée sont stockés dans un tampon circulaire dont les valeurs sont renouvelées par bloc de 32. M est la matrice des coefficients du filtre dont le terme général est : (2i + 1) (k 16) π M[i][k] = cos (1.2) 64 Ce filtre correspond à 32 filtres passe-bandes «classiques» mis en cascade ave une décimation. Pour chaque bloc de 32 échantillons traité, la sortie se compose d un échantillon pour chaque bande. Le signal est donc sous échantillonné par 32. Le traitement est dit en fréquence critique, car le nombre de sous bandes est égal au rapport de décimation. Ce type de filtrage présente trois inconvénients majeurs : le fait que les bandes passantes soient fixées et égales ne correspond pas à la perception humaine du son, cette opération introduit une dégradation du signal mais elle n est pas audible, le recouvrement des filtres ajouté au sous échantillonnage en sortie peux conduire à des phénomènes de recouvrement de spectre. Le filtre composite prévoit des les annuler lors de la synthèse du signal. Il peuvent néanmoins favoriser l apparition d artefacts auditifs lors de la compression. Pour résoudre ce dernier problème et améliorer la précision de la décompostion, le codeur MP3 intègre une transformation en cosinus modifiée sur chacune des bandes. Transformation en cosinus modifiée (MDCT) Cette transformation sert à affiner le découpage fréquentiel permettant ainsi d éviter les recouvrements de spectre. Il s agit d une décomposition en cosinus sur des blocs dont la taille est soit 6 échantillons (pour une précision temporelle) soit 18 échantillons (pour une précision fréquentielle). Les fenêtres utilisées se recouvrent à 50%, leurs tailles respectives sont donc de 12 et 36 échantillons. Pour chaque échantillon, cette transformation peut fonctionner sur des blocs courts (pour toutes les bandes), sur des blocs longs (pour toutes les bandes) ou en mode mixte (blocs longs pour les deux bandes basses fréquences et blocs courts pour les autres). Une fois le signal décomposé, il faut le quantifier. L intérêt de ce type de codeur est que la quantification s appuiera sur un modèle relatif à la perception humaine. 7

1.1.2.2 Modèle perceptuel Le principe du modèle perceptuel est de déterminer, en fonction de la fréquence, la quantité de bruit qu il est possible d ajouter sans que cela ne soit perceptible. Cette information est ensuite utilisée pour la quantification. Le premier problème est de s assurer que l échantillon en cours d encodage est bien le même que celui qui a été traité dans le modèle perceptuel. En effet les temps de calcul de ces deux opérations sont différents, il est donc nécessaire d ajouter un retard fixe facilement déterminable. Une fois cette opération de recalage réalisée, il faut décomposer le signal dans le domaine fréquentiel. La décomposition issue du banc de filtres est inutilisable ici car elle n est pas assez précise. Le signal est donc décomposé grâce à une transformation de Fourier sur une fenêtre de 1024 points. Les valeurs sont ensuite regroupées en bandes critiques. Une bande critique est telle que : «Des sons à l intérieur de la bande critique influencent d autres sons se trouvant dans la même bande.[...] La bande critique peut être considérée comme un filtre passe bande, dont la réponse fréquentielle correspond grossièrement à la courbe de réponse des nerfs auditifs» [Bar06]. En s appuyant sur des règles venant de la psychoacoustique, le modèle perceptuel détermine, pour chaque bande critique, la quantité minimale de signal à partir de laquelle un son est perçu. Ces valeurs sont utilisées lors de la quantification, pour connaître le bruit de quantification admissible qu il est permis d ajouter dans chaque bande de fréquence. 1.1.2.3 Quantification Dans le cas du MP3, les parties quantification et codage sont indissociables. La partie quantification-codage de l algorithme est composée de deux boucles imbriquées. Boucle intérieure : le but de cette boucle est le contrôle du taux de compression. Les valeurs quantifiées sont codées en utilisant un codage Huffman, de manière à ce que le bloc codé respecte bien les contraintes de débit fixées. Dans le cas contraire, il est nécessaire d ajuster un gain global (s appliquant sur l ensemble de 32 bandes) pour augmenter le pas de quantification et ainsi réduire le nombre de bits utilisés. Cette opération est répétée jusqu à ce que le taux de compression souhaité soit atteint. Boucle extérieure : le but de cette boucle est le contrôle du bruit de quantification. Il faut vérifier que, dans chacune des bandes, le bruit introduit par la quantification est inférieur au seuil de masquage déterminé par le modèle psychoacoustique. Dans le cas contraire, le facteur d échelle de la bande est ajusté de manière à diminuer le bruit de quantification. À chaque fois qu un facteur d échelle est modifié, il faut réexécuter la boucle intérieure pour trouver le codage correspondant. Cette boucle est itérée tant que le bruit introduit ne respecte pas les contraintes imposées par le modèle perceptuel. L imbrication des deux boucles ne converge pas forcément, ainsi il convient parfois d ajuster le modèle psychoacoustique au taux de compression que l on veut atteindre [Bra03]. 8

1.1.3 L implantation en virgule fixe Il existe relativement peu d implémentations en virgule fixe de codeurs MP3. Cela est sans doute dû en partie à la complexité de l algorithme. L institut Fraunhofer a cependant mis au point un modèle d algorithme pouvant être optimisé pour différentes architectures, le CDK (Core Design Kit [GLL03]). Il s agit d un code générique d un algorithme de compression en virgule fixe. Une fois l architecture cible connue, il est possible d optimiser ce code en fonction du matériel sélectionné. Ce type de démarche pose les problèmes suivants : le code ne peut fonctionner que sur certaines architectures (même si les plus courantes sont compatibles), il faut dans tous les cas optimiser le code pour le faire fonctionner sur la cible, pour chaque algorithme de compression, il faut redévelopper un nouveau code. Il parait donc intéressant de pouvoir convertir automatiquement un code en arithmétique virgule flottante vers une arithmétique en virgule fixe et de mettre au point, pour cet outil, une méthodologie de conversion pour les algorithmes de compression audio. Cette procédure peut être étendue à d autres codeurs fonctionnant sur le même principe, les critères de qualité à respecter restant les mêmes. Ce type d outils existe déjà, il reste à mettre au point la méthodologie pour les codeurs audio. Dans ce but, il convient d étudier le type de bruits que génère une conversion vers une arithmétique en virgule fixe et de faire le point sur les différents outils existants. 1.2 Techniques de conversion virgule flottante vers virgule fixe 1.2.1 Arithmétique virgule fixe Cette partie est un rappel des enjeux et des problèmes liés au calcul en arithmétique virgule fixe. Le polycopié de cours de traitement numérique du signal en 2 e année à l ENSSAT [SM05] et la thèse de doctorat de Daniel Menard [Men02] apportent plus de précisions sur le sujet. 1.2.1.1 Codage des nombres Avant d envisager la conversion d une arithmétique en virgule flottante vers une autre en virgule fixe, il convient de rappeler quelques notions de base sur le codage des nombres. Entiers Un entier relatif sur b bits peut être représenté de deux manières différentes : la représentation signe-valeur absolue, où la donnée est représentée par un bit de signe et b 1 bits pour le module, la représentation en complément à 2, où les entiers positifs sont codés en binaire naturel et les entiers négatifs sont obtenus en ajoutant 1 au complément à 1 de la valeur absolue. Si x > 0 alors x = x + 1. 9

Codage virgule fixe Dans le cas d une arithmétique en virgule fixe, les données sont composées d une partie entière et d une partie fractionnaire. La taille de ces parties reste fixe au cours du traitement. Le format d une donnée est entièrement défini par la longueur de sa partie entière, de sa partie fractionnaire et le type de représentation choisi. Codage virgule flottante Pour le codage en virgule flottante, le nombre est représenté par un bit de signe, un exposant u et une mantisse. L exposant sert à fixer le facteur d échelle tandis que la mantisse représente la valeur à coder, divisée par le facteur d échelle. 1.2.1.2 Conversion en virgule fixe La conversion d un algorithme en arithmétique virgule fixe peut se décomposer en trois étapes successives : la détermination de la dynamique des données, puis de la position de la virgule et enfin de la largeur des données. La détermination de la dynamique des données consiste à chercher le domaine de définition des données de l application. Il existe deux approches différentes. La dynamique peut être déterminée à partir de simulations de l algorithme en virgule flottante. Cette approche ne garantit pas l absence de dépassement. L autre méthode dite analytique consiste à fixer la dynamique des entrées et à la propager à travers les divers opérateurs pour trouver la dynamique des données dans l algorithme. Cette démarche permet de garantir l absence de débordement en se plaçant dans le pire des cas, elle est par conséquent très pessimiste. La dynamique des données permet de déduire la position de la virgule par rapport au bit de poids fort. Ceci afin d éviter les débordements lors des différents calculs. Les règles associées aux différents types d opérateurs courants (addition, multiplication...) sont à la base de cette étape. Cette transformation revient à fixer la longueur de la partie entière de la donnée. Pour obtenir un format complet, il faut déterminer la largeur des données (ce qui revient à fixer la largeur de la partie fractionnaire). Cette partie dépend du type d implantation à réaliser. Dans le cas d une implantation logicielle, la largeur des données dépend des types manipulés par le processeur. Tandis que pour une implantation matérielle, l objectif est de réduire la surface d implantation, les coûts et la consommation. Il faut donc chercher à minimiser la largeur des données tout en respectant les contraintes qu imposent les critères de qualité. 1.2.1.3 Évaluation de la précision La perte de précision liée au passage en virgule fixe peut être modélisée par un bruit. Ce bruit découle des lois qui régissent la quantification. C est cette donnée qu il faut mettre en relation avec les critères de qualité à respecter. 10

Après avoir détaillé les différentes étapes de la conversion d un algorithme en virgule flottante vers un autre en virgule fixe, il apparaît qu effectuer cette opération «à la main» peut très vite s avérer fastidieux. Il est par conséquent intéressant de disposer de systèmes permettant de convertir automatiquement un algorithme en virgule fixe, sous contraintes de qualité. 1.2.2 Outils de conversion Il existe plusieurs outils pour la conversion d un algorithme d une arithmétique en virgule flottante vers une arithmétique en virgule fixe. Les deux principaux sont présentés ci-dessous. La fin de cette partie explique la méthodologie de conversion mise au point au sein de l équipe R2D2. 1.2.2.1 Autoscaler for C [KKS00] Ce premier outil s appuie sur la plate forme SUIF 4 pour analyser le code et déterminer la dynamique des données par simulation. Pour cela, il faut modifier le programme en appelant la routine range après chaque affectation de nombre en virgule flottante. Une simulation du programme permet d obtenir la dynamique des données. Un code en integer C est ensuite généré. Ce système ne définit donc pas de spécification virgule fixe à proprement parler mais un code avec des données sous forme d entiers et une table regroupant la position de la virgule pour chaque variable. Tous les opérateurs «flottants» sont également convertis en opérateurs «entiers» [KKS97]. Un inconvénient de cette méthode est que, la prise en compte de la contrainte de précision dans un système basé sur la simulation entraîne des temps de calcul élevés. De plus le code obtenu n est pas optimisé pour une architecture donnée, ce qui réduit son intérêt en vue d une implantation. 1.2.2.2 FRIDGE 5 FRIDGE est un environnement de développement pour l implantation de programmes codés en virgule fixe sur DSP. Il inclut un outil de conversion d un code en ANSI-C virgule flottante vers une représentation virgule fixe en SystemC. La transformation s effectue en plusieurs étapes : Le programmeur commence par «annoter» son code en indiquant, pour certaines variables, la spécification virgule fixe. Puis il simule le programme pour vérifier que les spécifications ajoutées ne dégradent pas trop les performances. Vient ensuite la phase d interpolation lors de laquelle, par propagation des spécifications virgule fixe, FRIDGE détermine la dynamique de l ensemble des données. On obtient enfin la spécification virgule fixe en SystemC du programme. FRIDGE permet également, une fois la conversion effectuée, d obtenir un code C optimisé en vue d une implantation sur un DSP c62x de chez Texas Instruments [CKLM02]. 4 Stanford University Intermediate Format 5 Fixed-point programming and DesiGn Environment 11

Cet outil permet de prendre en compte la contrainte de précision lors du choix de la spécification virgule fixe, mais elle ne fait pas directement partie du calcul. De plus, le code peut être optimisé pour une implantation mais seulement vers une cible, ce qui réduit les possibilités d utilisation, notamment en vue d une implantation matérielle. 1.2.2.3 Méthodologie mise en place au sein de l équipe R2D2 Cette partie s achève par la présentation de la méthodologie mise au point au sein de l équipe R2D2. Le processus de conversion est le suivant [MCFS02] : à l aide de SUIF, l algorithme initialement codé en C (virgule flottante) est représenté de manière à pouvoir formaliser le programme sous forme d un CDFG 6. Ce graphe servira de base de travail pour déterminer la dynamique des données. Il est ensuite possible de déterminer la position de la virgule (opérations de recadrage à placer), puis le type de données à utiliser. Il faut enfin calculer le rapport signal-à-bruit de quantification. S il est convenable le code est optimisé en vue de son implantation. Les principales différences avec les outils évoqués plus haut résident dans la détermination de la dynamique des données, l évaluation précise du rapport signal-à-bruit de quantification et la possibilité d optimiser le code pour différentes cibles. Méthode de détermination de la dynamique des données Les méthodes précédentes comportaient toutes leurs inconvénients (lenteur pour la simulation, restriction aux systèmes non-récursifs pour FRIDGE). L intérêt de la méthodologie présentée ici, est qu elle s applique à tous les systèmes linéaires invariants dans le temps (qu ils soient récursifs ou non). Elle s appuie sur l estimation de la puissance du bruit de quantification pour déterminer le codage des données. Dans le cas des systèmes non-récursifs, la procédure est semblable à celle utilisée dans FRIDGE. Elle est basée sur la propagation de la dynamique des entrées à travers le système. Pour les systèmes récursifs, le graphe flot de signal est transformé en plusieurs graphes sans cycle en s appuyant sur la méthode décrite dans [MS02]. La sortie du système est ainsi liée à chaque entrée par une fonction de transfert. Cette information permet de calculer le rapport signal-à-bruit de quantification. Optimisation du code en fonction de la cible Une fois trouvée la spécification en virgule fixe, il reste à générer le code source du programme. Là encore, cette méthodologie présente un avantage. En effet, le code peut être optimisé en vue de son implantation. Le processeur est décrit à l aide du langage ARMOR. Le code est généré en utilisant le logiciel CALIFE. 6 Control Data Flow Graph 12

Quelle que soit la méthode employée, le critère de qualité à respecter est le rapport signalà-bruit de quantification. Reste à savoir, dans le cas d un codeur audio basé sur un modèle perceptuel, quel est le lien entre ce paramètre et une notion de dégradation perçue par l oreille humaine. 1.3 Mesures de qualité d un algorithme de compression audio 1.3.1 Différentes techniques de mesure Pour pouvoir mettre en place une procédure d implantation d un codeur MP3 en virgule fixe sous contrainte de précision, il faut être en mesure de définir un critère de qualité. La base des codeurs audios perceptuels reposant sur la répartition «au mieux» du bruit de quantification de manière à ce que celui-ci ne soit pas perceptible, l utilisation d un simple rapport signal-à-bruit comme critère de précision n a aucun sens. Il a ainsi été nécessaire de mettre au point d autres techniques de mesure. Historiquement, la première est la mesure subjective, par tests d écoute. 1.3.1.1 Tests d écoute Les procédures à suivre pour effectuer des tests d écoute en vue de déterminer la qualité de matériaux audios large bande ont été standardisées par l ITU-R 7. La marche à suivre peut être décomposée de la manière suivante [SGLT] : Tout d abord les extraits audios sur lesquels seront basés les tests sont choisis. Cette sélection s effectue en fonction des problèmes que les différents morceaux peuvent poser aux codeurs. La difficulté ici est de déterminer un panel qui soit à la fois représentatif et court pour ne pas rendre les tests trop longs et fastidieux. Les échantillons choisis et encodés sont ensuite regroupés par bloc de tests (15 extraits). Chaque jour trois blocs sont testés. Cette limite est fixée pour éviter que les phénomènes de fatigue auditive apparaissent chez les testeurs et ne viennent fausser les tests. Il faut de plus faire attention à placer, au sein des différents blocs, les extraits de manière à ce qu aucun codec ne soit privilégié dans ses conditions d écoute. Les extraits sonores ainsi ordonnés sont prêts à être testés. Dans [SGLT] l écoute s effectue par groupes de deux sur trois après-midis consécutives. Une phase d entraînement à lieu chaque matin. Le système de notation s échelonne sur 41 niveaux de 1 (très dérangeant) à 5 (imperceptible). La mise en place de ces tests est très contraignante et coûte excessivement cher. Les résultats dépendent largement des extraits choisis, du panel de testeurs ou encore des conditions d écoute proposées. Ainsi, cette méthode est impossible à formaliser, ce qui la rend inexploitable dans notre cas. 1.3.1.2 Modélisation du système Une première approche en vue de fournir une méthodologie de mesure objective de la qualité des codecs audios est de chercher à caractériser le système (trouver sa fonction de 7 International Telecommunication Union - Radiocommunications sector 13

transfert). La qualité du codec découlerait de l interprétation de la réponse impulsionnelle du système. Cette manière d envisager les choses présente l avantage d aboutir à une méthode qui est, contrairement aux tests d écoute, indépendante du signal d entrée. En revanche, cette approche ne dépend pas de la manière dont les signaux sont perçus par l humain, ce qui peut poser problème. De plus, ce type de procédure est fortement dépendante du système à tester. Il faut donc, dans le cas d une comparaison de différents codecs, caractériser chacun des algorithmes. Cette opération peut s avérer difficile quand on sait que les codeurs sont des systèmes non linéaires variants dans le temps [Bee98]. Il était donc nécessaire de mettre au point une méthodologie de mesure adaptée au fonctionnement des codecs. 1.3.2 Approche perceptuelle Avec la multiplication des codeurs audios basés sur un modèle perceptuel, il a été nécessaire de mettre au point un moyen de les comparer. Il parait logique dès lors, de privilégier l approche perceptuelle dans les mesures aussi. Que ce soit avec les premiers algorithmes, comme PAQM 8 décrit dans [Bee98], et celui mis au point un peu plus tard par Thilo Thiede et Ernst Kabot dans [TK96] ou encore plus récemment avec l algorithme PEAQ 9 défini par l ITU-R et décrit dans [Kab02], le principe de fonctionnement reste sensiblement le même. Un schéma bloc exposant les grandes lignes de ce type de mesures est présenté sur la figure 1.2. Le principe est relativement intuitif, même si la réalisation l est moins. Le signal compressé et le signal d origine sont transformés par un filtre modélisant le fonctionnement de l oreille. Ces deux signaux sont ensuite comparés pour en obtenir un troisième, l erreur. L analyse de cette erreur en fonction de la perception qu en aurait le cerveau humain permet de dégager plusieurs coefficients représentatifs de la qualité de l encodage. Toutes les descriptions qui suivent sont basées sur l algorithme PEAQ, celui-ci étant le plus récent et apparaît être également le plus utilisé. 1.3.2.1 Modélisation de l oreille La modélisation du conduit auditif peut s effectuer par deux méthodes : l une basée sur une FFT, l autre, plus récente, sur une décomposition par banc de filtres. Cette dernière présente l avantage d offrir une meilleure résolution fréquentielle. Le traitement du signal une fois décomposé est très proche d une méthode à l autre. Le signal décomposé est tout d abord filtré par un système dont la réponse fréquentielle est proche de celle de l oreille, puis (dans le cas de la FFT) le signal est reparti selon les bandes critiques. Un bruit représentant celui généré dans le pavillon de l oreille est ensuite ajouté afin d affiner le modèle. Le signal est enfin transformé par «étalement» fréquentiel et temporel des pics d intensité. Cette dernière opération a pour but de recréer l effet de masque présent lors de la perception d un son. 8 Perceptual Audio Quality Measure 9 Perceptual Evaluation of Audio Quality 14

Fig. 1.2 Principe des mesures basées sur un modèle perceptuel [vbd04]. Le signal de référence et celui compressé sont traités de la même façon. La différence de ces deux signaux est traitée de manière à simuler la façon dont elle serait perçue par le cerveau. Cette analyse permet de dégager les coefficients pour juger de la qualité de la compression. 1.3.2.2 Coefficients de l algorithme PEAQ L analyse du signal d erreur conduira, quelle que soit la méthode utilisée, au calcul de coefficients directement représentatifs de la dégradation perçue du son due à la compression. Ces coefficients sont relatifs, selon que l on a utilisé une FFT ou un banc de filtres : à la distortion ajoutée, au rapport bruit/masque (abordé partie 1.1.2.3 page 8), à la structure harmonique de l erreur, ou encore aux parties manquantes du signal. Il convient enfin de combiner ces informations de manière à obtenir un critère de qualité semblable à celui introduit lors des tests subjectifs. La technique utilisée dans [Kab02] s appuie sur un réseau de neurones. Ces méthodes ont vu, au cours des dernières années, leurs modèles s affiner. Ce qui leur permet d être aujourd hui une alternative fiable aux tests d écoute. Même si, il est vrai, elles ne peuvent pas les remplacer totalement, en tant que référence au moins. Cette étude de l état de l art concernant les techniques de compression audio et de conversion en virgule fixe a permis de mettre en avant, la complexité des algorithmes de compression basés sur des modèles perceptuels. Ceux-ci sont en effet des systèmes non linéaires, variants dans le temps est présentant des parties récursives. 15

D autre part, les outils actuels de conversion d algorithme d une arithmétique en virgule flottante vers une arithmétique en virgule fixe sont très restreints quant aux possibilités de traiter des systèmes présentant des irrégularités (non linéarité, variation dans le temps...). La méthodologie mise en place au sein de l équipe R2D2 permet néanmoins, après quelques modifications sur la structure du graphe flot de signal du système, de convertir des algorithmes non linéaires ou présentant des parties récursives. Le problème qui se pose avec son utilisation est de trouver un moyen de faire le lien entre le rapport signal-à-bruit de quantification (critère de précision déterminé lors de la conversion) et les critères de qualité objectifs fournis par des méthodes du type PEAQ (seule manière analytique valide de juger la qualité d un algorithme de compression). 16

Chapitre 2 Méthodologie de l étude L étude du format MP3 révèle qu un critère du type rapport signal-à-bruit n est pas pertinente pour juger la qualité des algorithmes de compression basés sur un modèle perceptuel. La méthodologie de conversion a donc due être adaptée aux contraintes liées aux codeurs audio large bande. La première étape consiste à déterminer la quantité de bruit de quantification qu il est tolérable d ajouter dans le système. L étude théorique de chacun des blocs fonctionnels du système permet ensuite de déterminer la spécification virgule fixe correspondant à un tel niveau de bruit. Il convient enfin de vérifier, par simulation, que l algorithme en virgule fixe respecte bien les contraintes initialement imposées. 2.1 Évaluation du bruit admissible 2.1.1 Définition du panel de test Comme cela a été expliqué précédemment (au paragraphe 1.3.1.1 page 13), le choix des échantillons sonores qui serviront à faire les tests est primordial. Cette étape est nécessairement la première, car le panel de tests sert notamment, à choisir le codeur utilisé. Les choix effectués dans cette étude sont motivés de la façon suivante : deux morceaux où la voix est très présente : buckley.wav 1 (morceau interprété par un chanteur seul), chant.wav (chanté par une chorale), quatre échantillons où les instrument jouent en solo ou presque. Que ce soit sur des enregistrements récents : piano.wav (un morceau de piano présentant une première partie en arpège et des accords plaqués sur la fin) et truffaz.wav (un morceau de trompette en sourdine choisi pour le son caractéristique de l instrument). Ou encore des enregistrements plus anciens (clarinet.wav et guitar.wav), deux enregistrements de musique «actuelle» : dist.wav (une guitare jouant des accords en distortion) et electro.wav (un morceau de musique électronique dans lequel le son a été fortement compressé), deux morceaux interprétés par des ensembles d instruments plus complets (orchestre.wav, chanson.wav). Chacun des échantillon a été choisi en fonction des problèmes qu il pourrait poser au codeur (restitution de la pureté d un son, encodage d un morceau dont le volume sonore est très faible 1 Le détail des morceaux de musique utilisés pour réaliser les échantillons et présenté en annexe A.1 page vi 17

très élevé...). Une fois ce panel de test fixé, il est possible de l utiliser pour choisir l encodeur sur lequel repose l étude. 2.1.2 Choix du codec Les mesures de qualité s effectuent sur des échantillons non compressés. Toute l étude repose donc sur le choix de la chaîne d encodage/décodage. Cette étape est primordiale pour s assurer de l intérêt des résultats à venir. En effet, si l encodeur réalise une compression de piètre qualité en virgule flottante, il est peu probable que son équivalent en virgule fixe soit utilisable. 2.1.2.1 Encodeur Le choix de l encodeur repose sur plusieurs critères. Tout d abord la qualité de l encodage. Il est aussi nécessaire de faire attention à la simplicité du code source sur lequel il faudra travailler pour passer en virgule fixe. Enfin, il faut bien évidemment que le code source soit disponible. Ces critères ont conduit à retenir trois encodeurs. Un codeur très simple : Shine, un autre un peu plus complexe, optimisé pour les hauts débits : Blade et enfin un troisième très complexe mais qui est l une des références en la matière : Lame. Des tests à différents débits permettent de déduire qu en dessous de 192 kbit/s aucun des encodeurs «simples» ne permet une compression de qualité convenable (cf. tableaux en annexe A.2 page vi). Le débit en sortie est donc fixé à 192 kbit/s. De plus, même à ce débit, la compression réalisée par Shine n est pas satisfaisante. Pour finir, comme il n est pas envisageable, dans les délais imposés par un stage de master, de penser comprendre et travailler sur un code aussi complexe que celui de Lame, le codeur retenu pour l étude est Blade. Shine Blade Lame ODG 2 ODG ODG Buckley -0,63-0,36-0,03 Chanson -0,49-0,23-0,15 Chant -1,21-0,21-0,14 Clarinet -1,67-0,47-0,08 Dist -0,68-0,37-0,13 Electro -0,56-0,29 0 Guitar -1,46-0,51 0 Orchestre -1,42-0,29-0,1 Piano -0,81-0,53 0,04 Truffaz -0,85-0,38-0,09 Moyenne -0,98-0,36-0,06 Tab. 2.1 Comparatif des trois encodeurs à 192 kbit/s 2 Objective Difference Grade 18

2.1.2.2 Décodeur Le décodeur aura une influence sur les mesures de qualité, mais, contrairement à l encodeur, aucune modification du code n est prévue. Le seul critère à privilégier est donc la qualité. De plus les différences entre les décodeurs sont moins grandes qu entre les encodeurs, car il s agit ici de restitution uniquement et non plus de transformation du signal. Les deux décodeurs testés sont MAD qui est très utilisé dans le monde du logiciel libre (Audacity, K3B, Mplayer...) et Lame qui là encore fait figure de référence. Les tests sont menés sur des fichiers encodés à 192 kbit/s avec Blade. Ils conduisent à privilégier le décodeur Lame même si (comme le montre le tableau ci-dessous) les différences de qualité sont minimes. Lame MAD ODG ODG Buckley -0,32-0,4 Chanson -0,22-0,23 Chant -0,21-0,21 Clarinet -0,47-0,47 Dist -0,36-0,37 Electro -0,29-0,29 Guitar -0,5-0,51 Orchestre -0,28-0,29 Piano -0,54-0,51 Truffaz -0,37-0,39 Moyenne -0,36-0,37 Tab. 2.2 Comparatif des deux décodeurs (encodeur blade à 192 kbit/s) 2.1.3 Ajout du bruit La méthodologie de conversion d un algorithme en virgule flottante vers une arithmétique virgule fixe repose sur l évaluation du bruit de quantification comme critère de qualité. Il convient donc de déterminer qu elle est la quantité de bruit qu il est possible d ajouter tout en respectant un critère de qualité fixé (ici le taux objectif de dégradation). 2.1.3.1 Modèle du bruit [Men02] Le bruit généré par la perte de précision suite à un passage en virgule fixe peut être de deux formes. Soit le bruit en sortie est prédominant auquel cas, le bruit de quantification est un bruit blanc uniforme. Soit aucun des bruits n est prépondérant en terme de puissance, cette fois la quantification introduira un bruit blanc gaussien. Dans les deux cas, comme le mode de quantification choisi est l arrondi, le bruit est de moyenne nulle. 19

N ayant aucune connaissance a priori sur les puissances des différents bruit, la solution qui a été retenue est d introduire un bruit qui est la somme de deux bruits blanc : l un gaussien(b N ), l autre uniforme(b U ). Il est possible de faire varier la proportion de chacun des bruits dans le bruit en sortie et d espérer ainsi avoir un modèle s approchant au mieux de la réalité pour chacun des blocs. L équation du bruit est : 2.1.3.2 Mesures de bruit admissible B = α B U + (1 α) B N α [0, 1] (2.1) Une fois le modèle de bruit fixé, il est nécessaire de déterminer la façon dont il est ajouté. La solution retenue ici est d inclure des sources de bruit à la sortie de chacun des principaux blocs fonctionnels (Cf. figure ci-dessous). Pour simplifier les calculs, le bruit est ajouté en utilisant le moteur Matlab. Le code modifié est basé sur Blade simplifié. Chacune des modifications préalables à l ajout du bruit est contrôlée afin de s assurer qu aucune dégradation de l odg n en résultera. Fig. 2.1 Bruits générés lors du passage en virgule fixe, d après [Bra03]. La méthode pour déterminer le bruit admissible est de faire varier la puissance du bruit dans chacune des sources. Ensuite, pour chaque configuration, le panel de test est compressé. Ces manipulations permettent d obtenir des courbes représentant le taux objectif de dégradation en fonction des puissances des bruits ajoutés après chaque bloc fonctionnel. La limite à partir de laquelle, le bruit ajouté devient inacceptable est un odg égal à -1 (ce qui correspond à la limite au delà de laquelle, les effets de la compression sont dérangeants). La mesure du bruit admissible constitue la première étape de la conversion. C est aussi celle qui est particulière à cette étude, car le bruit de quantification peut généralement faire office de critère de qualité. Il est ensuite nécessaire d étudier chacun des blocs fonctionnels de manière à dégager un modèle du bruit généré par le passage en virgule fixe. 20

2.2 Étude des bloc fonctionnels 2.2.1 Principe général L étude théorique sert à dégager un modèle du bruit généré par la passage en arithmétique virgule fixe de chacun des blocs. Ce modèle est ensuite utilisé pour l optimisation de la spécification virgule fixe en fonction de la contrainte de précision. L intérêt de cette démarche est que l exécution du modèle est beaucoup plus rapide que la simulation en virgule fixe. Cette méthode repose sur un travail sur le graphe flot de signal. Il est tout d abord nécessaire de déterminer la dynamique des données dans le système afin d éviter les dépassements. Cette information est propagée dans le système en s appuyant sur les règles associées aux opérateurs en virgule fixe. Elle nécessite aussi une connaissance sur les données manipulées. Le modèle de bruit est une combinaison des bruits introduits lors des différents recadrages liés aux contraintes des opérateurs en virgule fixe. Chaque bruit est propagé dans le système de manière à obtenir son influence sur la sortie. La somme de ces résultats correspond au bruit introduit lors du passage en virgule fixe du système. Le modèle de bruit est codé sous Matlab. Pour pouvoir le vérifier, chaque bloc a été codé (à l identique de code C) sous Matalab à la fois en virgule fixe et en virgule flottante. La comparaison des sorties de ces deux fonctions permet d obtenir le bruit réellement introduit lors du passage en virgule fixe. Une comparaison avec les résultats du modèle servira de validation de ce dernier. Dans un premier temps, seuls le filtre polyphase et la MDCT ont été étudiés. 2.2.2 Filtre polyphase Le filtre polyphase peut se décomposer en 64 cellules élémentaires comme celle représentée sur la figure 2.2. L entrée correspond à la branche notée m x = 0. Les différents bruits introduits sont relatifs : au changement de format en entrée (b e ), et aux recadrages que nécessitent l utilisation des opérateurs en virgule fixe (b m1, b m2 et b a1 ). Il est intéressant de noter qu aucun bruit n est généré en sortie du dernier additionneur car le format spécifié en entrée correspond à celui en sortie. Influence du bruit en entrée Le bruit introduit en entrée est dû à l adaptation du format des données à l entrée de l additionneur. C est le seul bruit que se propage à travers une fonction de transfert. En s appuyant sur [Men02] il est assez rapide de déduire que l influence de ce bruit sur chacune des bandes est : 63 7 b ye (i) = [M[i][k] (C[k + 64j])] 2 b e (2.2) k=0 j=0 21

be mx=0-4 C[k] bm1-3 8 entrées ba1-3 M[i][k] 3 bm2-2 64 entrées 1 Fig. 2.2 Cellule élémentaire du filtre polyphase. Où les notations sont identiques à celles enoncées au 1.1.2, à savoir : i est l index de la bande de fréquence allant de 0 à 31, C[n] est l ensemble des coefficients de la fenêtre de filtrage et M est la matrice des coefficients du filtre. Influence des bruits «en amont» du deuxième multiplieur L influence des bruits en sortie de du premier multiplieur (b m1 ) et du premier additioneur (b a1 ) peuvent être étudiés de façon conjointe étant donné que le bruit en sortie du multiplieur peut-être ramené à un bruit en sortie de l additionneur dont l expression est b m1 = 8 b m1. L influence de ces deux bruits en sortie est donc (en gardant les notations précédentes) : 63 b y1 (i) = M[i][k] 2 (8 b m1 + b m1 ) (2.3) k=0 Bruit total Le bruit en sortie de la deuxième multiplication (b m2 ) peut être ramené à un bruit en sortie dont l expression est b m2 = 64 b m2. Le bruit généré, dans chacune des sous-bande de fréquence, par le passage en virgule fixe est lui de la forme : b qp oly (i) = b ye (i) + b y1 (i) + b m2 (2.4) Le code source du modèle permettant de calculer la puissance de ce bruit est joint en annexes (C.1.1 page xi). 22

2.2.3 MDCT La transformé en cosinus modifiée possède trois modes de fonctionnement, il est donc nécessaire de mener l étude théorique pour chaque mode. Les modes fenêtres longues et mixtes incluent un traitement anti-recouvrement qu il faut prendre en compte. Ça n est pas le cas pour les fenêtres courtes. 2.2.3.1 Fenêtres courtes Dans un fonctionnement en mode court, la MDCT peut se décomposer en 12 cellules élémentaires comme celle représentée sur la figure 2.3. L entrée correspond à la branche notée m x = 1. La dynamique de l entrée découle de celle de la sortie du filtre polyphase. Comme auparavant, les bruits introduits sont relatifs au changement de format en entrée (b e ), et aux recadrages que nécessitent l utilisation des opérateurs en virgule fixe (b m1 et b m2 ). mx=1 be 0 Ws[j] bm1 2 MDCTs[j][i] 1 bm2 2 12 entrées 1 Fig. 2.3 Cellule élémentaire de la MDCT en mode court. Influence du bruit en entrée Le bruit introduit en entrée est dû à l adaptation du format des données à l entrée du multiplieur. C est le seul bruit que se propage à travers une fonction de transfert. Son expression sur chacune des sous-bande est : 36 b ye (i) = [W s [j] MDCT s [j][i]] 2 b e (2.5) j=0 Où i est l index de la bande allant de 0 à 5. W s est l ensemble des coefficients de la fenêtre de filtrage et MDCT s est la matrice des coefficients du filtre. π (n + 0.5) W s [n] = sin [ 12 ] π (2 n + 6) 2 i MDCT s [n][i] = cos 24 3 (2.6) (2.7) 23

Influence du bruit en sortie du premier multiplieur L influence du bruit en sortie du premier multiplieur (b m1 ) est (en gardant les notations précédentes) : 11 b y1 (i) = MDCT s [n] 2 b m1 (2.8) j=0 Bruit total Le bruit en sortie de la deuxième multiplication (b m2 ) peut être ramené à un bruit en sortie dont l expression est b m2 = 12 b m2. Le bruit généré, dans chacune des sous-bandes, par le passage en virgule fixe est lui de la forme : b qmdct s (i) = b ye (i) + b y1 (i) + b m2 (2.9) Le code source du modèle permettant de calculer la puissance de ce bruit est joint en annexes (C.2.2 page xvi). 2.2.3.2 Fenêtres longues Il est encore une fois possible de décomposer la MDCT cellules élémentaires (36 cette fois) comme celle représentée sur la figure 2.4. L entrée correspond à la branche notée m x = 1. La dynamique de l entrée découle de celle de la sortie du filtre polyphase. Comme auparavant, les bruits introduits sont relatifs au changement de format en entrée (b e ), et aux recadrages que nécessitent l utilisation des opérateurs en virgule fixe (b m1, b m2, b m3 et b a1 ). Influence du bruit en entrée Soit i l index de la bande allant de 0 à 17. W 2 l est le vecteur colonne des coefficients de la fenêtre de filtrage au carré et MDCT 2 l est la matrice des coefficients du filtre au carré. W 2 l [n] = MDCT 2 l [n][i] = [ ] π (n + 0.5) 2 sin (2.10) 12 [ [ ]] π (2 n + 6) 2 i 2 cos (2.11) 24 3 Soit c a et c s les coefficients des papillons anti-recouvrement. Ces deux vecteurs sont de dimensions 8. Soit M ca1, M cs1, M ca2 et M cs2 les matrices carrées définies en annexe B.1.1 page ix 24

mx=1 be 0 Wl[n] bm1 2 MDCTl[n][i] 1 bm2 ba1 2 36 entrées 1 c bm3 2 18 entrées 2 Fig. 2.4 Cellule élémentaire de la MDCT en mode long. et M pap la matrice carrée définie par blocs :. M... cs1 0.. Mca1 M pap = 0.. I.. 2 0 M ca2... 0... Mcs2 (2.12) Le vecteur représentant l influence du bruit en entrée sur chacune des bandes en sortie est : B ye = M pap [MDCT 2 L W 2 l ] b e (2.13) Influence du bruit en sortie du premier multiplieur Soit B m1 le vecteur colonne de dimension 36 dont les éléments sont égaux au bruit en sortie du premier multiplieur (b m1 ). En conservant les notations précédentes, l influence de ce bruit est donnée par : B y1 = M pap [MDCT 2 L B m1 ] (2.14) 25

Influence des bruits «en amont» du troisième multiplieur Comme expliqué précédemment, l influence des bruits en sortie du deuxième multiplieur (b m2 ) et du premier additioneur (b a1 ) peuvent être étudiés de façon conjointe. Le bruit en sortie du multiplieur est ramené à un bruit en sortie de l additionneur dont l expression est b m2 = 36 b m2. Soit B 2 le vecteur colonne de dimension 18 dont les éléments sont égaux à b m2 + b a1. L influence des deux bruits en sortie est donc (en gardant les notations précédentes) : B y2 = M pap B 2 (2.15) Bruit total Le dernier bruit introduit dans le système est celui en sortie du troisième multiplieur (b m3 ). Ce dernier ne passe pas à travers les papillons anti-recouvrement. Soit B 3 le vecteur colonne de dimension 18 dont les éléments sont égaux à b m3. L expression du bruit généré, en sortie du système, par un passage en virgule fixe est : B qmdct l = B ye + B y1 + B y2 + B 3 (2.16) Le code source du modèle permettant de calculer la puissance de ce bruit est joint en annexes (C.2.5 page xx). 2.2.3.3 Fenêtres de transition Les modes de transitions fonctionnent de la même manière que le mode long. À savoir, la décomposition sur un bloc de 36 échantillons, est suivie du papillon anti-recouvrement. Seuls changent donc, les coefficients de la fenêtre et les bruits générés avant le papillon. Dans le cas d une transition long vers court, les six derniers coefficients de la fenêtres sont nuls (cf. annexe B.2.1 page x). Ce sera aussi le cas pour les bruits b m1, b m2 et b a1. Pour la transition court vers long les six premiers coefficients sont nuls (cf. annexe B.2.2 page x), ce qui se répercute de la même manière sur les bruits. Le calcul du bruit s effectue ensuite en utilisant la même méthode que pour le mode long. Les modèles de bruit permettent de calculer une spécification virgule optimale sous contrainte de précision. Il faut ensuite simuler l exécution du code en tenant compte de ces nouveaux paramètres, ceci afin de vérifier que le modèle utilisé au 2.1.3.1 correspond bien à la réalité. 2.3 Simulation en virgule fixe Une fois les modèles de bruits calculés, et les spécifications virgule fixe déterminées, il convient de simuler le comportement qu a l algorithme de compression en virgule fixe. Cette étape permet notamment, de vérifier la validité des mesures avec un bruit ajouté et d avoir une idée de la précision nécessaire pour respecter les contraintes de qualité de compression. 26

2.3.1 Principe de la simulation Les bibliothèques de simulation virgule fixe disponibles librement sont soit insuffisantes pour l utilisation visée (recadrage seulement sur certains formats fixés notamment) soit dans d autres languages (C++ généralement alors que le code source de Blade est en C). Il a donc été nécessaire de mettre au point une fonction de recadrage (cf. annexe D.1 page xxvi). Cette fonction réalise en fait un arrondi à 2 n près (où n est la précision souhaitée en bits). Le codeur a ensuite été testé avec les différents coefficients des fonctions (fenêtres, filtres...) en virgule fixe, de manière à vérifier qu il n y avait pas de changement significatif par rapport à la compression avec l algorithme original. La spécification virgule des constantes multiplicatives n entre en effet pas en ligne de compte dans l étude du bruit généré par la conversion du système d une arithmétique en virgule flottante vers une autre en virgule fixe. Finalement, c est l algorithme qui a été converti en virgule fixe (cf. annexes D.2 et D.3 pages xxvii) et xxx). Cette étape consiste à placer des opérations de recadrage en entrée et en sortie de chaque opérateur de manière à s approcher au mieux du comportement qu aurait le système s il était codé en virgule fixe. L inconvénient principal de ce type de méthode est l accroissement des temps de calcul. Ils ont en effet été multipliés par un facteur compris entre 10 et 100 selon la proportion de l algorithme dont le comportement en virgule fixe est simulé. Il reste finalement à mettre en œuvre des démarches à suivre pour tenter de valider le modèle du bruit expliqué au 2.1.3.1 2.3.2 Protocoles de tests 2.3.2.1 Méthode actuelle L étape initale de la phase de simulation consiste à déterminer, pour un ensemble de puissances de bruit à ajouter, les spécifications en virgule fixe correspondantes. Ce calcul repose sur l utilisation des modèles de bruit décrits plus haut. Cette opération permet d obtenir la largeur des différents opérateurs utilisés dans le bloc fonctionnel. L algorithme considéré est simulé en virgule fixe, une première fois, en utilisant Matlab sur des échatillons courts, de manière à vérifier que, pour la spécification en virgule fixe obtenue, le bruit généré correspond bien aux prévisions. Pour chaque spécification virgule fixe ainsi déterminée, le panel de test est encodé. Un algorithme légérement modifié permet de mesurer le bruit effectivement ajouté. Les relevés de taux de dégradation objective sont ensuite confrontés aux résultats obtenus par la méthode enoncée au paragraphe 2.1.3 page 19. Le principal inconvénient de cette méthode réside dans la durée des calculs. En effet, le temps d encodage d un échantillon est multiplié par un facteur 10 à 100 introduit par la simulation virgule fixe. Les extraits sonores considérés sont donc compressés en 300 à 1200 secondes (suivant la durée de l échantillon). Pour un test complet, chaque morceau est encodé 5 à 30 fois. Ce qui conduit à des durées de test pouvant varier d une dizaine d heures à plusieurs jours. 27

2.3.2.2 Perspectives Compte-tenu des durées d encodage, il est difficle d envisager des améliorations au niveau de la durée des mesures. Ce qui peut en revanche changer, c est la manière dont sont effectués ces relevés. Il est possible d aborder le problème, non plus d un point de vue du bruit ajouté, mais en considérant plutôt la robustesse du système face aux pertes de précision. Il est possible de mener ce type d étude en déterminant une spécification virgule fixe qui satisfait des contraintes imposées (en utilisant la méthode abordée ci-dessus), puis en faisant varier, pour un opérateur spécifique, la longueur de la partie fractionnaire. Répétées pour chaque opérateur, ces mesures permettraient d aboutir à une caractérisation de l influence de la précision, au sein de chaque opérateur, sur la qualité de la compression. La localisation d opérations «sensibles» serait rendue possible par l analyse de ces résultats. Ce nouveau protocole de mesures ne résoud en rien le problème des temps de calculs, bien au contraire. En effet, là où il y avait une mesure par puissance de bruit, il y a en général entre 4 et 6 opérateurs dont il faut faire varier la spécification virgule fixe. La durée d exécution du test s en trouvant augmentée d autant. Cette méthode n a donc pas été testée pour l instant. Seule la procédure où la spécification en virgule fixe est déterminée en fonction du bruit ajouté a fait l objet d expérimentations et conduit à des résultats. 28

Chapitre 3 Éxpérimentations Les outils développés au cours de la première partie de ce stage ont permis de mener plusieurs types d expérimentations. Tout d abord l algorithme avec les sources de bruit a été utilisé pour déterminer le lien entre le bruit de quantification engendré par le passage en virgule fixe et la qualité de la compression. Ensuite, les différentes spécifications virgules fixes sont calculées avec les modèles. Enfin, en simulant le comportement en virgule fixe de l algorithme, il est possible de vérifier la validité du modèle avec les sources de bruit. 3.1 Bruits admissibles L encodeur peut se décomposer en deux flots de signaux distincts. Le signal qui est traité dans la banque de filtre d une part, le signal dont sont dégagés les paramètres de compression via le modèle perceptuel d autre part. Il parait donc assez naturel de commencer par étudier l influence du bruit dans chacun de ces deux flots séparément, pour ensuite regarder l influence de bruits sur les deux canaux. 3.1.1 Banque de filtres 3.1.1.1 Filtre polyphase Le signal est traité par la banque de filtres en vue de sa compression. Il est donc intuitif de supposer que le bruit ajouté aura une forte influence sur la qualité finale de l encodage. Les valeurs de puissance de bruit sont donc choisies assez faibles (entre -110dB et -50dB). Comme il a été indiqué précédemment (au 2.1.3) le bruit est la somme d un bruit blanc gaussien (B N ) de moyenne nulle et d un autre uniforme (B U ) sous la forme : B = α B N + (1 α) B U. Le coefficient α varie entre 0 et 1. Ces mesures permettent de vérifier plusieurs points. Tout d abord l influence du coefficient α sur la qualité de la compression. Comme le montre la figure 3.1 ce paramètre n a que très peu d incidence sur le taux de dégradation, c est pourquoi les mesures suivantes ont été relevées pour un α = 0, 5. Le deuxième intérêt des ces expérimentations est de déterminer la puissance maximale du bruit qu il est possible d ajouter tout en conservant une qualité de compression raisonnable. La limite du taux de dégradation étant fixée à -1 (au delà, les effets de la compression sont dérangeants) la puissance maximale du bruit est, en moyenne sur les dix échantillons du panel, -80dB (cf. figure 3.2). Dans le cadre plus restrictif où seul l échantillon supportant le moins bien l encodage est considéré, cette limite descend à -95dB. C est cette dernière valeur qui est retenue pour la suite des expérimentations. 29

0 0.5 1 1.5 ODG 2 2.5 3 3.5 4 110 100 90 80 70 60 50 Puissance du bruit ajouté (db) Fig. 3.1 ODG moyen pour un bruit ajouté après le filtre polyphase avec α {0 0, 25 0, 5 0, 75 1}. 0 0.5 1 1.5 ODG 2 2.5 3 3.5 4 110 100 90 80 70 60 50 Puissance du bruit ajouté (db) Fig. 3.2 ODG moyen, minimum et maximum pour un bruit ajouté après le filtre polyphase. 30

3.1.1.2 MDCT La MDCT est la dernière transformation avant la quantification. En général, plus un bruit est généré proche de la sortie, plus son influence est forte. En effet le bruit ne sera pas filtré lors de son passage dans les blocs en aval et les chances d atténuation sont donc d autant plus faibles. Le bruit ajouté est du même type que celui de la partie précédente. Aucun bruit n est pour l instant ajouté en sortie du filtre polyphase. Seule l influence du bruit généré par le passage en virgule fixe de la MDCT est donc pris en compte ici. L étude de l évolution du taux de dégradation objective en fonction de l évolution de la puissance du bruit pour différentes valeurs d α permet de dégager, comme précédemment, que ce paramètre n a que peu d influence sur la valeur de l ODG (cf. figure 3.3). α est donc fixé à 0, 5. D après la figure 3.4, le taux de dégradation objective de l échantillon tolérant le plus mal la compression, reste supérieur au seuil (-1) tant que la puissance du bruit ajouté est inférieure à -100dB. Une fois les seuils de bruits déterminés pour chaque module séparément, il convient de s intéresser aux changements apportés si les bruits sont ajoutés après les deux blocs simultanément. 0 0.5 1 1.5 ODG 2 2.5 3 3.5 4 110 100 90 80 70 60 50 Puissance du bruit ajouté (db) Fig. 3.3 ODG moyen pour un bruit ajouté après la MDCT avec α {0 0, 25 0, 5 0, 75 1}. 31

0 0.5 1 1.5 ODG 2 2.5 3 3.5 4 110 100 90 80 70 60 50 Puissance du bruit ajouté (db) Fig. 3.4 ODG moyen, minimum et maximum pour un bruit ajouté après le filtre polyphase. 3.1.1.3 Bruit dans les deux blocs Le but de cette partie est de déterminer les seuils de bruit admissibles dans le cas où les deux blocs seraient convertis en virgule fixe. Le paramètre α est fixé à 0, 5 de manière à réduire la charge de calculs (le temps nécessaire pour effectuer le test sur les deux blocs est de l ordre de la semaine). Les valeurs limites de bruit sont choisies en fonction des valeurs trouvées précédemment, à savoir : un bruit inférieur à -80dB pour le filtre polyphase et à -90dB pour la MDCT. La figure 3.5 présente les relevés pour l échantillon dont le taux de dégradation objective est le plus important. Les puissances du bruit en sortie du filtre polyphase sont indiquées en abcisse tandis que les différentes courbes correspondent aux valeurs de la puissance en sortie de la MDCT. L étude de ces résultats conduit à fixer deux couples de seuils différents. Soit le bruit en sortie du filtre polyphase est choisi avec une puissance inférieure à -95dB et dans ce cas, la puissance en sortie de la MDCT ne doit pas excéder -105dB. Soit, s il s avère que ce seuil soit impossible à respecter, il est possible de l augmenter à -100dB. Dans ce cas, la puissance en sortie du filtre polyphase sera limitée à -105dB. Ces expérimentations ont permis de confirmer la première impression concernant les puissances de bruit qu il est tolérable d ajouter sur le signal à traiter. Ces limites restent en effet très faibles, elles n excédent en général pas -100dB. 32

0.5 1 110 105 100 97,5 95 90 1.5 ODG 2 2.5 3 110 105 100 95 90 85 80 Puissance du bruit ajouté (db) Fig. 3.5 ODG maximum pour un bruit ajouté après le filtre polyphase avec le bruit en sortie de la MDCT dans [-110,-95] 3.1.2 Modèle perceptuel L autre partie de l encodeur concerne le modèle perceptuel. Le flot de signal issu de ces blocs n est pas encodé, il sert à dégager des paramètres de contrôle. Il parait donc assez intuitif de considérer que le bruit engendré par le codage en virgule des blocs FFT et modèle psychoacoustique a beaucoup moins d impact sur la qualité de la compression. Pour cette partie toute les mesures sont effectuées en fixant le paramètre α à 0, 5. Les courbes présentées sont les relevés pour l échantillon subissant la plus grande dégradation. 3.1.2.1 FFT Dans, le cas de la transformé de Fourier, la dynamique des données en sortie étant tellement grande (jusqu à 2 10 pour une FFT sur 1024 points) qu il est fort probable que la précision n ai pas une grande influence. Plusieurs tests successifs ont conduit a augmenter la puissance du bruit jusqu à 500dB pour essayer d entrevoir des changements significatifs (cf. figure 3.6). Finalement, dans aucun des cas, l ajout de bruit seul après la transformé de Fourrier n a engendré un taux de dégradation objective inférieur à -1. 33

0 0.5 1 1.5 ODG 2 2.5 3 3.5 4 100 0 100 200 300 400 500 Puissance du bruit ajouté (db) Fig. 3.6 ODG moyen, minimum et maximum pour un bruit ajouté après la FFT. 3.1.2.2 Modèle psycho-acoustique Le modèles psycho-acoustique est lui légèrement plus sensible au bruit que la FFT, c est pourquoi la puissance du bruit est limitée à 80dB. Les premières expérimentations ont permis de localiser la zone de transition (où l ODG devient inférieur à -1) entre -20dB et 0dB. Des relevés plus précis ont donc été effectués sur cet intervalle. Finalement, la puissance limite du bruit généré dans le modèle psycho-acoustique est de l ordre de -15dB (cf. figure 3.7). 3.1.2.3 Bruit dans les deux blocs Sur la figure 3.8 page 36, les puissances du bruit en sortie du modèle psycho-acoustique sont indiquées en abcisses tandis que les différentes courbes correspondent aux valeurs de la puissance en sortie de la FFT. L étude pour des bruits ajoutés après chacun des blocs, conduit finalement aux résultats attendus. Les seuils de puissance de bruit admissible n ont pas beaucoup évolués par rapport aux études séparées. Si la puissance du bruit généré dans la FFT est inférieure à 200dB, le bruit en sortie du modèle psycho-acoustique ne doit pas excéder -25dB pour respecter les critères de qualité imposés. Si la limite sur le bruit en sortie de la FFT devient plus contraignante (150dB), la puissance limite du bruit généré dans le modèle psycho-acoustique est élevée jusqu à -15dB. Cette étude permet également de constater qu encore une fois, c est le bruit le plus proche de la sortie qui a le plus d influence sur la qualité de la compression. 34

0 0.5 1 1.5 ODG 2 2.5 3 3.5 4 100 80 60 40 20 0 20 40 60 80 Puissance du bruit ajouté (db) Fig. 3.7 ODG moyen, minimum et maximum pour un bruit ajouté après le modèle psycho-acoustique. Chacun des deux flots de signaux ayant été étudiés séparément, il est maintenant intéressant d observer l influence que peuvent avoir les bruits introduits dans un canal sur les limites de bruit admissible dans l autre canal. 3.1.3 Influence entre les deux canaux de traitement Le but de cette mesure est de mettre en avant les éventuelles interactions, dans la dégradation du signal, des pertes de précision sur chacun des flots de signal. Le test se résume à l ajout de bruit en sortie de la MDCT et du modèle psycho-acoustique. En effet les temps de calcul nécessaire aux mesures avec les quatre sources de bruits (2 à 3 semaines) ne permettent pas de mettre en place ce test dans un premier temps. Les résultats présentés sur la figure 3.9 sont, encore une fois, ceux relatifs à l extrait sonore subissant les plus grandes dégradations. Les valeurs indiquées en abcisses sont celles de la puissance du bruit en sortie de la MDCT. Chaque courbe représente une valeur de bruit en sortie du modèle psycho-acoustique. Il apparaît que les bruits n ont que peu d influence l un sur l autre en ce sens que les seuils de puissance de bruit admissible n ont pas évolués. La puissance du bruit en sortie de la MDCT doit en effet rester en dessous de -100dB et celle après le modèle psycho-acoustique a une valeur limite de -15dB. Il n est donc pas totalement aberrant de se focaliser, dans un premier temps, sur l étude des transformations subies par le signal qui sera quantifié (banque de filtres) sans se préoccuper de l autre partie de l encodeur. 35

0 0.5 1 0 50 100 150 200 1.5 ODG 2 2.5 3 3.5 4 50 40 30 20 10 0 Puissance du bruit ajouté (db) Fig. 3.8 ODG maximum pour un bruit ajouté après le modèle psycho-acoustique avec le bruit en sortie la FFT dans [0,200] 0.5 1 1.5 110 50 20 15 10 5 0 ODG 2 2.5 3 3.5 4 110 105 100 95 90 85 Puissance du bruit ajouté (db) Fig. 3.9 ODG maximum pour un bruit ajouté après la MDCT avec le bruit en sortie du modèle psycho-acoustique dans [-110,-85] 36

3.2 Modèles de bruit Cette partie présente les résultats relatifs à l étude théorique du filtre polyphase et de la MDCT. Le but premier des expérimentations est de déterminer des spécifications virgule fixe (pour chaque bloc) en accord avec les limites de bruit relevées à la partie précédente. En outre, le fait que, pour vérifier la validité du modèle, il ait été nécessaire de coder les fonctions, en virgule flottante et fixe en MATLAB, permet de comparer le bruit généré avec celui ajouté dans le modèle avec sources de bruit. 3.2.1 Filtre polyphase Validité du modèle Avant de commencer les expérimentations, il convient de vérifier la validité du modèle de bruit. La démarche est de comparer les bruit générés par la conversion en virgule fixe avec le bruit calculé à partir du modèle, tout d abord en introduisant du bruit dans un opérateur à la fois, puis en prenant en compte tous les opérateurs en même temps. Les tests conduisent aux résultats suivants (cf. annexe C.1.2 page xiii) : entre -110dB et -75dB l erreur entre le modèle et la simulation vaut au plus 0,9dB. Aux alentours de -30dB, elle augmente à 6dB mais de toute façon, pour de tels niveaux de bruit le fichier devient inécoutable. L étude se limitera donc à des bruits inférieurs à -80dB. Sur cette plage, le modèle est valide. Il est intéressant de noter que le calcul d une spécification virgule en utilisant le modèle prend environ 0,02sec, alors que le temps pour effectuer le même calcul par la simulation est supérieur à 1min 30sec. L utilisation du modèle permet donc de diminuer le temps de calcul par un facteur 450. Bruit généré Le fait d avoir, sous MATLAB, codé le filtre polyphase à la fois en virgule fixe et en virgule flottante autorise l étude du bruit généré par la conversion. Il est donc intéressant de vérifier que ce dernier suit bien les hypothèses posées au 2.1.3.1. Tout d abord, concernant l hypothèse de bruit blanc de moyenne nulle, pour une puissance de l ordre de -105dB, l ordre de grandeur de la moyenne est 10 9 soit près de 1000 fois inférieur aux valeurs extrêmes du bruit. Elle peut donc être considérée comme nulle. En outre, le tracé de la transformé de Fourier du bruit (figure 3.10) ne révéle pas de composante fréquentielle notablement marquée. 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 1 x 10 4 0 0 100 200 300 400 500 600 Fig. 3.10 FFT du bruit généré par un passage en virgule fixe du filtre polyphase. 37

En ce qui concerne la répartition du bruit, un test pour de très faibles valeurs de bruit dans tout le système sauf en sortie a bien une répartition dont l allure ressemble à un bruit uniforme (cf. figure 3.12). Quand le bruit devient important dans tous les opérateurs de la fonction, la répartition du bruit semble bien être gaussienne (cf. figure 3.11). Il serait cependant nécessaire de vérifier plus précisément cette constatation visuelle. Le bruit généré par la conversion en virgule fixe du filtre polyphase suit bien le modèle décrit dans [Men02]. 400 350 300 250 200 150 100 50 0 8 6 4 2 0 2 4 6 8 x 10 4 Fig. 3.11 Répartition du bruit généré par un passage en virgule fixe du filtre polyphase. Aucun bruit n est prédominant. 300 250 200 150 100 50 0 2 1.5 1 0.5 0 0.5 1 1.5 2 x 10 6 Fig. 3.12 Répartition du bruit généré par un passage en virgule fixe du filtre polyphase. Le bruit en sortie est prépondérant. 38

3.2.2 MDCT 3.2.2.1 Fenêtres courtes Validité du modèle Il convient encore une fois de vérifier la validité du modèle de bruit. La démarche est toujours la même. Les résultats présentés en annexes C.2.3 page xviii, permettent de valider le modèle sur l intervalle de puissance utile à l étude. En utilisant le modèle, le temps de calcul d une spécification virgule est environ 0,01sec, alors que le temps pour effectuer le même calcul par la simulation est d à peu près 2min. L utilisation du modèle permet donc de diminuer le temps de calcul par un facteur 12000. Bruit généré La moyenne du bruit généré par la conversion en virgule fixe de l algorithme a une moyenne de l ordre de 10 8 et les extrema valent environ 4, 7 10 6 (pour une puissance de bruit de 100dB). La moyenne étant 400 fois inférieure aux valeurs extrêmes, celle-ci peut être considérée comme nulle. D autre part, comme le montre la figure 3.13, le bruit resemble à un bruit blanc. La répartition elle, reste gaussienne quels que soient les bruits introduits par les recadrages (cf. figure 3.14). 7 x 10 3 120 6 100 5 4 3 2 1 80 60 40 20 0 0 100 200 300 400 500 600 0 4 3 2 1 0 1 2 3 4 x 10 5 Fig. 3.13 FFT du bruit généré par un passage en virgule fixe de la MDCT en mode court. Fig. 3.14 Répartition du bruit généré par un passage en virgule fixe de la MDCT en mode court. 3.2.2.2 Fenêtres longues Validité du modèle Les mesures présentés en annexes C.2.6 page xxiii, permettent de valider le modèle sur l intervalle de puissance utile à la l étude. En utilisant le modèle, le temps de calcul d une spécification virgule est environ 20000 inférieur à celui de la simulation. Les modèles pour les fenêtres de transition fonctionnent sur le même principe que pour les fenêtres longues. C est pourquoi, aucun résultat ne les concernant n est présenté ici. 39

Bruit généré La moyenne du bruit généré par la conversion en virgule fixe de l algorithme a une moyenne de l ordre de 1 10 7 et les extrema valent environ 8 10 6 (pour une puissance de bruit de 95dB). La moyenne étant 70 fois inférieure aux valeurs extrêmes, il parait encore une fois raisonnable de la considérer comme nulle. Comme le montre la figure 3.15, le bruit semble être blanc. La répartition elle, reste gaussienne quels que soient les bruits introduits par les recadrages (cf. figure 3.16). 0.018 0.016 0.014 0.012 0.01 0.008 0.006 0.004 0.002 0 0 100 200 300 400 500 600 40 35 30 25 20 15 10 5 0 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 x 10 6 Fig. 3.15 FFT du bruit généré par un passage en virgule fixe de la MDCT en mode long. Fig. 3.16 Répartition du bruit généré par un passage en virgule fixe de la MDCT en mode long. Le modèles ainsi déterminés permettent d obtenir les spécifications virgule fixe pour une puissance de bruit donnée. Il reste donc à vérifier qu en simulant le comportement de l encodeur avec ces spécifications, le taux de dégradation introduit correspond bien à celui pour la simulation avec les sources de bruit. 3.3 Comparaison entre la simulation et le modèle de bruit Dans cette partie sont rapportés les résultats de la simulation en virgule fixe du filtre polyphase et de la MDCT. Les mesures de taux de dégradation sont comparées à celles effectuées avec l encodeur complété de sources de bruit. 3.3.1 Filtre polyphase Le fonctionnement du filtre polyphase étant relativement simple, il a été codé à l identique en MATLAB. Il n y a donc aucune raison a priori, pour qu il y ait des différences entre les résultats avec le modèle aux sources de bruits, les puissances calculées avec le modèle de bruit et les mesures de taux de dégradation avec la simulation en virgule fixe. La figure 3.17 page 41 montre les mesures de taux de dégradation moyen en fonction du bruit ajouté. La courbe bleue correspond au modèle avec les sources de bruit et la rouge à la simulation en virgule fixe. Les résultats obtenus par ces deux méthodes sont très similaires. Il est donc raisonnable d affirmer que, dans ce cas, la méthodologie de conversion est validée. 40

0.5 bruit ajouté virgule fixe 1 1.5 ODG 2 2.5 3 110 105 100 95 90 85 80 Puissance du bruit ajouté (db) Fig. 3.17 Comparaison des taux de dégradation entre le modèle aux bruits ajoutés et la simulation en virgule fixe pour le filtre polyphase. 3.3.2 MDCT Le cas de la MDCT est un peu plus compliqué que celui du filtre polyphase. En effet il existe quatre modes de fonctionnement. Ils varient au cours du temps, en fonction de la nature du bloc à traiter. Ce choix étant déterminé par le modèle psycho-acoustique, il n a pas été possible d implanter, dans un premier temps, le mécanisme de décision en MATLAB. Chaque mode a été étudié indépendamment. Pour une valeur de puissance de bruit désirée, il y a donc quatre spécifications virgule fixe différentes (une par mode). Il reste donc à vérifier que ce type d étude s accorde bien avec le fonctionnement in situ de l algorithme. La première constatation, est la présence de gros écarts entre le modèle et la simulation. La puissance du bruit effectivement ajouté est donc calculée. Elle ne correspond pas tout à fait à celle attendue (des écarts jusqu à 5dB sont relevés). La figure 3.18 montre le tracé des résultats obtenus avec le modèle aux sources de bruit et ceux de la simulation en virgule fixe. Une autre source d erreur pourrait être que les attributs du bruit généré ne correspondent pas celui modélisé. Pour vérifier, le bruit généré est mesuré. Le rapport entre la moyenne est les extrema est de l ordre de 400. Le bruit est donc bien de moyenne nulle. La répartition semble bien être gaussienne (cf. figure 3.19) même s il conviendrait de le vérifier plus précisément. Le bruit ajouté est bien en accord avec les paramètres du modèle. Il pourrait donc être intéressant d étudier l influence de chaque opérateur sur la dégradation, de manière à cibler l endroit d où provient cet écart. Les premiers tests ont permis de vérifier la pertinence du modèle de bruit, même s il subsiste quelques écarts entre le modèle et la simulation. Il peut être intéressant de changer la méthodologie de mesure de manière à pouvoir analyser plus précisément le comportement du bruit dans le système. Ainsi il serait possible de trouver quelle est exactement la cause de ces erreurs. D autre part, l utilisation des modèles plutôt que la simulation améliore grandement les performances. Les temps de calculs sont divisés par un rapport allant de 400 à 20000. 41

0.5 1 bruit ajouté virgule fixe (bruit attendu) virgule fixe (bruit réel) 1.5 ODG 2 2.5 3 3.5 110 105 100 95 90 Puissance du bruit ajouté (db) Fig. 3.18 Comparaison des taux de dégradation avec le modèle aux bruit ajoutés et la simulation en virgule fixe pour la MDCT. 300 250 200 150 100 50 0 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5 x 10 5 Fig. 3.19 Répartition du bruit généré par un passage en virgule fixe de la MDCT. Simulation en virgule fixe de l encodeur. 42

Chapitre 4 Travaux complémentaires sur le modèle de bruit Les résultats observés précédemment soulignent la nécessité de mise en place d un test de validation du modèle de bruit. La procédure retenue repose sur le test du χ 2. Celui-ci est utilisé conjointement avec un algorithme de recherche de manière à trouver, pour chacun des bruits mesurés, une valeur du paramètre α introduit dans l équation 2.1 page 20. Les échantillons testés sont les sorties de la mdct pour différentes spécifications virgule fixe. 4.1 Principe de l étude 4.1.1 Loi L 0 La loi L 0 représente la distribution du bruit B = α B U + (1 α) B N où B N est un bruit blanc gaussien et B U un bruit uniforme. Dans le cadre de la recherche du coefficient α, les seuls paramètres disponibles sont la variance du bruit testé (σ 2 mes) et sa moyenne (µ mes ). La moyenne est supposée nulle dans le modèle, mais ça n est pas le cas pour les mesures. C est pourquoi, même si cette dernière est très faible, dans un soucis de précision, elle est prise en compte dans les calculs. Lors de la recherche, α est fixée. Il reste donc à déterminer la loi L 0 en fonction de ces trois paramètres. Les hypothèses retenues pour ces calculs sont que les bruits B N et B U sont non corrélés, et que le bruit uniforme est de moyenne nulle. Ainsi, la variance de B est égale à la somme des variances des bruits, gaussien et uniforme. La variance d un bruit uniforme à valeurs dans [ α α] est égale à : σ 2 U = (2 α)2 12 La moyenne du bruit gaussien est égale à la moyenne de B et sa variance vaut : (4.1) σ 2 N = σ 2 mes σ 2 U (4.2) Les deux distributions (normale et uniforme) sont calculées à partir de ces paramètres. La loi de B (notée L 0 ) résulte de la convolution de ces deux distributions. Ce procédé permet bien d obtenir une distribution correspondant à un bruit du type B = α B U + (1 α) B N dont la moyenne et la variance sont respectivement µ mes et σ 2 mes. Cette loi est celle qui sert de référence lors du test du χ 2. 43

4.1.2 Test du χ 2 Le test du χ 2 est un outil statistique permettant de vérifier la bonne correspondance entre une variable aléatoire mesurée et une loi de probabilité définie (L 0 ). Ce test repose sur le calcul d une distance entre la fréquence d apparition calculée (à partir de la donnée mesurée) et celle attendue (donnée par le modèle à vérifier). Cette distance est notée V. Soit n le nombre de d observations indépendantes, k le nombre de classes sur lesquelles sont reparties les valeurs observées, s 1, k le numéro de la classe considérée, Y s la fréquence mesurée pour la classe s et p s la probabilité, selon le modèle, qu un élément soit dans la classe s. La distance s écrit alors : k (Y s np s ) 2 V = (4.3) np s s=1 La comparaison de cette distance et de la distribution χ 2 permet de déterminer si la variable observée suit la loi du modèle. Q est la probabilité que, pour un nombre de degrés de liberté fixé (ν = k 1 cf. [Knu78]), si la variable observée suit la loi L 0, la distance V soit supérieure à la valeur χ 2 correspondante. Cette valeur χ 2 est considérée comme valeur seuil de réussite au test, ainsi pour Q seuil fixée : si V > χ 2 la variable ne suit pas la loi L 0. si V χ 2 la variable suit la loi L 0. Dès lors, deux problèmes se posent. Tout d abord le choix du nombre de classes et des bornes de ces classes. En effet, selon [Knu78] le produit np s ne doit pas être inférieur à 5, dans le cas contraire le test perd de sa signification. Le nombre d observations n étant ici fixé, le seul paramètre qu il est possible de modifier est p s. La méthode consiste à regrouper les classes voisines pour lesquelles le produit np s serait inférieur à 5. D autre part se pose la question du choix de la probabilité de seuil Q seuil. Si cette dernière est trop élevée, certaines variables aléatoires suivant la loi L 0 risquent de se voir échouer au test de manière injustifiée. Dans le cas contraire, certaines variables réussissant au test ne suivraient pas la loi L 0. Il convient donc de fixer Q. [MVO96] indique qu il est raisonnable, en vue d effectuer des tests qui soient significatifs, de prendre Q seuil [0, 05 0, 001]. Enfin, pour des raisons pratiques liées au fonctionnement de l algorithme de recherche de α, la décision ne se fait pas sur la distance V mais directement sur la probabilité de seuil Q. Il est possible de calculer la probabilité Q mes correspondant à une distance observée V en utilisant la fonction gamma incomplète : V Q mes (V, ν) = 1 1 Γ( ν 2 ) e t t ν 1 dt (4.4) 0 avec Γ( ν 2 ) = e t t ν 1 dt (4.5) 0 44

La règle de décision énoncée précédemment est donc transposée en : si Q mes < Q seuil, la variable ne suit pas la loi L 0. si Q mes Q seuil la variable suit la loi L 0. Il est intéressant de remarquer qu il est désormais possible de comparer les résultats des calculs de probabilité sans tenir compte du nombre de classes utilisées, ceci simplifie grandement le travail de l algorithme de recherche. 4.1.3 Algorithme de recherche Le principe de l étude est de chercher, pour une variable aléatoire donnée, le coefficient α permettant d obtenir le bruit B = α B U + (1 α) B N dont la distribution correspond le mieux à celle de la mesure. Le critère utilisé est le test du χ 2 énoncé précédemment. La méthode de recherche est la suivante : la recherche commence sur un ensemble de 11 valeurs de α comprises entre 0 et 1 (l écart entre deux valeurs est noté 0 ). Pour chaque valeur la probabilité Q mes est calculée. S il existe une ou plusieurs valeurs de α pour lesquelles Q mes > Q seuil, le α retenu est celui pour lequel Q mes est maximale. Dans le cas contraire, si au moins une des probabilités est non nulle, la recherche continue sur un ensemble de 11 valeurs de α dans [α n 0, 1 n 1 α 0 + 0, 1 n 1 ] (l écart entre deux valeurs est alors noté n et α 0 est le coefficient pour lequel Q mes était maximale). Si toutes les Q mes sont nulles, le nombre de classes utilisées pour le test du χ 2 est fixé au nombre minimum constaté lors du test immédiatement précédent. Après le calcul de V, la recherche continue sur un ensemble de 11 valeurs de α dans [α 0 0, 1 n 1 α 0 + 0, 1 n 1 ] (l écart entre deux valeurs est alors noté n et α 0 est le coefficient pour lequel V est minimum). Le calcul est itéré jusqu à ce qu un α convenable soit trouvé ou alors que la précision fixée soit dépassée. Ce dernier critère d arrêt permet de ne pas passer trop de temps à chercher un α qui n existerait pas, les temps de calcul étant déjà suffisamment longs. L algorithme a été testé sur des bruits construits à partir d un bruit uniforme et d un bruit gaussien générés avec Matlab. Ces tests ont permis, dans tous les cas, de retrouver le coefficient de pondération α utilisé lors de la création du bruit. La deuxième phase de validation, avant l utilisation sur des bruits issus de l encodeur, consiste en un test sur un système simple, dont le comportement est connu : le filtre FIR. 4.1.4 Exemple simple : le filtre fir Cette partie concerne l étude d un filtre FIR d ordre 32. La cellule élémentaire de ce type de système est représentée sur la figure 4.1. La largeur de la sortie de la multiplication varie entre 16 et 32 bits, tandis que, dans tous les cas, la sortie est ramenée sur 16 bits. Cette étude permet de vérifier, tout d abord de manière intuitive comme sur la figure 4.2 page 46, que, lorsque que le bruit lié au recadrage de la sortie est prépondérant (la sortie du multiplicateur est sur 32 bits), le bruit de quantification lié au passage en virgule fixe est uniforme. Ce bruit tend vers un bruit gaussien quand le nombre de sources de bruit augmente (la largeur de la sortie diminue). 45

mx=1 be 0 a[j] [16 32] bmult 32 entrées badd 16 Fig. 4.1 Cellule élémentaire d un fir32 Il convient ensuite de vérifier ces constatations visuelles en déterminant le coefficient de pondération α pour les différentes largeurs de sorties de la multiplication. Ce calcul est effectué en utilisant l algorithme décrit précédemment. Il vient que α vaut 0 quand les sources sont nombreuses (la sortie de la multiplication est sur 16 ou 17 bits). Le bruit est donc gaussien. Quand l importance des sources de bruit liées au décalage en sortie de la multiplication diminue, α augmente jusqu à 1 (à partir de 26 bits). Le bruit de quantification liée au recadrage en sortie du filtre est alors prépondérant. C est un bruit blanc uniforme. Les résultats observés sont donc en accord avec le modèle. Il est maintenant intéressant d appliquer cette méthode à l analyse du bruit en sortie de la mdct. x 10 4 FIR 32 8 7 6 5 4 3 2 1 32 28 24 20 16 0 longueur de l additionneur 1 0.8 0.6 0.4 0.2 bruit normalisé 0 0.2 0.4 0.6 0.8 1 Fig. 4.2 Répartition du bruit dans un fir32 La largeur de l addition varie entre 16 et 32 bits. 46

1 FIR32, Q=0.001 0.9 0.8 0.7 0.6 alpha 0.5 0.4 0.3 0.2 0.1 0 16 18 20 22 24 26 28 30 32 Largeur de l addition Fig. 4.3 Coefficient de pondération α dans un fir32 La largeur de l addition varie entre 16 et 32 bits. 4.2 Résultats L algorithme décrit précédemment a été mis au point en vue d analyser les bruits de quantification en sortie de la mdct en virgule fixe. La première phase consiste à encoder les échantillons audio en utilisant l encodeur avec la mdct en virgule fixe. Pour chaque extrait sonore, les 576 sorties de la mdct sont enregistrées dans des fichiers. Cette opération est répétée pour cinq spécifications virgule fixe et pour un programme en virgule flottante. Ces fichiers servent de base au calcul des bruits pour le test. Il est par la suite nécessaire de vérifier que la dynamique du signal est suffisamment élevée par rapport au pas de quantification pour que le modèle de bruit utilisé soit valide. Après calcul, la puissance minimum pour les signaux utilisés est de l ordre de 85dB (la puissance moyenne vaut 67dB) alors que le bruit lié à la quantification vaut, dans le pire des cas (au minimum 15 bits pour la partie décimale) : 10 Log 10 (2 15 ) 2 12 = 101dB (4.6) Les conditions d application du modèle sont donc réunies. Il est donc raisonnable de procéder à la recherche des coefficients de pondérations. Les calculs sont effectués pour Q seuil = 0, 05 et Q seuil = 0, 001 ce qui correspond aux bornes de l intervalle décrit par [MVO96] comme satisfaisant pour que les tests du χ 2 soient significatifs. Pour Q seuil = 0, 05 les recherches aboutissent dans 78% des cas (87% pour Q seuil = 0, 001) a un coefficient de pondération α. Ces pourcentages plutôt élevés conduisent à penser que le modèle utilisé est satifaisant. D autant plus que les bruits pour lesquels aucun α n a été trouvé 47

correspondent peut-être au cas où la limite de précision fixée dans l algorithme a été atteinte. Pour vérifier cette hypothèse, il conviendrait d effectuer une nouvelle recherche en augmentant la précsion limite. Ces calculs pouvant prendre plusieurs semaines, ils ne seront pas effectués pour l instant. 12000 Q=0.001, alpha trouvés :87.4097% 12000 Q=0.05, alpha trouvés :77.8403% 10000 10000 nombre d occurences 8000 6000 4000 nombre d occurences 8000 6000 4000 2000 2000 0 0 0.1 0.2 0.3 0.4 0.5 alpha 0 0 0.1 0.2 0.3 0.4 0.5 alpha Fig. 4.4 Coefficients α pour Q seuil = 0, 001 Fig. 4.5 Coefficients α pour Q seuil = 0, 05 Les résultats des différents tests sont présentés sur les histogrammes 4.4 et 4.5. Le premier constat est que, tout les α étant inférieurs à 0, 5, il n y a aucun cas où un bruit est prépondérant. Plus spécifiquement, les α sont majoritairement regroupés entre 0 et 0, 1, ce qui indique que les bruits sont très proches de bruits gaussiens. La mdct en virgule fixe présente donc de nombreuses sources de bruit parmi lesquelles aucune ne prédomine. Ce résultat n est pas réellement étonnant puisque qu aucune source de bruit n a été «privilégiée» lors du calcul des spécifications virgule fixe. D autre part, il ne semble pas possible de dégager une quelconque classification dans les coefficients. Pour un extrait sonore spécifique, la répartition des coefficients α varie en fonction de la spécification virgule fixe. Ce résultat était sans doute prévisible. Mais, à niveau de bruit égal, les α continuent à varier en fonction de l entrée de l encodeur. Ceci semble moins logique, le bruit généré ne devant pas a priori dépendre de l entrée du système. Ce fait est sans doute dû à la disparité des puissances (et donc de l influence de la quantification) dans les différentes bandes de fréquences. En définitive, même s il ne permet pas d établir une réelle classification des différents bruits, ce test met en lumière la nature du bruit en sortie la mdct et l origine de nombreuses sources qui y contribuent. Par ailleurs, l utilisation de l algortihme de recherche des α, et la proportion élevée de cas pour lesquels la recherche aboutit, justifie l utilisation du modèle de bruit dans le cadre de la mdct. 48

Conclusion Cette étude sur l implémentation en virgule fixe d un codeur audio large bande a permis de dégager plusieurs résultats intéressants. Tout d abord, la méthodologie mise en place au sein de l équipe R2D2 (et qui repose sur un calcul précis du bruit de quantification ajouté lors du passage en virgule fixe) présente l avantage de réduire considérablement les temps de calcul par rapport aux méthodes reposant sur la simulation. L utilisation de PEAQ a permis de mettre en évidence un lien entre la quantité de bruit ajouté dans chaque bloc fonctionnel et la qualité de l encodage. Dans le cas du filtre polyphase et de la MDCT, le modèle de bruit utilisé a pu être vérifié. Les hypothèses qui avaient été faites quant aux paramètres statistiques du bruit se sont révélées justifiés. Il reste cependant quelques imprécisions concernant le bruit dans la MDCT. Il sera donc intéressant de changer la manière dont sont effectuées les mesures, de façon à pouvoir étudier précisément l influence du bruit, dans chaque opérateur, sur la qualité de la sortie du système. Les mesures à mettre en place dans ce cadre risquent par contre de consommer beaucoup de temps de calcul. L encodeur a été simulé avec le filtre polyphase et la MDCT en virgule fixe. Le modèle concernant la FFT étant plus compliqué, il n a pas été possible de l étudier pour l instant. Le modèle psycho-acoustique présente lui de nombreuses non linéarités (calcul de fonction trigonométriques notamment). Il sera donc sans doute nécessaire d utiliser des tables pour remplacer ces fonctions. L encodeur n a donc, pour l instant, pas pu être simulé en virgule fixe dans son intégralité. Cependant les blocs qui ont été convertis sont ceux présents dans les décodeurs. Il serait donc possible en assez peu de temps d utiliser les résultats obtenus pour implémenter un décodeur audio large bande en virgule fixe. 49

Table des figures 1.1 Schéma bloc d un encodeur MP3 [Bra03]...................... 6 1.2 Principe des mesures basées sur un modèle perceptuel [vbd04].......... 15 2.1 Bruits générés lors du passage en virgule fixe, d après [Bra03].......... 20 2.2 Cellule élémentaire du filtre polyphase....................... 22 2.3 Cellule élémentaire de la MDCT en mode court.................. 23 2.4 Cellule élémentaire de la MDCT en mode long.................. 25 3.1 ODG moyen après le filtre polyphase........................ 30 3.2 ODG moyen, minimum et maximum après le filtre polyphase........... 30 3.3 ODG moyen après la MDCT............................ 31 3.4 ODG moyen, minimum et maximum après la MDCT.............. 32 3.5 ODG maximum après le filtre polyphase et la MDCT.............. 33 3.6 ODG moyen, minimum et maximum après la FFT................ 34 3.7 ODG moyen, minimum et maximum après le modèle psycho-acoustique..... 35 3.8 ODG maximum après la FFT et le modèle psycho-acoustique.......... 36 3.9 ODG maximum après la MDCT et le modèle psycho-acoustique......... 36 3.10 FFT du bruit dans le filtre polyphase........................ 37 3.11 Répartition gaussienne du bruit dans le filtre polyphase.............. 38 3.12 Répartition uniforme du bruit dans le filtre polyphase............... 38 3.13 FFT du bruit dans la MDCT courte........................ 39 3.14 Répartition gaussienne du bruit dans la MDCT courte.............. 39 3.15 FFT du bruit dans la MDCT longue........................ 40 3.16 Répartition gaussienne du bruit dans la MDCT longue.............. 40 3.17 Comparaison simulation/modèle pour le filtre polyphase.............. 41 3.18 Comparaison simulation/modèle pour la MDCT.................. 42 3.19 Répartition gaussienne du bruit dans la MDCT (simulation)........... 42 4.1 Cellule élémentaire d un fir32........................... 46 4.2 Répartition du bruit dans un fir32......................... 46 4.3 Coefficient de pondération α dans un fir32.................... 47 4.4 Coefficients α..................................... 48 4.5 Coefficients α..................................... 48 i

Liste des tableaux 2.1 Comparatif des trois encodeurs à 192 kbit/s.................... 18 2.2 Comparatif des deux décodeurs (encodeur blade à 192 kbit/s).......... 19 A.1 Échantillons audio utilisés pour les tests...................... vi A.2 Échantillons encodés à 128kbit/s, décodeur MAD................. vi A.3 Échantillons encodés à 128kbit/s, décodeur Lame................. vii A.4 Échantillons encodés à 192kbit/s, décodeur MAD................. vii A.5 Échantillons encodés à 192kbit/s, décodeur Lame................. viii ii

Glossaire AAC : Advanced Audio Coding CDFG : Control Data Flow Graph DSP : Digital Signal Processor FRIDGE : Fixed-point programming and DesiGn Environment ITU-R : Iternational Telecommunication Union - Radiocommunications sector MP3 : MPEG-1/2 Layer-3 MPEG : Moving Picture Experts Group ODG : Objective Difference Grade Ogg : Codec audio libre PAQM : Perceptual Audio Quality Measure PEAQ : Perceptual Evaluation of Audio Quality SUIF : Stanford University Intermediate Format WMA : Windows Media Audio iii

Bibliographie [Bar06] [Bee98] [Bra03] K. Bartkova. Production, description perception du signal vocal, chapitre 5 - Perception, pages 22 31. France Télécom division R&D Lannion, 2006. John G. Beerends. Applications of digital signal processing to audio and acoustics, chapitre 1 - Audio quality determination based on perceptual measurement, pages 1 38. Kluwer Academic Publishers, 1998. K. Brandenburg. Mp3 and aac explained. In AES 17 th th International Conference on High Quality Audio Coding. Audio Engineering Society, 2003. 12 pages, http ://neuron2.net/library/mp3aac.pdf. [CKLM02] M. Coors, H. Keding, O. Lüthje, et H. Meyr. Design and dsp implementation of fixed-point systems. EURASIP Journal on Applied Signal Processing, 2002(9) :908 925, 2002. [GLL03] Marc Gayer, Markus Lohwasser, et Manfred Lutzky. Implementing MPEG Advanced Audio Coding and Layer-3 encoders on 32-bit and 16-bit fixedpoint processors. Fraunhofer Institute for Integrated Circuits IIS, 2003. 7 pages, http ://www.iis.fraunhofer.de/amm/download/paper/dl.html?f=wp_iis_cdk.pdf. [Kab02] P. Kabal. An examination and interpretation of itu-r bs.1387 :perceptual evaluation of audio quality. Technical report, McGill University, Department of Electrical & Computer Engineering, Montreal, Quebec, Canada, 2002. [KKS97] K. Kum, J. Kang, et W. Sung. A Floating-point to Fixed-point C Converter for Fixed-point Digital Signal Processors. In Proc. of the Second SUIF Compiler Workshop, Aug. 1997. [KKS00] K.-I. Kum, J. Kang, et W. Sung. Autoscaler for c : An optimizing floating-point to integer c program converter for fixed-point digital signal processors. IEEE Transactions on circuits and systems part.2 analog and digital signal processing, 47(9) :840 848, 2000. [Knu78] Donald Ervin Knuth. The Art of Computer Programming, 2nd Ed. (Addison- Wesley Series in Computer Science and Information). Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1978. ISBN 0201038099. [MCFS02] D. Menard, D. Chillet, F.Charot, et O. Sentieys. Automatic Floating-point to Fixed-point Conversion for DSP Code Generation. In ACM International Conference on Compilers, Architectures and Synthesis for Embedded Systems (CASES 2002), pages 270 276, Grenoble, France, October 2002. iv

[Men02] [MS02] Daniel Menard. Méthodologie de compilation d algorithmes de traitement du signal pour les processeurs en virgule fixe sous contrainte de précision. Thèse de doctorat, École Nationale Supérieure de Sciences Appliquées et de Technologie, 2002. D. Menard et O. Sentieys. Automatic Evaluation of the Accuracy of Fixed-point Algorithms. In Design, Automation and Test in Europe 2002 (DATE-02), Paris, March 2002. [MVO96] Alfred J. Menezes, Scott A. Vanstone, et Paul C. Van Oorschot. Handbook of Applied Cryptography. CRC Press, Inc., Boca Raton, FL, USA, 1996. ISBN 0849385237. [Pan95] Davis Pan. A tutorial on MPEG/audio compression. IEEE MultiMedia, 2(2) :60 74, 1995. [SGLT] Gilbert A. Soulodore, Theodore Grusec, Michel Lavoie, et Louis Thibault. Subjective evaluation of state-of-the-art 2-channel audio codecs. Technical report, Signal Processing and Psychoacoustics, Communications Research Centre, Ottawa, Ont.,Canada,? [SM05] Olivier Sentieys et Daniel Menard. Traitement Numérique du Signal, chapitre 8 - Codage en virgule fixe, pages 71 115. École Nationale Supérieure de Sciences Appliquées et de Technologie, 2005. [TK96] Thilo Thiede et Ernst Kabot. A new perceptual quality measure for bit rate reduced audio. Technical report, Technical University of Berlin, Institute for Telecommunications, Berlin, Germany, 1996. [vbd04] Marija Šalovarda, Ivan Bolkovac, et Hrvoje Domitrovi`c. Comparison of audio codecs using peaq algorithm. Technical report, Faculty of E.E. and Computing, Dept. of Electroacoustics, Zagreb, 2004. v

Annexe A Choix de l encodeur A.1 Panel de test Nom du fichier Interpréte Titre du morceau Durée buckley.wav Jeff Buckley Halleluja 53sec chanson.wav The divine comedy Something for the week end 37sec chant.wav Gloria (Vivaldi) 16sec clarinet.wav Django Reinhardt Les yeux noirs 14sec dist.wav Nirvana Serve the servants 22sec electro.wav The chemical brothers Elektobank 42sec guitar.wav Django Reinhardt Les yeux noirs 23sec orchestre.wav Gloria (Vivaldi) 20sec piano.wav Hungarian Rapsody (Liszt) 56sec truffaz.wav Eric Truffaz Wilfried 25sec Tab. A.1 Échantillons audio utilisés pour les tests A.2 tests des différents encodeurs Shine Lame Blade Odg Dix Odg Dix Odg Dix Buckley -2,51-0,62-0,75 1,2-2,38-0,39 Chanson -1,87 0,01-0,74 1,21-1,49 0,37 Chant -3,02-1,22-1,17 0,7-2,09-0,2 Clarinet -2,49-0,59-0,34 1,88-2 -0,12 Dist -2,33-0,43-0,9 1,01-1,84 0,04 Electro -1,97-0,08-0,29 1,98-1,44 0,42 Guitar -2,73-0,86-0,22 2,15-2 -0,11 Orchestre -2,92-1,08-1,06 0,83-1,94-0,06 Piano -1,23 0,64-0,35 1,85-1,17 0,7 Truffaz -2,9-1,06-0,66 1,33-2,87-1,02 Moyenne -2,4-0,53-0,65 1,41-1,92-0,04 Tab. A.2 Échantillons encodés à 128kbit/s, décodeur MAD vi

Shine Lame Blade ODG Dix ODG Dix ODG Dix Buckley -2,48-0,58-0,62 1,39-2,14-0,25 Chanson -1,82 0,05-0,73 1,22-1,44 0,43 Chant -3,01-1,2-1,12 0,75-2,03-0,15 Clarinet -2,51-0,62-0,33 1,89-1,97-0,09 Dist -2,33-0,44-0,86 1,06-1,77 0,1 Electro -1,95-0,06-0,32 1,91-1,43 0,44 Guitar -2,47-0,87-0,26 2,05-1,95-0,07 Orchestre -2,95-1,13-1,05 0,83-1,91-0,03 Piano -1,3 0,57-0,35 1,86-1,23 0,64 Truffaz -2,87-1,03-0,64 1,35-2,84-0,99 Moyenne -2,37-0,53-0,63 1,43-1,87 0 Tab. A.3 Échantillons encodés à 128kbit/s, décodeur Lame Shine Lame Blade ODG Dix ODG Dix ODG Dix Buckley -0,67 1,31-0,04 2,73-0,4 1,75 Chanson -0,49 0,02-0,12 2,44-0,23 2,12 Chant -1,21 0,66-0,09 2,55-0,21 2,17 Clarinet -1,67 0,2-0,08 2,55-0,47 1,62 Dist -0,68 1,3-0,13 2,41-0,37 1,82 Electro -0,56 1,48 0,01 3,51-0,29 1,97 Guitar -1,46 0,41 0,03 3,05-0,51 1,56 Orchestre -1,43 0,43-0,06 2,65-0,29 1,97 Piano -0,78 1,16 0,03 3,05-0,51 1,56 Truffaz -0,86 1,06-0,06 2,62-0,39 1,77 Moyenne -0,98 0,8-0,05 2,76-0,37 1,83 Tab. A.4 Échantillons encodés à 192kbit/s, décodeur MAD vii

Shine Lame Blade ODG Dix ODG Dix ODG Dix Buckley -0,59 1,43-0,02 2,82-0,32 1,91 Chanson -0,48 1,61-0,18 2,26-0,22 2,13 Chant -1,2 0,68-0,19 2,24-0,21 2,17 Clarinet -1,67 0,2-0,08 2,55-0,47 1,62 Dist -0,67 1,32-0,13 2,41-0,36 1,83 Electro -0,55 1,49-0,01 2,83-0,29 1,97 Guitar -1,45 0,42-0,03 2,75-0,5 1,58 Orchestre -1,4 0,46-0,14 2,37-0,28 1,99 Piano -0,84 1,09 0,04 3,08-0,54 1,51 Truffaz -0,84 1,09-0,11 2,48-0,37 1,81 Moyenne -0,97 0,98-0,09 2,58-0,36 1,85 Tab. A.5 Échantillons encodés à 192kbit/s, décodeur Lame viii

Annexe B Notations B.1 Matrices de calcul du bruit B.1.1 Papillons anti-recouvrement 0 0 c a [0] 2....... 0 M ca1 =............. 0......... c a [7] 2 0 0 0 0 c a [7] 2....... 0 M ca2 =............. 0......... c a [0] 2 0 0 c s [0] 2 0 0. 0........ M cs1 =.................... 0 0 0 c s [7] 2 c s [7] 2 0 0. 0........ M cs1 =.................... 0 0 0 c s [0] 2 (B.1) (B.2) (B.3) (B.4) ix

B.2 Coefficients des fenêtres de transitions B.2.1 Transition long vers court Les coefficients de la fenêtre sont donnés par : ( ) sin pi 36 (n + 0.5) pour n 0, 17 1 W ls [n] = ( ) pour n 18, 23 sin pi 12 (n + 0.5 18) pour n 24, 29 0 pour n 30, 35 (B.5) B.2.2 Transition long vers court Les coefficients de la fenêtre sont donnés par : 0 ( ) pour n 0, 5 sin pi 12 W sl [n] = (n + 0.5 6) pour n 6, 11 1 ( ) pour n 12, 17 sin pi 36 (n + 0.5) pour n 18, 35 (B.6) x

Annexe C Modèles de bruit Cette partie présente les codes Matlab des différents modèles de bruit. C.1 Filtre polyphase C.1.1 Code source function finalbqdb=model(win,le,a1e,a2e,m1e,m2e,dec,lwin,lpoly) % %%% Paramètres %win coefficients de la fenêtre %a1e précision en entrée de la première addition %a2e précision en entrée de la deuxième addition %m1e précision en entrée de la première multiplication %m2e précision en entrée de la deuxième multiplication %dec décalage avant la dernière addition %lwin précision sur les coefficients de la fenêtre %lpoly précision sur les coefficients du filtre %%% Variables %additionneur 1 a1s=a1e; %additionneur 2 a2s=a2e; %multiplieur 1 m1s=m1e+lwin; %multiplieur 1 m2s=m2e+lpoly; %%puissance du bruit en sortie %dû à l entrée bgesigs=0; bgesig=0; %additionneur 1 badd1=0; %additionneur 2 xi

badd2=0; %multiplieur 1 bmult1=0; %multiplieur 1 bmult2=0; %bande de fréquence sbnd=0; %%bruit de quantification BQ=0; BQdB=zeros(1,32); polyfiltern=zeros(1,32); for sbnd=1:32 BQ=0; %%influence du bruit en entrée sur la sortie if (le>m1e) qbe=2^(2*(-m1e+1)); bgesig=qbe/12*(1-2^(-2*(le-m1e))); for k=1:64 for j=1:8 polyfiltern(1,sbnd)=polyfiltern(1,sbnd)... +(abs(cos((2*sbnd-1)*(k-17)*pi/64))... *abs(win(k+64*(j-1))))^2; end end bgesigs=bgesig*polyfiltern(1,sbnd); BQ=bgeSigs; end %recadrage en sortie du premier multplieur (partie entière : -3) if (m1s>a1e) qm1=2^(2*(-a1e+1-3)); bmult1=qm1/12*(1-2^(-2*(m1s-a1e))); end %recadrage en sorite du premier additionneur (partie entière : -3) if (a1s>m2e) qa1=2^(2*(1-m2e-3)); badd1=qa1/12*(1-2^(-2*(a1s-m2e))); end %%influence de ces deux bruits sur la sortie for k=1:64 BQ=BQ+(cos((2*sbnd-1)*(k-17)*pi/64))^2*(badd1+8*bmult1); xii

end %recadrage en sortie du second multplieur et décalage (partie entière : 1) if (m2s+dec>a2e) qm2=2^(2*(2-a2e)); bmult2=qm2/12*(1-2^(-2*(m2s-a2e+dec))); end %%influence de ces deux bruits sur la sortie BQ=BQ+64*bmult2+badd2; end BQdB(1,sbnd)=10*log10(BQ); finalbqdb=mean(bqdb); C.1.2 Vérification du modèle 21,12,28,44 (recadrage en entrée de la multiplication 1) sigqbsim = -124.0965 sigqbmod = -125.3457 21,21,37,53 (recadrage en entrée de l additioneur 1) sigqbsim = -143.3855 sigqbmod = -143.2451 16,16,32,24,43 (recadrage en entrée de la multiplication 2) sigqbsim = -152.2718 sigqbmod = -152.2760 16,16,32,24,40 (décalage en entrée de l additon 2) xiii

sigqbsim = -152.2717 sigqbmod = -152.2760 ============================================= 16,8,24,24,43 (recadrage en entrée de la multiplication 1) sigqbsim = -68.0054 sigqbmod = -67.9876 16,16,16,16,35 (recadrage en entrée de l additioneur 1) sigqbsim = -95.4890 sigqbmod = -95.0802 16,16,32,16,35 (recadrage en entrée de la multiplication 2) sigqbsim = -104.1027 sigqbmod = -104.1111 16,16,32,16,32 (décalage en entrée de l additon 2) sigqbsim = -104.1027 sigqbmod = -104.1111 16,16,32,16,16 (décalage en entrée de l additon 2) sigqbsim = -77.0708 sigqbmod = -77.0099 xiv

============================================= 16,12,20,16,16 (recadrage à chaque opération) sigqbsim = -76.9503 sigqbmod = -76.8768 16,12,16,12,16 (recadrage à chaque opération) sigqbsim = -75.2636 sigqbmod = -75.1297 16,15,29,28,46 (recadrage à chaque opération) sigqbsim = -110.5139 sigqbmod = -111.3811 16,8,8,8,8 (recadrage à chaque opération) sigqbsim = -34.7439 sigqbmod = -28.7858 xv

C.2 MDCT C.2.1 Code source C.2.2 Fenêtres courtes function finalbqdb=model(winmdct,cos1,le,a1e,m1e,m2e,lwin,lmdct) % %%% Paramètres %winmdct coefficients de la fenêtre %a1e précision en entrée de la première addition %m1e précision en entrée de la première multiplication %m2e précision en entrée de la deuxième multiplication %lwin précision sur les coefficients de la fenêtre %lmdct précision sur les coefficients de la transformation %%% Variables %additionneur 1 a1s=a1e; %multiplieur 1 m1s=m1e+lwin; %multiplieur 1 m2s=m2e+lmdct; %décalage avant la dernière addition dec=-1; %%puissance du bruit en sortie %dû à l entrée bgesigs=0; bgesig=0; %additionneur 1 badd1=0; %multiplieur 1 bmult1=0; %multiplieur 1 bmult2=0; %bande de fréquence sbnd=0; %%bruit de quantification BQ=0; BQdB=zeros(1,6); xvi

mdctn=zeros(1,6); for sbnd=1:6 BQ=0; %%influence du bruit en entrée sur la sortie(partie entière : 1) if (le>m1e) qbe=2^(2*(-m1e+1+1)); bgesig=qbe/12*(1-2^(-2*(le-m1e))) ; end for j=1:12 mdctn(1,sbnd)=mdctn(1,sbnd)... +(abs(winmdct(j)*cos1(sbnd,j)))^2; end BQ=bgeSig*mdctN(1,sbnd); %recadrage en sortie du premier multplieur (partie entière : 2) if (m1s>m2e) qm1=2^(2*(-m2e+1+2)); bmult1=qm1/12*(1-2^(-2*(m1s-m2e))); end %%influence de ce bruit sur la sortie for k=1:12 BQ=BQ+((abs(cos1(sbnd,k)))^2)*bmult1; end %recadrage en sortie du second multplieur et décalage (partie entière : 1) if (m2s+dec>a1e) qm2=2^(2*(1-a1e+1)); bmult2=qm2/12*(1-2^(-2*(m2s-a1e+dec))); end %%influence de ces deux bruits sur la sortie BQ=BQ+12*bmult2; end BQdB(1,sbnd)=10*log10(BQ); finalbqdb=mean(bqdb); xvii

C.2.3 Vérification du modèle 21,18,34,50 (recadrage en entrée de la multiplication 1) sigqbsim = -111.9952 sigqbmod = -112.1238 21,21,32,48 (recadrage en entrée de la multiplication 2) sigqbsim = -187.1834 sigqbmod = -187.1544 21,21,37,48 (décallage en entrée de l additon 1) sigqbsim = -204.7547 sigqbmod = -205.4923 ============================================= 21,14,28,44 (recadrage en entrée de la multiplication 1) sigqbsim = -88.1669 sigqbmod = -87.9733 21,21,16,32 (recadrage en entrée de la multiplication 2) sigqbsim = -91.1912 sigqbmod = -90.8206 21,21,37,16 (décallage en entrée de l additon 1) sigqbsim = -85.5570 xviii

sigqbmod = -84.2884 ============================================= 21,16,24,32 (recadrage à chaque opération) sigqbsim = -100.0916 sigqbmod = -100.0179 21,16,20,24 (recadrage à chaque opération) sigqbsim = -99.9310 sigqbmod = -99.8716 21,18,32,46 (recadrage à chaque opération) sigqbsim = -111.9950 sigqbmod = -112.1238 21,20,35,50 (recadrage à chaque opération) sigqbsim = -122.3888 sigqbmod = -125.3460 21,14,14,14 (recadrage à chaque opération) sigqbsim = -75.8195 sigqbmod = -71.2782 xix

C.2.4 C.2.5 Fenêtres longues Code source function finalbqdb=modells(winmdct,cos1,ca,cs,le,a1e,a2e,m1e,m2e,m3e,lwin,lmdct,lpap) % %%% Paramètres %winmdct coefficients de la fenêtre %cos1 coefficients de la transformation %ca, cs coefficients du papillon %a1e précision en entrée de la première addition %a2e précision en entrée de la deuxième addition %m1e précision en entrée de la première multiplication %m2e précision en entrée de la deuxième multiplication %m3e précision en entrée de la deuxième multiplication %dec décalage avant la dernière addition %lwin précision sur les coefficients de la fenêtre %lmdct précision sur les coefficients de la transformation %lpap précision sur les coefficients du papillon %%% Variables %additionneur 1 a1s=a1e; %additionneur 1 a2s=a2e; %multiplieur 1 m1s=m1e+lwin; %multiplieur 1 m2s=m2e+lmdct; %multiplieur 3 m3s=m3e+lpap; %%puissance du bruit en sortie %dû à l entrée bgesigs=0; bgesig=0; %additionneur 1 badd1=0; %multiplieur 1 bmult1=0; %multiplieur 2 bmult2=0; %multiplieur 3 bmult3=0; xx

%bande de fréquence sbnd=0; %%bruit de quantification BQ=zeros(1,18); BM1=zeros(1,18); BA1=zeros(1,18); BM2=zeros(1,18); BQdB=zeros(1,18); mdctn=zeros(1,18); mdctfin=zeros(1,18); for sbnd=1:18 %%influence du bruit en entrée sur la sortie(partie entière : 1) if (le>m1e) qbe=2^(2*(-m1e+1+1)); bgesig=qbe/12*(1-2^(-2*(le-m1e))) ; end end for j=1:36 mdctn(1,sbnd)=mdctn(1,sbnd)+abs(winmdct(j)*cos1(sbnd,j))^2; end %recadrage en sortie du premier multplieur (partie entière : 2) if (m1s>m2e) qm1=2^(2*(-m2e+1+2)); bmult1=qm1/12*(1-2^(-2*(m1s-m2e))); end %recadrage en sortie du second multplieur et décalage (partie entière : 1) if (m2s+dec>a1e) qm2=2^(2*(1-a1e+1)); bmult2=qm2/12*(1-2^(-2*(m2s-a1e+dec))); end %recadrage en sortie du premier additionneur (partie entière : 1) if (a1s>m3e) qa1=2^(2*(1-m3e+1)); badd1=qa1/12*(1-2^(-2*(a1s-m3e))); end %recadrage en sortie du premier multplieur (partie entière : 2) if (m3s>a2e) qm3=2^(2*(-a2e+1+2)); xxi

bmult3=qm3/12*(1-2^(-2*(m3s-a2e))); end %%influence de ces deux bruits sur la sortie BQ=2*(bmult3)*ones(1,18); % %%papillons anti recouvrement for sbnd=1:8 mdctfin(1,19-sbnd)=mdctn(1,19-sbnd)*abs(cs(sbnd))^2... +mdctn(1,sbnd)*abs(ca(sbnd))^2; mdctfin(1,sbnd)=mdctn(1,sbnd)*abs(cs(sbnd))^2... +mdctn(1,19-sbnd)*abs(ca(sbnd))^2; end for k=1:36 %%influence de bmult1 sur la sortie BM1(1,sbnd)=BM1(1,sbnd)+abs(ca(sbnd)*cos1(19-sbnd,k)+cs(sbnd)... *cos1(sbnd,k))^2*bmult1; BM1(1,19-sbnd)=BM1(1,19-sbnd)+(abs(ca(sbnd))*cos1(sbnd,k)-cs(sbnd)... *cos1(19-sbnd,k))^2*bmult1; end %%influence de bmult2 sur la sortie BM2(1,sbnd)=36*(abs(ca(sbnd))+cs(sbnd))^2*bmult2; BM2(1,19-sbnd)=36*(abs(ca(sbnd))-cs(sbnd))^2*bmult2; %%influence de add1 sur la sortie BA1(1,sbnd)=(abs(ca(sbnd))+cs(sbnd))^2*badd1; BA1(1,19-sbnd)=(abs(ca(sbnd))-cs(sbnd))^2*badd1; for sbnd=9:10 mdctfin(1,sbnd)=mdctn(1,sbnd); for k=1:36 %%influence de bmult1 sur la sortie BM1(1,sbnd)=BM1(1,sbnd)+(abs(cos1(sbnd,k)))^2*bmult1; end %%influence de bmult1 sur la sortie BM2(1,sbnd)=36*bmult2; BA1(1,sbnd)=badd1; end BQ=BQ+bgeSig*mdctFin+BM1+BM2+BA1+2*bmult3; BQdB=10*log10(BQ); finalbqdb=mean(bqdb); xxii

C.2.6 Vérification du modèle 21,18,34,50,50,66 (recadrage en entrée de la multiplication 1) sigqbsim = -116.6815 sigqbmod = -116.7320 21,21,32,48,48,64 (recadrage en entrée de la multiplication 2) sigqbsim = -191.7594 sigqbmod = -191.9254 21,21,37,48,48,64 (décallage en entrée de l additon 1) sigqbsim = -273.1154 sigqbmod = -272.9904 21,21,37,53,48,64 (recadrage en entrée de la multiplication 3) sigqbsim = -287.5669 sigqbmod = -288.5407 21,21,37,53,53,50 (décallage en entrée de l additon 2) sigqbsim = -287.3450 sigqbmod = -287.7394 ============================================= 21,14,30,46,46,62 (recadrage en entrée de la multiplication 1) sigqbsim = -92.8403 xxiii

sigqbmod = -92.5815 21,21,16,32,32,48 (recadrage en entrée de la multiplication 2) sigqbsim = -96.0183 sigqbmod = -95.5915 21,21,37,18,18,34 (décallage en entrée de l additon 1) sigqbsim = -92.4008 sigqbmod = -92.3554 21,21,37,53,18,34 (recadrage en entrée de la multiplication 3) sigqbsim = -107.1770 sigqbmod = -107.9185 21,21,37,53,53,16 (décallage en entrée de l additon 2) sigqbsim = -83.1278 sigqbmod = -83.0390 ============================================= 21,16,24,32,24,32 (recadrage à chaque opération) sigqbsim = -104.5722 sigqbmod = -104.6255 21,17,22,27,16,21 (recadrage à chaque opération) sigqbsim = -94.7577 xxiv

sigqbmod = -95.5764 21,18,32,46,44,58 (recadrage à chaque opération) sigqbsim = -116.6814 sigqbmod = -116.7320 21,20,35,50,49,64 (recadrage à chaque opération) sigqbsim = -126.6314 sigqbmod = -129.9542 21,16,16,16,12,16 (recadrage à chaque opération) sigqbsim = -73.4321 sigqbmod = -70.8436 NB : les modèles pour les fenêtres de transition sont sensiblement les mêmes, c est pourquoi ils ne sont pas rapellés ici. xxv

Annexe D Extraits de codes en virgule fixe Cette partie présente les codes C des différents blocs fonctionnels codés en virgule fixe.les coefficients A1E, A2E, M1E, M2E, M3E, LWIN, LPOLY, LPAP, LMDCT ont la même signification que dans les modèles Matlab. Ils sont passés en paramètres de l encodeur. Les coefficients sans suffixe sont relatifs au filtre polyphase, ceux avec un suffixe MS sont utilisés pour pour la mdct en mode «fenêtres courtes» et ceux suivis de ML servent pour les autres modes de la mdct. D.1 Fonction recadrage La fonction qui sert à simuler le comportement en virgule fixe est présentée ci dessous. /* Function to round an input floating point coded number to the desired fixed point size return the fixed point number. */ double fixespec(double input,int fracsize) { int fracpart=pow(2,fracsize) ; if(input*fracpart>=0) modf(input*fracpart+0.5,&input) ; else 10 modf(input*fracpart 0.5,&input) ; } input=(double)input/fracpart ; return input ; xxvi

D.2 Filtre polyphase /* */ (c) Copyright 1998, 1999 - Tord Jansson ======================================= #include "common.h" #include "encoder.h" #include "fixe.h" typedef double MM[SBLIMIT][64] ; 10 typedef double XX[2][512] ; static int off[2] ; static int half[2] ; static MM m ; static XX x ; static double windowedcache[512] ; static double fixedwin[512] ; static int m1s ; 20 static int m2s ; /************************************************************************ * create ana filter() * * PURPOSE : Calculates the analysis filter bank coefficients ************************************************************************/ void create ana filter(double filter[sblimit][64]) 30 { register int i,k ; for (i=0 ; i<32 ; i++) for (k=0 ; k<64 ; k++) { if ((filter[i][k] = 1e9*cos((double)((2*i+1)*(16 k)*pi64))) >= 0) modf(filter[i][k]+0.5, &filter[i][k]) ; else modf(filter[i][k] 0.5, &filter[i][k]) ; filter[i][k] *= 1e 9 ; 40 } } //polyphase filter fixed point specification filter[i][k] = fixespec(filter[i][k],lpoly 1) ; 50 xxvii

/* initwindowfiltersubband() */ void initwindowfiltersubband( void ) { int i, j ; off[0] = 0 ; 60 off[1] = 0 ; half[0] = 0 ; half[1] = 0 ; for (i=0 ;i<2 ;i++) for (j=0 ;j<512 ;j++) x[i][j] = 0 ; create ana filter(m) ; //window coeff fixed point spécification 70 for (i=0 ;i<512 ;i++) fixedwin[i]=fixespec(enwindow[i],4+lwin 1) ; } //compute multiplication output format m1s=m1e+lwin ; m2s=m2e+lpoly ; /* windowfiltersubband() */ 80 void oldwindowfiltersubband( short * pbuffer, int k, double s[sblimit] ) { double y[64] ; int i,j ; double t ; double * rpmm ; int offcache ; double *dp ; 90 double ytemp[64] ; dp = &x[k][0] ; offcache = off[k] ; /* replace 32 oldest samples with 32 new samples */ for ( i=0 ; i<32 ; i++ ) { dp[31 i+offcache] = (double) pbuffer[i]/scale ; //fixed point specification before the first multiplication dp[31 i+offcache]=fixespec(dp[31 i+offcache],m1e 1) ; 100 } //windowing the input for (i=0 ; i<512 ;i++) { windowedcache[i]=dp[(i+64*0+offcache)&(512 1)] * fixedwin[i+64*0] ; //fixed point specification after the first multiplication windowedcache[i]=fixespec(windowedcache[i],3+m1s 1) ; //fixed point specification before the first addition windowedcache[i]=fixespec(windowedcache[i],3+a1e 1) ; 110 } xxviii

for( i = 0 ; i<64 ; i++ ) { t = windowedcache[i+64*0] ; t += windowedcache[i+64*1] ; t += windowedcache[i+64*2] ; t += windowedcache[i+64*3] ; 120 t += windowedcache[i+64*4] ; t += windowedcache[i+64*5] ; t += windowedcache[i+64*6] ; t += windowedcache[i+64*7] ; } y[i] = t ; //fixed point specification after the first addition y[i]=fixespec(y[i],3+a1e 1) ; //fixed point specification before the second multiplication y[i]=fixespec(y[i],3+m2e 1) ; 130 off[k] += 480 ; off[k] &= 512 1 ; /*offset is modulo (HAN SIZE-1)*/ rpmm = (double *) (m) ; 140 for ( i=0 ; i<sblimit ; i++ ) { t = 0 ; for( j = 0 ; j < 64 ; j++ ) { ytemp[j]= rpmm[j] * y[j] ; //fixed point specification after the second multiplication ytemp[j]=fixespec(ytemp[j],2+m2s 1) ; //fixed point specification before the second addition ytemp[j]=fixespec(ytemp[j],a2e 2) ; 150 } for( j = 0 ; j < 64 ; j++ ) t += ytemp[j] ; rpmm += j ; // fixed point specification after the second addition t=fixespec(t,a2e 2) ; s[i] = t ; } 160 } xxix

D.3 MDCT /* */ (c) Copyright 1998, 1999 - Tord Jansson ======================================= double ca[8], cs[8] ; /* This is table B.9 : coefficients for aliasing reduction */ 10 static double c[8] = { 0.6, 0.535, 0.33, 0.185, 0.095, 0.041, 0.0142, 0.0037 } ; static int m1s s ; static int m2s s ; static int m1s l ; static int m2s l ; static int m3s l ; int finit mdct sub ; void mdct sub( L3SBS (*sb sample), double (*mdct freq)[2][576], int stereo, III side info t *l3 side, int mode gr ) 20 { gr info *cod info ; double mdct in[36] ; int ch,gr,band,k,j ; double bu,bd ; int block type ; double (*mdct enc)[2][32][18] = (double (*)[2][32][18]) mdct freq ; double tmpmult=0 ; if ( finit mdct sub == 0 ) 30 { /* prepare the aliasing reduction butterflies */ for ( k = 0 ; k < 8 ; k++ ) { double sq ; sq = sqrt( 1.0 + c[k] * c[k] ) ; ca[k] = c[k] / sq ; //aliasing reduction butterflies fixed point specification ca[k] = fixespec(ca[k],lpap 1) ; cs[k] = 1.0 / sq ; 40 } //aliasing reduction butterflies fixed point specification cs[k] = fixespec(cs[k],lpap 1) ; } finit mdct sub++ ; m1s s=m1ems+lwin ; m2s s=m2ems+lcos ; m1s l=m1eml+lwin ; 50 m2s l=m2eml+lcos ; m3s l=m3eml+lpap ; xxx

for ( gr = 0 ; gr < mode gr ; gr++ ) for ( ch = 0 ; ch < stereo ; ch++ ) { cod info = (gr info *) &(l3 side >gr[gr].ch[ch]) ; block type = cod info >block type ; 60 /* Compensate for inversion in the analysis filter */ for ( band = 0 ; band < 32 ; band++ ) for ( k = 0 ; k < 18 ; k++ ) if ( (band & 1) && (k & 1) ) (*sb sample)[ch][gr+1][k][band] *= 1.0 ; /* */ Perform imdct of 18 previous subband samples + 18 current subband samples 70 for ( band = 0 ; band < 32 ; band++ ) { for ( k = 0 ; k < 18 ; k++ ) { mdct in[k] = (*sb sample)[ch][ gr ][k][band] ; mdct in[k+18] = (*sb sample)[ch][gr+1][k][band] ; } 80 if ( cod info >mixed block flag && (band < 2) ) block type = 0 ; } mdct( mdct in, &mdct enc[gr][ch][band][0], block type ) ; /* Perform aliasing reduction butterfly on long blocks */ 90 if ( block type!= 2 ) for ( band = 0 ; band < 31 ; band++ ) for ( k = 0 ; k < 8 ; k++ ) { //fixed point specification at the third multiplication input 100 mdct enc[gr][ch][band][17 k]=fixespec(mdct enc[gr][ch][band][17 k],m3eml 1 1) ; mdct enc[gr][ch][band+1][k]=fixespec(mdct enc[gr][ch][band+1][k],m3eml 1 1) ; bu = mdct enc[gr][ch][band][17 k] * cs[k] ; tmpmult = mdct enc[gr][ch][band+1][k] * ca[k] ; //fixed point specification at the third multiplication output tmpmult=fixespec(tmpmult,m3s l 1 2) ; bu=fixespec(bu,m3s l 1 2) ; //fixed point specification at the second addition input tmpmult=fixespec(tmpmult,a2eml 1 2) ; 110 bu=fixespec(bu,a2eml 1 2) ; xxxi

bu = bu + tmpmult ; //fixed point specification at the second addition output bu=fixespec(bu,a2eml 1 2) ; bd = mdct enc[gr][ch][band+1][k] * cs[k] ; tmpmult = mdct enc[gr][ch][band][17 k] * ca[k] ; //fixed point specification at the third multiplication output tmpmult=fixespec(tmpmult,m3s l 1 2) ; 120 bd=fixespec(bd,m3s l 1 2) ; //fixed point specification at the second addition input tmpmult=fixespec(tmpmult,a2eml 1 2) ; bd=fixespec(bd,a2eml 1 2) ; bd = bd tmpmult ; //fixed point specification at the second addition output bd=fixespec(bd,a2eml 1 2) ; } mdct enc[gr][ch][band][17 k] = bu ; 130 mdct enc[gr][ch][band+1][k] = bd ; } /* Save latest granule s subband samples to be used in the next mdct call 140 */ } for ( ch = 0 ; ch < stereo ; ch++ ) for ( j = 0 ; j < 18 ; j++ ) for ( band = 0 ; band < 32 ; band++ ) (*sb sample)[ch][0][j][band] = (*sb sample)[ch][mode gr][j][band] ; int finit mdct ; 150 void mdct( double *in, double *out, int block type ) { /* -*/ /* */ /* Function : Calculation of the MDCT */ /* In the case of long blocks ( block type 0,1,3 ) there are */ /* 36 coefficents in the time domain and 18 in the frequency */ /* domain. */ /* In the case of short blocks (block type 2 ) there are 3 */ /* transformations with short length. This leads to 12 coefficents */ 160 /* in the time and 6 in the frequency domain. In this case the */ /* results are stored side by side in the vector out[ ]. */ /* -*/ int l,k,i,m,n ; double sum ; static double win[4][36] ; static double cos s[6][12], cos l[18][36] ; xxxii

double tmpmult=0 ; 170 if ( finit mdct == 0 ) { /* type 0 */ for ( i = 0 ; i < 36 ; i++ ) { win[0][i] = sin( PI/36 * (i + 0.5) ) ; //window fixed point specification win[0][i] = fixespec(win[0][i],lwin 1) ; } 180 /* type 1*/ for ( i = 0 ; i < 18 ; i++ ) { win[1][i] = sin( PI/36 * (i + 0.5) ) ; //window fixed point specification win[1][i] = fixespec(win[1][i],lwin 1) ; } for ( i = 18 ; i < 24 ; i++ ) 190 { win[1][i] = 1.0 ; //window fixed point specification win[1][i] = fixespec(win[1][i],lwin 1) ; } for ( i = 24 ; i < 30 ; i++ ) { win[1][i] = sin( PI/12 * ( i + 0.5 18) ) ; //window fixed point specification win[1][i] = fixespec(win[1][i],lwin 1) ; 200 } for ( i = 30 ; i < 36 ; i++ ) win[1][i] = 0.0 ; /* type 3*/ for ( i = 0 ; i < 6 ; i++ ) win[3][i] = 0.0 ; for ( i = 6 ; i < 12 ; i++ ) { 210 win[3][i] = sin( PI/12 * (i + 0.5 6) ) ; //window fixed point specification win[3][i] = fixespec(win[3][i],lwin 1) ; } for ( i = 12 ; i < 18 ; i++ ) { win[3][i] = 1.0 ; //window fixed point specification win[3][i] = fixespec(win[3][i],lwin 1) ; } 220 for ( i = 18 ; i < 36 ; i++ ) { win[3][i] = sin( PI/36 * (i + 0.5) ) ; //window fixed point specification win[3][i] = fixespec(win[3][i],lwin 1) ; xxxiii

} /* type 2*/ for ( i = 0 ; i < 12 ; i++ ) 230 { win[2][i] = sin( PI/12 * (i + 0.5) ) ; //window fixed point specification win[2][i] = fixespec(win[2][i],lwin 1) ; } for ( i = 12 ; i < 36 ; i++ ) win[2][i] = 0.0 ; N = 12 ; for ( m = 0 ; m < N / 2 ; m++ ) 240 for ( k = 0 ; k < N ; k++ ) { cos s[m][k] = cos( (PI /(2 * N)) * (2 * k + 1 + N / 2) * (2 * m + 1) ) / (N / 4) ; //Short MDCT coefficient fixed point specification cos s[m][k] = fixespec(cos s[m][k],lcos 1) ; } N = 36 ; for ( m = 0 ; m < N / 2 ; m++ ) 250 for ( k = 0 ; k < N ; k++ ) { cos l[m][k] = cos( (PI / (2 * N)) * (2 * k + 1 + N / 2) * (2 * m + 1) ) / (N / 4) ; //Long MDCT coefficient fixed point specification cos l[m][k] = fixespec(cos l[m][k],lcos 1) ; } finit mdct++ ; } 260 if ( block type == 2 ) { N = 12 ; for ( l = 0 ; l < 3 ; l++ ) { for ( m = 0 ; m < N / 2 ; m++ ) { for ( sum = 0.0, k = 0 ; k < N ; k++ ) { //fixed point specification for the input 270 in[k + 6 * l + 6]=fixeSpec(in[k + 6 * l + 6],M1EMS 1 1) ; tmpmult=win[block type][k] * in[k + 6 * l + 6] ; //fixed point specification at the first multiplication output tmpmult=fixespec(tmpmult,m1s s 1 2) ; //fixed point specification at the second multiplication input tmpmult=fixespec(tmpmult,m2ems 1 2) ; tmpmult=tmpmult * cos s[m][k] ; //fixed point specification at the second multiplication output 280 tmpmult=fixespec(tmpmult,m2s s 1 3) ; //fixed point specification at the first addition input xxxiv

tmpmult=fixespec(tmpmult,a1ems 1 1) ; sum +=tmpmult ; } //fixed point specification at the first addition output sum=fixespec(sum,a1ems 1 1) ; out[ 3 * m + l] = sum ; 290 } } } else { N = 36 ; for ( m = 0 ; m < N / 2 ; m++ ) { for ( sum = 0.0, k = 0 ; k < N ; k++ ) { //fixed point specification for the input 300 in[k]=fixespec(in[k],m1eml 1 1) ; tmpmult=win[block type][k] * in[k] ; //fixed point specification at the first multiplication output tmpmult=fixespec(tmpmult,m1s l 1 2) ; //fixed point specification at the second multiplication input tmpmult=fixespec(tmpmult,m2eml 1 2) ; tmpmult=tmpmult * cos l[m][k] ; //fixed point specification at the second multiplication output 310 tmpmult=fixespec(tmpmult,m2s l 1 3) ; //fixed point specification at the first addition input tmpmult=fixespec(tmpmult,a1eml 1 1) ; sum +=tmpmult ; } //fixed point specification at the first addition output sum=fixespec(sum,a1eml 1 1) ; out[m] = sum ; } 320 } } xxxv

Annexe E Organisation des fichiers Les fichiers utilisés au cours de ce stage sont rassemblés dans un répertoire. Chaque sousrépertoire contient un fichier lisezmoi.txt avec le details sur les sous-répertoires. Cette partie regroupe l ensemble de ces fichiers à commencer par le répertoire principal qui contient : biblio : rapport d étude bibliographique et diaporama correspondant (dans le sous répertoire slide) doc : documents utilisés lors du stage (si disponibles en version electronique). rapport : rapport du stage et diaporama correspondant résultats : résultats des différents calculs src : codes des différents programmes utilisés test_panel : fichier wave utiluisés pour les tests sur l encodeur. E.1 Répertoire : rapport Ce répertoire contient le rapport du stage et les documents qui s y rattachent. Le fichier romainserizel_210606.pdf est le rapport qui a servi de base à la soutenance fin juin. main.pdf est la dernière version compilée du rapport. Le fichier à compiler est main.tex. Le fichier alpha-fr.bst a été modifié de manière à faire apparaitre l isbn. pic : contient les images. Le fichier tex étant fait pour être compilé avec pdflatex, il convient de convertir les images en pdf. Pour cela, le script topdf.bat permet de convertir tous les fichier.eps d un répertoire. slide : contient la présentation. Les fichiers slide.xxx et handout.xxx correspondent respectivement au diaporama et au support de présentation. source : contient les extraits de codes inclus dans le rapport. xxxvi

E.2 Répertoire : résultats Ce répertoire contient les résultats des différents calculs menés lors du stage. bruitmesure : regroupe les mesure de la sortie de la MDCT pour différents niveaux de bruit gaussien : résultats aux tests mis en place par Pierre Meignen pour vérifier qu un bruit est gaussien. khi_test : coefficents alpha et probabilités correspondantes calculés en selon la méthode du chiš. les échantillons testés sont ceux du répertoire bruitmesure sourcebruit : les relevés de taux de dégradation objective pour des sources de bruit après chaque bloc fonctionnel.chaque répertoire contient également une fonction matlab permettant de tracer ces résultats. Dans le répertoire parent, un fichier open office présente un récapitulatif de ces différents résultats. E.3 Répertoire : src E.3.1 Ce répertoire contient le codes sources des différent programmes utilisés : blade_bruits : l encodeur avec les sources de bruit blade : différentes versions de l encodeur bruits : les modèles de bruit des blocs fonctionnels chi2 : algorithme de recherche du coefficient de pondération (alpha) virgulefixe : l encodeur avec certains blocs en virgule fixe répertoire blade_bruits Ce répertoire contient les codes sources des différents encodeurs, modifiés de manière à pouvoir ajouter le bruit de quantification lié au passage en virgule après chacun des blocs fonctionnels. Les différentes versions correspondent à : V1.0 : - La nouvelle méthode de filtrage pour le filtre polyphase a été supprimé de manière a simplifier l étude de l algorithme. Les versions suivantes sont basées sur un encodeur simplifié où les taux, modes de compressions,etc... ont été fixés : taux constant à 192 kbit/s en taux constant pour des échantillons stéréo en entrée uniquement. xxxvii

v1.07 : - le code Matlab permettant d introduire le bruit en sortie du filtre polyphase est ajouté. v1.08 : - le code Matlab permettant d introduire le bruit en sortie de la Mdct est ajouté. v1.09 : - cette version permet d ajouter du bruit à la fois en sortie du filtre polyphase et de la mdct. v1.10 : - le code Matlab permettant d introduire le bruit sur les coefficient du modèle psychoaccoustique est ajouté. v1.11 : - cette version permet d ajouter du bruit à la fois en sortie de la mdct et sur les coefficient du modèle psychoaccoustique. v1.13 : - cette version permet d ajouter du bruit à la fois en sortie de la fft et sur les coefficient du modèle psychoaccoustique. v1.14 : - cette version permet d ajouter du bruit en sortie des quatre blocs fonctionnels. De manière générale, un fichier changelog est présent dans chacun des répertoire. Il rescense les changements entre les différentes versions et les date de réalisations de ces dernières. Dans chaque répertoire, l exécutable "bladeenc.exe" est présent, il s utilise de la manière suivante : bladeenc.exe nomfichier AlphaBruit1 puissancebruit1 (AlphaBruit2 puissancebruit2 AlphaBruit3 puissancebruit3 AlphaBruit4 puissancebruit4) Le Bruit1 doit toujours être présent, les autres dépendront de la version utilisée. Ces codes étant compilés avec gcc sous cygwin, il est nécessaire d inclure le chemin vers la bibliothèque "cygwin.dll" dans les path de l environnement de travail. Les programmes font appel au moteur Matlab pour ajouter les bruits, il donc également nécessaire d avoir des droits permettant d utiliser les composant COM (ActiveX) faute de quoi le programme ne pourra pas communiquer avec les moteur matlab. Le chemin d accés aux librairies et executables matlab doit être indiqué dans le fichier Makefile, lignes : bladeenc_ldadd = -L/cygdrive/c/Program\ Files/MATLAB704/bin/win32 -lm -lut -leng -lmx DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I.. -I/cygdrive/c/Program\ Files/MATLAB704/extern/include On remarquera d une part que ces lignes permettent également d inclure les librairies nécessaires à la compilation. Le chemin indiqué ici est le chemin par défaut (sous windows) sur les postes de l ENSSAT, s il est différent sur le poste à partir duquel le programme doit être executé il sera sans doute nécessaire d éditer ces paramètres et de recompiler le programme. Le fichier makefile ayant été édité "à la main" pour ajouter ces paramètres, il ne faut pas executer le script "config" qui générerait un nouveau Makefile et obligerait donc à saisir ces lignes de nouveau. xxxviii

Tous les fichiers sources sont normalement présents dans chacuns des répertoires. S il arrivait toutefois qu il en manque (plus particulièrement le fichier tables.c) c est que ces fichiers n ont pas été modifiés depuis la version originale. Ils sont donc disponibles dans le répertoire blade\blade_backup Chaque répertoire contient un ensemble de scripts permettant d automatiser les calculs. Ils permettent : pour les différent paramètres de bruit spécifiés de compresser l ensemble des fichiers wave présent dans le répertoire de décompresser les fichier mp3 d analyser la qualité de la compression (les résultats seront sauvés dans un fichier txt). Le fichier à exécuter et le fichier test.bat (qui executera db.bat, qui executera file.bat, qui executera traitement.bat). Les paramètres du bruit sont à modifier dans les fichier test.bat et db.bat (respectivement alpha et puissance) E.3.2 répertoire bruits Ce répertoire contient les différentes fonctions matlab relatives aux modèles de bruit. répertoire mdct Ce répertoire contient le modèle du bruit de la mdct. Les différents fichiers sont : AREA.m (d après Nicolas Hervé) : calcule la fonction de cout en fonction de la largeur des opérateurs : AREAShort pour le mode court, AREALong pour les autres modes qui sont équivalent du point de vu des opérateurs. bruit.m : compare le modèle de bruit et le bruit simulé : bruitlong, bruitshort, bruitsl, bruitls correspondant aux mode de fonctionnement de la mdct (long, court, court vers long, long vers court) fixespec.m : fonction servant à simuler le comportement en virgule fixe floatpoly.m : filtre polyphase en virgule flottante float.m : mdct en virgule flottante : floatshort pour le mode court, floatlong pour les autres modes qui ne sont différents qu au niveau de la fenêtre (cette dernière étant gérée dans le fichier bruit) fixed.m : mdct en virgule fixe : shortfixed pour le mode court, longfixed pour les autres modes qui ne sont différents qu au niveau de la fenêtre (cette dernière étant gérée dans xxxix

le fichier bruit) mdcdyn.m : ces fichiers permette le calcul de la dynamique init.m : initialisation des varaibles (pas utilisé pour le moment) model.m : modèle du bruit dans la mdct : Long, Short, SL, LS correspondant aux mode de fonctionnement de la mdct (long, court, court vers long, long vers court) optimfast (d après Nicolas Hervé) : calcul la largeur des différents opérateur pour un niveau de bruit donné. (repose sur l uilisation du modèle) Long, Short, SL, LS correspondant aux mode de fonctionnement de la mdct (long, court, court vers long, long vers court) Les fichier "comparaison_sim_mod.txt" présentent des relevés de puissance de bruit pour différentes largeurs d opérateurs (quoi ce soit pour la simulation ou pour le modèle). Le fichier "enwin.dat" contient les coefficients de la fenêtre du filtre. répertoire polyphase Ce répertoire contient le modèle du bruit d un le filtre polyphase. Les différents fichiers sont : AREA.m (d après Nicolas Hervé) : calcule la fonction de cout en fonction de la largeur des opérateurs bruit.m : compare le modèle de bruit et le bruit simulé fixed.m : filtre polyphase simulé en virgule fixe fixespec.m : fonction servant à simuler le comportement en virgule fixe floatpoly.m : filtre polyphase en virgule flottante init.m : initialisation des varaibles (pas utilisé pour le moment) model.m : modèle du bruit dans le filtre polyphase optimfast (d après Nicolas Hervé) : calcul la largeur des différents opérateur pour un niveau de bruit donné. (repose sur l uilisation du modèle) le fichier "comparaison_sim_mod.txt" présente des relevés de puissance de bruit pour différentes largeurs d opérateurs (quoi ce soit pour la simulation ou pour le modèle). Le fichier "enwin.dat" contient les coefficients de la fenêtre du filtre. xl

E.3.3 répertoire fir répertoire chi2 les repertoire dist et dsit _short contiennent les sorties du fir pour les échantillons _dist et dist_short en entrée. convol.m : calcul du produit de convolution firfixe.m : filtre fir en virgule fixe (firfixetrunc.m avec troncature à la place de l arrondi) firfloat.m : fir fir en virgule flottante fixespec.m : fonction permettant l arrondi à la précision souhaitée (fixespectrunc.m avec troncature à la place de l arrondi) khitestalpha.m script de test du chiš adapté à la recherche du coefficient alpha pow.m : calcul de la puissance des bruits et tracé de la repartition rechalpha.m : permet de recherhcer le coefficient alpha sur des échantillons données. test.m : permet de générer la sortie du fir en virgule fixe et flottante (écrit le résultats dans des fichiers) (testtrunc.m avec troncature à la place de l arrondi) répertoire mdct convol.m : calcul du produit de convolution khitestalpha.m script de test du chiš adapté à la recherche du coefficient alpha noisecalc.m : calcul de la puissance des bruits noiseth.m : permet de vérifier qu un bruit est gaussien en utilisant les scripts de Pierre Meignen rechalpha.m : permet de recherhcer le coefficient alpha sur des échantillons données. resultats.m : calcul le nombre de cas dans lequel un alpha a été trouvé. test.m : permet de générer la sortie du fir en virgule fixe et flottante (écrit le résultats dans des fichiers) Les autres fichiers sont les scripts de Pierre Meignen contenant les tests statistiques. xli

E.3.4 répertoire virgulefixe Ce répertoire contient les codes sources des différents encodeurs, modifiés de manière simuler un comportement en virgule fixe pour certains blocs fonctionnels. Les différentes versions correspondent à : V2.0 : - Le filtre polyphase est en virgule, la simulation se fait en utilisant le moteur matlab. Cette solution étant trop lente, elle a été abandonnée. V2.1 : - Le filtre polyphase est en virgule, la simulation se fait en utilisant la fonction dans fixe.c. V2.2 : - La mdct est en virgule fixe, la simulation se fait en utilisant la fonction dans fixe.c. V2.2.1 : - La mdct est en virgule fixe, la simulation se fait en utilisant la fonction dans fixe.c. Les coefficients en sortie de la mdct sont sauvés dans un fichier. V2.2.2 : - troncature au lieu de l arrondi. V2.3 : - Le filtre polyphase et la mdct sont en virgule, la simulation se fait en utilisant la fonction dans fixe.c. De manière générale, un fichier changelog est présent dans chacun des répertoire. Il rescense les changements entre les différentes versions et les date de réalisations de ces dernières. Dans chaque répertoire, l exécutable "bladeenc.exe" est présent, il s utilise de la manière suivante : bladeenc.exe nomfichier largeuroperateurfiltrepolyphase (largeuroperateurmdctcourte largeuroperateurmdctlonguee) Les différentes largeurs sont à indiquer suivant la version utilisée. Les largeurs correspondant à différents niveaux de bruit de quantification sont stockées dans le répertoire coeffs (p :polyphase, ms :mdctshort, ml :mdctlong). Ces codes étant compilés avec gcc sous cygwin, il est nécessaire d inclure le chemin vers la bibliothèque "cygwin.dll" dans les path de l environnement de travail. Tous les fichiers sources sont normalement présents dans chacuns des répertoires. S il arrivait toutefois qu il en manque (plus particulièrement le fichier tables.c) c est que ces fichiers n ont pas été modifiés depuis la version originale. Ils sont donc disponibles dans le répertoire blade\blade_backup Chaque répertoire contient un ensemble de scripts permettant d automatiser les calculs. Ils permettent : pour les différent paramètres de bruit spécifiés de compresser l ensemble des fichiers wave présent dans le répertoire de décompresser les fichier mp3 xlii

d analyser la qualité de la compression (les résultats seront sauvés dans un fichier txt). Le fichier à exécuter et le fichier test.bat (qui executera db.bat, qui executera file.bat, qui executera traitement.bat). Les paramètres du bruit sont à modifier dans les fichier test.bat et db.bat. NB : Ici la puissance des bruits dépend des spécifications vrigules déterminées grace aux modèles. Les fichiers contenant ces spécifications sont dans le répertoir coeff. xliii