FFT 相位差算法的 C 语言实现 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行认真校对,但是难免会有疏漏的地方,但是任然希望(FFT 相位差算法的 C 语言实现)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,假如觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为 FFT 相位差算法的 C 语言实现的全部内容。/*此算法为 FFT 相位差算法的 C 语言实现,经验证可用(网上有很多此类程序无法运行);前半部分为 FFT 算法的子程序,也可用作其它用途*/#include 〈stdio。h〉#include #include 〈math。h>typedef struct {double real,imag;} complex;complex cexp(complex a){ complex z; z。real=exp(a。real)*cos(a.imag); z。imag=exp(a。real)*sin(a.imag); return(z); }void mcmpfft(complex x[],int n,int isign){ complex t,z,ce; double pisign; int mr,m,l,j,i,nn; for(i=1;i<=16;i++) /*n must be power of 2 */ { nn=(int)pow(2,i); if(n==nn) break; } if(i>16) { printf(” N is not a power of 2 ! \n"); return; } z。real=0。0; pisign=4*isign*atan(1。); /*pisign 的值为+180 度或-180 度*/ mr=0; for(m=1;m〈n;m++) {l=n; while(mr+l>=n) l=l/2; mr=mr%l+l; if(mr<=m) continue; t。real=x[m].real;t.imag=x[m]。imag; x[m]。real=x[mr].real;x[m].imag=x[mr].imag; x[mr]。real=t。real;x[mr]。imag=t。imag; } l=1; while(1) { if(l>=n) { if(isign==-1) /*isign=-1 For Forward Transform*/ return; for(j=0;j