Correction/filtrage semi-automatisé (DStudio v5)

Discutions générales sur le DSPiy et tout ce qui s'y rattache
Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » mar. 8 mars 2016 13:44

Ya-t’il des idées sur la gestion des délais ?
Le but direct n’est pas l’alignement pile poil, mais de savoir au moins qui est en avance par rapport à quoi et à qui d’autre et donc permettre à DStudio de donner une première approximation, dans l’esprit de ce qui est fait actuellement en FIR.

Niveau délais :
Celui de la carte son : peut être déterminé par le bouclage du canal non utilisé, vu que la carte est censée être parfaite, on relève le pic de l’impulse.
Mais l’on n’a pas de référence puis l’on se moque de ce temps donc le temps relevé peut servir à la base d’une référence.

Celui du DSPiy : latence à temps fixe pour l’ADAU1701 avec ADC ou digital + DAC.
Pour l’ADAU1452 on n’a jamais vraiment vérifié.

Temps de groupe IIR ?

Délai en FIR : connu.

Distance HP -> Micro.

Edit : j'oubliais, il y a aussi le filtrage soustractif avec ses délais et qu'il faudra aussi simuler au niveau des soustractions.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » mar. 8 mars 2016 16:44

l'organisation c'est ça ?
Image
cad utiliser le dspiy déjà branché en usb comme générateur pour la mesure.

j'ai l'impression que tu as répertorié tous les délais.
le dspiy (adc, dsp biquads, dac) c'est fixe hormis les délais ajoutés dans des applis. une fois mesuré c'est le même pour tout le monde. Tu peux presque le mettre comme une constante quelquepart.
le 1452 a part le délai taps/2 imposé par l'appli fir, ne devrait rien rajouter s'il ne fait que du fir.
j'ignore ce que tu a appelles "temps de groupe IIR"

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » mar. 8 mars 2016 17:57

Pour l'organisation, manque un "s" à Amplis, sinon c'est trop facile. :mrgreen:

On n'est pas obligé d'utiliser l'USB audio du DSPiy, on peut passer le signal Out via une carte son.
Faire du bouclage sur le DSPiy n'est pas évident ni pratique donc la carte son externe reste un bon moyen.

Par contre l'on tentera d'automatiser la sélection des sorties pour que le signal ne sorte que là où il faut, mais ce sera pour plus tard.

Imaginons une appli toute fraiche, délais de DStudio étant à zéro.
On a une enceinte 2 voies.
On a fait son filtrage pour les 2 HP.
Faut donc vérifier les inversions éventuelles de phases et s'attaquer à l'alignement temporel des HP.
En quoi DStudio pourrait aider dans cette tâche en déterminant quel HP est en avance et en proposant un délai à entrer.
Je pense aussi à déterminer la distance Mirco - HP, pourrait être utile si pas trop compliqué à faire.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » mar. 8 mars 2016 19:15

thierryvalk a écrit :En quoi DStudio pourrait aider dans cette tâche en déterminant quel HP est en avance et en proposant un délai à entrer.
Je pense aussi à déterminer la distance Mirco - HP, pourrait être utile si pas trop compliqué à faire.

En voilà une belle piste de service pratique :)
si on sait afficher deux impulses sur le meme graphe on peut quasi automatiser la méthode du pic d'impulsion.

La distance micro c'est possible si t'as une référence en bouclage, comme REW. Tu connais les délais liés au DSPiy et appli. Mais bon, est ce bien important de la connaitre ?

mieux ? (et toujours sans s à Ampli ;) )

Image

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » mar. 8 mars 2016 19:33

si on sait afficher deux impulses sur le meme graphe on peut quasi automatiser la méthode du pic d'impulsion.

Ah non, j'ai demandé plus haut et tu as dis non. :nono: Donc 1 impulse par graphe. Mais c'est purement de l'affichage donc on calcule ce que l'on veut.

La distance micro c'est possible si t'as une référence en bouclage, comme REW.

Pour générer une impulse il y a 2 méthodes de DRC dont l'un avec bouclage. Mais pas encore trop étudier la chose.
Mais je pense bien bien que l'on peut faire une mesure en stéréo puis générer les 2 impulses.

mieux ? (et toujours sans s à Ampli ;) )

NON, il manque un câble à l'un des amplis. :mrgreen:
Puis on peut sortir en SPdif de certaines cartes son.
Par contre le DSPiy sera branché vu que l'on va travailler sur l'appli. C'est le même le but.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » mar. 8 mars 2016 19:52

le fil pointillets est branché mais l'audio ne circule pas dessus et le cable entre les amplis est derrière, tu ne le vois pas. Il y a des tas de choses qui existent que tu ne vois pas :mrgreen:

