#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N  2000

double x[N], y[N]; 
double Re, Im;
double fre[N], amp[N], faz[N];

int n;


int adatbe()
{
  FILE *f;
  int i;

  f = fopen("xy.dat","rt");
  i = 0;
  while( fscanf(f,"%lf %lf",&x[i],&y[i]) != EOF)
  {
     i = i+1;
  }
  fclose(f);
  return i;
}

int dft(int nd, int nf)
{
  int i,j;
 
  for(i=0;i<nf;i++)
  {
    Re=0.0; Im=0.0;
    for(j=0;j<nd;j++)
    {
      Re = Re + y[j]*cos(2*M_PI*fre[i]*x[j]);
      Im = Im + y[j]*sin(2*M_PI*fre[i]*x[j]);
    }
    Re = Re / nd;
    Im = Im / nd;
    amp[i] = sqrt(Re*Re + Im*Im);
    if(Re != 0) faz[i] = atan(-Im/Re); else faz[i]=0.0; 
  }   
  return nf; 
}

int adatki(int k)
{
  FILE *f;
  int i;

  f = fopen("dft.out","wt");
  i = 0;
  while(i < k) 
  {
     fprintf(f,"%lf %lf %lf \n",fre[i],amp[i],faz[i]);
     i = i+1;
  }
  fclose(f);
  return i;
}


int main()
{
  int i;
    
     n = adatbe();
     
     for(i=0;i<1000;i++)
     {
        fre[i] = 5.0/1000.0*i;
     }

     dft(n,1000);

     adatki(1000);

}

