IMA5 2022/2023 P15

De Wiki de Projets IMA
Révision datée du 5 décembre 2022 à 09:56 par Lpaquin (discussion | contributions) (Semaine 6 : 21/11/2022 - 25/11/2022)


Réalisation d’un système d’écoutes sonores à base de MEMS

Présentation générale du projet

Contexte

Les objets connectés se déploient de façon massive dans nos vies personnelles et quotidiennes. La simplicité de création de ces objets permet la mise sur le marché de nombreux nouveaux objets commerciaux, voire artisanaux grâce au mouvement DIY (Do It Yourself). Cette grande rapidité rend l’écosystème des objets connectés très hétérogène et rend ainsi la reconnaissance et l’identification des objets compliquée. Une piste permettant l’identification des objets connectés consiste à s’intéresser à leur signature sonore. Pour cela, on capte à l’aide de microphones les émissions sonores de l’objet en fonctionnement et on extrait une signature sonore. Afin d’améliorer la sensibilité de la captation sonore tout en diminuant la taille et le coût, on peut envisager d’utiliser des microphones basés sur les technologies MEMS. En utilisant de tels microphones il sera possible de multiplier les sources de données.

Le projet consiste en la conception et la réalisation d’un système d’écoute embarquant plusieurs microphones MEMS. La plateforme comportera :

  • une partie matérielle avec des microphones MEMS ;
  • un protocole de synchronisation des mesures provenant des différents microphones ;
  • une partie logicielle permettant de traiter les signaux acquis.

Des expérimentations basiques seront menées afin de valider le prototype et d’estimer les gains en termes de sensibilité notamment.

Cahier des charges

Objectif du projet

L’objectif de ce projet est de réaliser un prototype de système d’écoute de signature sonore à base de microphones MEMS permettant d’écouter un chargeur de smartphone, et pourra par la suite être étendu par d’autres systèmes, comme les microcontrôleurs, ou tout autre objet connecté. Nous travaillerons avec deux smartphones différents ainsi que leurs chargeurs respectifs, et notre système devra être capable de différencier les téléphones ainsi que de reconnaître quelques cas d’utilisations simples.

Historique

Ce projet sera le deuxième à avoir été réalisé sur cette thématique, où un premier projet avait été réalisé autour de cette thématique en 2019/2020 par l’étudiant en spécialité IMA5 Pierre Frison, celui-çi utilisant un simple microphone. Dans notre cas, nous utiliserons des microphones réalisés avec la technologie MEMS, et qui offrent donc la possibilité de réduire la taille du système, ainsi que de travailler avec plusieurs microphones afin de multiplier les sources et gagner en sensibilité.

Expression du besoin

Bête à corne

BaC 15 22.jpg

Diagramme Pieuvre

Pieuvre 15 22.jpg

Fonction Intitulé Flexibilité
FP1 Permettre à l’utilisateur d’identifier les appareils connectés
FC1 Capter et reconnaître la signature sonore d’un appareil Taux d'erreurs <= 10%
FC2 Informer l’utilisateur
FC3 Fonctionner en environnement intérieur
FC4 S’alimenter par câble USB

Diagramme FAST

FAST 15 22.jpg

Contraintes

Contraintes matérielles

Afin de réaliser un prototype ainsi que des mesures permettant de le valider, nous travaillerons avec du matériel qu’il nous à été fournis :

  • 2 microcontrôleurs STM32-NUCLEO-F410RB
  • 2 microcontrôleurs STM32-NUCLEO-F401RE
  • 1 expansion numérique des microphones MEMS (Réf : X-NUCLEO-CCA02M2)
  • 1 expansion analogique des microphones MEMS (Réf : X-NUCLEO-AMICAM1)
  • 1 expansion 4 microphones MEMS numériques STEVAL-MIC001V1
  • 1 expansion 4 microphones MEMS analogiques STEVAL-MIC004V1
  • 2 smartphones avec leurs chargeurs

