
J'ai même pas de gestion des Complexes en Net2.

Je viens de rajouter ceci :http://codes-sources.commentcamarche.net/source/38027-complexes
thierryvalk a écrit :Ça c'est la version sans complexes et qui fonctionne actuellement chez tout le monde.![]()
J'ai même pas de gestion des Complexes en Net2.![]()
Code : Tout sélectionner
f = 2 * f / fs;
double w = Math.PI * f;
Complexe Zb = new Complexe(Math.Cos(w),-Math.Sin(w));
Complexe zb2 = zb2*zb2;
Complexe Hnum = (b0+(b1*zb2))+(b2*zb2);
Complexe Hdenom = (1+(a1*zb2)+(a2*zb2));
Complexe H = Hnum/hdemon;
double Amplitude = 20 * Math.Log(H.Module);
double Phase = 180/Math.PI*H.Argument;
thierryvalk a écrit :Mais ça coince car si zb2 est un complexe il ne peut être multiplié par un double (float).
t'as lu ce que j'ai écrit vendredi....cos(w) c'est partie réelle et -sin(w) l'imaginaire de zb ?
thierryvalk a écrit :bon en traduisant +- ton code qui n'en ait pas ...Complexe Hdenom = (1+(a1*zb2)+(a2*zb2));
Complexe H = Hnum/hdemon;
t'as lu ce que j'ai écrit vendredi....![]()
Code : Tout sélectionner
fresponse frp = new fresponse();
Complexe a1 = new Complexe(s.a1, 0);
Complexe a2 = new Complexe(s.a2, 0);
Complexe b0 = new Complexe(s.b0, 0);
Complexe b1 = new Complexe(s.b1, 0);
Complexe b2 = new Complexe(s.b2, 0);
Complexe c = new Complexe(1, 0);
f = 2 * f / fs;
double w = Math.PI * f;
Complexe Zb = new Complexe(Math.Cos(w),-Math.Sin(w));
Complexe zb2 = Zb * Zb;
Complexe Hnum = (b0+(b1*zb2))+(b2*zb2);
Complexe Hdenom = (c+(a1*zb2)+(a2*zb2));
Complexe H = Hnum / Hdenom;
double Amplitude = 20 * Math.Log(H.Module);
double Phase = 180/Math.PI*H.Argument;
frp.phase = Phase;
frp.magnitude = Amplitude;
return frp;
Code : Tout sélectionner
fresponse frp = new fresponse();
Complexe a1 = new Complexe(s.a1, 0);
Complexe a2 = new Complexe(s.a2, 0);
Complexe b0 = new Complexe(s.b0, 0);
Complexe b1 = new Complexe(s.b1, 0);
Complexe b2 = new Complexe(s.b2, 0);
Complexe c = new Complexe(1, 0);
f = 2 * f / fs;
double w = Math.PI * f;
Complexe z = new Complexe(Math.Cos(w),-Math.Sin(w));
Complexe zb = z * z;
Complexe Hnum = b0 + b1 * z + b2 * zb;
Complexe Hdenom = c + a1 * z + a2 * zb;
Complexe H = Hnum / Hdenom;
double Amplitude = 20 * Math.Log(H.Module);
double Phase = 180/Math.PI*H.Argument;
frp.phase = Phase;
frp.magnitude = Amplitude;
return frp;
Si j'ai bien compris la suite.
Je passe l'Impulse de la mesure par la FFT qui me retourne un tableau de de longueur de la FFT/2 en complexes. oui
Je crée un tableau de réponse en fréquence complexe et y met les complexes en fonction des fréquences que je désire selon la résolution voulue en appliquant x = Math.Pow(2, (double)i / 48); jusqu'à 20KHz pour x. Dans l'exemple de la formule j'aurais du 1/48 d'octave.oui pour le principe, formule corrigée ci-dessous en (1)
Pour chaque x je calcule la réponse du biquad qui me retourne H que je multiplie à la position de l'index du tableau et sauvegarde dans ce même tableau.oui c'est une manière qui marche avec la remarque (2)
Je fais de même pour tous les biquads concernés.oui, ce qui les multiplie entre eux et applique toutes leurs corrections a la mesure source
Au final j'extrait Amplitude et Phase du tableau pour créer mes courbes.oui
faut savoir que les calculs sont très faux quand on s'approche de 0Hz (tout comme quand on s'approche de Fs/2). Pour ce qui est <10Hz, je m'y fierai pas trop et n'afficherai pas.thierryvalk a écrit :Je sais pour f0, pas une erreur, je commence bien à 1Hz donc j'ai pas mis le 1. (c'est pour le MFB de Philby)
En fait après tests c'est le plus simple et efficace.
Y a pas photo pour la maintenabilité rien qu'a voir le deuxième code face au premier. Et la phase est enfin facilement accessiblethierryvalk a écrit :Le compromis, c'est surtout d'avoir la courbe qui correspond bien au fichier .apd des biquads, expérience des premières versions de DStudio où ce n'était pas le cas et compliqué à debugger.
Par curiosité, je viens de regarder la différence au 1/48eme en partant de 1Hz, ou de 10Hz.alka a écrit :faut savoir que les calculs sont très faux quand on s'approche de 0Hz (tout comme quand on s'approche de Fs/2). Pour ce qui est <10Hz, je m'y fierai pas trop et n'afficherait pas.thierryvalk a écrit :Je sais pour f0, pas une erreur, je commence bien à 1Hz donc j'ai pas mis le 1. (c'est pour le MFB de Philby)
En fait après tests c'est le plus simple et efficace.
Retourner vers « DSPiy général »
Utilisateurs parcourant ce forum : Bing [Bot] et 8 invités