- Le microphone à réseau phasé à 192 canaux peut modifier sa directivité même après l’enregistrement, ou faire simultanément la mise au point sur des centaines de milliers de points, ce qui permet de localiser et de visualiser des sources sonores, chose difficile avec un microphone directionnel classique
- Le matériel se compose de bras de microphones radiaux et d’un hub central ; pour un coût d’environ 700 $, il utilise 192 microphones MEMS, une carte FPGA Colorlight i5 et une architecture de transmission Gigabit Ethernet
- Le FPGA se concentre sur la transmission des données PDM brutes plutôt que sur un prétraitement complexe : il traite une entrée à 3,125 MHz et utilise environ 70 % de la bande passante Gigabit Ethernet, soit environ 715 Mbit/s
- Le logiciel combine filtre CIC, correction basée sur la FFT, optimisation GPU et beamforming Triton pour visualiser en temps réel la position des sources sonores en champ proche 3D et en champ lointain 2D
- Les paquets UDP peuvent être capturés et relus avec
tcpdump, mais le stockage brut atteint 87,5 Mo/s, soit 315 Go nécessaires pour une heure d’enregistrement
Construction d’un microphone à réseau phasé à 192 canaux
- Combine une acquisition de données par FPGA avec du beamforming et de la visualisation sur GPU pour un microphone à réseau phasé à 192 canaux
- Contrairement à un microphone directionnel classique, un réseau phasé permet de modifier la directivité après l’enregistrement et de faire simultanément la mise au point sur des centaines de milliers de points en temps réel
- Toute la conception est publiée en open source
Conception matérielle
-
Structure du réseau et coût
- Le réseau phasé est constitué en disposant de nombreux microphones selon une distribution d’espacements étendue
- Dans un réseau linéaire, un espacement exponentiel entre microphones est connu comme optimal pour les signaux large bande
- Le réseau 2D dispose des bras de réseaux linéaires symétriques en étoile afin de maintenir la carte hub centrale compacte
- Le coût total du réseau est d’environ 700 $
-
Cartes de bras
- La longueur de chaque bras a été adaptée aux limites de fabrication et d’assemblage des PCB ; la longueur maximale de fabrication et d’assemblage de PCB 4 couches chez JLCPCB était de 570 mm
- Les microphones utilisés sont des MEMS bon marché à sortie numérique, à environ 0,5 $ pièce
- À ce niveau de prix, les différences de performances entre microphones ne sont pas très importantes
- La plupart offrent des performances correctes jusqu’à 10 kHz, mais le retard de phase et l’égalisation de volume ne sont pas spécifiés
- Les microphones sortent les données en PDM (pulse density modulation)
- Ils produisent une sortie 1 bit à une fréquence pouvant atteindre 4 MHz, bien au-delà de la plage audible
- Le bruit de quantification est compensé par la fréquence d’échantillonnage élevée
- La prise en charge du DDR, qui verrouille les données sur les fronts montants et descendants de l’horloge, permet de multiplexer deux microphones sur une même ligne
- Chaque bras comporte 8 microphones et 4 lignes de sortie, avec un buffer de sortie sur la ligne d’entrée d’horloge
- La conception vise à maintenir un temps de montée raisonnable même lorsque plusieurs centaines de microphones partagent le même signal d’horloge
- Le rendement des PCB de bras n’a pas été bon : environ 50 % des cartes fonctionnaient à l’état initial
- La panne la plus fréquente était un court-circuit de la ligne d’horloge vers 3V3 ou GND
- Corriger le court-circuit nécessitait de retirer les microphones un par un par essais successifs
- Certains microphones produisaient encore des données incorrectes après reprise ; le code les exclut en les masquant
- Dans une prochaine conception, des résistances série sur la ligne d’horloge, une meilleure panélisation et un pochoir de pâte à braser amélioré pourraient réduire les reprises
-
Carte hub
- Pour l’acquisition de données, le projet utilise un FPGA, nécessaire pour disposer d’un grand nombre d’E/S à faible latence et d’interfaces haut débit comme Gigabit Ethernet
- Plus précisément, la carte Colorlight i5 a été choisie
- Les raisons sont son nombre d’E/S suffisant, son prix bas, sa disponibilité et ses deux PHY Ethernet intégrés
- Dans ce projet, un seul PHY Ethernet est utilisé
- Cette carte est à l’origine une interface Ethernet pour panneaux LED, mais elle a été entièrement rétro‑ingénierée
- Environ 100 GPIO sont exposées via un connecteur DDR2, ce qui rend le fan-out plus facile que depuis le BGA du FPGA d’origine
- Le hub comprend, outre le FPGA, un circuit simple de gestion de l’alimentation, des connecteurs pour les cartes de bras et un connecteur Ethernet avec magnétiques intégrés
-
Conception mécanique
- Les bras sont fixés au hub avec des entretoises et écrous de montage PCB, ainsi que des vis M3
- La liaison entre les bras et le hub se fait via des connecteurs 8 broches au pas de 2 mm
- La conception initiale emboîtait des fentes dans les PCB de bras avec une structure circulaire en PCB, mais la faible rigidité en torsion des bras rendait l’ensemble facilement déformable
- La conception finale place des pièces de MDF de 1/4 pouce découpées au laser autour de l’extérieur du réseau, chaque bras étant fixé au MDF par des colliers de serrage
- Comme le réseau de microphones est monté au mur et donc sensible aux réflexions, de la mousse acoustique réduit les réflexions afin de faciliter la calibration
Gateware FPGA
-
Objectifs de conception
- L’objectif principal du gateware est de transmettre de manière fiable et sans perte à l’ordinateur les données brutes collectées
- Effectuer la décimation et le filtrage sur le FPGA réduirait le débit de données, mais les données PDM brutes peuvent elles aussi être transmises via Gigabit Ethernet
- Envoyer les données brutes réduit la complexité du code FPGA et accélère les itérations de développement
- La compilation du code est plus rapide que le placement-routage, et utiliser un débogueur dans du code classique est plus simple que déboguer du gateware
-
Interface PDM
- Le module d’entrée PDM divise l’horloge système de 50 MHz par 16 pour produire une horloge PDM à 3,125 MHz
- Après chaque front d’horloge, il verrouille 96 broches d’entrée et décale 32 bits de données à chaque cycle d’horloge
- À chaque bloc de données de 192 bits, il ajoute un en-tête de 32 bits contenant un entier incrémental
- Le débit d’entrée de l’interface PDM est de 3,125 MHz × 96 broches d’entrée × DDR 2 = 600 Mbit/s
- Le débit de sortie avec en-tête est de 700 Mbit/s, et le taux d’utilisation du chemin de données de sortie 32 bits est d’environ 40 %
-
Mise en paquets et transmission UDP
- Le module de mise en paquets ressemble à un buffer FIFO doté d’une interface d’entrée spécifique
- Comme l’interface Ethernet est plus rapide que la sortie PDM, une FIFO standard pourrait produire des paquets plus petits que souhaité si elle sortait les données dès qu’un seul élément est disponible
- Le module de mise en paquets attend qu’une quantité de données correspondant à un paquet soit en file d’attente avant de commencer l’envoi, garantissant ainsi des paquets de taille fixe
- Chaque paquet contient 48 blocs de sortie PDM de 224 bits
- Un bloc se compose de 192 bits de données et d’un en-tête de 32 bits
- Les données par paquet représentent 1 344 octets
- Un en-tête IPv4 de 20 octets et un en-tête UDP de 8 octets sont ajoutés
- Le débit de paquets est d’environ 65 kpps ; le débit sur le lien est donc de 715 Mbit/s, soit environ 70 % d’utilisation du Gigabit Ethernet
- LiteEth est utilisé pour le streaming UDP
- Il abstrait la complexité de bas niveau, comme l’encapsulation UDP/IP et la table ARP
- Il fournit une interface pratique pour connecter une FIFO à un flux UDP
- Les délais intermittents sont absorbés par la marge de buffer de la FIFO de mise en paquets
-
Utilisation des ressources FPGA
- Le FPGA de la Colorlight i5 est un
LFE5U-25F-6BG381Cet dispose de 25k LUT - La conception est placée-routée avec la chaîne d’outils open source Project Trellis
- Le gateware étant resté simple, l’utilisation des ressources est faible et il reste beaucoup de marge pour ajouter des fonctionnalités
- DP16KD : 16/56, 28 %
- TRELLIS_FF : 1950/24288, 8 %
- TRELLIS_COMB : 3701/24288, 15 %
- L’horloge maximale atteint 73,17 MHz pour un objectif de 50 MHz
- Les avertissements de timing sur l’horloge Ethernet RX sont des faux positifs liés au gray counter de LiteEth
- Le FPGA de la Colorlight i5 est un
Pipeline de traitement logiciel
-
Filtre CIC
- Chaque microphone produit un signal 1 bit à 3,125 MHz, qui doit être réduit à une fréquence d’échantillonnage et une profondeur de bits plus faibles pour les traitements suivants
- Un filtre CIC, peu coûteux en opérations arithmétiques, est utilisé pour cette tâche
- La série Moving Average and CIC Filters de Tom Verbeure a servi de référence
- Le choix final est un filtre CIC à 4 étages avec décimation par 16
- Il abaisse la fréquence d’échantillonnage à 195 kHz
- La sortie est en 32 bits
- Pour accepter les données à 3,125 MHz, un groupe d’échantillons doit être traité en 320 ns
- Une implémentation Rust simple n’était pas assez rapide sur un seul cœur ; la version finale réduit les abstractions pour mieux favoriser l’auto-vectorisation
- Une implémentation avec intrinsics SIMD était bien plus rapide, mais rencontrait des problèmes d’alignement lorsqu’elle était utilisée avec le reste du code
- Résultats des benchmarks :
bench_cic: 574 ns/iter, 41 Mo/sbench_fast_cic: 181 ns/iter, 132 Mo/sbench_simd_cic: 36 ns/iter, 666 Mo/s
-
Calibration
- La calibration du réseau se fait en déplaçant, dans la pièce devant le réseau, un haut-parleur diffusant du bruit blanc
- Une corrélation croisée basée sur la FFT est calculée entre toutes les paires de microphones afin d’obtenir les retards relatifs
- Il y a plus de 18 000 paires de microphones, ce qui représente une charge de calcul importante
- Pour des tailles de fenêtre de 16k à 64k, la FFT étant limitée par la mémoire, l’IFFT et la recherche du pic ont été combinées afin d’éviter d’écrire les résultats en mémoire, obtenant ainsi un gain de vitesse de 15×
- Sur un Ryzen 7950X, ce processus s’exécute en temps réel
- Ensuite, la position de la source sonore à chaque instant et la position de chaque microphone sont optimisées par descente de gradient
- La fonction de perte réduit l’écart entre la corrélation mesurée et la corrélation idéale
- Elle empêche les positions de microphones de trop s’éloigner des positions initiales
- Elle réduit aussi le jerk de la trajectoire de la source sonore
- La vitesse du son étant également incluse comme paramètre d’optimisation pendant la calibration, l’ensemble du processus fonctionne comme un thermomètre excessivement complexe
- Après plusieurs centaines d’itérations, les constantes comme la position de la source, la position des microphones et la vitesse du son convergent vers une solution raisonnable
- Ce problème se vectorise bien sur GPU et converge en quelques secondes
- L’erreur moyenne finale de position est d’environ 1 mm
- Les grandes distorsions systématiques, comme la concavité due au manque de rigidité de la structure, sont également corrigées
- L’écart maximal entre les positions de conception et les positions calibrées est d’environ 5 mm
- La longueur d’onde d’un son à 10 kHz est d’environ 3,4 cm ; sans calibration, des erreurs de phase significatives peuvent donc apparaître dans les hautes fréquences
Beamforming et visualisation
-
Méthode de beamforming
- Le beamforming est le processus qui transforme les entrées brutes des microphones pour produire une réponse directionnelle
- L’approche implémentée est la plus simple : delay-and-sum, ou DAS
- Chaque signal est retardé en fonction de la différence de distance jusqu’à la source sonore, puis additionné
- Dans ce projet, le beamforming est effectué dans le domaine fréquentiel
- Dans le domaine fréquentiel, un retard est implémenté comme un terme de phase linéaire proportionnel au retard nécessaire et une multiplication complexe du signal
- Les retards qui ne sont pas des multiples entiers de la période d’échantillonnage sont ainsi traités naturellement
- Plusieurs sous-réseaux superposés du réseau d’origine sont utilisés selon les plages de fréquence
- Il n’est pas nécessaire de faire du beamforming avec tous les microphones à toutes les fréquences, ce qui réduit le débit de traitement et aide aussi à égaliser le gain de beamforming sur toutes les fréquences
-
Implémentation GPU avec Triton
- Le beamformer est implémenté avec des kernels Triton
- Triton est un DSL Python compilé pour s’exécuter sur des GPU Nvidia
- Lorsqu’il faut faire du beamforming sur des centaines de milliers de points, le parallélisme massif du GPU permet d’obtenir des résultats en temps réel
- En raison d’une limitation actuelle du langage Triton concernant la prise en charge de l’indexation de tableaux en mémoire partagée, les performances ne sont pas tout à fait optimales, mais CUDA C++ n’a pas été choisi
-
Beamforming 3D en champ proche
- Le beamforming 3D en champ proche est effectué sur une grille de voxels de 5 cm
- La grille mesure 64×64×64
- Sur RTX 4090, une fréquence de mise à jour de 12 Hz est atteinte
- Des vitesses plus élevées sont limitées par les surcoûts de synchronisation CPU-GPU peu optimaux pour de petites unités de travail
- La grille de voxels est visualisée avec VisPy, une bibliothèque de visualisation haute performance basée sur OpenGL
- Le rendu de 250 000 voxels translucides ne pose pas de problème à une fréquence d’images interactive par rapport au nombre de polygones des jeux modernes
-
Beamforming 2D en champ lointain
- Pour les sources sonores lointaines, le front d’onde est presque plan ; la distance exacte de la source ne modifie donc pas significativement les signaux du réseau
- Les sources proches présentent une forte courbure du front d’onde, ce qui permet de déterminer leur position 3D
- Le beamforming en champ lointain n’ayant pas de dimension de profondeur, il peut être effectué à plus haute résolution
- Une grille de 512×512 pixels est utilisée, avec là encore une fréquence de mise à jour de 12 Hz
- Le beamforming en champ lointain utilise une approximation consistant à placer les points très loin, plutôt qu’une véritable hypothèse d’onde plane
- En raison des nombreuses réflexions et trajets multiples dans la pièce, la démo de visualisation 2D est influencée par l’environnement acoustique
-
Audio directionnel
- Les deux implémentations précédentes de beamforming calculent l’énergie sonore à chaque position, mais ne créent pas d’audio beamformé en mémoire
- Pour enregistrer de l’audio directionnel, un beamformer delay-and-sum dans le domaine temporel a été implémenté
- Il prend en entrée des coordonnées 3D relatives au centre du réseau
- Il produit des échantillons audio
- Dans ce beamformer, la position est différentiable par rapport à la sortie
- La position de la source audio peut être optimisée avec une fonction de perte différentiable
- Une application possible serait d’utiliser un modèle d’alignement forcé pour la transcription à plusieurs participants afin de trouver la position physique de chaque locuteur
- L’effet est comparé en faisant jouer de l’audio par un haut-parleur devant le réseau, tandis qu’un autre haut-parleur diffuse du bruit blanc à la même distance, mais à environ 45 degrés du centre du réseau
- L’effet du beamforming est montré en comparant l’audio brut d’un seul microphone et l’audio beamformé
Méthode d’enregistrement et limites
- Les données du réseau de microphones étant des paquets UDP, elles peuvent être enregistrées avec des outils comme
tcpdump - Un fichier de capture de paquets peut être lu pour réinjecter les paquets dans un listener
- Les programmes précédents ont été conçus pour fonctionner en temps réel, mais cette méthode fonctionne aussi avec des données enregistrées
- L’inconvénient est que les données brutes sont stockées telles quelles, ce qui rend le débit de sortie très élevé
- Même le bruit de quantification est fidèlement stocké
- Le débit de données est de 87,5 Mo/s
- Une heure d’enregistrement nécessite 315 Go
- Une implémentation plus optimisée pourrait appliquer une compression ou enregistrer après le filtre CIC, à une fréquence d’échantillonnage plus basse
Extensions possibles
- Le projet est en pratique terminé, et aucun travail supplémentaire n’est prévu dans un avenir proche
- Il reste toutefois des pistes d’extension pour ceux qui voudraient le construire eux-mêmes
- Utiliser des algorithmes de beamforming plus avancés comme DAMAS
- Créer une meilleure GUI combinant les fonctions existantes, par exemple voir d’où vient le son puis enregistrer l’audio à cette position
- Combiner beamforming différentiable et modèles neuronaux, par exemple pour des applications comme l’exemple d’alignement forcé
1 commentaires
Avis de Hacker News
Ce qui est amusant, c’est que lors du processus d’étalonnage, la vitesse du son est elle aussi un paramètre optimisé pour obtenir le meilleur modèle du système ; toute la procédure se comporte donc comme un thermomètre absurdement surconçu
Ça me rappelle l’adage d’électronique : « tous les capteurs sont des capteurs de température, et certains mesurent aussi autre chose »
Il s’est avéré qu’on pouvait aussi mesurer la température de cette façon, et extrapoler le graphique pour trouver le zéro absolu
De mémoire, le résultat était à environ 20 K près, ce qui était plutôt excellent pour un projet de garage de lycéen
J’aime particulièrement l’exemple où une centrale inertielle (IMU) suffisamment précise peut même fournir une mesure assez exacte de la longitude grâce à l’effet de Coriolis
https://youtu.be/zsA3X40nz9w?si=oGg2wdUlLXSDxpsN
J’ai travaillé autrefois sur un projet de multilatération de chauves-souris avec un réseau de 4 microphones disposés au sol en grand Y
En utilisant les différences de temps d’arrivée sur les quatre micros, on pouvait localiser chaque chauve-souris passée au-dessus du réseau et même identifier son espèce
C’était utilisé dans une étude visant à évaluer l’impact environnemental de l’installation d’éoliennes, et c’était assez amusant
C’était un dispositif conçu pour suivre et tuer les moustiques avec de courtes impulsions laser
Comme il fallait déterminer précisément la position des moustiques dans l’espace, il pouvait en plus distinguer les cibles selon le sexe et l’espèce en détectant les différences de fréquence de battement des ailes
Évidemment, faute de compétences suffisantes en matériel et en logiciel, j’avais implémenté l’algorithme TDOA sous sa forme la plus naïve, et ma méthode d’estimation des décalages temporels par corrélation croisée était très inefficace
Mais j’ai beaucoup appris, et cela a fini par me mener à un doctorat sur les systèmes SAR
À mon sens, le SAR ressemble en fait à un beamformer qui utilise le mouvement de la plateforme au lieu d’un réseau
J’ai entendu dire que les poumons des chauves-souris sont si sensibles que, si elles traversent la différence de pression créée par de grandes turbines, leurs capillaires éclatent pratiquement
J’aimerais bien avoir des ressources utiles pour savoir par où commencer
Ils ont placé un réseau de microphones sous un scorpion et montré comment une chauve-souris déplaçait son faisceau ultrasonore pour scanner le scorpion
Le résultat était vraiment stupéfiant [0]
[0]: https://www.youtube.com/watch?v=57ScSPWhGqU
Je me demande pourquoi ils ont utilisé du PDM plutôt que des micros I2S en TDM dans le réseau
Les ICS-52000 sont relativement bon marché, autour de 2 dollars pièce par 100, il existe des cartes breakout avec 4 micros, et si je comprends bien on peut les chaîner jusqu’à 8 ou 16
https://www.cdiweb.com/datasheets/notwired/ds-nw-aud-ics5200...
Avec un Jetson ou du matériel équipé d’un DSP/GPU compatible I2S, on peut chaîner 16 micros par port I2S, ce qui semble beaucoup plus facile à assembler et à programmer qu’une configuration FPGA
Avec 192 microphones, la différence entre 2 dollars et 0,5 dollar pièce devient importante
Même avec des chaînes de 16, il est difficile de trouver des appareils ayant assez d’interfaces I2S, et la plupart n’en ont pas le nombre nécessaire
Le FPGA et le matériel sur mesure faisaient aussi partie du plaisir
Pour entendre le sifflement d’une fuite de gaz ou la décharge corona d’un arc électrique, des fréquences plus élevées sont utiles
L’Orin a 6 ports I2S en interne, donc 16*6 = 96 micros semblent possibles, ce qui est déjà un très bon nombre
En pratique toutefois, seuls 3 semblent être exposés hors de la carte, et sur des connecteurs de cartes de développement différents [1]
Dans la conception, le diable est toujours dans les détails ; si l’on a besoin de plus de 96 micros, un FPGA peut être plus simple à configurer
Les composants que j’avais notés étaient : ICS-52000 3,50 $ 20 kHz, ICS-41350 1,05 $ 40 kHz, SPH0641LU4H-1 1,45 $ 80 kHz+
[1] https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide...
Il y a à peu près deux raisons pour lesquelles I2S n’est pas forcément le meilleur choix
I2S nécessite 3 broches au lieu des 2 du PDM
Cela dit, si l’on peut chaîner les micros comme dans la fiche technique fournie, c’est assez élégant, et même si ce n’est pas de l’I2S standard, cet argument disparaît
Le PDM permet d’atteindre des fréquences d’échantillonnage bien plus élevées, ce qui donne davantage de souplesse pour choisir les retards dans l’opération de délai-somme
Par exemple, avec une horloge PDM à 2 MHz, on peut en théorie appliquer des retards avec une précision de 0,5 µs
En pratique, on utiliserait sans doute une précision plus faible, mais une horloge I2S monte généralement au maximum autour de 192 kHz
Les micros PDM sont aussi moins chers
Si vous cherchez caméra acoustique sur YouTube, on trouve des démonstrations assez impressionnantes de leurs performances.
L’une des entreprises que j’ai suivies pendant un temps est celle-ci, et de grands acteurs comme FLIR semblent aussi s’y mettre : https://www.youtube.com/@gfaitechgmbh
Un cas d’usage intéressant mais inquiétant consiste à enregistrer des lieux publics, puis à « zoomer » plus tard sur une conversation entre certaines personnes.
Après avoir discuté avec un ami qui porte un implant cochléaire, je me dis qu’avec un traitement du signal approprié, cela pourrait beaucoup aider à entendre.
J’aimerais redevenir doctorant et tenter des applications médicales en combinant cela avec un réseau de haut-parleurs à ultrasons.
Ce serait essentiellement une sorte de HIFU (ultrasons focalisés de haute intensité) surpuissant avec retour en temps réel.
https://en.wikipedia.org/wiki/Focused_ultrasound
Les fréquences sont beaucoup plus élevées : il faut penser à 1–10 MHz plutôt qu’à 40 kHz, et l’électronique courante devient en pratique inutilisable.
Si vous voulez en parler, vous pouvez me contacter via l’e-mail de mon profil.
J’aimerais que cette technologie arrive dans plusieurs appareils mobiles sous une forme bien intégrée.
À mon avis, l’une des raisons pour lesquelles des choses comme les assistants ou les traducteurs universels butent encore, c’est la mauvaise qualité audio.
Réduire le bruit et détecter la direction aurait un énorme potentiel.
Par exemple, j’aimerais traduire en temps réel une conversation de groupe autour d’une table.
Pour commencer, ce serait bien que les téléphones et les écouteurs puissent combiner leurs microphones respectifs pour ce genre d’usage.
Et au-delà, pourquoi ne pas imaginer que tous les téléphones à proximité coopèrent pour fournir un son directionnel de haute qualité ?
À condition, bien sûr, de pouvoir résoudre les questions de vie privée.
Cela pourrait changer la vie.
Live Transcribe sur Android est déjà très bon aujourd’hui, mais il n’essaie même pas de distinguer quel mot vient de quel locuteur.
Cela montre l’énorme traitement que fait notre cerveau pour nous permettre de comprendre ce que quelqu’un nous dit dans une pièce bruyante.
https://en.wikipedia.org/wiki/Cocktail_party_effect?wprov=sf...
En gros, à environ 10 fois la fréquence acoustique la plus élevée que l’on veut capter, soit à quelques dizaines de millièmes de seconde près.
De plus, si les positions des micros du réseau ne forment pas une ligne, un cercle ou une autre géométrie simple, le code — autrement dit les maths — permettant d’extraire un signal amélioré devient très difficile.
Boeing a fabriqué une version sphérique de ce dispositif et l’a utilisée sur le prototype du 787 pour identifier des candidats pour l’insonorisation.
Dans un environnement bruyant comme un avion, des illusions auditives peuvent donner l’impression que le son vient d’un autre endroit que sa position réelle.
Quand on dispose d’un budget de poids fixé pour l’insonorisation, il est important de viser correctement le point 80/20.
Si vous voulez vous amuser avec un Zynq 7010, la carte EBAZ4205 vaut le coup d’œil.
On peut l’acheter 20 à 30 euros sur AliExpress ; c’était autrefois un contrôleur de minage Bitcoin.
Des gens l’ont entièrement rétro-ingénierée et publiée sur GitHub, et il existe aussi des cartes adaptatrices pour accéder aux GPIO.
Pour démarrer avec quelque chose de moins complexe, il existe aussi des FPGA chinois comme les cartes “Sipeed” à base de FPGA GoWin.
Elles sont assez correctes et l’IDE est gratuit.
En faisant des recherches hier soir, je suis tombé justement sur cette page.
Je me demande si quelqu’un sait comment installer des micros dans une pièce pour n’enregistrer que l’audio d’une zone précise.
Mon usage serait d’enregistrer la zone du canapé pour regarder la télé avec des amis en ligne, tout en supprimant de l’audio les voix de mes amis et le bruit de l’émission.
Il me semble qu’en construisant un réseau de microphones et en utilisant du beam steering, ce serait possible, mais je n’ai pas trouvé beaucoup d’exemples de code fonctionnant en temps réel sur GitHub.
https://obsproject.com/
https://voicemeeter.com/
Ce qu’il vous faut, ce n’est pas un micro ni une technique de beamforming, mais de l’annulation d’écho, comme celle qu’utilisent tous les logiciels de visioconférence.
Il suffit d’utiliser l’audio de l’émission et celui des amis comme entrées et d’appliquer l’annulation d’écho à chacun.
Il suffit de mesurer la distance entre un point — le canapé — et chaque micro, de retarder les signaux dans le domaine temporel du temps que met le son à aller du canapé jusqu’aux micros, puis de les additionner.
L’idée de base est de faire comme si les micros avaient reçu le signal du canapé au même instant, même s’ils sont à des distances différentes.
Pour que cette méthode soit efficace, il faut que les différences de distance entre les micros soient suffisantes.