09-24-2018, 01:49 AM
(Modification du message : 09-24-2018, 06:26 PM par LeChacal619.)
Bonjour,
Je désire m'attaquer à la courbe cible SPL à viser dans le cas d'une écoute stéréo classique, avec deux hauts parleurs situés en face. En effet, voici une schématisation des signaux transmis d'une unique source frontale vers nos oreilles :
Et voici les signaux transmis par deux sources positionnées en configuration stéréo classique vers nos oreilles :
L'oreille gauche (et identiquement pour l'oreille droite) perçoit le signal des deux sources, qui atteint notre tête avec deux angles distincts et avec un certain décalage temporel. La différence d'angle implique, à cause de la fonction de transfert liée à notre tête (HRTF = Head Related Transfer Function), une réponse d'impulsion distincte et donc une tonalité différente pour les deux sources. A cela s'ajoute un décalage temporel car la distance des deux sources à la même oreille est légèrement distincte. Je cherche donc à corriger le signal reçu dans ce contexte afin de se rapprocher du signal que percevrait l'oreille pour une source située en face, comme c'est généralement le cas dans un concert...
Pour ma part, l'angle est d'environ +/-24° d'azimut pour chaque enceinte : les enceintes sont écartées entre elles de 2.3 mètres (ce qui correspond sur le schéma à W=1.15 m.) et le milieu des enceintes se trouve à 2.6 mètres du point d'écoute (ce qui correspond sur le schéma à L=2.6 m.).
Dans ma démarche, j'ai tout d'abord télécharger une API permettant de lire les fichiers au format .sofa sous matlab : https://github.com/TWOEARS/SOFA
Après ajout du dossier "API_MO" dans le path de Matlab, je me suis procuré un fichier .sofa de mesures HRTF ici : https://github.com/sfstoolbox/data/tree/master/HRTFs
Ensuite, j'ai ouvert ce fichier sous Matlab est j'ai exporté 6 réponses d'impulsion en format .wav :
J'ai ensuite calculé le délai pour une tête normale. En m'aidant de ce document https://courses.washington.edu/psy333/le...9_Day2.pdf page 8, j'ai déduis que pour une tête normale, la distance entre les deux oreilles était de l'ordre de 20cm, car 0.2/343 = 5.8E-4 secondes soit 0.58 ms, ce qui correspond à ce qui est donné dans l'article pour une source de côté.
J'ai ensuite calculé pour ma configuration, avec cette largeur de tête, le délai des différents signaux. Puisque les enceintes sont situées à 2.6 mètres en face et que je suis à 1.15 mètres de chacune latéralement, l'oreille gauche est à 1.05 mètre latéralement de la source gauche, et l'oreille droite à 1.35 mètres latéralement de cette même source (1.05+0.2 mètre de largeur de tête). En utilisant Pythagore on obtient les distances des signaux :
J'ai sommé les signaux LE_LS et LE_RS pour obtenir l'impulsion LE_LRS reçue par l'oreille gauche lorsque les sources gauche et droite envoient un même signal. J'ai fais de même pour les signaux RE_RS et LE_RS pour obtenir RE_LRS.
Si on suppose la tête symétrique, les signaux reçus par les oreilles gauche et droite sont censés être relativement similaires. Partant de cette hypothèse, j'ai alors calculé la moyenne vectorielle LRE_FS = vector average(LE_FS, RE_FS) : c'est mon impulsion qui va me servir de référence.
Pour la même raison, j'ai calculé la moyenne vectorielle des réponses d'impulsions de deux sources disposées en stéréo pour chaque oreille : LRE_LRS = vector average(LE_LRS, RE_LRS).
Enfin, j'ai calculé la courbe cible qu'il faudrait atteindre pour reproduire, dans les conditions d'écoute stéréo qui sont les miennes, un SPL identique à celui d'une source venant de face : target_curve = LRE_FS / LRE_LRS.
J'ai obtenu ceci :
Pour avoir quelque chose d'un peu plus "robuste" et tolérant, j'ai lissé à 1 octave la courbe cible et appliqué un fenêtrage de 6 cycles :
J'ai alors ajouté une égalisation paramétrique de +7dB à 1900Hz avec une BW de 1 octave dans la correction de mon système, le résultat me semble être bien meilleur à l'écoute. Ma pièce étant très "morte" (RT60 de 160 à 170ms pour 100m^3 de volume), cette courbe cible me permet de retrouver la sonorité d'une pièce plus vivante, mais sans les inconvénients de la réverbération que je déteste par dessus tout. Après une écoute plus prolongée, j'ai fini par modifier la courbe cible :
En bleu, la courbe cible calculée par la méthode ci-dessus, lissée à 1/2 octave.
En vert, la courbe cible qui me convient à l'écoute, avec notamment une bosse à 1900Hz à peine un peu moins prononcée, et surtout un gain important dans le bas du spectre.
J'aimerai savoir si vous trouvez une amélioration à utiliser une courbe cible similaire chez vous ? Je pense que si votre pièce est plus réverbérante, vous pourriez essayer une courbe cible intermédiaire en modérant l'amplitude de la bosse, par exemple entre +2 et +4dB à 1900Hz au lieu de +5 ou +6dB.
PS: si l'azimut des sources est trop différent, je veux bien vous calculer votre propre courbe cible en appliquant la même méthode pour voir si elle diffère beaucoup ou pas de la mienne.
Les fichiers au format .mdat.
Cdlt,
Jean
Je désire m'attaquer à la courbe cible SPL à viser dans le cas d'une écoute stéréo classique, avec deux hauts parleurs situés en face. En effet, voici une schématisation des signaux transmis d'une unique source frontale vers nos oreilles :
Et voici les signaux transmis par deux sources positionnées en configuration stéréo classique vers nos oreilles :
L'oreille gauche (et identiquement pour l'oreille droite) perçoit le signal des deux sources, qui atteint notre tête avec deux angles distincts et avec un certain décalage temporel. La différence d'angle implique, à cause de la fonction de transfert liée à notre tête (HRTF = Head Related Transfer Function), une réponse d'impulsion distincte et donc une tonalité différente pour les deux sources. A cela s'ajoute un décalage temporel car la distance des deux sources à la même oreille est légèrement distincte. Je cherche donc à corriger le signal reçu dans ce contexte afin de se rapprocher du signal que percevrait l'oreille pour une source située en face, comme c'est généralement le cas dans un concert...
Pour ma part, l'angle est d'environ +/-24° d'azimut pour chaque enceinte : les enceintes sont écartées entre elles de 2.3 mètres (ce qui correspond sur le schéma à W=1.15 m.) et le milieu des enceintes se trouve à 2.6 mètres du point d'écoute (ce qui correspond sur le schéma à L=2.6 m.).
Dans ma démarche, j'ai tout d'abord télécharger une API permettant de lire les fichiers au format .sofa sous matlab : https://github.com/TWOEARS/SOFA
Après ajout du dossier "API_MO" dans le path de Matlab, je me suis procuré un fichier .sofa de mesures HRTF ici : https://github.com/sfstoolbox/data/tree/master/HRTFs
Ensuite, j'ai ouvert ce fichier sous Matlab est j'ai exporté 6 réponses d'impulsion en format .wav :
- LE_LS et LE_LR (resp. pour Left Ear Left Source et Left Ear Right Source), resp. la réponse d'impulsion de l'oreille gauche pour une source située 24° à gauche et la réponse d'impulsion de l'oreille gauche pour une source située 24° à droite,
- RE_LS et RE_LR,
- LE_FS et RE_FS (resp. pour Left Ear Front Source et Right Ear Front Source), resp. la réponse d'impulsion de chaque oreille pour une source située en face (azimut 0°).
J'ai ensuite calculé le délai pour une tête normale. En m'aidant de ce document https://courses.washington.edu/psy333/le...9_Day2.pdf page 8, j'ai déduis que pour une tête normale, la distance entre les deux oreilles était de l'ordre de 20cm, car 0.2/343 = 5.8E-4 secondes soit 0.58 ms, ce qui correspond à ce qui est donné dans l'article pour une source de côté.
J'ai ensuite calculé pour ma configuration, avec cette largeur de tête, le délai des différents signaux. Puisque les enceintes sont situées à 2.6 mètres en face et que je suis à 1.15 mètres de chacune latéralement, l'oreille gauche est à 1.05 mètre latéralement de la source gauche, et l'oreille droite à 1.35 mètres latéralement de cette même source (1.05+0.2 mètre de largeur de tête). En utilisant Pythagore on obtient les distances des signaux :
- distance(LE_LS) = RACINE(2,6^2+1.05^2)
- distance(RE_LS) = RACINE(2,6^2+1.25^2)
J'ai sommé les signaux LE_LS et LE_RS pour obtenir l'impulsion LE_LRS reçue par l'oreille gauche lorsque les sources gauche et droite envoient un même signal. J'ai fais de même pour les signaux RE_RS et LE_RS pour obtenir RE_LRS.
Si on suppose la tête symétrique, les signaux reçus par les oreilles gauche et droite sont censés être relativement similaires. Partant de cette hypothèse, j'ai alors calculé la moyenne vectorielle LRE_FS = vector average(LE_FS, RE_FS) : c'est mon impulsion qui va me servir de référence.
Pour la même raison, j'ai calculé la moyenne vectorielle des réponses d'impulsions de deux sources disposées en stéréo pour chaque oreille : LRE_LRS = vector average(LE_LRS, RE_LRS).
Enfin, j'ai calculé la courbe cible qu'il faudrait atteindre pour reproduire, dans les conditions d'écoute stéréo qui sont les miennes, un SPL identique à celui d'une source venant de face : target_curve = LRE_FS / LRE_LRS.
J'ai obtenu ceci :
Pour avoir quelque chose d'un peu plus "robuste" et tolérant, j'ai lissé à 1 octave la courbe cible et appliqué un fenêtrage de 6 cycles :
J'ai alors ajouté une égalisation paramétrique de +7dB à 1900Hz avec une BW de 1 octave dans la correction de mon système, le résultat me semble être bien meilleur à l'écoute. Ma pièce étant très "morte" (RT60 de 160 à 170ms pour 100m^3 de volume), cette courbe cible me permet de retrouver la sonorité d'une pièce plus vivante, mais sans les inconvénients de la réverbération que je déteste par dessus tout. Après une écoute plus prolongée, j'ai fini par modifier la courbe cible :
En bleu, la courbe cible calculée par la méthode ci-dessus, lissée à 1/2 octave.
En vert, la courbe cible qui me convient à l'écoute, avec notamment une bosse à 1900Hz à peine un peu moins prononcée, et surtout un gain important dans le bas du spectre.
J'aimerai savoir si vous trouvez une amélioration à utiliser une courbe cible similaire chez vous ? Je pense que si votre pièce est plus réverbérante, vous pourriez essayer une courbe cible intermédiaire en modérant l'amplitude de la bosse, par exemple entre +2 et +4dB à 1900Hz au lieu de +5 ou +6dB.
PS: si l'azimut des sources est trop différent, je veux bien vous calculer votre propre courbe cible en appliquant la même méthode pour voir si elle diffère beaucoup ou pas de la mienne.
Les fichiers au format .mdat.
Cdlt,
Jean