P14B07 Implantation d'un Codec Audio de type Opus (SPEEX) sur cible RX210


Numéro du projet : P14B07
Entreprise / Client : Renesas Electronics / Tolentino Martins
Responsable Projet : Michel James
Tuteur industriel : Isabelle Goi
Équipe de projet : Sébastien Bouiller, Julien Roquette

1. Résumé
2. Abstract
3. Introduction
4. Présentation du Sujet
5. Cahier des Charges
6. Developpement

1. Problématiques
2. Faisabilité
3. Etude Théorique
4. Solutions

7. Gestion de Projet

1. W.B.S.
2. Gantt

8. Notes d'application

1. sujet 1
2. sujet 2

9. Bilan

1. Etat d'avancement
2. Analyse Critique
3. Perspectives

10. Bibliographie

Résumé

Le projet : « implantation d’un codec audio de type Opus (SPEEX) sur cible RX210 » est proposé par l'entreprise Renesas Electronics Corporation, multinationale japonaise spécialisée dans le développement, la conception, la fabrication, et la vente de composants électroniques.

Pour montrer les performances de ses produits, Renesas développe des applications utilisant des outils gratuits et libres de droit afin de fidéliser ses clients et d'en gagner de nouveaux. C'est dans ce cadre que se place ce projet. Pour sa réalisation, l'environnement de développement E²Studio, avec le compilateur KPIT GNU ont été utilisés.

L'objectif est de porter les librairies du codec SILK (partie du codec Opus ayant les fonctionnalités du codec SPEEX) sur un microcontrôleur RX210 et de réaliser un démonstrateur permettant de valider son fonctionnement.

Le codec SILK a été implémenté dans deux cartes de démonstration fournies dans les StarterKit? RX210. La première est chargée de l'encodage de données audio stockées en mémoire du microcontrôleur et de la transmission des données encodées à la seconde carte, chargée quant à elle de les décoder et de les transmettre à un haut-parleur. La communication entre les deux cartes a été réalisée par liaison série.

Mots clés :
Flux audio
Codec Opus
Encodage / Décodage


Abstract

The project "implementation of an audio codec type Opus (SPEEX) target RX210" is offered by the company Renesas Electronics Corporation, a Japanese multinational specialized in development, design, manufacture, and sale of electronic components.

In order to show the performance of its products, Renesas develops applications using free and open source tools. It allows the company to foster their customer's loyalty and to win new ones. It is in this context that this project takes place. For its realization, the Integrated Development Environment E2Studio with the KPIT GNU compiler were used.

