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.