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