Contraintes logicielles

Afin de pouvoir programmer les cartes microcontrôleurs, nous aurons le choix de travailler sous l’une des deux plateformes suivantes:

  • STM32Cube IDE
  • Mbed OS

Contraintes humaines

Nous serons deux étudiants en cinquième année systèmes embarqués - systèmes communicants à travailler sur ce projet, encadrés par Monsieur Thomas Vantroys et Monsieur Alexandre Boé, professeurs du département systèmes embarqués.

Contraintes temporelles

Le projet commencera le 5 Septembre 2022 et se terminera le 23 Janvier 2023.


Nous utiliserons également les ressources disponibles au sein de Polytech’Lille ainsi qu’au Fabricarium.

Résultats attendus

Afin de nous assurer du fonctionnement et de la fiabilité de notre prototype, nous réaliserons différentes mesures sur nos smartphones personnels. Nous réaliserons une base de référence pour une dizaine de cas différents en prenant plusieurs mesures de chaque cas afin de mesurer un taux d’erreur sur les mesures.

Cahier des Spécifications

Etat de l'art

Ce projet sera le deuxième à avoir été réalisé sur cette thématique, où un premier projet avait été réalisé autour de cette thématique en 2019/2020 par l’étudiant en spécialité IMA5 Pierre Frison, celui-çi utilisant un simple microphone. Dans notre cas, nous utiliserons des microphones réalisés avec la technologie MEMS, et qui offrent donc la possibilité de réduire la taille du système, ainsi que de travailler avec plusieurs microphones afin de multiplier les sources et gagner en sensibilité.(Lien du wiki)

L’entreprise Wavely a réalisé un système d’écoute sonore permettant de détecter les dysfonctionnements sur des systèmes tels que la localisation d’une fuite de gaz. (Les Echos)

Une publication scientifique rédigée par Boris Defreville, Stéphane Bloquet, Guillaume Filippi et Christine Aujard présente une solution permettant d’identifier le différentes sources de bruit en milieu urbain afin de pouvoir prévoir par exemple l’impact d’une déviation de l’accès à un centre ville ou bien de connaître les niveaux de bruit générés par l’industrie. (Lien de la publication)

Démarche de réalisation du besoin

Afin de réaliser le besoin nous allons procéder par étapes en augmentant progressivement la complexité de notre prototype. A chaque étape nous modifierons le prototype sur les plans matériel et logiciel puis nous réaliserons une batterie de tests identique à chaque étape afin de pouvoir comparer les différents résultats et évaluer l’évolution des performances de notre prototype.

En premier lieu, nous allons nous assurer de la fonctionnalité des microphones et prendre en main leur programmation en enregistrant nos propres voix. Après cela, nous allons réaliser une version simple de notre système permettant d’écouter le système à étudier (nous allons prendre le cas des chargeurs des smartphones) avec un seul microphone MEMS. Ce système consistera en une boîte en bois dans laquelle sera placé le capteur ainsi que le système à écouter.

Il est envisageable par la suite d’utiliser dans nos études plusieurs microphones placés à l’intérieur de la boîte, ainsi que d’en ajouter un à l'extérieur dans le but de pouvoir compenser le bruit ambiant.

Pour la partie logicielle, nous allons utiliser les résultats obtenus que nous allons visualiser en utilisant un algorithme d’analyse en composantes principales (PCA). Après quoi nous allons utiliser un algorithme de segmentation du plan de visualisation afin d’associer à chaque cas une surface sur le plan.

Formalisme des résultats de mesures

Afin de ne pas nous perdre dans les nombreuses expérimentations que nous effectuerons tout au long du projet, il sera nécessaire d’adopter un formalisme dans les conditions d’expérimentation ainsi que dans la dénomination des fichiers comprenant nos résultats. Nous effectuerons des mesures avec deux smartphones différents (nos téléphones personnels) dans quatre conditions :

  • Cas de base (batterie à 100%, aucune application ouverte).
  • Batterie à 50%, aucune application ouverte.
  • Une application ouverte, batterie à 100%
  • Smartphone en veille, batterie à 100%, aucune application ouverte.

