rlfft.cpp

来自「信号处理的几种算法」· C++ 代码 · 共 35 行

CPP
35
字号
#include <stdlib.h>
#include <math.h>

 void fft(double x[32],double y[32],int n,int sign);
 void rlfft(double x[64],int n)
 {
	 int i,n1;
	 double a,c,e,s,fr,fi,gr,gi,*f,*g;
	 f=(double *)malloc(n/2*sizeof(double));
	 g=(double *)malloc(n/2*sizeof(double));
	 n1=n/2;
	 e=3.141592653589793/n1;
	 for(i=0;i<n1;i++)
	 {
		 f[i]=x[2*i];
		 g[i]=x[2*i+1];
	 }
	 fft(f,g,n1,1);
	 x[0]=f[0]+g[0];
	 x[n1]=f[0]-g[0];
	 for(i=1;i<n1;i++)
	 {
		 fr=(f[i]+f[n1-i])/2;
		 fi=(g[i]-g[n1-i])/2;
		 gr=(g[n1-i]+g[i])/2;
		 gi=(f[n1-i]-f[i])/2;
		 a=i*e;
		 c=cos(a);
		 s=sin(a);
		 x[i]=fr+c*gr+s*gi;
		 x[n-i]=fi+c*gi-s*gr;
	 }
	 free(f);
	 free(g);
 }

⌨️ 快捷键说明

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