Modérateurs: Modération Forum DIY, Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 15 invités

DSPiy : logiciels et algorithmes

Message » 22 Aoû 2014 20:08

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)
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 22 Aoû 2014 21:11

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.
Avatar de l’utilisateur
Kro
Membre HCFR
Membre HCFR
 
Messages: 29429
Inscription Forum: 12 Jan 2004 19:24
Localisation: L'Isle d'Abeau (38)
  • offline

Message » 31 Aoû 2014 4:20

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).

-<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
  • offline

Message » 10 Nov 2014 23:14

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.

Image
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 15 Nov 2014 22:46

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
  • offline

Message » 05 Déc 2014 17:34

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 ?
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 05 Déc 2014 17:54

phase = atan2(img/real) *18/PI ?
angle de phase(°)=atan(img/real) *180/PI
J-C.B
 
Messages: 6871
Inscription Forum: 19 Juil 2009 12:18
Localisation: Haute Normandie
  • offline

Message » 05 Déc 2014 17:57

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
  • offline

Message » 05 Déc 2014 22:15

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. :siffle: 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: 6871
Inscription Forum: 19 Juil 2009 12:18
Localisation: Haute Normandie
  • offline

Message » 05 Déc 2014 22:54

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. :thks:

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 :
rp1.JPG


Dans DStudio, magnitude +- correcte :
rp2.JPG


Et la phase … :
crp21.JPG


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
  • offline

Message » 06 Déc 2014 8:30

erreur
Dernière édition par J-C.B le 06 Déc 2014 10:35, édité 1 fois.
J-C.B
 
Messages: 6871
Inscription Forum: 19 Juil 2009 12:18
Localisation: Haute Normandie
  • offline

Message » 06 Déc 2014 10:12

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.
tcli
 
Messages: 4066
Inscription Forum: 23 Nov 2009 22:40
Localisation: Complètement à l'ouest
  • offline

Message » 06 Déc 2014 10:31

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.
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 06 Déc 2014 10:43

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.
tcli
 
Messages: 4066
Inscription Forum: 23 Nov 2009 22:40
Localisation: Complètement à l'ouest
  • offline

Message » 06 Déc 2014 11:56

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 ?
for (int i = 0; i < fftn / 2; i++)



Image
thierry38efd
 
Messages: 1735
Inscription Forum: 18 Sep 2013 7:36
  • offline


Retourner vers Filtrage actif, Equalisation et Processeurs

 
  • Articles en relation
    Dernier message