Dans chaque cas, le smartphone sera en mode avion afin de limiter l’influence des autres ondes.

Afin de ne pas se perdre dans les différentes expérimentations que nous allons mener, nous allons réaliser une arborescence de fichier telle que suit, où un répertoire sera créé pour chaque cas, chacun contenant un répertoire par téléphone. Pour chaque expérience plusieurs mesures seront effectuées, comprenant les fichiers de résultats.

Factorisation-15-22.jpg

Voici une légende des noms des répertoires utilisés dans notre schéma explicatif :

  • Cbase = Le cas de base avec batterie à 100%, aucune application ouverte.
  • C50 = Le cas avec batterie à 50%, aucune application ouverte.
  • Co = Le cas avec une application ouverte et batterie à 100%
  • Cv = Le cas avec smartphone en veille, batterie à 100%, aucune application ouverte.
  • T_Logan et T_Ali = Téléphone sur lequel on fait l’expérience
  • Expi = experience numéro i faite par le téléphone

Les fichiers seront nommés par concaténation des noms des répertoires en partant du plus général (ex. Cbase_Tlogan_E2_F1).

Diagramme de GANTT

Gantt prev-15-22.jpg

Caractéristiques du produit

Le produit attendu est un système embarqué, basé sur des cartes microcontrôleur STM32F410RE, des expansions et des microphones MEMS analogiques (X-NUCLEO-AMICAM1) et numériques (X-NUCLEO-CCA02M2).

Nous souhaitons réaliser un prototype comportant plusieurs micros et ayant une certaine immunité au bruit extérieur. Cette immunité peut être obtenue en utilisant des matériaux insonorisant ou bien en récupérant le bruit extérieur afin de le compenser lors de l’analyse.

Ce prototype à pour but de différencier les systèmes embarqués ou bien leurs conditions de fonctionnement. Sa fiabilité sera déterminée en mesurant le taux d’erreur sur des chargeurs de téléphones portables dans plusieurs cas tel que vu précédemment. Des mesures sur d’autres systèmes embarqués sont envisageables mais cela reste à déterminer.

Les moyens consacrés

En plus du matériel électroniques fournis, tel que les microcontrôleurs, les expansions et les microphones, nous allons utiliser les outils de fabrication présents au Fabricarium de l’école, dans le but de construire une boîte dans laquelle vont être placés les composants de notre système (par découpage laser ou impression 3D).

Pour la partie logicielle nous travaillerons sous STM32Cube IDE pour la prise de mesure et nous programmerons les algorithmes de traitement et d’analyse de données en Python, en utilisant les modules svc du package sklearn.svm et pca du package sklearn.decomposition pour la visualisation et la segmentation des données.

Nous avons également la possibilité d’implémenter une solution à base de machine learning afin de faciliter l’apprentissage de nouveaux cas.

Réalisation du projet

Semaine 1 : 05/09/2022 - 09/09/2022

Durant la première semaine, nous avons rempli tout d'abord les parties de notre page Wiki en établissant la description du projet et du système, ainsi que le cahier des charges avec les tâches à effectuer.

Pour cela nous nous sommes renseignés en lisant des documentations trouvés sur internet, ainsi que les travaux effectuer par un ancien étudiant IMA sur un sujet qui ressemble celui la, ainsi que nous avons eu une première réunion avec nos encadrants; Monsieur Thomas Vantroys et Monsieur Alexandre Boé qui nous ont expliqué le but de ce projet, et nous ont fournit le matériel nécessaire pour la réalisation technique.

Semaine 2 : 19/09/2022 - 24/09/2022

