je l'ai bien compris. Et c'est pour ca que je dis que les délais sont a utiliser pour introduire un ...délai
Il y aurait moins d'erreurs si les gens employaient le vocabulaire précis: déphasage linéaire (délai) ou distorsion de phase (ce que font les filtres)
|
Modérateurs: Modération Forum Installations, Modération Forum DIY, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités
DSPiy : logiciels et algorithmes
- alkasar
- Messages: 11517
- Inscription Forum: 29 Nov 2005 22:47
- Localisation: Neuf deux
alkasar a écrit:@cédric : oui d'accord avec ce que tu dis. Je n'ai choisi l'exemple du calage à 1500 que pour bien illustrer cette technique.
Après oui, c'est comme toujours, faut savoir ce qu'on fait.
Pour la petite histoire, après de nombreux essais, j'obtiens le meilleur résultat pour cette enceinte (association d'une carpe et d'un lapin!) avec un LR24 1200Hz sur le woofer et un Butt24 à 1400Hz sur la compression.
Pour la petite histoire sur mes derniers projets/filtre d'enceintes filtrées en passif je commençait par une écoute en actif avec préégalisation avant filtrage puis LR4 placé à la fréquence adequat, réglage du délai pour bonne mise en phase et retouche de l'égalisation pour avoir un truc correct.
C'est intellectuellement satisfaisant, très bien à la mesure et à la simu.
Puis je commence à me pencher sur du passif, je vois ce que je peux faire en passif sans tout complexifier puis je dessine un actif qui me recopie les fonctions de trnasfert. C'est parfois moins parfait car on a pas toujours la précision de réglage de l'actif pur car on part d'un schéma passif mais ça me permet de tester des solutions avant de mettre les mains dans la soudure.
Pour recopier je me retrouve souvent avec des trucs du genre un LR12 ici et un But 18 là etc.
Eh bien ces solutions batardes en actif qui existent juste pour mimer les fonctions de transfert d'un passif sonnent souvent mieux que mon joli truc vite fait bien fait en LR4. Et ces filtres si je n'étais pas parti d'un passif à copier je n'aurai jamais tenté des les dessiner si l'idée était de rester en actif.
Donc ton avis ne m'étonne pas.
- Kro
- Messages: 29438
- Inscription Forum: 12 Jan 2004 19:24
- Localisation: Isère (38)
Pour Thierry,(plotter amplitude)
le "plus simple":
librairie Exocortex.dsp (136Ko)
http://www.exocortex.org/dsp/
--->faire une FFT de l'impulse---->table=(colonne réel+colonne imaginaire).
sortir les modules (amplitudes) de la table:
et ensuite plotter la table (+phase si besoin).
le "plus simple":
librairie Exocortex.dsp (136Ko)
http://www.exocortex.org/dsp/
--->faire une FFT de l'impulse---->table=(colonne réel+colonne imaginaire).
-<member name="M:Exocortex.DSP.Fourier.RFFT(System.Single[],Exocortex.DSP.FourierDirection)">
<summary> Compute a 1D real-symmetric fast fourier transform. </summary>
<param name="data"/>
<param name="direction"/>
</member>
-<member name="M:Exocortex.DSP.Fourier.RFFT(System.Single[],System.Int32,Exocortex.DSP.FourierDirection)">
<summary> Compute a 1D real-symmetric fast fourier transform. </summary>
<param name="data"/>
<param name="length"/>
<param name="direction"/>
sortir les modules (amplitudes) de la table:
-<member name="M:Exocortex.DSP.Complex.GetModulus">
<summary> The modulus (length) of the complex number </summary>
<returns/>
</member>
et ensuite plotter la table (+phase si besoin).
- thierry38efd
- Messages: 1735
- Inscription Forum: 18 Sep 2013 7:36
J’ai testé une solution mixte FIR IIR pour faire du 3 voies avec sur base de 2 impulses FIR.
j'ai réalisé avec rephase 3 impulses de 1000 taps (SigmaStudio n’aime pas trop des impulses plus longues) avec :
PB 120Hz LR24 pour celle du LOW
PH 120Hz LR24 et PB LR48 4000Hz pour le MID
PH LR48 4000Hz pour le HIGH
Dans Excel j’ai additionné les impulse LOW et HIGH ce qui donne toujours 1000 taps.
Dans SigmaStudio, le MID va directement à sa sortie tandis que l’impulse LOW+MID est retardée d’un sample puis passe par un crossover IIR avec PB 1100Hz But pour la voie LOW et PH 800Hz Butt24 pour la HIGH.
Ça semble pas si mal. Pour en discuter.
Edit : par contre testé avec des coupures à 650Hz et 3000Hz et là ça fonctionne pas du tout.
j'ai réalisé avec rephase 3 impulses de 1000 taps (SigmaStudio n’aime pas trop des impulses plus longues) avec :
PB 120Hz LR24 pour celle du LOW
PH 120Hz LR24 et PB LR48 4000Hz pour le MID
PH LR48 4000Hz pour le HIGH
Dans Excel j’ai additionné les impulse LOW et HIGH ce qui donne toujours 1000 taps.
Dans SigmaStudio, le MID va directement à sa sortie tandis que l’impulse LOW+MID est retardée d’un sample puis passe par un crossover IIR avec PB 1100Hz But pour la voie LOW et PH 800Hz Butt24 pour la HIGH.
Ça semble pas si mal. Pour en discuter.
Edit : par contre testé avec des coupures à 650Hz et 3000Hz et là ça fonctionne pas du tout.
- thierryvalk
- Messages: 5617
- Inscription Forum: 08 Mai 2012 9:39
- Localisation: Belgique
par contre testé avec des coupures à 650Hz et 3000Hz et là ça fonctionne pas du tout.
En effet,avec des Fc proches,ça doit se compliquer.
faudrait définir un ratio,genre 10 au mini (par ex 200-2000 ou 80-800...).
ou même un jeu d'impulse prédefinis:(je peux les faire)
ensuite faire les EQ dessus.
une banque genre:
70-1000
80-1000
100-1000
70-1500
80-1500
100-1500
150-1500
70-2000
80-2000
100-2000
200-2000
...
...
et couper en IIR à une octave dessus pour le PB (et en dessous pour PH).
c'était quelle Fc pour le IIR avec 650-3000Hz ?
si c'est pas pénible à implémenter,c'est une solution intelligente pour du 3 voies en FIR,avec 10000 taps.
d'autant que cela ne consomme que 4 biquads pour les 2 IIR 24dB.
en conservant tous les taps pour le "bas".
- thierry38efd
- Messages: 1735
- Inscription Forum: 18 Sep 2013 7:36
Petites questions aux matheux.
Actuellement DStudio affiche l’amplitude d’une impulse issue de rePhase.
Sans grande précision, mais le but est juste de vérifier que l’on a bien importé la bonne impulse.
Là où ça va plu, c’est lorsque l’on a effectué que des corrections de phase.
Donc l’idée est de rajouter sommairement la phase. Je compte pour cela garder la même échelle que pour l’amplitude et donc ferais une courbe de +18 à -18 pour +180 à -180 degrés.
La question: le calcule de phase, c’est bien :
phase = atan2(img/real) *18/PI ?
Rien d’autre ?
Actuellement DStudio affiche l’amplitude d’une impulse issue de rePhase.
Sans grande précision, mais le but est juste de vérifier que l’on a bien importé la bonne impulse.
Là où ça va plu, c’est lorsque l’on a effectué que des corrections de phase.
Donc l’idée est de rajouter sommairement la phase. Je compte pour cela garder la même échelle que pour l’amplitude et donc ferais une courbe de +18 à -18 pour +180 à -180 degrés.
La question: le calcule de phase, c’est bien :
phase = atan2(img/real) *18/PI ?
Rien d’autre ?
- thierryvalk
- Messages: 5617
- Inscription Forum: 08 Mai 2012 9:39
- Localisation: Belgique
angle de phase(°)=atan(img/real) *180/PIphase = atan2(img/real) *18/PI ?
- J-C.B
- Messages: 6875
- Inscription Forum: 19 Juil 2009 12:18
- Localisation: Haute Normandie
Ok merci, j’avais multiplié par 18 à la place de 180 vu que mon cas précis je vais de +18 à -18 dans le graphe
- thierryvalk
- Messages: 5617
- Inscription Forum: 08 Mai 2012 9:39
- Localisation: Belgique
j’avais multiplié par 18 à la place de 180 vu que mon cas précis je vais de +18 à -18 dans le graphe
Ouais, mais je ne crois pas que cela motive ta formule. Le rejet des théoriciens fait souvent ramer ceux qui les rejettent, surtout lorsque ces dits théoriciens, tentent de se montrer disponibles à chacun, sans mépris pour les lacunes scientifiques de leur réjecteur.
Enfin bref, revenons à l'intérêt général en misant, particulièrement dans ce type de contexte, sur le DiT et non plus sur le DiY.
Tu partages un angle de 360° en 2*18 tranches ce qui correspond à 36 espaces bornés par 37 repères. Le 0° etant médian.
La formule correspondante au franchissement d'une graduation correspondant à un angle de phase de 360/36= 10°( définition faible, mais auditivement satisfaisante)
soit seuil= atan(img/real) *180/(10*PI)=18*atan(img/real)
Dernière édition par J-C.B le 06 Déc 2014 10:33, édité 1 fois.
- J-C.B
- Messages: 6875
- Inscription Forum: 19 Juil 2009 12:18
- Localisation: Haute Normandie
J’ai compris des choses dont je suis entièrement d’accord, d’autres pour lesquels je fais confiances a ceux qui ont leurs connaissances.
Pour ce qui est de la transformation d’échelle, OK, je vais voir.
Mais le problème qui me préoccupe le plus pour le moment est que j’obtiens avec ceci avec cela comme code :
for (int i = 0; i < fftn / 2; i++)
{
fftr[i].magnitude = 20.0 * Math.Log10((float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i]))));
fftr[i].phase = Math.Atan2(xim[i], xre[i]) * 18 / Math.PI;
}
La définition de atan2 en C# : Retourne l'angle dont la tangente est le quotient de deux nombres spécifiés.
J’ai testé par instinct en inversant xim et xre, pas mieux.
Dans rePhase, courbes pour tests :
Dans DStudio, magnitude +- correcte :
Et la phase … :
PS je ne comprends pas non plus pourquoi une seule des images s’affiche directement.
Pour ce qui est de la transformation d’échelle, OK, je vais voir.
Mais le problème qui me préoccupe le plus pour le moment est que j’obtiens avec ceci avec cela comme code :
for (int i = 0; i < fftn / 2; i++)
{
fftr[i].magnitude = 20.0 * Math.Log10((float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i]))));
fftr[i].phase = Math.Atan2(xim[i], xre[i]) * 18 / Math.PI;
}
La définition de atan2 en C# : Retourne l'angle dont la tangente est le quotient de deux nombres spécifiés.
J’ai testé par instinct en inversant xim et xre, pas mieux.
Dans rePhase, courbes pour tests :
Dans DStudio, magnitude +- correcte :
Et la phase … :
PS je ne comprends pas non plus pourquoi une seule des images s’affiche directement.
- thierryvalk
- Messages: 5617
- Inscription Forum: 08 Mai 2012 9:39
- Localisation: Belgique
Ca sent un problème de conversion auto entier/flotant/double.
Essaye avec 18.0 à la place de 18.
Quel est ta déclaration de type pour : fftr[i].phase ?
Sinon ta formule est bonne. La n'est pas le problème.
Essaye avec 18.0 à la place de 18.
Quel est ta déclaration de type pour : fftr[i].phase ?
Sinon ta formule est bonne. La n'est pas le problème.
- tcli
- Messages: 4075
- Inscription Forum: 23 Nov 2009 22:40
- Localisation: Complètement à l'ouest
fftr.phase est un double.
C'est vrai que le 18 est peut être considéré comme un entier.
Je vais tester avec 18.0 ou forcer en double la division par PI.
ceci dit, de mémoire, j'avais testé sans conversion en degrés et ça semblait pas bon.
C'est vrai que le 18 est peut être considéré comme un entier.
Je vais tester avec 18.0 ou forcer en double la division par PI.
ceci dit, de mémoire, j'avais testé sans conversion en degrés et ça semblait pas bon.
- thierryvalk
- Messages: 5617
- Inscription Forum: 08 Mai 2012 9:39
- Localisation: Belgique
Ca peut aussi etre ton affichage de courbe qui a un problème.
affiche les valeurs calculées pour voir.
Sinon, elles proviennent d'où tes valeurs xim et xre ?
D'une FFT que tu as fais toi même à partir d'une impulsion provenant de rephase ?
Car il suffit que ton impulsion soit très décalée dans le temps avant ta FFT pour avoir ce résultat : amplitude inchangée et phase illisible (mais bonne).
Edit : en reregardant ta courbe, je pense que le pb de calage temporel est le plus probable.
affiche les valeurs calculées pour voir.
Sinon, elles proviennent d'où tes valeurs xim et xre ?
D'une FFT que tu as fais toi même à partir d'une impulsion provenant de rephase ?
Car il suffit que ton impulsion soit très décalée dans le temps avant ta FFT pour avoir ce résultat : amplitude inchangée et phase illisible (mais bonne).
Edit : en reregardant ta courbe, je pense que le pb de calage temporel est le plus probable.
- tcli
- Messages: 4075
- Inscription Forum: 23 Nov 2009 22:40
- Localisation: Complètement à l'ouest
La phase semble tourner dans le 2 sens sur le spectre.(pas de "saut" -180/+180).
et semble suivre la valeur moyenne de celle recherchée.(100-600-5KHz)
la table se limite à la FFT/2 ?
et semble suivre la valeur moyenne de celle recherchée.(100-600-5KHz)
la table se limite à la FFT/2 ?
for (int i = 0; i < fftn / 2; i++)
- thierry38efd
- Messages: 1735
- Inscription Forum: 18 Sep 2013 7:36
|
Retourner vers Filtrage actif, Equalisation et Processeurs
|