Projet personnel · avril 2025
SignaVox
Application de traitement du signal audio : acquisition temps réel, analyse spectrale FFT, filtrage fréquentiel et détection d'activité vocale.
- Problème
- L'énoncé interdisait tout filtre classique — Butterworth, Hanning, Hamming — et imposait un unique masque fréquentiel rectangulaire. Une contrainte qui force à passer par le domaine spectral.
- Résultat
- Chaîne complète acquisition → VAD → FFT → masque rectangulaire → reconstruction IFFT, conteneurisée, avec segmentation automatique et fusion des silences courts.
- Rôle
- Développeur Full-Stack & Ingénieur Signal
Quel problème SignaVox résout-il ?
La transformée de Fourier s'enseigne comme une formule. Elle se comprend quand on voit le spectre de sa propre voix se déformer en direct quand on siffle.
Mais la vraie contrainte du projet était ailleurs, et elle était sévère : le filtrage devait être réalisé exclusivement par un masque fréquentiel rectangulaire. Butterworth, Hanning, Hamming — tout filtre classique était explicitement exclu.
Pourquoi cette contrainte change tout ?
Interdire les filtres usuels interdit aussi le raccourci. Sans masque spectral, on filtre dans le domaine temporel par convolution, sans jamais avoir à comprendre ce qui se passe en fréquence. La contrainte force le chemin long, et c'est exactement son intérêt :
X = FFT(x) # passage dans le domaine fréquentiel
X_filtré = X ⊙ masque # produit de Hadamard, terme à terme
x_filtré = IFFT(X_filtré) # retour dans le domaine temporel
Le masque vaut 1 dans la bande conservée et 0 ailleurs. Passe-bas, passe-haut et passe-bande ne sont que trois écritures du même masque.
C'est la reconstruction par IFFT qui ferme la boucle et rend le filtre audible, pas seulement visible sur un graphe. Sans elle, on ne fait que dessiner des spectres.
Comment fonctionne la chaîne de traitement ?
Acquisition du flux micro via sounddevice, conversion de format par pydub, chargement en float64 — la double précision n'est pas du luxe quand on enchaîne FFT et IFFT.
Segmentation par détection d'activité vocale. Un seuil en décibels sous la crête repère les silences, puis un second paramètre fusionne les silences trop courts : sans cette fusion, une respiration au milieu d'une phrase la couperait en deux.
Analyse spectrale par scipy.fft, avec les fréquences calculées par fftfreq et le rendu par matplotlib.
Filtrage puis reconstruction, selon le chemin imposé ci-dessus.
L'ensemble tourne en conteneur, avec une base pour conserver les segments produits.
Qu'est-ce que SignaVox m'a appris ?
Une contrainte d'énoncé bien posée vaut mieux qu'une liberté totale. Interdire les filtres tout faits m'a obligé à manipuler le spectre à la main — et c'est là, pas dans le cours, que le compromis temps/fréquence devient une intuition plutôt qu'une formule.
Un projet du même calibre ?
Basé à Thiès, disponible à dakar & télétravail. Je réponds sous 48 h.
En discuter