ftp.nice.ch/pub/next/developer/hardware/dsp/DSPFFT.N.bsa.tar.gz#/DSPFFT/sources/example.c

This is example.c in view mode; [Download] [Up]

/*	example program for fast dsp FFT
	Avery Wang
	RUB-Institut fuer Neuroinformatik
	ND 03/32, Postfach 10 21 48
	W-4630 Bochum 1
	Germany
	
	avery@neuroinformatik.ruhr-uni-bochum.de
		OR
	awang@isl.stanford.edu
	
	April 9-11, 1992
*/

#import <math.h>
#import "dspfft.h"
#import <stdio.h>
#import <stdlib.h>
#import <sys/time.h>

#define DSPFFT_MAX_SIZE		1024
#define DSPFFT_MIN_SIZE		16

void main()
{
#define NUM_BUFFERS 100  // Number of 1024 pt ffts
#define SHOW_BUFFERS 1
#define COMPLEX_OR_REAL 0	// 0=Real data only, 1=Complex Data

	float *input,*output;
	int i,j,dspfft_size,num_bufs;
	double total_time;
     struct timeval tp1, tp2;
     struct timezone tzp1, tzp2;
	
	input=(float *)malloc(DSPFFT_MAX_SIZE*NUM_BUFFERS*sizeof(float));
	output=(float *)malloc(2*DSPFFT_MAX_SIZE*NUM_BUFFERS*sizeof(float));

// set up some data: should have components at +/- 2 and +/- 5.

	for (dspfft_size=DSPFFT_MIN_SIZE; dspfft_size<=DSPFFT_MAX_SIZE; dspfft_size*=2){
		printf("*************** Beginning of %d FFT ****************\n", dspfft_size);
		num_bufs=NUM_BUFFERS*1024/dspfft_size;
		for (j=0;j<SHOW_BUFFERS;j++){
			for (i=0;i<dspfft_size;i++){
				input[i+j*dspfft_size]=(j+1)*(.01*cos((j+1)*i*2.*M_PI/dspfft_size)+
					.05*sin((j+1)*i*2.*M_PI/dspfft_size));
			}
		}
		gettimeofday(&tp1, &tzp1);		// Time the command
		
//********************************************************************
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

	
// This is the hard part all wrapped up for you:
		dspfft(input,output,COMPLEX_OR_REAL,num_bufs,dspfft_size);
		
		
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//********************************************************************

		gettimeofday(&tp2, &tzp2);
		total_time=tp2.tv_sec-tp1.tv_sec+(tp2.tv_usec-tp1.tv_usec)/1000000.0;
// 	Output data 
		for (j=0;j<SHOW_BUFFERS;j++){
			printf("************ %d ************\n",j);
			for(i=0;i<dspfft_size;i++){
				printf("% .6f	% .6f\n",output[i+2*dspfft_size*j],output[dspfft_size+i+2*dspfft_size*j]);
			}
		}
		printf("******************* End of %d FFT ******************\n", dspfft_size);
		printf("Total Elapsed time for %d buffers: %f seconds\n", num_bufs, total_time);
	}
}


These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.