Exemple d'utilisation de la transformee de fourier discrete

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 630 fois - Téléchargée 31 fois

Contenu du snippet

Ceci est un programme permettant de calculer la Transformee de Fourier Discrète de la fonction f(x) = x(1-x) sur l'intervalle [0,1].
Je débute en Java donc il se peut que mon code ne soit pas trop optimisé,
n'hésiter à mettre des commentaires.

Source / Exemple :


import java.io.*;
import java.lang.*;

class DFT 
{   static  int NMAX = 128; 
    static  int MMAX = 8;

static double [] fr = new double[NMAX]; 
static double [] fi = new double[NMAX];
static double [] gr = new double[NMAX];
static double [] gi = new double[NMAX];

static void dft(double [] fr, double [] fi,double [] gr,double [] gi, int n) 
{

int i,j;
double pi,x,q;

pi = 4*Math.atan(1);
x  = 2*pi/n;

for (i = 0; i < n; ++i)
  {
  gr[i] = 0;
  gi[i] = 0;
  for (j = 0; j < n; ++j)
    {
    q = x*j*i;
    gr[i] = gr[i]+fr[j]*Math.cos(q)+fi[j]*Math.sin(q);
    gi[i] = gi[i]+fi[j]*Math.cos(q)-fr[j]*Math.sin(q);
    }
  }
}

public static void main( String argv[] ) { 

int i,n,m;
double f0,h,rn,x;
//double fr[],fi[],gr[],gi[];
double [] fr = new double[NMAX];
double [] fi = new double[NMAX];
double [] gr = new double[NMAX];
double [] gi = new double[NMAX];
n = NMAX;
m = MMAX;
h = 1.0/(n-1);
rn = n;
f0 = 1/Math.sqrt(rn);

for (i = 0; i < n; ++i)
  {
  x = h*i;
  fr[i] = x*(1-x);
  fi[i] = 0;
  }
dft (fr,fi,gr,gi,n);
for (i = 0; i < n; ++i)
  {
  gr[i] = f0*gr[i];
  gi[i] = f0*gi[i];
  }

/* execution de la transformee inverse */

for (i = 0; i < n; ++i)
  {
  gi[i] = -gi[i];
  }
dft (gr,gi,fr,fi,n);
for (i = 0; i < n; ++i)
  {
  fr[i] =  f0*fr[i];
  fi[i] = -f0*fi[i];
  if (i == 0 || i%m == 0)
    {
    x = h*i;
    System.out.println(x + " " + fr[i] );
    }
  }
}
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.