#include "math.h" #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr void four1(float *data,int nn,int isign); double souslin(double *y,int n); /* soustrait la droite de y[0] à y[n-1] */ void filtre(double *y,int n,double f); void spectre(double *y,int n); void spectreRMS(double *y,int n); /* -------- filtre passe - bas du tableau double y[] -----------*/ /*double souslin(double *y,int n) /* soustrait la droite de y[0] à y[n-1] {double pas;int i; pas=(y[n-1]-y[0])/(double)(n-1); for (i=0;i=0;i--) {v[2*i+1]=v[i]/(float)n;v[2*i+2]=0;} four1(v,n,1); for (i=(int)f;i=0;i--) y[i]= (double)v[i]; for (i=0;i=0;i--) {v[2*i+1]=(v[i]-ym)/(float)n;v[2*i+2]=0;} four1(v,n,1); for (i=0;i=0;i--) y[i]=(double)v[i]; } void spectre(double *y,int n) {float *v;int i;float ym=0; v=(float *)y; souslin(y,n); for (i=0;i=0;i--) {v[2*i+1]=(v[i]-ym)/(float)n;v[2*i+2]=0;} four1(v,n,1); for (i=0;i=0;i--) y[i]=(double)v[i]; } /* ----------------- transformée de Fourier complexe ---------*/ void four1(float *data,int nn,int isign) /* data tableau de 1 à 2*nn */ /* isign=1 --> Tf directe data = real-imag-real-imag ........ */ /* isign=-1 --> Tf inverse */ { int n,mmax,m,j,istep,i; double wtemp,wr,wpr,wpi,wi,theta; float tempr,tempi; n=nn << 1; j=1; for (i=1;i i) { SWAP(data[j],data[i]); SWAP(data[j+1],data[i+1]); } m=n >> 1; while (m >= 2 && j > m) { j -= m; m >>= 1; } j += m; } mmax=2; while (n > mmax) { istep=2*mmax; theta=6.28318530717959/(isign*mmax); wtemp=sin(0.5*theta); wpr = -2.0*wtemp*wtemp; wpi=sin(theta); wr=1.0; wi=0.0; for (m=1;m