et pis tu nous propose de nouveaux usages, donc j'ai le droit de changer d'avis :)
on a rarement a comparer deux impulses (du moins moi je le fais rarement, et jamais ressenti le besoin de les voir sur le même écran). Pour le calage de HPs c'est une bonne raison de le faire :) mais bon, on peut aussi noter le t0 du pic de la première impulse, et faire une soustraction quand on voit la deuxième. C'est ce que je fais avec REW.

le générateur de DStudio saura générer des bursts ?

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » mar. 8 mars 2016 19:56

le générateur de DStudio saura générer des bursts ?

Oui, j'avais commencé il y a quelques mois un petit soft pour le faire. On génère un burst, on enregistre et on affiche le burst comme sur un oscillo.

Par contre, parlant de générateur, il me faudrait pouvoir générer du Pink Noise en délimitant la plage; c'est pour ajuster les niveaux avant une mesure.
Pour le moment j'utilise un fichier, mais c'est pas super élégant.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » jeu. 10 mars 2016 20:49

Problème de lissage sur la phase.
Voici en 1/48 c'est ok
l48.PNG


Par contre en 1/3 c'est pas terrible
l3.PNG


Une idée ?

Je me dis qu'il faudrait déplier la phase, la lisser puis la replier.
Mais déjà je ne sais pas comment on déplie une phase, ce qui serait de toute manière intéressant comme option.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » ven. 11 mars 2016 16:13

déplier la phase en voilà une bonne question :)
Il n'y a pas de moyen direct a ma connaissance pour calcule la valeur "dépliée". Aucun outil matheux ne fait la différence a 360° près.

Formellement, la référence de phase est a 0 à Fs/2. Le dépliement peut se faire en partant a reculons depuis Fs/2 jusqu'à 1Hz. A chaque fois qu'un saut "montant" est rencontré de -180 à +180° rajouter 360 à la phase. Si c'est un saut "descendant "de +180 à -180°, retirer 360.
Un souci de cette méthode formelle, c'est que Fs/2 est hors de la plage habituellement visible de 20 à 20k. Placer le 0 aussi loin peut rendre la phase dépliée pénible a lire; Deuxième ennui : le moindre délai introduit peut provoquer des tours et des tours à la phase dans les fréquences hautes et rajouter des dizaines de milliers de degrés artificiellement.

Aussi, j'imagine une deuxième méthode plus pragmatique:
partir de 1Hz et chercher le premier phase=0. Il est possible que ce soit pour une fréquence entre deux échantillons.
Puis, partir de ce 0 a reculons jusqu'à 1Hz et en avançant jusqu'à 20k en ajoutant ou retirant 360 à chaque saut selon qu'il est montant ou descendant. Ca donnera une courbe dépliée forcément visible et correcte, à multiples de 360° près. Je veux dire par là qu'à Fs/2 phase ne sera peut etre pas 0 mais un multiple de 360°, ce qui est pareil.

S'il n'y a aucun zéro entre 20 et 20k, ben y a qu'a partir dans un sens ou dans l'autre (de 1 -> 20k ou l'inverse) et faire les corrections de sauts montants ou descendants comme ils viennent. C'est sans importance : au moins un bout de la courbe sera visible a coup sur.

Quoi qu'il arrive, il faut prévoir un bouton pour que l'utilisateur puisse ajouter ou retirer 360° à la phase pour afficher la courbe comme il préfère.

Avatar de l’utilisateur
philby
Messages : 325
Enregistré le : ven. 10 juil. 2015 12:28
Localisation : Gironde France
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar philby » ven. 11 mars 2016 17:01

Avant de déplier la phase, ne faudrait-il pas, comme dans REW, minimiser le délai? Bon, il faudrait déjà avoir l'impulse....

1 - Estimate Ir delay
2 - Shift Ir
3 - Unwrap phase

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » ven. 11 mars 2016 17:42

Alain, j'ai pas compris grand chose. :0

Pour ce qui est des mesures, on a bien une impulse donc pas de problème pour changer la référence de temps.
Le problème est juste de trouver le vrai début, mais vu que l'on sait afficher l'impulse, on peut demander l'aide de l'utilisateur.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » ven. 11 mars 2016 18:18

J'ai appliqué ceci :

Code : Tout sélectionner

for (1frc.Lengthi++)
            {
                if ((
frc[i-1].phase frc[i].phase)>180)
                    
frc[i].phase frc[i].phase 360;
                if ((
frc[i-1].phase frc[i].phase) < -180)
                    
frc[i].phase frc[i].phase 360;
            }
 

ce qui donne :
unwarp.PNG


La même en repliée :
warp.PNG

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » ven. 11 mars 2016 18:24

thierryvalk a écrit :Alain, j'ai pas compris grand chose. :0
c'est déspérant. faut virer le prof ou l'élève ? :mrgreen:



essayons différemment :
un saut de phase (rotation) c'est qu'elle dépasse 180 et on affiche la suite en recommençant à -180°. Un saut dans l'autre sens, c'est l'inverse.
C'est que a 360° près la phase c'est la même chose. -180 = 180.

Concrètement, en parcourant la table tu vas tomber sur un indice i qui a par exemple 179,5° et pour i+1 = -179,5. C'est un saut brusque.
Si tu veux déplier, pour i+1 faut attirbuer (-179,5 + 360) = 180,5. Tu continues d'ajouter 360 pour i+2, i+3 etc. jusqu'à la rotation suivante.

Si tu tombes sur une rotation inverse (passage de -180 à +180), tu soustrait 360 au lieu d'ajouter.

Si tu fais cet algorithme en commençant a f=1Hz ca va pas etre juste car tu vas décaler la phase. La phase a 0 ne sera plus a 0.
Il faut commencer à appliquer l'algorithme à la fréquence (l'indice) ou elle vaut 0.
Comme cet indice est quelque part dans la table, il y a des fréquences avant et après. Le plus simple est de parcourir la table dans les deux sens a partir de 0 et d'appliquer l'algorithme ci-dessus a chaque rencontre d'un saut brusque.

edit: ton code fait ce qu'il faut pas faire : commence a f=1 et pas sur un zéro de phase, donc ça décale. Mais bon, comme phase(1)=0, ca décale de 0 ce qui ne se voit pas. Ton exemple n'a pas besoin d'etre déplié en fait! prend un exemple qui a une rotation au départ.

edit bis : merdum. pas vu que ton échelle repliée de phase va a -360. pfff faire échelle comme tout le monde sinon c'est dur de suivre. édité en rayant la phrase qui va pas.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » ven. 11 mars 2016 18:32

un HighPass BUTT18 c'est un bon cas d'école pour les tests. Phase part de -90° et fait une rotation sans passer par 0 avant Fs/2.
si t'arrive a déplier correctement celui là, ça devrait être proche du but.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » ven. 11 mars 2016 18:50

en y réfléchissant c'est pas important de partir du zéro. le 0 deviendra au pire 360 ou -360 ce qui est correct.
ton algorithme devrait marcher

(frc[i-1].phase - frc[i].phase)>180

en théorie faudrait tester 360 (de -180 à +180)
concrètement un saut de 180 entre deux samples ca n'arrive qu'en rotation de phase.
Donc formellement, le code est faux. Concrètement, ça marchera toujours.
ton deuxième prénom est vogelpick ! :mrgreen:

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » ven. 11 mars 2016 19:03

alka a écrit :un HighPass BUTT18 c'est un bon cas d'école pour les tests. Phase part de -90° et fait une rotation sans passer par 0 avant Fs/2.
si t'arrive a déplier correctement celui là, ça devrait être proche du but.

C'est bon prof ? :]
butt18.PNG

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: Correction/filtrage semi-automatisé

Messagepar alka » ven. 11 mars 2016 19:13

pas mal, mais pour mes yeux tu me copieras 100 fois : l'échelle de la phase a son 0 sur le même trait que le 0 fréquence ! :hehe:

J'ai quand meme un doute sur l'algorithme s'il y a deux rotations de phase (ou plus).
le meme but18 sur lequel tu mets un délai volontairement par exemple.
ou un butt48
j'ai peur qu'a la deuxième rotation tu continues de rajouter 360 alors qu'il faudrait ajouter 2*360.

ps: je n'aime pas les boucles qui modifient une variable qui sert dans le test. ça m'embrouille les neurones

ps2: ya aussi un petit knoll au premier sample j'ai l'impression.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: Correction/filtrage semi-automatisé

Messagepar thierryvalk » ven. 11 mars 2016 19:19

pas mal, mais pour mes yeux tu me copieras 100 fois : l'échelle de la phase a son 0 sur le même trait que le 0 fréquence !

comprend pas, tu veux dire 0 SPL ?

Sinon le but était de faire du lissage sans déformer le passage de -180° à +180°
On déplie donc la phase, on lisse puis on replie avec ce code :

Code : Tout sélectionner


 
for (0frc.Lengthi++)
            {
                while (
frc[i].phase 180frc[i].phase frc[i].phase 360;
                while (
frc[i].phase < -180frc[i].phase frc[i].phase 360;
            }
 

et l'on obtient ceci
sw.PNG


Retourner vers « DSPiy général »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités