Coefficients de Fourier

Discutez d'informatique ici !
bnoch
Membre Naturel
Messages: 15
Enregistré le: 11 Oct 2013, 00:11

Coefficients de Fourier

par bnoch » 31 Jan 2014, 18:07

Bonjour, j'aimerais avoir votre avis sur cette méthode de calcul, j'ai un peu de mal à rendre un signal périodique, voyez-vous une erreur ?

public static WaveCmp[] getComponents (double[] values, int samplerate, int harmonics)
{
WaveCmp[] result = new WaveCmp[harmonics];
double baseLevel = 0;
for (int i = 0; i < values.Length; i++)
baseLevel += values [i];
baseLevel /= values.Length;
for (int i = 0; i < harmonics; i++) {
double f = samplerate / (double)values.Length * (i + 1);
result [i] = new WaveCmp ();
for (int j = 0; j < values.Length; j++) {
double ph = f * (Math.PI * 2d / samplerate) * j;
result [i].a += values [j] * Math.Cos (ph);
result [i].b += values [j] * Math.Sin (ph);
}
result [i].a *= 2d / samplerate;
result [i].b *= 2d / samplerate;
result [i].frq = f;
result[i].amp = Math.Pow(result[i].a*result[i].a+result[i].b*result[i].b,1/2d);
result[i].ph = Math.Atan2 (result[i].b, result[i].a);
result [i].lvl = baseLevel;
}
return result;
}

public struct WaveCmp
{
public double a, b, frq, amp, ph, lvl;
}


Et voici la fonction restituant en principe le signal :

public static double Level (WaveCmp[] cmpts, int samplerate, int pos)
{
double v_ = cmpts [0].lvl;
for (int j = 0; j < cmpts.Length; j++) {
double ph = cmpts [j].frq * Math.PI * 2d / samplerate * pos;
v_ += cmpts [j].a * Math.Cos (ph);
v_ += cmpts [j].b * Math.Sin (ph);
}
return v_;
}



Retourner vers ϟ Informatique

Qui est en ligne

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

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite