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

📄 file2.cpp

📁 基于c++的信号快速傅里叶变换
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
#define N 8
#define NN 3
const double pi=acos(-1);
struct fushu{
	double r,i;
};//定义复数结构
struct fushu x[N]={0};
struct fushu x0[N]={0};
struct fushu X[N]={0};
struct fushu a1[N]={0};
struct fushu b1[N]={0};
//**************该函数将数组重新分组****************//
double f1(int a)
{double b(0),s(0);
for(int m=0;m<NN;m++){
	b=a%2;
	a/=2;
	s+=(pow(2,NN-1-m)*b);}
	return s;}
//************该函数计算两个复数相乘时的实部*************//
double fun1(double xr,double xi,double yr,double yi){
 double ss;
  ss=xr*yr-xi*yi;
	return ss; }

//************该函数计算两个复数相乘时的虚部*************//
double fun2(double xr,double xi,double yr,double yi){
double ss;
ss=xr*yi+xi*yr;
return ss;}
//************该函数计算w的实数部分*******************//
double f2(int n){
double x;
x=cos(-2*pi*n/N);
return x;}
//***********该函数计算w的虚数部分*******************//
double f3(int n){
double x;
x=sin(-2*pi*n/N);
return x;}
//************该函数为快速FFT计算**********************//
void f4(int l){
 for(int k=0,count=0;count<=N/pow(2,l);count++){
	for(int j=0;j<pow(2,l-1);j++){
		double p,q,y,z;
		int a2=k+j;
		int b2=k+pow(2,l-1)+j;
		p=f2(N*j/pow(2,l));
		q=f3(N*j/pow(2,l));
		y=fun1(b1[b2].r,b1[b2].i,p,q);
        z=fun2(b1[b2].r,b1[b2].i,p,q);
		a1[a2].r=b1[a2].r+y;
        a1[a2].i=b1[a2].i+z;
		a1[b2].r=b1[a2].r-y;
		a1[b2].i=b1[a2].i-z;
	}
	k+=pow(2,l);
	}
}
//**********主函数**************//
void main(){
	cout<<"输入初始数组:";
	for(int i=0;i<N;i++) cin>>x[i].r>>x[i].i;
	for(int i1=0;i1<N;i1++){
		int h=f1(i1);
		x0[i1].r=x[h].r;
		x0[i1].i=x[h].i;}
	for(int i2=0;i2<N;i2++){b1[i2].r=x0[i2].r;
	b1[i2].i=x0[i2].i;}
    f4(1);
    for(int i3=0;i3<N;i3++){b1[i3].r=a1[i3].r;
	b1[i3].i=a1[i3].i;}
	f4(2);
	for(int i4=0;i4<N;i4++){b1[i4].r=a1[i4].r;
	b1[i4].i=a1[i4].i;}
	f4(3);
	for(int i5=0;i5<N;i5++){X[i5].r=a1[i5].r;
	X[i5].i=a1[i5].i;}
     for(int g=0;g<N;g++)cout<<"X["<<g<<"]="<<X[g].r<<"+("<<X[g].i<<"j)"<<endl;	
}

⌨️ 快捷键说明

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