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.