1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
   | // calcule la transformée de Fourier Discrète ( non-optimisée FFT ) du
// tableau d'échantillon "Input" contenant "NbOfSamples" échantillons
// avec la résolution "NbOfFreqSamples"
 
int DFT(double *Input,unsigned int NbOfSamples,
				unsigned int NbOfFreqSamples, double Te,
				double *Output,	double *Fe)
{
	// initialisation
	double PI = 3.14159;
 
	// calcul de la transformee de Fourrier
	double REEL[4096*2];
	double IMAG[4096*2];
	double MODU[4096*2];
 
	// omega = 2.PI.f avec f = 1/T donc omega = 2.PI/NbOfFreqSamples
	// avec NbOfFreqSamples la periode d'echentillonnage.
	double OMEGA = 2 * PI / NbOfFreqSamples;
 
	for (int k=0; k < NbOfFreqSamples; k++)
	{
		for (int m=0; m < NbOfFreqSamples; m++)
		{
			double ANGLE = k*OMEGA*m;
			REEL[k]=REEL[k]+Input[m]*cos(ANGLE)/NbOfFreqSamples;
			IMAG[k]=IMAG[k]-Input[m]*sin(ANGLE)/NbOfFreqSamples;
		}
	}
 
	// CALCUL MODULE
	for (int m=0; m < NbOfFreqSamples; m++)
	{
	  Output[m]=sqrt((REEL[m]*REEL[m])+(IMAG[m]*IMAG[m]));
	}
 
	// calcul de la periode d'echantillonnage en frequence(graduation abscisses)
	double TE=(NbOfFreqSamples-1)*(Te/NbOfSamples);
	*Fe = 1/TE;
} | 
Partager