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

📄 fft1.cpp

📁 用visual c++6.0编写的 FFT程序
💻 CPP
字号:
#include "stdafx.h"
#include "iostream.h"
#include "math.h"

#define  pi  3.141592653

struct  MultiNumber
{
	double real;
	double imag;
};

MultiNumber ComMultiply(MultiNumber x , MultiNumber y)
{
	MultiNumber a;

    a.real = x.real*y.real - x.imag*y.imag;

    a.imag = x.real*y.imag + x.imag*y.real;

	return a;
}

MultiNumber ComAdd(MultiNumber x , MultiNumber y)
{
	MultiNumber a;

	a.real = x.real + y.real;

	a.imag = x.imag + y.imag;

	return a;
}

MultiNumber W(int m , int k)
{
	MultiNumber a;

    double b = pow(2,double(m-1));

	double c = double(k%(int(b)));

	b = pow(2,m);

	a.real = cos(2*pi*c/b);

	a.imag = (-1)*sin(2*pi*c/b);

	return a;
}

 MultiNumber static one = {-1,0};



int GetRest(int v , int k , int m)

{
	int rest =0;

	int t1 = 0;

	int t2 = 0;

	int t3 = 0;

	int k1 = k;

	for(int d = 1 ; d<=m-1 ; d++)

	{
		t1 = int(pow(2 , double(v-d)));

		t2 = int(pow(2 , double(d-1)));

        t3 = k/t1;
 
        rest = t3*t2+rest;

		k = k - t1*(t3);


	}

	return rest;

}



int rest =0;

int k =0;

MultiNumber *FFT(int v , MultiNumber *h)

{

int static N = int(pow(2,double(v)));

int step = 1;

MultiNumber a ,b;

for(int m = 1; m<=v ; m++)

{


step = int(pow(2 , double(v-m)));

for(  int i = 0 ; i<N-step  ; i = i + step*2)

{   

	for(k=i; k<=i+step-1 ; k++ )

{

	a = ComAdd(h[k+0] , ComMultiply(h[k+step] , W(m,GetRest(v,k,m))));

	b = ComAdd(h[k+0] , ComMultiply(h[k+step] ,ComMultiply(one, W(m,GetRest(v,k,m)))));

	h[k+0] = a;

	h[k+step] = b;

    
}

}

}

return h;



}

int InverseBit(int k , int v)

{

	int t = 1;

	int t1 =1;

	int k1 = k;

	int result = 0;

for(int i=v-1 ; i>=0 ; i--)

{

  t = int(pow(2,i));

  t1 = int(pow(2,v-i-1));

  result = result + (k1/t)*t1;

  k1 = k1 - (k1/t)*t;

}

return result;

}


MultiNumber *GetLastRe(MultiNumber *h , int v)

{
    int y = 0;

	int N = int(pow(2,v));

	MultiNumber *h1 = new MultiNumber[N];

	for(int i=0 ; i<N ; i++)

	{

        y = InverseBit(i,v);

        h1[i] = h[y];

	}

	return h1;

}



int main()
{   


	int m = 5;
    
	int N = int(pow(2, m));

	MultiNumber *a = new MultiNumber[N];
////////////////////////////2008.12.22李琳
		FILE* stlfp;
		CString fileName;
// 		int i=0,j=0,cnt=0 ,pCnt=4;
		int line=0;
		char readline[100];
		double x=0;
		fileName="J:\006modify.txt";
		stlfp = fopen(fileName,"r");
		if(!stlfp)
			return false;
		else
		{
			do
			{
				fgets(readline,100,stlfp);

// 				while(a[i]!='\0')
// 				{
// 					str[j]=a[i];
// 					j++;
// 				}
// 				str[j]='\0';
// 				j=0;
// 				if(sscanf(str,"%lf%lf%lf",&x,&y,&z)==3)
// 				{
// 					tPoint.SetParam(x,y,z);
// 					pointList->Append(tPoint);
// 				}
				a[line].real = atoi(readline);
				a[line].imag = 0;

			}while(!feof(stlfp));
			fclose(stlfp);
		}

//////////////////////////////2008.12.22李琳

//     for(int i=0 ; i<N ; i++)
// 	{
// 
// 	a[i].real = i;
// 	a[i].imag = 0;
// 
// 	}
    

 


MultiNumber *b = FFT(m,a);



b = GetLastRe(b,m);
 
 for( int i =0 ; i<N ; i++)

 {

	 cout<<b[i].real<<"  "<<b[i].imag<<endl; 

 }



	return 0;
}

⌨️ 快捷键说明

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