看看这个是不是你需要的
算法原理与matlab语言的fft和ifft函数同。(可详见matlab的help文件)。
- #include "stdio.h"
- #include "math.h"
- #define PI 3.1415926
- #define N 7
- void mefft(float pr[],float pi[],int n,float fr[],float fi[])
- {
- int i,k;
- for(k=0;k<n;k++)
- {
- fr[k]=0;
- fi[k]=0;
- }
- for(k=0;k<n;k++)
- {
- for(i=0;i<n;i++)
- {
- fr[k]=fr[k]+pr[i]*cos(-2*PI*i*k/n)-pi[i]*sin(-2*PI*i*k/n);
- fi[k]=fi[k]+pi[i]*cos(-2*PI*i*k/n)+pr[i]*sin(-2*PI*i*k/n);
- }
-
- }
- }
- void meifft(float fr[],float fi[],int n,float pr[],float pi[])
- {
- int i,j,k;
- for(i=0;i<n;i++)
- {
- pr[i]=0;
- pi[i]=0;
- }
- for(i=0;i<n;i++)
- {
- for(k=0;k<n;k++)
- {
- pr[i]=pr[i]+(fr[k]*cos(2*PI*i*k/n)-fi[k]*sin(2*PI*i*k/n));
- pi[i]=pi[i]+(fi[k]*cos(2*PI*i*k/n)+fr[k]*sin(2*PI*i*k/n));
- }
- pr[i]=pr[i]/n;
- pi[i]=pi[i]/n;
- }
- }
- main()
- {
- float fr[N],fi[N];
- int i,j;
- static float pr[N]={1,2,3,4,5,6,7};
- static float pi[N]={0,0,0,0,0,0,0};
- mefft(pr,pi,7,fr,fi);
- for(i=0;i<7;i++)
- {
- printf("%f %f\n",fr[i],fi[i]);
- }
- meifft(fr,fi,7,pr,pi);
- for(i=0;i<7;i++)
- {
- printf("%f %f\n",pr[i],pi[i]);
- }
- }
复制代码 |