Auteur Sujet: AcousticDSP - RoomCorrection  (Lu 1997 fois)

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
AcousticDSP - RoomCorrection
« le: juin 13, 2014, 21:40:52 pm »
Version fonctionnant mais nécessitant des expérimentations/connaissances en fonction du système à corriger (tout n'est pas automatisé...) : https://drive.google.com/file/d/0B_qpfrOOECB0TE1mN3V0NVN5b0E/view?usp=sharing

Pour utiliser le programme, décompressez le quelque part, puis ouvrez Octave et rendez vous dans le dossier en question en tapant cd CheminVersLeDossier

Pour faire rapide et simple j'ai crée un fichier "test_generate_one.m" qui est une fonction. C'est ce fichier qu'il faut appeller pour générer une correction. Par exemple pour générer une correction sur un haut parleur vous pouvez taper test_generate_one("grave"); puis entrée

Pour que la génération de correction se fasse il faut :

- mesurer au préalable la réponse de votre haut parleur en champ proche (20-40cm) en s'assurant que la mesure est bonne (bon SNR, pas de distorsion importante dû a un préampli défectueux ou une mauvaise connection, pas de clipping, etc.) et l'enregistrer en fichier .txt en format ascii SANS commentaires (que les données brutes) dans le dossier ./data/impulses/grave.txt
- générer un fichier de courbe cible de 16384 samples (c'est l'impulsion que vous voulez que reproduise le HP une fois corrigée, je préconise 16384 samples en longueur car c'est dans ces conditions que j'utilisais mon programme et je n'ai pas pris le temps de tester pour des tailles différentes...) et l'enregistrer comme pour l'impulsion de mesure (en .txt, ascii, avec uniquement les données brutes...) dans ./data/targets/target_grave.txt

Si ces conditions sont remplis, vous pouvez donc exécuter la commande test_generate_one("grave.txt") et le script devrait générer la correction et de multiples fichiers seront sauvegardés dans ./output/ (entre autres toutes les étapes de la correction).

Votre fichier de correction aura pour nom "correction_grave.txt" (des données brutes en format ascii avec une précision de 64 bits, utilisable pour Brutefir) et "correction_grave.wav" (un fichier en format 32bits 48khz que vous pourrez utiliser dans vstconvolver : modifiez le fichier generate_correction.m si vous souhaitez utilisez un sampling rate différent ou une précision différente...)

Une fois cette opération réalisée pour toutes les voies de mon système, j'aligne les voies 1 par 1 (droite, puis gauche), puis les canaux G/D avec toutes les voies simultanément, puis le sub.

Je peauffine ensuite le résultat final avec un égaliseur IIR pour compenser les erreurs ajoutées par la pièce, les diffractions de l'enceinte etc.

Et je profite d'une écoute bien réglée  8)

PS:
- lien vers le programme de fenêtrage (windowing) : http://smf.petoindominique.fr/index.php?topic=2659.msg49389#msg49389
- lien vers le programme de génération de filtres (C++) : http://smf.petoindominique.fr/index.php?topic=2608.msg48769#msg48769
- lien vers le programme de génération de filtres (octave) : http://smf.petoindominique.fr/index.php?topic=2511.msg47716#msg47716
« Modifié: novembre 26, 2014, 16:06:48 pm par LeChacal619 »

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : AcousticDSP - RoomCorrection
« Réponse #1 le: août 07, 2014, 17:46:24 pm »
La correction ne fonctionne pas comme désirée sur la version actuelle, je suis en train de trouver une solution pour l'instant sur Octave.

Le résultat une fois corrigé est une réponse en amplitude et en phase parfaitement linéaire et suivant presque parfaitement la courbe cible (même en 1/12 octave), mais en mesure brute il y a de minuscules accidents en bande passante mais assez grand en amplitude (10 dB environ). Le problème est que la réponse spectrale est donc bonne, mais pas le spectrogramme/waterfall (en fait il y a une résonance énorme sur le filtre de correction qui est parfaitement audible et qui rend la correction complètement obsolète).

J'ai essayé divers tentatives, et il semblerait que je sois parvenu a un "compromis", en ne corrigeant que la partie gauche de la mesure : je tronque la mesure juste au niveau du pic en amplitude dans le domaine temporel, et je n'utilise que la partie gauche du filtre cible pour appliquer la correction et obtenir la mesure réelle approchée. Ensuite je cherche une correction en divisant le filtre cible (entier cette fois) par la mesure approchée tronquée, et j'obtiens un filtre de correction qui lui, ne tient pas compte des résonances ni du déphasage que cela engendre. La réponse n'est cette fois plus bonne en amplitude/phase, mais j'obtiens un résultat que je peauffine avec des filtres IIR cette fois, et ça me permet d'obtenir une meilleur réponse juste avant le pic (l'énergie avant impulsion est mieux "dispersée" temporellement). Au niveau de la réponse globale après correction + égalisation IIR j'obtiens une réponse qui me semble correcte en spectrogramme/waterfall (les résonances visibles sont dûes au HP + pièce) ainsi qu'à l'écoute.

Je ne posterai qu'une version C++ de la nouvelle correction que lorsque j'aurai expérimenté un peu plus et obtenu un résultat correct.

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : AcousticDSP - RoomCorrection
« Réponse #2 le: août 26, 2014, 17:42:46 pm »
Yes je crois avoir finalement réussi à générer une bonne correction :)

Je viens de faire un essaie avec le côté gauche seul, le son semble net, j'entend pas de réverbération dérangeante ou quelconque artefact à l'écoute du logsweep de mesure ni à l'écoute de musique, enfin si les basses sont pas très nettes, mais je pense que c'est dû au fait que j'ai pas mit le sub en marche (c'est normal je teste à l'arrache... :p).

Par contre j'ai ressorti le programme Octave du coup qui m'a permit de mieux prototyper. Je vais confirmer la bonne correction ce soir (si j'arrive à obtenir des vis pour remplacer les 2 de mon bornier d'ampli qui sont foirées et faire une correction/réglage total avec seule correction en champ proche sans fenêtrage -40 cm environ-).

Je sortirai un tutoriel pour l'utilisation du prog Octave (pour l'installation d'Octave et pour la génération des filtres avec le programme vu que je peux record des vidéos desktop avec le nouveau pilote nvidia !).

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : AcousticDSP - RoomCorrection
« Réponse #3 le: août 29, 2014, 15:30:37 pm »
La correction semble fonctionner correctement à l'écoute j'ai un très bon résultat même avec un haut parleur large-bande monté en clos de mauvaise facture sur un ampli défectueux  :ptdr:

Le haut parleur coaxial : http://www.amazon.fr/Clarion-SRE6932R-Hauts-Parleurs-Auto/dp/B008OEBPNU

Voici les mesures REW du haut parleur large bande à environ 40cm micro EMM6 incliné à 30-45° environ, avant et après correction : https://drive.google.com/file/d/0B_qpfrOOECB0dWtzVGwwU3VRYVU/edit?usp=sharing

Je vous laisse analyser que la courbe amplitude/phase est quasi parfaitement linéaire, et le spectrogramme indique une bonne distribution de l'énergie, bien alignée sur le pic, avec une amplitude linéaire sur l'ensemble du spectre, et une réverbération assez faible (environ -35dB après seulement 150ms, quasiment plus rien après 300ms...).

Bon le résultat est pas parfait on entend toujours une légère distorsion dans la lecture du logsweep et des accidents, mais vu la tête et surtout le rendu à l'écoute avant correction, le gain reste tout de même énorme ! Avec du matériel de bonne qualité j'imagine que le résultat peut être encore plus bluffant.

C'est dommage que REW ne présente pas de mesure de distorsion tout de même  :s
« Modifié: août 29, 2014, 15:45:41 pm par LeChacal619 »

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : AcousticDSP - RoomCorrection
« Réponse #4 le: novembre 26, 2014, 16:08:38 pm »
J'ai modifié un peu mon programme pour essayer de le rendre un peu plus simple et plus pratique d'utilisation. J'ai aussi ajouté un paramètre pour que les correction.txt soient sauvegardées en précision 64 bits (contre 16 bits auparavant).