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

📄 ffttest.c

📁 国外网站找到的
💻 C
字号:
/* * * * File: FFTTest.c * * */#include <stdio.h>#include <stdlib.h>#include <time.h>#include "FFTTest.h"#define VERBOSECOMP 0#define TIMING 1#define FFT_forward 1#define FFT_inverse 0//#define MAXTEST 4//static FFTFunction FFTFunctiontest[MAXTEST];//static int NumTestFunctions;void RunFFT(complex *, int);void RunFFTR(complex *, int);void RunIFFT(complex *, int);void RunIFFTR(complex *, int);#define MAXTESTS 8static FFTTest *test;#define NEWTEST(Func, Di) { \  test->FFTpoint = Func; \  test->FuncName = #Func;\  test->Direction = Di; \}static void InitialiseTests(void) {  test = (FFTTest *)malloc(sizeof(FFTTest));  NEWTEST(RunFFT, FFT_forward);  //NEWTEST(RunFFTR, FFT_forward);  //NEWTEST(RunIFFT, FFT_inverse);  //NEWTEST(RunIFFTR, FFT_inverse);}static int compare_output(const FFTData *FFTDatatest, complex *Actin, int direction){	int i, err, N;	double d;	double max = 0, accum = 0;		complex *Refout;	N = FFTDatatest->N;  	Refout = (complex *)malloc(N*sizeof(complex));        if(direction == FFT_forward)	Refout = FFTDatatest->out;	else	Refout = FFTDatatest->in;	printf("Ref:");	for(i=0; i< 10 && i < N; i++)	{	printf("%.1f", Refout[i].real);	if(Refout[i].imag>=0)	printf("+%.1fi ", Refout[i].imag);	else	printf("%.1fi ", Refout[i].imag);	}	printf("\nAct:");	for(i=0; i< 10 && i < N; i++)	{	printf("%.1f", Actin[i].real);	if(Actin[i].imag>=0)	printf("+%.1fi ", Actin[i].imag);	else	printf("%.1fi ", Actin[i].imag);	}	for(i = 0; i < N ; i++)	{		d = Actin[i].real - Refout[i].real;		if(d <0) d = -d;		if(d>max) max= d;					accum +=d;					d = Actin[i].imag - Refout[i].imag;		if(d <0) d = -d;		if(d>max) max= d;		accum +=d;	#if VERBOSECOMP			printf("\nRef[%d] %.2f", i, Refout[i].real);	if(Refout[i].imag>=0)	printf("+%.2fi", Refout[i].imag);	else	printf("%.2fi", Refout[i].imag);	printf("            \tAct[%d] %.2f", i,Actin[i].real);	if(Actin[i].imag>=0)	printf("+%.2fi", Actin[i].imag);	else	printf("%.2fi", Actin[i].imag);		#endif	}	printf("\nMax error %.8f \n", max);	printf("sum error %.8f \n", accum);		if(max > 10) return 1;	else	 		     return 0;}//end of compare_outputstatic complex *LoadData(const FFTData *FFTDatatest, int direction){	int N , i;	complex *in;	N = FFTDatatest->N;  	in = (complex *)malloc(N*sizeof(complex));	if(direction == FFT_forward)	{		printf("\nTesting %d point %s FFT's\n", N, test->FuncName);		for(i=0;i<N;i++)		{	            in[i].real = FFTDatatest->in[i].real;		    in[i].imag = FFTDatatest->in[i].imag;		}        }	else 	{	printf("\nTesting %d point %s inverse FFT's\n", N, test->FuncName);		for(i=0;i<N;i++)		{	            in[i].real = FFTDatatest->out[i].real;		    in[i].imag = FFTDatatest->out[i].imag;		}	}	/*	printf("*********** Donnes *****************\n");	for(i=0;i<N;i++)	{		printf("%.8f\t\t",in[i].real);		printf("%.8f\n",in[i].imag);	}	*/	return in;} static int TestFFT(const FFTData *FFTDatatest) {  int N,i,failed = 0;  complex *in;    FILE *fp;#if TIMING  int start;#endif  	N = FFTDatatest->N;	in = LoadData(FFTDatatest,test->Direction);#if TIMING  start = clock();#endif/*fp = fopen("t000256.c", "wt");fprintf(fp,"#include \"FFTTest.h\"\n");fprintf(fp,"static const complex ffttest_256_in[256] = {\n");	for(i = 0; i < 255; i++)	{	fprintf(fp,"\t{ %.0f,    \t%.0f },\n",in[i].real, in[i].imag);	}	fprintf(fp,"\t{ %.0f,    \t%.0f }\n};",in[255].real, in[255].imag);*/	test->FFTpoint(in, N);/*fprintf(fp,"\nstatic const complex ffttest_256_out[256] ={\n");	for(i = 0; i < 255; i++)	{	fprintf(fp,"\t{ %.5f,    \t%.5f },\n",in[i].real, in[i].imag);	}	fprintf(fp,"\t{ %.5f,    \t%.5f }\n};",in[255].real, in[255].imag);*/close(fp);#if TIMING  start = clock()-start;  printf("  Time taken = %d\n", start);#endif	printf("Performe :\n");	failed = compare_output(FFTDatatest, in, test->Direction);    return failed;} #define TestSize(n) { \  extern const FFTData FFTData_##n; \  failed += TestFFT(&FFTData_##n); \}main(){    int failed = 0;    printf("Starting tests...\n");    InitialiseTests(); // TestSize(8);  TestSize(16); // TestSize(32); // TestSize(64); // TestSize(128); // TestSize(256); // TestSize(512); // TestSize(1024);    printf("\nFinished\n");}

⌨️ 快捷键说明

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