Calculs audio numérique pour les nuls
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
On change de registre et nouvelle question pour un champion.
En rose, Impulse de la mesure des HP de mon PC portable passé par une FFT et affichée. OK
En brun, même impulse passée par la FFT dont on récupère la table en complexe.
Cette table sert alors a initialiser la table qui va ensuite être multipliée par les biquads puis affichée. NOK
Il y a tout de même quelque chose qui fonctionne c'est l'effet des biquads; il y a une EQ à 1000Hz de -10dB avec un Q de 10.
Problèmes que je vois :
L'impulse est en 48K alors que les biquads en 96K.
Il y a que l'on fait une interpolation pas terrible.
En rose, Impulse de la mesure des HP de mon PC portable passé par une FFT et affichée. OK
En brun, même impulse passée par la FFT dont on récupère la table en complexe.
Cette table sert alors a initialiser la table qui va ensuite être multipliée par les biquads puis affichée. NOK
Il y a tout de même quelque chose qui fonctionne c'est l'effet des biquads; il y a une EQ à 1000Hz de -10dB avec un Q de 10.
Problèmes que je vois :
L'impulse est en 48K alors que les biquads en 96K.
Il y a que l'on fait une interpolation pas terrible.
- alka
- Administrateur du site
- Messages : 2908
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Calculs audio numérique pour les nuls
thierryvalk a écrit :Bon la phase en FIR c'est OK, mais avec l'ancien système, donc après conversion en amplitude et phase.
Donc actuellement je suis incapable de mettre un délai directement sur les complexes.
c'est vrai qu'ici on tente de répondre aux questions.
Quand on comprend pas, faut reformuler.
Tout ce qu'on fait c'est toujours multliplier des complexes entre eux.
Ce sont toujours des résultats d'une fonctions de transfert, (sauf ceux issus de la FFT ou d'une mesure)
- Un biquad c'est une fonction un peu compliquée qui nécessite 6 lignes de code pour trouver sa valeur complexe
- Inverser la phase c'est aussi une fonction de transfert toute simple qui fait * -1. cad * (-1,0) partout. ce qui est (cos(180), sin(180))
- appliquer un gain c'est aussi une fonction de transfert toute simple qui fait * A. (avec A = 10^(G/20)). Ce serait * (A,0) partout.
- appliquer un délai c'est une fonction de transfert qui a pour résultat (cos(phi), -sin(phi)) avec w = 2.Pi.f.T (avec T en secondes)
Voici mon code vba pour appliquer les trois choses qui dépendent de la voie (Gain, inv phase, délai).
Je cumule les trois paramètres dans une seule fonction. Le nb complexe retourné par la fonction VH correspond dans ton cas à ce qu'il faut multiplier dans la case de la frequence Freq de ton tableau.
Dans ton tableau tu accumule HFFT * Hfiltre1 * H filtre2 * .... * HFiltreN * VH
Code : Tout sélectionner
Function VH(Freq, Fs, Sp, Gain As Double, Inv As Boolean) As String
' Ajoute l'effet des parametres sur la Voie: gain, inversion, délai
' Freq is frequency in Hz
' Fs is sampling frequency in Hz
' Sp is number of samples
' Gain is the gain in dB. on ne cumule pas avec celui du PEQ ou LowShelve ou HighShleve
' Inv is True if invert phase is checked
' returns complex
Dim Phi, A As Double
Dim PI As Double
PI = WorksheetFunction.PI()
' initialisation
VH = 1
' applique le déphasage du delai
If Sp <> 0 Then
Phi = 2 * PI * Freq / Fs * Sp
VH = WorksheetFunction.Complex(Cos(Phi), -Sin(Phi))
End If
' applique le gain
If Gain <> 0 Then
A = 10 ^ (Gain / 20)
VH = WorksheetFunction.ImProduct(LineH, A)
End If
' inverse si coché
If Inv Then
VH = WorksheetFunction.ImProduct(LineH, -1)
End If
' vba uses the dot as decimal separator on my system, where excel expects a comma
VH = Replace(LineH, ".", ",")
End Function
acheter un DSPiy ? c'est ici
- alka
- Administrateur du site
- Messages : 2908
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Calculs audio numérique pour les nuls
thierryvalk a écrit :On change de registre et nouvelle question pour un champion.
En rose, Impulse de la mesure des HP de mon PC portable passé par une FFT et affichée. OK
En brun, même impulse passée par la FFT dont on récupère la table en complexe.
Cette table sert alors a initialiser la table qui va ensuite être multipliée par les biquads puis affichée. NOK
Il y a tout de même quelque chose qui fonctionne c'est l'effet des biquads; il y a une EQ à 1000Hz de -10dB avec un Q de 10.
Problèmes que je vois :
L'impulse est en 48K alors que les biquads en 96K.
Il y a que l'on fait une interpolation pas terrible.
par une FFT ... laquelle ?
yaurait pas un High-pass qui traine ? au hasard vers 500Hz
acheter un DSPiy ? c'est ici
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Phi = 2 * PI * Freq / Fs * Sp
VH = WorksheetFunction.Complex(Cos(Phi), -Sin(Phi))
c'est si simple de comprendre 2 lignes bien écrites.
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
par une FFT ... laquelle ?
Je n'en ai qu'une d'une longueur de 32278 .
yaurait pas un High-pass qui traine ? au hasard vers 500Hz
Normalement non, en regardant bien, il y a une courbe grise qui donne juste les EQ.
Et j'ai même testé sans y faire passer les biquads.
- alka
- Administrateur du site
- Messages : 2908
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Calculs audio numérique pour les nuls
en passant: a l'époque ou on a fait le décalage de phase pour tenir compte du délai de centrage d'impulse de rephase, j'appliquais la formule (cosphi + i sinphi)
C'était avant qu'on me corrige pour dire que c'est moins au lieu de plus.
cela dit, la corection de sens de la phase c'est relatif. Si dans ton cas le décalage sur le résultat de la FFT marche en positif, c'est peut etre ça qu'il faut changer. Si tu rajoute du déphaaage au lieu d'en retirer, ça se voit tout de suite
C'était avant qu'on me corrige pour dire que c'est moins au lieu de plus.
cela dit, la corection de sens de la phase c'est relatif. Si dans ton cas le décalage sur le résultat de la FFT marche en positif, c'est peut etre ça qu'il faut changer. Si tu rajoute du déphaaage au lieu d'en retirer, ça se voit tout de suite
acheter un DSPiy ? c'est ici
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Oui, pour ce genre de truc, je ne m'en fait plus de bien longtemps, on a toujours une chance sur 2.
Le problème semble être au début :
Le problème semble être au début :
- alka
- Administrateur du site
- Messages : 2908
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Calculs audio numérique pour les nuls
quelle idée de commencer a 1Hz ! je t'ai dit que c'est que des ennuis
c'est du débug de code car ça ne devrait rien changer de passer par un calcul ou un autre.
Mais ca ressemble fichtrement a un passe-haut quand meme!
Deux mesures successives de HP de pc dans une pièce c'est sur que c'est pas égal au db près. Les deux se ressemblent sauf en dessous de 500 - 600Hz
Essaie ton smoothing pour mieux voir
alors je donne ma langue a Félix ...thierryvalk a écrit :yaurait pas un High-pass qui traine ? au hasard vers 500Hz
Normalement non, en regardant bien, il y a une courbe grise qui donne juste les EQ.
Et j'ai même testé sans y faire passer les biquads.
c'est du débug de code car ça ne devrait rien changer de passer par un calcul ou un autre.
Mais ca ressemble fichtrement a un passe-haut quand meme!
Deux mesures successives de HP de pc dans une pièce c'est sur que c'est pas égal au db près. Les deux se ressemblent sauf en dessous de 500 - 600Hz
Essaie ton smoothing pour mieux voir
acheter un DSPiy ? c'est ici
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
C'est la même mesure (fichier).
- alka
- Administrateur du site
- Messages : 2908
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Calculs audio numérique pour les nuls
ah ok. alors c'est que le sampling différent qui donne tous ces détails de plus.
smoothing sur les deux, y a que ça de vrai pour les mesures type point d'écoute, non fenetré. sinon c'est toujours que du gribouillis.
smoothing sur les deux, y a que ça de vrai pour les mesures type point d'écoute, non fenetré. sinon c'est toujours que du gribouillis.
acheter un DSPiy ? c'est ici
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Mon smoothing n'est pas encore automatisé, risque de faire des bêtises et tourner plus en rond.
Si tu regardes bien, la courbe rose est ok et l'autre identique mais comme si l'échelle des dB était plus grande.
Si tu regardes bien, la courbe rose est ok et l'autre identique mais comme si l'échelle des dB était plus grande.
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Yessss
Le coupable :
double magnitude = 20 * Math.Log(fc[i].Module);
double magnitude = 20 * Math.Log10(fc[i].Module);
Le coupable :
double magnitude = 20 * Math.Log(fc[i].Module);
double magnitude = 20 * Math.Log10(fc[i].Module);
Re: Calculs audio numérique pour les nuls
thierryvalk a écrit :Yessss
Le coupable :
double magnitude = 20 * Math.Log(fc[i].Module);
double magnitude = 20 * Math.Log10(fc[i].Module);
Décidément
- alka
- Administrateur du site
- Messages : 2908
- Enregistré le : mer. 15 juil. 2015 15:18
- Localisation : 92
- Contact :
Re: Calculs audio numérique pour les nuls
pfff un bug indigne
cf page 1 post 1 de ce sujet. c'est pourtant écrit en petit, pour attirer l'attention
cf page 1 post 1 de ce sujet. c'est pourtant écrit en petit, pour attirer l'attention
acheter un DSPiy ? c'est ici
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Et pour jouer, le HP de mon PC corrigé.
Demain rajouter la correction FIR, ce fameux délai et tout le reste.
Demain rajouter la correction FIR, ce fameux délai et tout le reste.
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Premier problème du soir.
Suis occupé à mettre au propre et appliqué le délai sur les complexes avant passage en magnitude/phase.
Le signe du sin est bien + sinon c'est gribouillis.
Simple impulse en FIR qui passait très bien avant mais maintenant j'ai comme du bruit sur la phase en dessous de 100Hz
Une idée ?
le code :
Et pour afficher
et le problème
Edit peut être une piste ou du moins un autre soucis, mon EQ était à -12dB et elle s'affiche à -24dB.
Et la phase suit aussi ce x2, vérifié avec une EQ en IIR.
Edit 2 : vérifié avec ancienne version de DStudio et idem, donc bug qui existe depuis un moment.
Edit d'Edith, j'ai me suis trompé d'impulse de référence, devrais nettoyer mon disque dur.
Edit 3 : Selon moi le problème provient du résultat de la fft qui est linéaire en fréquence et que j'y vais à la pêche avec des arrondis (c'est pas clair mais je me comprend +-)
Suis occupé à mettre au propre et appliqué le délai sur les complexes avant passage en magnitude/phase.
Le signe du sin est bien + sinon c'est gribouillis.
Simple impulse en FIR qui passait très bien avant mais maintenant j'ai comme du bruit sur la phase en dessous de 100Hz
Une idée ?
le code :
Code : Tout sélectionner
int i=0;
int ii = 0;
while ( i< 16384)
{
i = (int)Math.Pow(2, (double)ii / 48);
double fx = i * fsfir / 32768;
double phi = (2 * Math.PI * fx )/ fsfir * picimpulse;
Complexe c = new Complexe(Math.Cos(phi), Math.Sin(phi));
cft[i] = cft[i] * c; //delai
fftre[ii].frequence = fx;
fftre[ii].magnitude = 20.0 * Math.Log10(cft[i].Module);
fftre[ii].phase = cft[i].Argument * 180 / Math.PI;
ii++;
}
return fftre;
Et pour afficher
Code : Tout sélectionner
i = 0;
while (ffty[i].frequence < 20000)
{
list1.Add(ffty[i].frequence, ffty[i].magnitude);
if (ffty[i].magnitude > -80) { list2.Add(ffty[i].frequence, ffty[i].phase); }
i++;
}
et le problème
Edit peut être une piste ou du moins un autre soucis, mon EQ était à -12dB et elle s'affiche à -24dB.
Et la phase suit aussi ce x2, vérifié avec une EQ en IIR.
Edit 2 : vérifié avec ancienne version de DStudio et idem, donc bug qui existe depuis un moment.
Edit d'Edith, j'ai me suis trompé d'impulse de référence, devrais nettoyer mon disque dur.
Edit 3 : Selon moi le problème provient du résultat de la fft qui est linéaire en fréquence et que j'y vais à la pêche avec des arrondis (c'est pas clair mais je me comprend +-)
- thierryvalk
- Administrateur du site
- Messages : 3523
- Enregistré le : jeu. 9 juil. 2015 20:08
- Localisation : Belgique
Re: Calculs audio numérique pour les nuls
Je confirme, en prenant les 16384 points de la FFT c'est bon.
Il faudrait donc soit tomber juste soit faire le smooting après soit ....
Il faudrait donc soit tomber juste soit faire le smooting après soit ....
Re: Calculs audio numérique pour les nuls
Je te soutiens..............
Retourner vers « DSPiy général »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités