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

📄 process.h

📁 我上硕士时完成的第一个作业!!! 可以显示两个离散的数据
💻 H
字号:

#include "stdafx.h"
#include <math.h>
#include "stdio.h"
#include <ctype.h>
#include <iostream.h>
#include <string.h>
#include <malloc.h>
#include <fstream.h>

#define pi 3.14159265359
#define n 16     //n为FFT运算的点数
#define m 4     //2的m次方对于n

FILE *fp2;
int i,j,ii,jj;
double *b,*c;
double *cbbuffer;
double cc,bb;
char Str1[n];
ifstream istrm;
ofstream ostrm;
//定义复数结构 
typedef struct
{
	double re;
	double im;
}COMPLEX;

COMPLEX Add(COMPLEX c1, COMPLEX c2)
{
	COMPLEX c;
	c.re=c1.re+c2.re;
	c.im=c1.im+c2.im;
	return c;
}

COMPLEX Sub(COMPLEX c1, COMPLEX c2)
{
	COMPLEX c;
	c.re=c1.re-c2.re;
	c.im=c1.im-c2.im;
	return c;
}

COMPLEX Mul(COMPLEX c1, COMPLEX c2)
{
	COMPLEX c;
	c.re=c1.re*c2.re-c1.im*c2.im;
	c.im=c1.re*c2.im+c2.re*c1.im;
	return c;
}

COMPLEX *x,*h,*y,*z;
//////////Fourier变换子程序
void FFT(COMPLEX * TD, COMPLEX * FD, int power)
{
	FILE *fp1,*fp2;
	int count;
	int k,bfsize,p;
	double angle;
		COMPLEX *W,*X1,*X2,*X;
		count=1<<power;
	W=(COMPLEX *)malloc(sizeof(COMPLEX)*count/2);
	X1=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
	X2=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
	for(i=0;i<count/2;i++)
	{
		angle=-i*pi*2/count;
		W[i].re=cos(angle);
		W[i].im=sin(angle);
	}
	
	memcpy(X1,TD,sizeof(COMPLEX)*count);

	for(k=0;k<power;k++)
	{
		for(j=0;j<1<<k;j++)
		{
			bfsize=1<<(power-k);
			for(i=0;i<bfsize/2;i++)
			{
				p=j*bfsize;
				X2[i+p]=Add(X1[i+p],X1[i+p+bfsize/2]);
				X2[i+p+bfsize/2]=Mul(Sub(X1[i+p],X1[i+p+bfsize/2]),W[i*(1<<k)]);
			}
		}
		X=X1;
		X1=X2;
		X2=X;
	}
	for(j=0;j<count;j++)
	{
		p=0;
		for(i=0;i<power;i++)
		{
			if (j&(1<<i)) p+=1<<(power-i-1);
		}
		FD[j]=X1[p];
		}

/*	ostrm.open("test1.txt");
	for(i=0;i<count;i++)
	{   
		a[i]=FD[i].re;
		ostrm<<a[i];
	}
	ostrm.close();
ostrm.open("test2.txt");
	for(i=0;i<count;i++)
	{  
		a[i]=FD[i].im;
		ostrm<<a[i];
	}
	ostrm.close();
*/
if((fp1=fopen("test1.txt","w"))==NULL)
	{
      printf("can not open!!!!");
	}
if((fp2=fopen("test2.txt","w"))==NULL)
	{
      printf("can not open!!!!");
	}

for(i=0;i<count;i++)
{	
fprintf(fp1,"%3.1f  ",FD[i].re);
fprintf(fp2,"%3.1f  ",FD[i].im);
}	
	
fclose(fp1);
fclose(fp2);
	free(W);
	free(X1);
	free(X2);
}
////////////////////////////////////////

⌨️ 快捷键说明

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