• PUDN用户
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 450
    下载次数
  • 2008-04-28 12:07
    上传日期
基4的FFT算法程序,它是要通过将长度为N的数据序列转化成大小为4的DFT来实现高速化。从理论上讲,它比执行时间缩短为基2的FFT的3/4。该程序性能优越,可用性很强。下载即可用!
FFT.rar
  • www.pudn.com.txt
    218B
  • FFT.c
    1.8KB
内容介绍
#include<stdio.h> #include<math.h> #define PI 3.141592653 void fft(x,y,l,f) double *x,*y,f; int l; { int i,i0,i1,i2,i3,j,l1,n,ns,n1,n2,n3; int arg,arg1,arg2,arg3,*m; double s1,c1,s2,c2,s3,c3,sc1,sc2,sc3; double x0,y0,x1,y1,x2,y2,x3,y3,t; n=1; while(l!=0){n*=4;l--;} /*n=4^l*/ n1=ns=n/4;n2=2*n1;n3=3*n1; sc1=2.0*PI/(double)n; sc2=2.0*sc1; sc3=3.0*sc1; /*work area for bit operation*/ if((m=(int*)calioc(n,2))==NULL) { printf("\n Out of memory error !!!\n");exit(0); } while(ns>=1) /*main loop*/ { for(l1=0;l1<n;l1+=(4*ns)) { arg=m[l1]/4;arg1=arg+n1; arg2=arg+n2; arg3=arg+n3; c1=cos(sc1*(double)arg);s1=sin(f*sc1*(double)arg); c2=cos(sc2*(double)arg);s2=sin(f*sc2*(double)arg); c3=cos(sc3*(double)arg);s3=sin(f*sc3*(double)arg); for(i0=l1;i0<l1+ns;++i0) { i1=i0+ns;i2=i1+ns;i3=i2+ns; x0=x[i0];y0=y[i0]; x1=x[i1]*c1-y[i1]*s1; y1=y[i1]*c1+x[i1]*s1; x2=x[i1]*c2-y[i1]*s2; y2=y[i1]*c2+x[i1]*s2; x3=x[i1]*c3-y[i1]*s3; y3=y[i1]*c3+x[i1]*s3; x[i0]=x0+x1+x2+x3; y[i0]=y0+y1+y2+y3; x[i2]=x0-x1+x2-x3; y[i2]=y0-y1+y2-y3; if(f<0.0) { x[i1]=x0+y1-x2-y3; y[i1]=y0-x1-y2+x3; x[i3]=x0-y1-x2+y3; y[i3]=y0+x1-y2-x3; } else { x[i1]=x0-y1-x2+y3; y[i1]=y0+x1-y2-x3; x[i3]=x0+y1-x2-y3; y[i3]=y0-x1-y2+x3; } m[i0]=arg;m[i1]=arg1; m[i2]=arg2;m[i3]=arg3; } } ns/=4; } if(f<0.0) /*judge fft or ifft */ { for(i=0;i<n;++i) { x[i]/=(double)n; y[i]/=(double)n; } } for(i=0;i<n;++i) /*bit reverse operation*/ { if((j=m[i])>i) { t=x[i];x[i]=x[j];x[j]=t; t=y[i];y[i]=y[j];y[j]=t; } } free(m); }
评论
    相关推荐
    • dftfft.rar
      自己编写的dftfft的算法。。。。。。。。。。。。。。
    • DFT-FFT.rar
      dftfft的算法,有助于很好的理解算法内容,实例清楚明了
    • DFT IDFT FFT.rar
      最基础的数字信号处理关于DFT,IDFT,FFT可以直接matlab运行
    • DFTFFT.rar
      基于matlab的DFTFFT的数字信号处理教程和编码。
    • DFT-FFT-master.zip
      利用matlab实现对DFT离散傅里叶算法对数字信号的处理。
    • VC++ DFT FFT
      基于VC++,MFC工程,实现信号的DFTFFT,直观呈现幅度谱、相位谱。
    • DFT FFT vc 实现
      用vc++实现数字信号处理中FFTDFT
    • DFTFFT频谱分析
      通过matlab来进行DFT FFT频谱分析的实验
    • DFT and FFT.zip
      fast fourier transform and DFT algorithm examples and matlab code
    • DFT FFT.rar
      离散傅里叶变换的详细实现方法。DFTFFT