Je ne sais pas si cela va intéresser grand monde, mais j'avais ce projet dans mes cartons depuis bien longtemps et je me suis enfin décidé à en sortir une 1ère version :
cudaFIR : un plugin ALSA de filtrage FIR accéléré par GPU (NVIDIA).
https://github.com/TLeconte/cudaFIR
Le titre est suffisamment abscons pour nécessiter un petit lexique :
- ALSA : le sous systeme de gestion du son en Linux.
- plugin : un morceau de code que l'on peut insérer, par simple configuration, dans toute chaine de traitement ALSA.
- filtrage FIR : je ne vais pas expliquer dans cette section du forum, vous savez ce que c'est.
- accéléré par GPU Nvidia : Les processeurs des cartes graphique (GPU) sont bien adaptés à l’exécution de calculs simples mais répétitifs. cudaFIR, utilise l'environnement de programmation cuda (d'ou le nom
) pour effectuer le calcul de convolution par le GPU.
En gros, cudaFIR fait la même chose que BruteFIR, c'est à dire la convolution du signal via FFT et partitionnement de la réponse impulsionnelle du filtre (pour réduire la latence) , sauf que :
- C'est moi qu'il l'ai fait
- Il est plus facile à mettre en œuvre (pas d'utilisation de loopback) et il s'adapte facilement aux changements de fréquence d'échantillonnage.
- Le calcul via le GPU permet le filtrage FIR avec des grandes longueurs d'impulsion, même sur une machine peu puissante, à partir du moment où elle a un GPU Nvidia (pas trop vieux).
Pour l'instant c'est assez expérimental, même si je l'utilise quotidiennement depuis quelques jours sans problème.
Je ne l'ai testé que sur une plateforme Jetson TX1 et ce n'est pas vraiment plug&play : il faut le compiler pour sa plateforme et pour cela il faut avoir le toolkit cuda de Nvidia d'installé. Bref, c'est quand même un peu réservé à ceux qui connaissent le domaine, même si c'est pas non plus trop compliqué.
Je ne l'utilise qu'en correction globale, mais il pourrait, sans doute, directement servir pour du filtrage actif (j'ai pas essayé , il peut toujours y avoir des bugs et je n'ai pas de carte son multicanaux).