⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quan.c

📁 此源码不是很难
💻 C
字号:
# include <stdio.h>
# include <conio.h>
# include <graphics.h>
# include <math.h>
# define PI 3.14159
# define N 512
main()
{void ss(float xr[],float xi[],int n);
 void fft(float xr[],float xi[],int m,int n);
 void f1(float f,float x[],int n);
 void f2(float f,float x[],int n);
 void f3(float x[],int n);
 void draw11(float x[],int n);
 void draw12(float x[],int k);
 void draw21(float x[],int n);
 void draw22(float x[],int n);
 void jiafd(float x[],float z[],int m,int p);
 void juanji(float x[],int n,float h[],int m,float y[]);
 void liufd(float x[],float z[],int n,int m,int c,int p);

 int d=DETECT,v=VGAHI;
 int k,i,j,l;
 int n,c,m,p;
 float f,t;
 int q;
 float x[N],h[N],y[N],z[N]={0},z1[N]={0},z2[N];
 float zr[N]={0},zi[N]={0};
 float hr[N]={0},hi[N]={0};
 float yr[N]={0},yi[N]={0};
 for(q=0;q<2;q++)
 {
 printf("chose the signals:\n");
 printf("1:sin......:\n");
 printf("2:cos......:\n");
 printf("in put the number:\n");
 scanf("%d",&k);
 if(k==1)
  {printf("in put f,n:\n");
   scanf("%f%d",&f,&n);
   f1(f,x,n);}
 else if(k==2)
  {printf("in put f,n:\n");
   scanf("%f%d",&f,&n);
   f2(f,x,n);}
  printf("in put c of h[n]:\n");
  scanf("%d",&c);
   f3(h,c);
 printf("in put the way to pass:\n");
 printf("chongdiexiangjia.......:1\n");
 printf("chongdiebaoliu.........:2\n");
 scanf("%d",&k);
 if(k==1)
 {printf("in put the per points\n");
  scanf("%d",&m);
  for(j=0;j<n/m;j++)
 {for(k=0;k<(m+c);k++)
  z2[k]=0;
  jiafd(x,z1,m,j);
  juanji(z1,m,h,c,z2);
  for(i=0;i<=(c+m-2);i++)
  y[j*m+i]=y[j*m+i]+z2[i];
  }
 initgraph(&d,&v,"");
 cleardevice();
 draw11(x,n);
 draw12(h,c);
 draw21(y,(n+c-1));
 closegraph();}
 if(k==2)
 {printf("in put the per points\n");
 scanf("%d",&m);
 printf("In put the numbers of FFT:\n");
 scanf("%d",&l);

 initgraph(&d,&v,"");
 cleardevice();
  for(j=0;j<=n/m;j++)
 {for(k=0;k<l;k++)
  {zr[k]=0;zi[k]=0;hr[k]=0;hi[k]=0;}
  liufd(x,z,n,m,c,j);       /*m>c*/
  for(i=0;i<(c+m);i++)
   zr[i]=z[i];

  fft(zr,zi,1,l);
  for(i=0;i<c;i++)
   hr[i]=h[i];
  fft(hr,hi,1,l);
  for(i=0;i<l;i++)
 {zr[i]=zr[i]*hr[i]-zi[i]*hi[i];
  zi[i]=zr[i]*hi[i]+zi[i]*hr[i];
  }
  fft(zr,zi,-1,l);
  for(i=0;i<m;i++)
  {yr[j*m+i]=yr[j*m+i]+zr[c+i-1];
   yi[j*m+i]=yi[j*m+i]+zi[c+i-1];
   }
   }
  draw11(x,n);
  draw12(h,c);
  draw21(yr,(n+c-1));
  draw22(yi,(n+c-1));
 closegraph();}
 }
}

void ss(float xr[],float xi[],int n)
{int i=0,j,s1;
 float a,bj;
 for(j=1;j<n;j++)
 {for (s1=n/2;s1<=i;s1=s1/2)
  {i=i-s1;
  }
  i=i+s1;
 if(i>j)
  {a=xr[i];
   bj=xi[i];
   xr[i]=xr[j];
   xi[i]=xi[j];
   xr[j]=a;
   xi[j]=bj;
   }
  }
 }
