Article
Création de logiciels
10.9.2013
Perturbation continuum temporel
6 minutes
Temps d'un café
Transfert de données par le son
Transfert de données par le son
Hugo Hache
Note : Ce contenu a été créé avant que Fabernovel ne fasse partie du groupe EY, le 5 juillet 2022.

Le son : avantages et inconvénients

Malheureusement, utiliser le son va limiter le débit de façon significative. En effet, le haut-parleur d’un mobile est limité dans la bande de fréquences qu’il peut émettre (autour des fréquences audibles), et le micro dans celles qu’il peut recevoir. Or une bande de fréquence réduite implique un débit réduit. Mais même si ces limites techniques font que l’on ne pourra pas transmettre des fichiers volumineux, il est néanmoins utile de pouvoir transmettre facilement des messages courts tels que les informations d’un contact ou bien un mot de passe de Wi-Fi.

Cette solution nous offre quand même quelques avantages. Nous n’avons pas à reposer sur une infrastructure réseau pour fonctionner puisque le son a seulement besoin d’air pour se propager. Les composants dont nous avons besoin sont déjà présents dans un bon nombre d’appareils (comme les téléviseurs et les ordinateurs portables) et peuvent être facilement inclus dans d’autres (par exemple, les poignées de portes) Ceci veut dire que la transmission de données par le son est une solution qui ne serait pas limitée aux mobiles mais incluerait un certain nombre d’appareils intelligents.

Un dernier point intéressant est que le son se propage aux alentours, il est donc parfait pour la diffusion d’un même message à plusieurs destinataires. Aussi, l’absence d’appairage permet une facilité d’utilisation. La transmission ne requiert alors qu’une seule action de la part des utilisateurs.

État de l’art

D’autres se sont déjà intéressés à la transmission de données par le son, et quelques implémentations sont disponibles comme chirp.io et Infosound (en japonais) de Yamaha.

  • chirp.io utilise un son semblable à un bruit d’oiseau : même si c’est une solution intéressante, utiliser un son audible limite les cas d’usage (par exemple, un son audible ne peut pas être incrusté dans la bande son d’un film ou d’une série). Il est aussi difficile d’obtenir un son plaisant pour l’oreille. C’est probablement la raison pour laquelle Infosound ont opté pour l’utilisation de fréquences inaudibles et c’est aussi le choix que nous avons fait : nous utilisons seulement la bande de fréquences entre 18,4kHz et 20,8kHz.
  • Ces deux applications dépendent de la connectivité au réseau pour fonctionner : les données qui sont transmises par le son ne sont pas les données à proprement parler mais des URLs, ce qui requiert une connexion à internet afin de télécharger le contenu transmis. AudioModem transmet directement les données afin de ne pas être dépendant d’une connexion, ainsi la transmission pourra avoir lieu dans des endroits ayant une mauvaise couverture réseau comme le métro par exemple.

Choix de la modulation

Nous devons donc trouver un moyen d’encoder des données arbitraires en un son inaudible. La méthode pour y arriver est la modulation (la même méthode crée le son typique des modems des années 90). L’idée de base est d’encoder les bits de données dans les ondes sonores en faisant varier les propriétés de l’onde porteuse : amplitude, fréquence, phase ou une combinaison de celles-ci.

  • Modulation d’amplitude (ASK) : la plus simple des modulations. Facile à implémenter mais sensible au bruit.
  • Modulation de fréquence (FSK) : Cette méthode utilise une bande de fréquence plus large, ce qui pose problème vu qu’on voudrait se limiter aux fréquences inaudibles transmissible par un haut-parleur standard.
  • Modulation de phase (PSK) : Ce type de modulation est plus résistant au bruit que les autres. Mais la plupart de ses formes nécessitent un récepteur cohérent, ce qui est plus compliqué à implémenter.

Dans notre cas, nous avons implémenté une variante de la modulation de phase : la modulation de phase différentielle (DBPSK), qui ne nécessite pas un récepteur cohérent grâce à une redondance des données. Cette méthode présente plusieurs avantages :

  • Elle est plus robuste que la modulation d’amplitude car moins vulnérable au bruit qui affecte l’amplitude du signal.
  • Elle utilise une bande de fréquences moins large que la FSK. Elle est donc plus facile à transmettre dans la partie inaudible du spectre.
  • Elle peut être démodulée à l’aide d’un récepteur non-cohérent (qui est plus facile à implémenter qu’un récepteur cohérent).
  • Elle offre des débits théoriques acceptables.

Un aperçu de DBPSK

Les modulations de phase (dont DBPSK fait partie) encodent les bits de données dans l’onde sonore (appelée onde porteuse) en modulant sa phase. Dans sa forme la plus simple, les données binaires (bits 0/1) sont associées à différentes valeurs de la phase (0°/180°). Par exemple, voici à quoi ressemble l’onde sonore modulée suivant PSK quand on envoie la lettre ‘e’ encodée en ASCII (01100101) :

La différence introduite par la variante DBPSK est qu’au lieu d’envoyer les données de base (01100101), on leur applique une transformation en remplacant chaque bit par le XOR entre lui même et le bit qui le précède, en commencant par un bit arbitrairement choisi (si on choisit 1 comme bit de départ par exemple, on obtient 110111001).

De plus, on doit transmettre des données de synchronisation avant de transmettre les données à envoyer. Ces données de synchronisation permettent au récepteur d’avoir un point de repère du début des données. On a choisi d’utiliser les codes de Barker comme codes de synchronisation. Notre transmission va donc ressembler à ceci :

Enfin, cette méthode requière d’habitude qu’un algorithme de correction d’erreurs (FEC) soit appliqué afin de réduire la sensibilité au bruit.

Implémentation

Maintenant que nous avons assez de bagage théorique, il est temps de voir comment est-ce qu’on pourrait faire marcher cela. Nous avons décidé d’implémenter une preuve de concept sur la plateforme iOS.

iOS nous fournit plusieurs librairies de manipulation du son. Nous avons utilisé vDSP (qui fait partie du framework Accelerate) qui nous fournit un ensemble d’outils utilisés dans le traitement du signal, ainsi que Audio Queue Services (qui fait partie du framework AudioToolbox) qui nous fournit un accès basique au microphone et au haut-parleur de l’appareil.

Le code source est disponible sur notre compte GitHub

Ce prototype a un champ texte où vous pouvez saisir les données à envoyer. Quand vous appuyez sur le bouton “Broadcast”, les données sont alors diffusées en continu et en alternance avec le code de synchronisation. Quand un autre utilisateur est assez proche pour recevoir le signal et qu’il appuye sur le bouton “Receive”, il recoit alors les données sur sont appareil et le texte est alors affiché dans la zone texte en bas de l’écran. C’est aussi simple que ça. Vous pouvez alors appuyer une nouvelle fois sur le bouton “Broadcast” afin de mettre fin à la transmission.

Conclusion

Même si ce n’est qu’une preuve de concept, notre implémentation est fonctionnelle. Il lui manque encore des composants importants tels que la correction d’erreurs ainsi qu’une amélioration drastique de l’interface utilisateur.

Nous voulions juste expérimenter et explorer autour du concept de l’envoi de données par le son et nous espérons que vous avez trouvé cela intéressant. N’hésitez par à nous faire partager vos réactions sur Twitter.

No items found.
Pour aller plus loin :