De todos modos me sigue quedando la duda si esos periodos hay que multiplicarlos por 2.
Pongo el código fuente que utilizo. El resto en excel.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Pi M_PI
main(int argc,char **argv){
FILE *fd;
double input[10000];
double x[10000];
double y[10000];
int i,j,k,N;
if(argc!=2){
fprintf(stderr,"uso %d fichero\n",argv[0]);
exit(1);
}
N=leer(argv[1],input);
if(N<0)exit (2);
dft(input,x,y,N);
/*comprueba(x,y,N);*/ /* Veridicado*/
return 0;
}
int leer(char *fichero,double *input){
FILE *fd;
int i=0;
fd=fopen(fichero,"r");
if(fd==NULL){
perror(fichero);
return -1;
}
while(!feof(fd)){
fscanf(fd,"%lf",&input[i]);
if(feof(fd))break;
/*printf("%6.2lf ",input[i]);*/
i++;
}
/*printf("\n\n");*/
return i;
}
int comprueba(double *x,double *y,int n)
{
int i,t;
double X,Y,f0;
for(t=0;t<n;t++){
X=0;
Y=0;
f0=2*Pi*t/n;
for(i=0;i<n;i++){
X+=x[i]*cos(f0*i);
Y+=y[i]*sin(f0*i);
}
printf("%3d %6.3lf %6.3lf %6.3lf\n",t,X,Y,X+Y);
}
printf("\n");
return 0;
}
int dft(double *input,double *x,double *y,int n)
{
int i,j,k;
double f;
for(i=0;i<n;i++){
x[i]=0;
y[i]=0;
f=2*Pi*i/n;
for(j=0;j<n;j++){
x[i]+=input[j]*cos(f*j);
y[i]+=input[j]*sin(f*j);
}
x[i]/=n;
y[i]/=n;
}
printf("frecuencia base %9.4lf\n",2*Pi/n);
printf(" i frec period x y mod\n");
for(i=0;i<=n;i++){
printf("%3d %9.4lf %9.4lf %9.4lf\n",i,x[i],y[i],sqrt(x[i]*x[i]+y[i]*y[i]));
}
printf("\n");
return 0;
}