Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement du signal Discussion :

Algorithme de réduction de bruit


Sujet :

Traitement du signal

  1. #1
    Candidat au Club
    Algorithme de réduction de bruit
    Bonjour,

    J'ai enregistré un signal audio sous audacity, j'ai récupéré ce signal sous python mais j'aimerais réduire le bruit de ce signal sous python.
    J'aimerais fabriquer un filtre numérique mais je ne s'est pas trop comment faire, j'aimerais avoir des idées d'algorithme pour réduire le bruit d'un signal audio sous python si possible.
    Merci par avance.

  2. #2
    Expert éminent sénior
    Salut,

    Le forum algorithmes me semble plus approprié pour trouver des idées côté algo. à appliquer.
    Comment le mettre en œuvre en Python sera éventuellement pour plus tard.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Bonjour,

    J'y connais rien mais si tu fais une simple moyenne sur quel que points ca ne baisserait pas déjà considérablement le bruit ?

  4. #4
    Candidat au Club
    Je ne pense pas que faire une moyenne permettrait de réduire le bruit puisque cela fausserait mon signal sonore de départ, merci quand même pour l'idée.

  5. #5
    Modérateur

    Bonjour,

    Tu peux commencer par étudier la transformée de fourrier de ton signal et y appliquer différents filtres (passe-haut, passe-bas, coupe-bande, passe-bande) selon "l'emplacement" fréquentiel de ton bruit.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  6. #6
    Membre actif
    Et si tu passes le signal en fréquentielle avec une FFT, et ensuite tu appliques un filtre passe bas ou haut selon les fréquences à éliminer.

  7. #7
    Candidat au Club
    J'ai déjà étudié la transformée de fourrier de mon signal mais je ne sais pas comment fabriquer le filtre.
    Supposons que le bruit se situe au début du signal, il faut donc que j'applique un filtre passe-haut, mais comment le fabriquer ?
    Merci de votre aide.

  8. #8
    Modérateur

    Malheureusement, je n'ai aucune compétence en python. Tu peux commencer de façon très brutale en forçant tes données fréquentielles à zéro dans la zone concernée par le bruit.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  9. #9
    Candidat au Club
    Merci,

    Je pense que c'est une bonne idée j'ai essayé de faire un filtre passe bande en mettant certaine fréquence à zéro cela à modifier mon signal, du coup j'ai supprimé le bruit mais aussi mon signal dans une zone de fréquence. J'aimerai essayé de conserver le signal. Peut-on jouer sur les amplitudes sans modifier les fréquences, par exemple je pourrai enregistrer un signal audio avec du bruit puis enregistrer le signal audio du bruit et soustraire les amplitudes? mais en faisant cela, la nature de mon signal sera sans doute déformée.
    Si vous avez d'autres idées cela m'intéresse.

    Merci encore.

  10. #10
    Modérateur

    Etant donné que ton bruit est probablement pseudo-aléatoire, je ne pense pas que soustraire les amplitudes est une solution pertinente. Cependant il y a de l'idée dans ce que tu écris. Tu devrais comparer le spectre de ton bruit et celui de ton signal afin de déterminer si le bruit apparaît à une fréquence spécifique que tu pourrais filtrer facilement. Si tu échantillonnes sur une longue période, tu devrais pouvoir avoir une bonne estimation fréquentielle de ton bruit.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  11. #11
    Candidat au Club
    débruitage
    Citation Envoyé par cellia Voir le message
    J'ai enregistré un signal audio sous audacity, j'ai récupéré ce signal sous python mais j'aimerais réduire le bruit de ce signal sous python.
    J'aimerais fabriquer un filtre numérique mais je ne s'est pas trop comment faire, j'aimerais avoir des idées d'algorithme pour réduire le bruit d'un signal audio sous python si possible.
    Merci par avance.

    J'ai travaillé sur ça et ai publié un alg du nom de urQRd..
    Le code est en Python.. il faut découper en fenêtre glissante et ça devrait marcher..

  12. #12
    Membre éclairé
    Filtrage numérique
    Bonjour,

    C'est un problème de filtrage numérique donc plutôt de la classe des des algorithmes de traitement du signal. Pour les filtres, il est assez rarement nécessaire de faire des FFT qui, outre le temps, posent des problèmes de type et mouvement du fenêtrage.

    En général, mais je ne suis pas un spécialiste, on utilise la transformée en Z d'un filtre pour synthétiser le filtre numérique correspondant. Les filtres numériques sont de deux sortes : à réponse impulsionnelle finie (qui ne dépendent que d'un nombre fini d'échantillons) ou infinie.

    Par exemple, un filtre très simple qui correspond à un filtre RC peut s'écrire S = (1-a).E + a.S avec a entre 0 et 1. Il provient d'une transformée en Z : S = (1-a).E/(1 -Z-1).
    Z-1 peut être vu comme un opérateur qui retourne l'échantillon précédent (Z-2) retournerait l'avant dernier échantillon etc.). Cet exemple est un filtre de réponse infini car S dépend de E et S-1 qui dépend de E-1 et S-2 qui dépend de... Ad nauseam.

    La proposition faite d'une moyenne locale est un filtre passe-bas. Bien sûr il altère le signal puisque c'est un filtre qui supprime les hautes fréquences. Son problème est sa pente de coupure qui est assez faible. C'est à dire que pour fortement atténuer une fréquence haute, il faudra atténuer sensiblement des fréquences bien plus basses. Pour éviter cela, il faut passer à des filtres d'ordre supérieur donc plus complexes.

    Des filtres un peu sophistiqués demandent a minima d'étudier la transformée en Z liée directement à la transformée de Laplace.

    Je ne crois pas qu'il existe de logiciel qui permette de définir - éventuellement graphiquement - une courbe de réponse et qui sortirait l'approximation des coefficients en Z du filtre correspondant. Je serais preneur car c'est un peu laborieux à faire à la main.

    Remarque : il est bizarre que le bruit à éliminer soit en bas du spectre. Un signal audio a généralement une décroissance fréquentielle en 1/f donc sa sensibilité au bruit est plutôt dans le haut du spectre (les fréquences plus hautes étant plus faibles).

    Bon courage.
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  13. #13
    Modérateur

    Salut à tous,
    Citation Envoyé par Guesset Voir le message
    C'est un problème de filtrage numérique donc plutôt de la classe des des algorithmes de traitement du signal. Pour les filtres, il est assez rarement nécessaire de faire des FFT qui, outre le temps, posent des problèmes de type et mouvement du fenêtrage.
    Tout à fait, il va y avoir des artefacts dans le spectre résultant à cause du bord de la fenêtre et il faut le prendre en compte. Le fenêtrage sert a faire une analyse par bloc afin de simuler une période car rien ne dit que le véritable signal et périodique. Il y a plein de type de fenêtre (Hanning, Hamming, Kaiser-Bessel, ...) qui adoucissent plus ou moins les bords de la fenêtre.

    Ce pendant, une FFT de ton signal te permettra de savoir où il se situe dans le spectre et tu connaîtras sa largeur de bande (bande passante du signal).

    Une fois que tu sais où est ton signal dans le spectre et que tu connais sa largeur (bande passante du signal), il ne te reste plus qu'a créer un filtre passe bande :
    - centrer sur la fréquence de ton signal
    - avec une bande passante pouvant contenir la bande passante de ton signal
    - avec des fréquences de coupure haute et basse égales aux fréquences et basse de ton signal

    Pour diminuer le bruit, donc pour améliorer le rapport signal/bruit, on limite la bande utile car le bruit (bruit rose en basse fréquence et bruit blanc en haute fréquence) est une densité de puissance. Petite bande utile = petite densité de puissance de bruit, grande bande utile = grande densité de bruit. Le tout étant d'arriver a trouver le filtre qui peut contenir que le signal sans le décapiter au passage.

    Citation Envoyé par Guesset Voir le message
    Je ne crois pas qu'il existe de logiciel qui permette de définir - éventuellement graphiquement - une courbe de réponse et qui sortirait l'approximation des coefficients en Z du filtre correspondant. Je serais preneur car c'est un peu laborieux à faire à la main.
    Peut être ici ?
    http://t-filter.engineerjs.com/
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  14. #14
    Membre éclairé
    Outil de conception de filtre
    Bonjour,

    J'ai été voir le lien proposé par Vincent PETIT. C'est un générateur de filtres en ligne. Il est facile à prendre en main, bien présenté, et génère du code C/C++. Il est dommage qu'il ne fasse que les FIR. Mais je ne suis jamais content

    Merci Vincent.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

###raw>template_hook.ano_emploi###