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

📄 fft.c

📁 主要用于采样数据的接收
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h> 
void tra(float *x,float *y)
{
  float t;
  t=(*x);
  (*x)=(*y);
  (*y)=t;
}

void FFT(float *xr, float *xi, int n, int inv)
{
  int i,j,a,b,k,m;
  int ep,arg,mt,s0,s1;
  float sign,pr,pi,ph;
  float *c,*s;

  c=(float *)calloc(n,sizeof(float));
  if(c==NULL) exit(1);
  s=(float *)calloc(n,sizeof(float));
  if(s==NULL) exit(1);
    j=0;
    if(inv==0)
    {
      sign=1.0;
      for(i=0;i<n;i++)
      {
        xr[i]=xr[i]/n;
        xi[i]=xi[i]/n;
      }
    }
    else sign=-1.0;

    for(i=0; i<n-1;i++)
    {
      if(i<j)
      {
        tra(&xr[i],&xr[j]);
        tra(&xi[i],&xi[j]);
      }
      k=n/2;
      while(k<=j)
      {
        j=j-k;
        k=k/2;
      }
      j=j+k;
    }
    ep=0;
    i=n;
    while(i!=1)
    {
      ep=ep+1;
      i=i/2;
    }
    ph=2*M_PI/n;

    for(i=0;i<n;++i)
    {
      s[i]=sign*sin(ph*i);
      c[i]=cos(ph*i);
    }
    a=2;
    b=1;
    for(mt=1;mt<=ep;mt++)
    {
      s0=n/a;
      s1=0;
      for(k=0;k<b;k++)
      {
        i=k;
        while(i<n)
        {
          arg=i+b;
          if(k==0)
          {
            pr=xr[arg];
            pi=xi[arg];
          }
          else
          {
            pr=xr[arg]*c[s1]-xi[arg]*s[s1];
            pi=xr[arg]*s[s1]+xi[arg]*c[s1];
          }
          xr[arg]=xr[i]-pr;
          xi[arg]=xi[i]-pi;
          xr[i]=xr[i]+pr;
          xi[i]=xi[i]+pi;
          i=i+a;
        }
        s1=s1+s0;
      }
      a=2*a;
      b=b*2;
    }
    free(c);
    free(s);
}

void SignalRect(int n, int m, unsigned char *y)
{
  int i;
  for(i=0;i<n;i++)
    y[i]=0; /* Get the initial number*/
  for(i=0;i<n/4;i++)
  {
    y[i]=10;
    y[i+n/4]=2260;
    y[i+n/2]=10;
    y[i+3*n/4]=226;
  }

}

void SignalCos(int n, float f, unsigned char *y)
{
  int i;
  for(i=0;i<n;i++)
    y[i]=0;
  for(i=0;i<n;i++)
    y[i]=cos(2*M_PI*f*i/n)*127+128;
}


⌨️ 快捷键说明

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