The aim is to port the SILK codec libraries (part of the Opus codec with the SPEEX codec's features) on a RX210 microcontroller and to realize a demonstrator in order to validate its operation.

The SILK codec has been implemented on two demonstration cards provided in the RX210's StarterKit??. The first one is in charge of encoding audio data stored within the microcontroller's memory and to transmit the encoded data to the second card, which is in charge of decoding and transmitting them to a speaker. Communication between the two cards was performed by serial link.

Key words :
Audio path
Opus codec
Encoding / Decoding

Introduction

Depuis sa création, Skype a grandement amélioré les communications par synthèse vocale sur Internet. Ceci est principalement dû au fait que c’est un logiciel à la fois gratuit et performant du point de vue qualité audio.

Dans le cadre des projets de quatrième et cinquième années de Polytech Clermont-Ferrand, l’entreprise Renesas Electronics Corporation demande régulièrement à des étudiants ingénieurs de développer des applications à l’aide d’outils gratuits pour démontrer la polyvalence et la qualité de leurs microcontrôleurs.

Le projet présenté ici consiste en l’implantation du codec audio SILK (développé et utilisé par Skype) sur un microcontrôleur RX210.

Le sujet et le cadre seront présentés en premier lieu. Par la suite, le cahier des charges et les problématiques seront définis. Puis, l’étude de faisabilité et le plan d’action retenu pour la cinquième année de Génie Électrique seront exposés.



Présentation du Sujet

Renesas Electronics

Photo 1 : siège social de Renesas Electronics

Renesas Electronics est une multinationale Japonaise (photo 1), dont la spécialité est la conception, la production et la vente de composants à base de semi-conducteurs (microcontrôleurs, mémoires etc...), de composants analogiques et de puissance. Elle est notamment leader mondiale sur le marché du microcontrôleur (figure 1), et 5ème sur celui du semi-conducteur en général (figure 2). Renesas Technology a été créée en avril 2003, puis a fusionnée avec NEC Electronics en avril 2010 pour devenir Renesas Electronics. Actuellement, l’entreprise compte 28500 employés et avait un chiffre d’affaire de 5,6 milliards d’euros en 2013.
Classement_UC

Figure 1 : vente de microcontrôleurs (millions $ US)

Figure 2 : vente de semi-conducteurs (millions $ US)

Le client M. Martins travaille pour le département ICBG de la filiale parisienne de Renesas, dont le but est de proposer aux clients de l’entreprise diverses applications des microcontrôleurs Renesas, afin de démontrer leur puissance et leur polyvalence. Dans le cadre de ce projet, il s’agira d’implanter une partie du codeur-décodeur (ou codec) Opus sur des microcontrôleurs RX210.

Pour améliorer sa compétitivité face à ses concurrents, Renesas cherche à améliorer sa relation client. Afin de démontrer l'efficacité de ses produits et ainsi gagner de nouveaux clients, Renesas développe des applications utilisant des outils libres et gratuits.

Codec Opus

Opus est un format de compression audio avec pertes, particulièrement adapté pour les applications interactives en temps réel sur Internet. Il s’agit d’un codec libre de droit, normalisé par l’IETF (Internet Engineering Task Force), qui offre une alternative à tous les codecs existants.

Il est composé d’une partie basée sur la prédiction linéaire (LP) et d’une autre basée sur la transformée en cosinus discrète modifiée (MDCT). La première est utilisée pour le SILK, codec audio développé par Skype et optimisé pour la voix humaine. La seconde est utilisée pour le CELT, codec développé par xiph.org et optimisé pour la musique. L’utilisation de ces deux codecs, initialement séparés, fait de l’Opus le codec libre de droit le plus performant actuellement.

L’Opus peut fonctionner selon trois modes différents :

- SILK mode
- CELT mode
- Mode hybride

Le choix entre ces modes de fonctionnement est fait automatiquement en fonction de la bande passante et du son qui doit être transmis.

Pour ce projet, seul le portage du SILK sera réalisé puisqu’il présente les mêmes fonctionnalités que le SPEEX tout en étant plus performant.

RX210

Le microcontrôleur sur lequel doivent être implantés l'encodeur et le décodeur Opus est de la famille des RX. Il s'agit d'une famille de microcontrôleurs 32 bits fabriqués par Renesas Electronics depuis 2008. Les RX210 consomment moins que la plupart des microcontrôleurs de la famille RX à performances égales (figure 3).

Figure 3 : consommation des RX210

Pour réaliser ce projet, il faudra utiliser certains de ses périphériques :

- les convertisseurs analogique/numérique et numérique/analogique. Le CAN sera utilisé pour convertir les données analogiques provenant du micro à l'entrée de la carte d'encodage. Le CNA sera utilisé pour que le flux audio en sortie de la carte de décodage puisse être envoyé sur des haut-parleurs.

- Des timers afin de gérer toutes les contraintes temporelles nécessaires à l'encodage et au décodage des données.

- L'UART pour gérer les communications entre les deux cartes et entre un PC et la carte d'encodage.

En revanche, le RX210 ne dispose pas d'unité de calcul à virgule flottante (FPU), il faudra donc impérativement travailler avec des valeurs codées en virgule fixe pour ne pas réduire la vitesse d'exécution des calculs.

Cahier des Charges

L'intérêt de ce projet est d'implanter le codec audio Opus sur un microcontrôleur en utilisant uniquement des outils gratuits. Pour cela, le cahier des charges est le suivant :

- Utilisation du codec audio SILK (dernière version : opus-1.1) avec toutes les contraintes induites par la norme.

- Utilisation de l'IDE E²Studio

- Utilisation du compilateur GNURX

- Portage du code source sur la cible RX210

Pour porter le code source de l'Opus sur microcontrôleur, il faudra uniquement utiliser la partie codée en virgule fixe. De plus, le taux de charge processeur ne devra pas dépasser 80% à 50 MHz.

- Utilisation si possible du noyau temps réel FreeRTOS


Développement


Problématique

Le projet possède deux aspects : la transmission de données d’un point à un autre et l’adaptation (le portage) d’un code fonctionnant sur des machines puissantes comme des PC sur des machines moins puissantes, ici un microcontrôleur.

Pour l’aspect transmission de données, le client ne souhaitant pas un fonctionnement en temps réel obligatoirement, il suffira d’être capable d’effectuer un simple transfert des données en différé, entre la carte d’encodage et de décodage. Cependant, il faudra être capable de recevoir en entrée de la carte un flux audio analogique (provenant d’un micro typiquement) et de récupérer un flux audio analogique également en sortie (à l’aide de haut-parleur).
Les microcontrôleurs ne sachant effectuer des opérations que sur des données numériques, il faudra assurer la conversion des données de l’analogique vers le numérique en entrée et du numérique vers l’analogique en sortie.

C’est dans le second aspect, à savoir le portage pur du code, que réside toute la difficulté du projet. En effet l’algorithme à implanter est complexe, et utilise des ressources matérielles qui ne sont pas disponibles sur des outils comme les microcontrôleurs. Tout le travail consistera donc à utiliser au mieux les ressources du microcontrôleur pour réaliser un encodeur et un décodeur opérationnels et conformes aux contraintes du cahier des charges et de la norme SILK.

Il s’agira donc de porter le codec SILK sur le microcontrôleur RX210 pour effectuer la transmission de données audio vocales d’un point à un autre.


Faisabilité

Avant d'envisager la réalisation du projet, il faut déterminer si le portage d'un codec tel que le SILK est réellement réalisable sur une cible comme le RX210.
La première étape pour cela, est de récupérer la librairie Opus disponible sur le site http://opus-codec.org/ et de la faire fonctionner sur un pc à l'aide d'un Environnement de Développement tel que CodeBlocks?. Ensuite, il faudra réussir à faire fonctionner la librairie qui nous intéresse pour le projet, la librairie SILK, sur le même type d'environnement. Cela permettra d'avoir un encodeur et un décodeur SILK fonctionnels sur PC.

A ce stade, l'objectif sera de déterminer les différents paramètres répondant le mieux aux besoins du client du point de vue qualité audio et surcharge processeur. L'encodeur et le décodeur implantés sur PC seront testés, avec différentes configurations (fréquence d'échantillonnage, qualité, bande passante, débit etc...) afin de déterminer quels paramètres conviennent le mieux au client.

L'un des gros avantages de la librairie disponible sur le site d'Opus est qu'elle permet d'effectuer l'encodage et le décodage en virgule fixe ou en virgule flottante. Il suffira donc de porter sur le microcontrôleur uniquement les codes correspondants aux opérations en virgule fixes.

Le compilateur KPIT GNURX et l'environnement de développement E²Studio sont tous les deux compatibles avec le microcontrôleur RX210. Il sera donc parfaitement possible de réaliser le projet avec ces outils.


Etude Théorique


Solutions

Voici le synoptique général du système (figure 4) qu'il est prévu de réaliser, afin de répondre au cahier des charges et aux problématiques du projet :

Figure 4 : synoptique du système

Pour réaliser ce système, il va falloir s'assurer que les différentes sous-parties (l'encodage et le décodage) sont fonctionnelles séparément. Les synoptiques suivants présentent les deux systèmes à réaliser afin de tester séparément l'encodeur (figure 5) et le décodeur (figure 6):

Figure 6 : phase de test : décodeur


Gestion de Projet

W.B.S.

Le projet à réaliser a été découpé en plusieurs tâches (figure 7). Les deux premières seront réalisées en GE4 et sont indispensables à l'avancement du projet. L'étude de faisabilité va permettre d'identifier les points critiques du projet. Les tests sur PC permettront de déterminer les paramètres pour configurer l'encodage et le décodage. Ils permettront également d'avoir un moyen de comparer les résultats obtenus lors des différentes phases de test sur les RX210.

Les périphériques du microcontrôleur devront ensuite être mis en œuvre pour pouvoir réaliser le portage de l'encodeur et du décodeur.

Une fois le portage de l'encodeur et du décodeur réalisé, il faut les assembler afin de valider la communication entre les deux modules.

Figure 7 : diagramme des tâches


Gantt

Afin de gérer au mieux le temps disponible pour réaliser le projet, toutes les tâches à effectuer doivent être clairement définies et leur durée doit être estimée le plus précisément possible. Ainsi, les parties critiques du projet pourront être détectées dès le début. Pour cela, les deux diagrammes de Gantt ci-dessous montrent la répartition des différentes tâches au sein du groupe. Le premier (figure 8) montre le début du projet réalisé en quatrième année de Génie Électrique. Il s'agit notamment de l'étude de faisabilité du projet et des différents tests à réaliser sur PC avant de pouvoir les implanter sur microcontrôleur. Le second diagramme présente le planning prévisionnel (figure 9) pour la cinquième année.

Figure 8 : répartition des tâches GE4

Figure 9 : planning prévisionnel GE5


Notes d'application
Sébastien BOUILLER : SILK encoder implementation on the RX210 microcontroller

SILK_encoder_implementation.pdf

Julien Roquette

P14B07_AN_implementation_and_validation_of_porting_SILK_audio_codec_on_RX210.pdf


Bilan


Etat d'avancement

A la fin du projet, l'encodeur et le décodeur SILK ont été portés sur RX210. La qualification du code est donnée dans la table ci-dessous :

Le démonstrateur réalisé pour la soutenance est donné figure 10. Le contenu d'un fichier audio non compressé est stocké dans la mémoire du premier RX210. Ces données sont compressées et transmises au second RX210. Une fois la transmission terminée, les données sont décodées puis jouées sur un haut-parleur.

Figure 10 : démonstrateur


Analyse Critique

Trop de temps a été passé en GE4 sur la compréhension et l'utilisation des librairies du codec Opus dans son intégralité. En effet, nous souhaitions partir de ces librairies pour en extraire uniquement les parties gérant le SILK, ce qui a été une erreur puisqu'elles étaient disponible directement sur le site de l'IETF.
Cela aurait permis d'effectuer tous les tests sur PC en GE4 et de disposer de plus de temps pour, par exemple, faire fonctionner la partie micro de la carte de sous-traitance.


Perspectives

Dans le but d'améliorer ce projet, les points suivants pourraient être étudiés :
- optimisation du code dans le but de rendre l'application optimale en terme de temps d'exécution
- utilisation du noyau temps réel FreeRTOS afin de faciliter l'organisation des différentes tâches.

Bibliographie

Opus, [en ligne]. http://www.opus-codec.org/ (consultation le 01/04/2014).

SILK, [en ligne]. https://tools.ietf.org/html/draft-vos-silk-02 (consultation le 04/01/2015).

Wikipedia, [en ligne]. http://en.wikipedia.org/wiki/Opus_%28audio_codec%29 (consultation le 01/04/2014).

Jean-Marc Valin. Interactive Audio Codec [en ligne]. http://tools.ietf.org/pdf/rfc6716.pdf (consultation le 01/04/2014).

Xiph.org, [en ligne]. http://celt-codec.org/ (consultation le 01/04/2014).

David Larousserie. « Opus, un format audio meilleur que le MP3 », [en ligne]. http://www.lemonde.fr/sciences/article/2012/11/29/opus-un-format-audio-meilleur-que-le-mp3_1798065_1650684.html (mis à jour le 04/12/2012).

Gordon Fowler. Opus : le nouveau codec audio open source est standardisé [en ligne] http://www.developpez.com/actu/47519/Opus-le-nouveau-codec-audio-open-source-est-standardise-il-ferait-mieux-que-six-codecs-proprietaires-reunis-dixit-Mozilla/ (consultation le 01/04/2014).

Speex.org. Speex [en ligne] http://www.speex.org/ (consultation le 05/04/2014).

Jean-Marc Valin. Definition of the Opus Audio Codec [en ligne] http://tools.ietf.org/html/rfc6716 (consultation le 18/04/2014).

Patrick Flandrin. Prédiction linéare [en ligne] http://perso.ens-lyon.fr/patrick.flandrin/CoursM2SC_Signal_3.pdf (consultation le 01/04/2014).

P14B07_logo_polytech_detoure_20140418094001_20140418094039.png (12.1 KB) axel BARRIEUX, 04/07/2021 10:53 AM

P14B07_Logo_Renesas_20140418094001_20140418094045.PNG (5.77 KB) axel BARRIEUX, 04/07/2021 10:53 AM

P14B07_Skype_20150104222859_20150104223034.jpg (9.32 KB) axel BARRIEUX, 04/07/2021 10:53 AM

P14B07_loudspeaker_20150104222102_20150104222119.png (503 KB) axel BARRIEUX, 04/07/2021 10:59 AM

P14B07_renesas_20140418094728_20140418094737.png (405 KB) axel BARRIEUX, 04/07/2021 11:08 AM

P14B07_Classement_UC_20140418102828_20140418104743.png (21.9 KB) axel BARRIEUX, 04/07/2021 11:08 AM

P14B07_Classement_SC_20140418102828_20140418104754.png (22.4 KB) axel BARRIEUX, 04/07/2021 11:09 AM

P14B07_opus-112_20140418094323_20140418094332.png (1.39 KB) axel BARRIEUX, 04/07/2021 11:12 AM

P14B07_Conso_RX_20140418095709_20140418095730.png (18.6 KB) axel BARRIEUX, 04/07/2021 11:13 AM

P14B07_synoptique_20140424172454_20140424172508.png (52 KB) axel BARRIEUX, 04/07/2021 11:18 AM

P14B07_test_encodeur_20140424172454_20140424172518.png (48.7 KB) axel BARRIEUX, 04/07/2021 11:19 AM

P14B07_test_decodeur_20140424172454_20140424172532.png (35.9 KB) axel BARRIEUX, 04/07/2021 11:20 AM

P14B07_WBS_20140418113639_20140418113838.PNG (11.6 KB) axel BARRIEUX, 04/07/2021 11:21 AM

P14B07_ganttGE4_20140424171852_20140424172002.png (34.6 KB) axel BARRIEUX, 04/07/2021 11:22 AM

P14B07_ganttGE5_20140424171852_20140424172115.png (30.2 KB) axel BARRIEUX, 04/07/2021 11:22 AM

SILK_encoder_implementation.pdf (861 KB) axel BARRIEUX, 04/07/2021 11:24 AM

P14B07_AN_implementation_and_validation_of_porting_SILK_audio_codec_on_RX210.pdf (171 KB) axel BARRIEUX, 04/07/2021 11:25 AM

P14B07_qualif_20150211172213_20150211172718.png (12.5 KB) axel BARRIEUX, 04/07/2021 11:26 AM

P14B07_Demo_20150211172213_20150211172249.png (64.4 KB) axel BARRIEUX, 04/07/2021 11:26 AM