📄 noname.c
字号:
#include<math.h>
#define PI 3.14159265358
#include<conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
FILE *fp,*allp;
double sz(char ch)
{
int i=0;
char num[20];
double b;
while (isdigit(ch)!=0)
{
num[i]=ch;
i++;
ch=fgetc(fp);
}
if(isalpha(ch)!=0)
{
while(isspace(ch)==0)
{
num[i]=ch;
i++;
ch=fgetc(fp);
}
num[i]='\0';
printf("WRONGNUMBER!!\n");
getch();
}
num[i]='\0';
b=atof(num);
return b;
}
int find(int n)
{
int p=0,i;
for (i=0;i<32;i++,n>>=1) if(n&1) p++;
if(p==1) return 1;
else return 0;
}
void fft1d(int flag,int n, double fr[], double fi[],double tblSin[], double tblCos[])
{
int i,m,iw,j=0,l,lp,lp2,n2,k;
double c,s,wr,wi,xa,ya;
for(i=0;i<n-1;i++)
{
if (i < j)
{
xa = fr[i];
fr[i] = fr[j];
fr[j] = xa;
ya = fi[i] ;
fi[i] = fi[j];
fi[j] = ya;
}
n2 = n / 2;
while (j >= n2)
{
j = j - n2 ;
n2 = n2 / 2;
}
j += n2;
}
m = 0;
n2 = n;
while(n2!=1)
{
m += 1 ;
n2 = n2/2;
}
for(l=1;l<=m;l++)
{
lp = (int)pow(2.0,l);
lp2 = lp /2.0;
k = 0;
for(j=0;j<lp2;j++)
{
c = tblCos[k];
s = tblSin[k];
k += n/lp;
for(i=j;i<n;i=i+lp)
{
iw = i + lp2;
wr = fr[iw] * c - fi[iw] * s;
wi = fr[iw] * s + fi[iw] * c;
fr[iw] = fr[i] - wr ;
fi[iw] = fi[i] - wi;
fr[i] = fr[i] + wr ;
fi[i] = fi[i] + wi;
}
}
}
if(flag==1)
{
for(i=0;i<n;i++)
{
fr[i] /= n ;
fi[i] /= n;
}
}
}
void makeTable(int flag,int n, double tblSin[] , double tblCos[])
{
int i;
double cc, arg ;
cc = -2.0 * PI* flag /n;
for(i=0;i<n;i++)
{
arg = i * cc;
tblSin[i] = sin(arg);
tblCos[i] = cos(arg);
}
}
void main()
{
int i=0,j,n=0,m,k=0,s=0;
double fr[256];
double fi[256];
double tblSin[256];
double tblCos[256];
printf("PLEASE INPUT N!\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("PLEASE INPUT fr[%d]!\n",i);
scanf("%d",&m);
k++;
fr[i]=(double)m;
if(k%8==0) clrscr();
}
clrscr();
printf("FROM FR[0] TO FR[%d] is:\n",n-1);
for(i=0;i<n;i++)
{
printf("fr[%d]=%-7g",i,fr[i]);
s++;
if(s%4==0) printf("\n");
}
getch();
printf("\n");
for(i=0;i<n;i++)
{
fi[i]=0;
}
makeTable(1,n, tblSin, tblCos);
fft1d(1,n, fr, fi, tblSin, tblCos);
clrscr();
printf("CONVERT-FFT!\n",i);
for(i=0;i<n;i++)
{
printf("Sr[%-2d]=%-7g",i,fr[i]);
printf("\t\t");
printf("Si[%-2d]=%-7g\n",i,fi[i]);
}
printf("\n\nPLEASE PRESS ENTER!\n");
getch();
clrscr();
makeTable(-1,n, tblSin, tblCos);
fft1d(-1,n, fr, fi, tblSin, tblCos);
printf("INVERSE-CONVERT-FFT!\n",i);
for(i=0;i<n;i++)
{
printf("fr[%-2d]=%-7g",i,fr[i]);
s++;
if(s%4==0) printf("\n");
}
printf("\n\nPLEASE PRESS ENTER!\n");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -