发表于:2004-12-01 11:01:00
2楼
*********************************************************************
这是我自己做的程序,经过调试,没有问题·!·
*********************************************************************
#include<stdio.h>
#include<math.h>
#define PI 3.14159
#define T 16
/********************************************************************************/
/* ARRAGED SUBFUNCTION */
int arr(int y,int m,int k)
{
int l,w;
l=m/2;
if(y<=l)
w=k+l;
else
w=arr(y-l,l,k)-l;
return (w);
}
/********************************************************************************/
/* FFT SUBFUNCTION */
float FFT(float xre[],float xim[],float yre[],float yim[],int sw)
{
float fre[T/2],fim[T/2],gre[T/2],gim[T/2];
float wre[T/2],wim[T/2];
float val;
int r,n,N;
int j=1;
if(sw==1)
for(n=0;n<T;n++)
{
xre[n]=xre[n];
xim[n]=xim[n];
}
if(sw==-1)
for(n=0;n<T;n++)
{
xre[n]=xre[n]/T;
xim[n]=xim[n]/T;
}
for(N=T;N>0;N/=2)
for(r=0;r<T/N;r++)
{
for(n=0;n<N/2;n++)
{
val=2*PI*n/N;
wre[n]=cos(val);
wim[n]=(-1)*sw*sin(val);
fre[n+r*N]=xre[n+r*N]+xre[n+r*N+N/2];
fim[n+r*N]=xim[n+r*N]+xim[n+r*N+N/2];
gre[n+r*N]=xre[n+r*N]*wre[n]-xre[n+r*N+N/2]*wre[n]-xim[n+r*N]*wim[n]+xim[n+r*N+N/2]*wim[n];
gim[n+r*N]=xre[n+r*N]*wim[n]-xre[n+r*N+N/2]*wim[n]+xim[n+r*N]*wre[n]-xim[n+r*N+N/2]*wre[n];
xre[n+r*N]=fre[n+r*N];
xre[n+r*N+N/2]=gre[n+r*N];
xim[n+r*N]=fim[n+r*N];
xim[n+r*N+N/2]=gim[n+r*N];
}
}
for(n=1;n<T;n++)
{
j=arr(j,T,j);
yre[n]=xre[j-1];
yim[n]=xim[j-1];
}
yre[0]=xre[0];
yim[0]=xim[0];
for(n=0;n<T;n++)
{
return(yre[n]);
return(yim[n]);
}
}
/*****