Durant cette deuxième semaine, notre objectif était de comprendre le fonctionnement des expansions numériques et analogiques des microphones MEMS. Pour cela nous avons décidé d'utiliser le logiciel STM32CubeIDE, car il possède des compatibilités avec les expansions en possession. Pour cela, nous avons commencé au début d'apprendre et de comprendre le mode de fonctionnement de cet environnement en suivant des Tutorats trouvés sur Youtube.

Ensuite un nous avons testé pour la première fois l'expansion numérique des MEMS, où nous avons trouvé au début qu'il est indispensable d'utiliser X-Cube-MEMSMIC1 qui est un progiciel d'extension pour STM32Cube. Ce logiciel s'exécute sur le STM32 et comprend des pilotes et un middleware pour l'acquisition de données audio à partir de microphones numériques MEMS (MP34DT06J) et de microphones analogiques (MP23ABS1), et le streaming USB des signaux enregistrés.

Un test préliminaire, consistant à enregistrer nos voix personnelles a eu lieu, grâce au logiciel Audacity par l'expansion numérique, où le résultat est enregistré dans un fichier d'extension .aud3 .

Voici une capture du signal sonore :

Digital sound1.jpg

On observe la variation de l'amplitude du signal en fonction du temps.

Nous avons avons alors commencé à réflechir à l'automatisation de l'enregistrement sou des formats de compressions sans pertes utilisables. Nous avons choisi de travailler avec le format wave, où nous avons trouvé des modules sous Python permettant de traiter les données sous ce format.

Semaine 3 : 03/10/2022 - 07/10/2022

Lors de cette troisième semaine, nous avons travaillé sur l'acquisition des signaux provenant des microphones par programmation afin d'enregistrer le son récupéré au format wave. Nous avons choisi le format wave car il s'agit d'un format de compression sans perte restituant donc le son de manière fidèle. Nous avons récupéré et adapté un programme Python permettant de réaliser cette tâche et avons effectivement pus réaliser des enregistrements sonores ainsi.

Spectrogramme d'un enregistrement de nos voix

Après cela nous nous sommes penché sur l'analyse de ces enregistrements. En effet, afin de pouvoir les analyser puis les comparer, il nous faut en retirer des informations qui leurs sont propres. Nous avons alors choisi de travailler avec leurs spectrogrammes nous offrant des informations de puissance sonore reçues pour chaque fréquence et en fonction du temps. Un script Python utilisant les packages scipy.io.wavfile et matplotlib.pyplot permet de lire un fichier d'extension wave et d'en afficher le spectrogramme.

Spectrogramme d'un enregistrement du chargeur de Ali
Spectrogramme d'un enregistrement du chargeur de Logan

Enfin nous avons effectué un premier enregistrement du bruit causé par nos chargeurs de smartphones alors que ceux-ci sont en charge. Nous ne disposons pas encore de moyen pour réduire l'influence du bruit extérieur (boite isolante, compensation du bruit), ces enregistrements ont donc été réalisés dans des conditions inadaptés et sont potentiellement impactés par le bruit environnemental.

Semaine 4 : 17/10/2022 - 21/10/2022

Lors de cette semaine, nous avons avancé sur le projet de la façon suivante:

Tout d’abord, nous avons réalisé des mesures en utilisant 2 smartphones différents avec leurs chargeurs, à un niveau de batterie de 50% et 100% respectivement, tous deux en veille. Pour chacun des deux cas, nous avons effectué plusieurs mesures afin d’obtenir un nombre suffisant d’échantillons pour de premières expérimentations.

