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

📄 noname.c

📁 数字信号处理实验
💻 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 + -