继续做图像工程作业,还没搞懂fft及ifft的原理,先找点源码,等做完再贴出来,呵呵
#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
float data[32];
void four(int nn,int isign)
{
unsigned long 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<n;i+=2)
{
if (j > 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=mmax << 1;
theta=isign*(6.28318530717959/mmax);
wtemp=sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi=sin(theta);
wr=1.0;
wi=0.0;
for (m=1;m<mmax;m+=2)
{
for (i=m;i<=n;i+=istep)
{
j=i+mmax;
tempr=wr*data[j]-wi*data[j+1];
tempi=wr*data[j+1]+wi*data[j];
data[j]=data[i]-tempr;
data[j+1]=data[i+1]-tempi;
data[i] += tempr;
data[i+1] += tempi;
}
wr=(wtemp=wr)*wpr-wi*wpi+wr;
wi=wi*wpr+wtemp*wpi+wi;
}
mmax=istep;
}
}
int main(int argc, char* argv[])
{/*
FILE *fp=fopen("D:\\Program\\VCTempCon\\data.txt","r");
if(!fp)
{
printf("Hello World!\n");
return 0;
}
int i;
for(i=0;i<32;i++)
{
fscanf(fp,"%f %f",&data[i],&data[i+1]);
i++;
}
fclose(fp);
four(16,1);
fp=fopen("four.txt","w");
if(!fp)
{
printf("can't create file\n");
return 0;
}
for(i=0;i<32;i++)
fprintf(fp,"%f ",data[i]);
fclose(fp);
four(16,-1);
fp=fopen("four2.txt","w");
if(!fp)
{
printf("can't create file\n");
return 0;
}
for(i=0;i<32;i++)
fprintf(fp,"%f ",data[i]);
fclose(fp);*/
int d[4],i;
float *p;
for(i=0;i<4;i++)
d[i]=i;
p=(float*)d;
printf("sizeof(int)=%d \n",sizeof(int));
printf("sizeof(float)=%d \n",sizeof(float));
for(i=0;i<4;i++)
printf("%d %f\n",d[i],p[i]);
return 0;
}
float data[32];
void four(int nn,int isign)
{
unsigned long 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<n;i+=2)
{
if (j > 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=mmax << 1;
theta=isign*(6.28318530717959/mmax);
wtemp=sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi=sin(theta);
wr=1.0;
wi=0.0;
for (m=1;m<mmax;m+=2)
{
for (i=m;i<=n;i+=istep)
{
j=i+mmax;
tempr=wr*data[j]-wi*data[j+1];
tempi=wr*data[j+1]+wi*data[j];
data[j]=data[i]-tempr;
data[j+1]=data[i+1]-tempi;
data[i] += tempr;
data[i+1] += tempi;
}
wr=(wtemp=wr)*wpr-wi*wpi+wr;
wi=wi*wpr+wtemp*wpi+wi;
}
mmax=istep;
}
}
int main(int argc, char* argv[])
{/*
FILE *fp=fopen("D:\\Program\\VCTempCon\\data.txt","r");
if(!fp)
{
printf("Hello World!\n");
return 0;
}
int i;
for(i=0;i<32;i++)
{
fscanf(fp,"%f %f",&data[i],&data[i+1]);
i++;
}
fclose(fp);
four(16,1);
fp=fopen("four.txt","w");
if(!fp)
{
printf("can't create file\n");
return 0;
}
for(i=0;i<32;i++)
fprintf(fp,"%f ",data[i]);
fclose(fp);
four(16,-1);
fp=fopen("four2.txt","w");
if(!fp)
{
printf("can't create file\n");
return 0;
}
for(i=0;i<32;i++)
fprintf(fp,"%f ",data[i]);
fclose(fp);*/
int d[4],i;
float *p;
for(i=0;i<4;i++)
d[i]=i;
p=(float*)d;
printf("sizeof(int)=%d \n",sizeof(int));
printf("sizeof(float)=%d \n",sizeof(float));
for(i=0;i<4;i++)
printf("%d %f\n",d[i],p[i]);
return 0;
}
转载于:https://blog.51cto.com/laomaizi/106420