Ensuite nous sommes partis sur l’apprentissage de la PCA, qui va nous permettre de représenter sur un plan en 2 dimensions les points représentant les signatures sonores des différents fichiers son :

  • Premièrement, nous avons préparé des features pour la PCA en se basant sur le spectrogramme, en utilisant un nombre limité d'informations dans le but de comprendre le fonctionnement de l’algorithme de PCA et les résultats attendus. Comme nous nous y attendions, les résultats obtenus n'étaient pas utilisables du fait du trop peu d’informations utilisées, mais cela nous à permis de comprendre comment mettre en place l’algorithme afin d’obtenir ce que nous souhaitons.
  • Deuxièmement, nous avons choisi de préparer les features via la méthode de la FFT du signal sonore, ensuite des tests ont été faits sur les fichiers de mesures. Nous avons obtenu un résultat qui paraît satisfaisant.
  • Troisièmement, après discussion avec notre tuteur Mr Boe, qui nous a expliqué que la méthode de FFT faisait perdre les informations temporelles, nous sommes partis sur la mise en place d’un filtre passe-bas sur les données des spectrogrammes de chaque mesure afin de ne prendre que les informations aux fréquences inférieurs à 25 kHz. Les valeurs de puissances récupérées suite à ce filtrage, seront les features de l’algorithme de PCA. Ci-dessous les résultats obtenus.
PCA sur Spectrogramme avec LPF
PCA sur FFT


Enfin, sur demande de Mr Boe, nous avons commencé à observer l'influence des paramètres de calcul du spectrogramme (taille de la fenêtre et overlap). Nous avons également commencé à nous intéresser aux parties matérielles et logicielles afin de déterminer comment récupérer les informations de chaque microphones individuellement.

Semaine 5 : 07/11/2022 - 11/11/2022 et Semaine des vacances de Toussaint

Lors des vacances de Toussaint nous avons préparé notre rapport intermédiaire. Cela a également été l'occasion pour nous de faire un point sur l'avancé du projet, de définir clairement ce qui a été effectué et ce qu'il nous reste à faire. La semaine suivante nous nous sommes attelés à la compréhension du programme fourni par STMicroelectronics afin de savoir où et comment les données sont lues dans la mémoire avant d'être transférées par USB.

Semaine 6 : 21/11/2022 - 25/11/2022

Lors de ces semaines, nous avons mis en place un script en python permettant de récupérer les données de chaque microphones à part (créer deux fichiers Mono à partir d’un fichier Stéréo). Par méthode expérimentale, nous avons identifié quel microphone correspond à quel canal:

  • Le canal 1 correspond au micro 1 et au micro Left.
  • Le canal 2 correspond au micro 2 et au micro Right.

Après cela nous avons réalisé une arborescence de fichiers telle que décrite dans la partie spécification. Nous travaillons avec les cas suivant :

  • Portable chargé à 100% en veille (Cas100v)
  • Portable chargé à 100% avec une application ouverte (Cas100app)
  • Portable chargé à 50% en veille (Cas50v)
  • Portable chargé à 50% avec une application ouverte (Cas50app)

Dans tous les cas, le smartphone est en mode avion, et nous réalisons des mesures avec Nos deux portables et leurs chargeurs respectifs. Nous obtenons donc 8 cas différents que nous essaierons de différencier.

Nous avons ensuite modifier nos différents scripts afin de parcourir cette arborescence de fichier et récupérer tous les fichiers .wav nous intéressant. Cette lecture prend également en compte tous fichier ajouté par la suite sans avoir à modifier le code. Nous avons également modifier le script permettant de séparer un fichier stéréo en deux fichiers mono afin que celui-ci s'exécute sur tous les fichiers présents dans l'arborescence.

Nous avons réalisé une série de mesures dans 4 des cas cité au dessus (5 mesures par cas) afin de pouvoir prendre en main les algorithmes qui nous permettrons de différentier les cas :

  • Portable de Ali chargé à 100% en veille (Cas100v)
  • Portable de Ali chargé à 100% avec une application ouverte (Cas100app)
  • Portable de Logan chargé à 50% en veille (Cas50v)
  • Portable de Logan chargé à 50% avec une application ouverte (Cas50app)

En appliquant l'algorithme de PCA sur ces mesures (CH1 et CH2 séparément), nous obtenons ceci : PCA CH1-2.png

Résultats

Documentation

Matériel

  • Datasheet des microphones MEMS numériques : MP34DT06J

Logiciel

Documents Rendus