void fft(float xr[],float  xi[],int m,int n)
 {
   int loop1,loop2,loop3,le,lel,ip,i=1;
   float wr,wi,tr,ti,url,ur,ui,ls;
   ls=log(n)/log(2);
   ss(xr,xi,n);
   for(loop1=1;loop1<=ls;loop1++)
    { ur=1.0;
    ui=0.0;
    le=pow(2,loop1);
    lel=le/2;
    wr=cos(PI*m/lel);
    wi=-sin(PI*m/lel);
    for(loop2=0;loop2<lel;loop2++)
    { for(loop3=loop2;loop3<n;loop3=loop3+le)
    { ip=loop3+lel;
      tr=ur*xr[ip]-ui*xi[ip];
      ti=ur*xi[ip]+ui*xr[ip];
      xr[ip]=xr[loop3]-tr;
      xi[ip]=xi[loop3]-ti;
      xr[loop3]=tr+xr[loop3];
      xi[loop3]=ti+xi[loop3];
      }
      url=wr*ur-ui*wi;
      ui=wr*ui+ur*wi;
      ur=url;
      }
      }
      if(m==-1)
      { for(i=0;i<n;i++)
       {xr[i]=xr[i]/n;
        xi[i]=xi[i]/n;
        }
        }
        }
void draw11(float x[],int n)
{int i,j;
 setcolor(3);
 line(10,20,600,20);
 line(10,20,10,100);
 line(10,100,600,100);
 line(10,60,600,60);
 getch();
 setcolor(4);
 for(i=0;i<n;i++)
   {j=x[i]*30;
    line(10+i,60,10+i,60-j);
   }
 setcolor(1);
 for(i=1;i<n;i++)
  line (10+(i-1),60-x[i-1]*30,10+i,60-x[i]*30);
    getch();
}
void draw12(float x[],int n)
{int i,j;
 setcolor(3);
 line(10,130,600,130);
 line(10,130,10,210);
 line(10,210,600,210);
 line(10,170,600,170);
 getch();
 setcolor(4);
 for(i=0;i<n;i++)
 {j=x[i]*50;
  line(10+i*4,170,10+i*4,170-j);
 }
 setcolor(1);
 for(i=1;i<n;i++)
  line (10+(i-1)*4,170-x[i-1]*50,10+i*4,170-x[i]*50);
    getch();
}
void draw21(float x[],int n)
{int i;
 float j=0;
 setcolor(3);
 line(10,240,600,240);
 line(10,240,10,340);
 line(10,340,600,340);
 line(10,290,600,290);

 getch();
 setcolor(4);
 for(i=0;i<n;i++)
   {j=x[i]*30;
    line(10+i,290,10+i,290-j);
   }
 setcolor(1);
for(i=1;i<n;i++)
  line(10+(i-1),290-x[i-1]*30,10+i,290-x[i]*30);
  setcolor(15);
 if(1)
  line(10+14,290,10+14,290-x[14]*30);
 getch();
}
void draw22(float x[],int n)
{int i,j;
 setcolor(3);
 line(10,370,600,370);
 line(10,370,10,470);
 line(10,470,600,470);
 line(10,420,600,420);
 getch();
 setcolor(4);
 for(i=0;i<n;i++)
   {j=x[i]*30;
    line(10+i,420,10+i,420-j);
   }
 setcolor(1);
 for(i=1;i<n;i++)
  line(10+(i-1),420-x[i-1]*30,10+i,420-x[i]*30);
  getch();
}
void f1(float f,float x[],int n)
{int i;
 for(i=0;i<n;i++)
 x[i]=sin(2*PI*f*i);
 }
void f2(float f,float x[],int n)
{int i;
 for(i=0;i<n;i++)
 x[i]=cos(2*PI*f*i);
 }
void f3(float x[],int n)
{int i;
 float p;
 for(i=0;i<((n-1)/2);i++)
 {p=2/PI;
  x[2*i]=p/(2*i-15);
  x[2*i-1]=0;
 }
}
void jiafd(float x[],float z[],int m,int p)
{int i;
 for(i=0;i<m;i++)
  z[i]=x[p*m+i];
}
void liufd(float x[],float z[],int n,int m,int c,int p)
{int i;
 if(p==0)
 {for(i=0;i<(c-1);i++)
  z[i]=0;
 for(i=(c-1);i<=(c+m-2);i++)
  z[i]=x[p*m+i-(c-1)];}
 else if(p>0&&p<(n/m))
  for(i=0;i<=(c+m-2);i++)
   z[i]=x[p*m+i-(c-1)];
 else if(p==(n/m))
  {for(i=0;i<m;i++)
   z[i]=x[p*m+i-(c-1)];
   for(i=m;i<=(c+m-2);i++)
   z[i]=0;}
  }
void juanji(float x[],int n,float h[],int m,float y[])
{int i,j;
 for(i=0;i<(n+m-1);i++)
 {if(i<=m-2)
   for(j=0;j<=i;j++)
   y[i]=y[i]+x[j]*h[i-j];
  else if(i>=(m-1)&&i<=n)
   for(j=i-30;j<=i;j++)
   y[i]=y[i]+x[j]*h[i-j];
  else if(i>n&&i<(n+m-2))
   for(j=i-30;j<=200;j++)
   y[i]=y[i]+x[j]*h[i-j];
 }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -