Correction/filtrage semi-automatisé (DStudio v5)
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
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.
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.
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
l'organisation c'est ça ?

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"

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"
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
Pour l'organisation, manque un "s" à Amplis, sinon c'est trop facile.
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.

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.
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
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


- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
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.

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.

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.
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
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
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 ?

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

le générateur de DStudio saura générer des bursts ?
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
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.
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
Problème de lissage sur la phase.
Voici en 1/48 c'est ok
Par contre en 1/3 c'est pas terrible
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.
Voici en 1/48 c'est ok
Par contre en 1/3 c'est pas terrible
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.
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
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.

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.
- philby
- Messages : 325
- Enregistré le : ven. 10 juil. 2015 12:28
- Localisation : Gironde France
- Contact :
Re: Correction/filtrage semi-automatisé
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
1 - Estimate Ir delay
2 - Shift Ir
3 - Unwrap phase
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
Alain, j'ai pas compris grand chose.
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.

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.
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
J'ai appliqué ceci :
ce qui donne :
La même en repliée :
Code : Tout sélectionner
for (i = 1; i < frc.Length; i++)
{
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 :
La même en repliée :
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
c'est déspérant. faut virer le prof ou l'élève ?thierryvalk a écrit :Alain, j'ai pas compris grand chose.![]()

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.
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
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.
si t'arrive a déplier correctement celui là, ça devrait être proche du but.
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
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
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 !
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 !

- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
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 ?
![Dan.San :]](./images/smilies/8.gif)
- alka
- Administrateur du site
- Messages : 3098
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Correction/filtrage semi-automatisé
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 !
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.

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.
- thierryvalk
- Administrateur du site
- Messages : 3771
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Correction/filtrage semi-automatisé
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 (i = 0; i < frc.Length; i++)
{
while (frc[i].phase > 180) frc[i].phase = frc[i].phase - 360;
while (frc[i].phase < -180) frc[i].phase = frc[i].phase + 360;
}
et l'on obtient ceci
Retourner vers « DSPiy général »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités