Réduction du bruit de l'audio très bruyant

8

J'essaie d'écrire un algorithme qui segmenterait automatiquement un morceau audio avec des enregistrements d'appels d'oiseaux. Mes données d'entrée sont des fichiers d'onde d'une minute et sur la sortie, j'aimerais recevoir des appels séparés pour une analyse plus approfondie. Le problème est que le rapport signal / bruit est assez terrible en raison des conditions environnementales et de la mauvaise qualité d'un microphone (mono, échantillonnage 8 kHz).

Je serais très reconnaissant de tout conseil sur la façon de poursuivre la réduction du bruit.

Voici un exemple de mon entrée, un enregistrement audio d'une minute au format wave: http://goo.gl/16fG8P

Voici à quoi ressemble le signal:

Mon signal d'entrée (8 kHz).  Les zones marquées indiquent des cris d'oiseaux

Le filtrage passe-bande, dans lequel je ne garde rien entre 1500 et 2500 Hz, améliore la situation, mais il est encore loin des attentes. Dans ce spectre, il y a encore beaucoup de bruit.

Spectrogramme

J'ai également tracé l'énergie moyenne à long terme (sur des intervalles de 32 échantillons) et supprimé certains clics. Voici le résultat:

Énergie moyenne à long terme

Avec tout le bruit restant, je dois définir un seuil très bas pour l'algorithme de détection de début afin de sélectionner les 10 dernières secondes d'appels d'oiseaux. Le problème est que si je le modifie de cette manière, lors de l'enregistrement suivant, je peux obtenir une charge de faux positifs.

Le filtre moyen mobile aide un peu avec le bruit du vent. D'autres idées? Je pensais à "Soustraction spectrale", mais ici, il me semble que j'ai un problème de poule et d'oeuf - pour trouver une zone de bruit uniquement, je dois segmenter l'audio et segmenter l'audio dont j'ai besoin pour supprimer le bruit. Connaissez-vous des bibliothèques qui ont cet algorithme ou certaines implémentations en pseudo-code? Methinks Audacity utilise une telle méthode pour éliminer le bruit. Il est très efficace, mais il appartient à l'utilisateur de marquer la zone de bruit uniquement.

J'écris en Python et c'est un projet gratuit et open-source.

Merci d'avoir lu!

Lukasz Tracewski
la source
Bienvenue sur DSP.SE. C'est une question géniale! J'espère que vous pourrez obtenir de bonnes pistes ici.
Phonon
@Lukasz Tracewski Respected monsieur: Même s'il est trop tard mais que je travaille sur le même projet, j'ai donc un problème comme la façon dont je peux faire un spectrogramme à partir d'un fichier wav.Vous pouvez économiser mon temps en essayant de résoudre ce problème au cours des 2 derniers mois. Merci à l'avance.Tout hel serait très apprécié
Mubeen Khan
@MubeenKhan Vous voulez dire de l'aide pour produire un spectrogramme à partir d'un fichier audio? Il existe des dizaines d'outils et de bibliothèques adaptés à cette fin, avez-vous besoin d'une recommandation? Ou posez-vous des questions sur la réduction du bruit?
Lukasz Tracewski

Réponses:

4

À la fin, ce qui s'est avéré être la meilleure solution était la détection de début basée sur la haute fréquence ou le contenu énergétique. Avant de pouvoir fonctionner, j'ai dû utiliser un filtre passe-haut pour couper le premier 1 kHz, car il contenait trop de bruit.

Une fois que j'avais une zone de bruit seulement, je pouvais utiliser son profil pour réduire le bruit du reste de l'échantillon.

Aubio était une bibliothèque que j'ai trouvée particulièrement utile . Il a un bon ensemble d'exemples et fournit un grand nombre d'algorithmes à choisir pour la détection de début.

Lukasz Tracewski
la source
0

Je ne connais pas beaucoup la réduction du bruit audio mais après une soustraction rapide et sale du bruit de la bande passante filtrée (environ 1500-3000 hz), j'obtiens ceci:

https://dl.dropboxusercontent.com/u/98395391/signal_denoised.wav

Je pense que ça sonne un peu mieux que les signaux filtrés et originaux.

Avec un simple filtre de Wiener, j'obtiens des résultats très similaires.

Yozek
la source
À moins que je ne vous ai mal compris, il semble que vous vous référiez à quelque chose que j'ai déjà fait dans le deuxième paragraphe de ma question (juste en dessous du premier graphique). Avec la méthode décrite dans ma réponse, j'ai pu trouver tous les ensembles et ensuite appliquer la soustraction spectrale, ce qui donne des résultats encore meilleurs. Malheureusement, il produit également des «sons musicaux», qui sont maintenant ma principale préoccupation. Merci quand même!
Lukasz Tracewski