diff --git a/Makefile b/Makefile index e52a401..60d0951 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ -message: - @echo "Nothing to make here. Move on down to test/ for self test stuff" - @echo "or tools/ for real FFTs, multi-d FFTs, fast convolution filtering, cacher" + + + +testall: + export DATATYPE=short && cd test && make test + export DATATYPE=float && cd test && make test + export DATATYPE=double && cd test && make test tarball: clean find | grep -i -v cvs | zip kiss_fft.zip -@ diff --git a/test/Makefile b/test/Makefile index 0f71b65..60fa05b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -14,7 +14,6 @@ BENCHFFTW=bm_fftw_$(DATATYPE) SELFTEST=st_$(DATATYPE) TESTREAL=tr_$(DATATYPE) TESTKFC=tkfc_$(DATATYPE) -FFTUTIL=kf_$(DATATYPE) FASTFILT=ff_$(DATATYPE) FASTFILTREAL=ffr_$(DATATYPE) @@ -33,54 +32,44 @@ else FFTWLIB=fftw3 endif +SRCFILES=../kiss_fft.c ../tools/kiss_fftnd.c ../tools/kiss_fftr.c pstats.c ../tools/kfc.c -all: $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(FFTUTIL) \ - $(TESTKFC) $(FASTFILT) $(FASTFILTREAL) +all: tools $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(TESTKFC) -#CFLAGS=-Wall -O3 -pedantic -march=pentiumpro -ffast-math -fomit-frame-pointer +tools: + cd ../tools && make all + +#CFLAGS=-Wall -O3 -pedantic -march=pentiumpro -ffast-math -fomit-frame-pointer -I.. -I../tools #-DUSE_SKIP # If the above flags do not work, try the following -CFLAGS=-Wall -O3 +CFLAGS=-Wall -O3 -I.. -I../tools -$(FASTFILTREAL): ../kiss_fft.c kiss_fastfir.c kiss_fftr.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -DREAL_FASTFIR -lm $+ -DFAST_FILT_UTIL +$(SELFTEST): $(SELFTESTSRC) $(SRCFILES) + $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) -lm $+ -$(FASTFILT): ../kiss_fft.c kiss_fastfir.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ -DFAST_FILT_UTIL - -$(FFTUTIL): ../kiss_fft.c fftutil.c kiss_fftnd.c kiss_fftr.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ - -$(SELFTEST): ../kiss_fft.c $(SELFTESTSRC) kiss_fftnd.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ - -$(TESTKFC): ../kiss_fft.c kfc.c - $(CC) -o $@ $(CFLAGS) -I.. -DKFC_TEST $(TYPEFLAGS) -lm $+ +$(TESTKFC): $(SRCFILES) + $(CC) -o $@ $(CFLAGS) -DKFC_TEST $(TYPEFLAGS) -lm $+ -$(TESTREAL): ../kiss_fft.c kiss_fftr.c test_real.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ +$(TESTREAL): test_real.c $(SRCFILES) + $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) -lm $+ -$(BENCHKISS): benchkiss.c ../kiss_fft.c pstats.c - $(CC) -o $@ $(CFLAGS) -I.. benchkiss.c $(TYPEFLAGS) ../kiss_fft.c pstats.c -lm +$(BENCHKISS): benchkiss.c $(SRCFILES) + $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) -lm $+ $(BENCHFFTW): benchfftw.c pstats.c - @$(CC) -o $@ $(CFLAGS) -DDATATYPE$(DATATYPE) benchfftw.c pstats.c -lm -l$(FFTWLIB) -L/usr/local/lib/ || echo "FFTW not available for comparison" + @echo "======attempting to build FFTW benchmark" + @$(CC) -o $@ $(CFLAGS) -DDATATYPE$(DATATYPE) $+ -lm -l$(FFTWLIB) -L/usr/local/lib/ || echo "FFTW not available for comparison" test: all @./$(TESTKFC) - @echo "======SELF TEST $(DATATYPE)" + @echo "======1d & 2-d complex fft self test (type= $(DATATYPE) )" @./$(SELFTEST) - @echo "======REAL FFT TEST $(DATATYPE)" + @echo "======real FFT (type= $(DATATYPE) )" @./$(TESTREAL) - @echo "======TIMING TEST $(DATATYPE)" + @echo "======timing test (type=$(DATATYPE))" @./$(BENCHKISS) -x $(NUMFFTS) -n $(NFFT) @[ -x ./$(BENCHFFTW) ] && ./$(BENCHFFTW) -x $(NUMFFTS) -n $(NFFT) ||true -testall: - @(export DATATYPE=double && make test ) - @(export DATATYPE=float && make test ) - @(export DATATYPE=short && make test ) - selftest.c: ./mk_test.py 10 12 14 > selftest.c selftest_short.c: diff --git a/test/compfft.py b/test/compfft.py index e815fec..884fe64 100755 --- a/test/compfft.py +++ b/test/compfft.py @@ -25,6 +25,7 @@ def main(): import popen2 opts,args = getopt( sys.argv[1:],'u:n:Rt:' ) opts=dict(opts) + exitcode=0 util = opts.get('-u','./kf_float') @@ -67,7 +68,9 @@ def main(): if snr<100: print xout print xoutcomp + exitcode=1 print 'NFFT=%s,SNR = %f dB' % (str(dims),snr) + sys.exit(exitcode) def dopack(x,fmt,cpx): x = reshape( x, ( size(x),) ) diff --git a/test/test_real.c b/test/test_real.c index 2491097..77933a9 100644 --- a/test/test_real.c +++ b/test/test_real.c @@ -34,8 +34,10 @@ double snr_compare( kiss_fft_cpx * vec1,kiss_fft_cpx * vec2, int n) } snr = 10*log10( sigpow / noisepow ); scale /= n; - if (snr<10) + if (snr<10) { printf( "\npoor snr, try a scaling factor %f\n" , scale ); + exit(1); + } return snr; } #define RANDOM diff --git a/tools/Makefile b/tools/Makefile index 0f71b65..a2f84e3 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,46 +1,23 @@ -ifeq "$(NFFT)" "" - NFFT=1800 -endif -ifeq "$(NUMFFTS)" "" - NUMFFTS=10000 -endif - ifeq "$(DATATYPE)" "" DATATYPE=float endif -BENCHKISS=bm_kiss_$(DATATYPE) -BENCHFFTW=bm_fftw_$(DATATYPE) -SELFTEST=st_$(DATATYPE) -TESTREAL=tr_$(DATATYPE) -TESTKFC=tkfc_$(DATATYPE) -FFTUTIL=kf_$(DATATYPE) -FASTFILT=ff_$(DATATYPE) -FASTFILTREAL=ffr_$(DATATYPE) +FFTUTIL=fft_$(DATATYPE) +FASTFILT=fastconv_$(DATATYPE) +FASTFILTREAL=fastconvr_$(DATATYPE) ifeq "$(DATATYPE)" "short" TYPEFLAGS=-DFIXED_POINT -Dkiss_fft_scalar=short - SELFTESTSRC=selftest_short.c else TYPEFLAGS=-Dkiss_fft_scalar=$(DATATYPE) - SELFTESTSRC=selftest.c -endif - -ifeq "$(DATATYPE)" "float" -# fftw needs to be built with --enable-float to build this lib - FFTWLIB=fftw3f -else - FFTWLIB=fftw3 endif -all: $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(FFTUTIL) \ - $(TESTKFC) $(FASTFILT) $(FASTFILTREAL) +all: $(FFTUTIL) $(FASTFILT) $(FASTFILTREAL) -#CFLAGS=-Wall -O3 -pedantic -march=pentiumpro -ffast-math -fomit-frame-pointer -#-DUSE_SKIP +CFLAGS=-Wall -O3 -pedantic -march=pentiumpro -ffast-math -fomit-frame-pointer # If the above flags do not work, try the following -CFLAGS=-Wall -O3 +#CFLAGS=-Wall -O3 $(FASTFILTREAL): ../kiss_fft.c kiss_fastfir.c kiss_fftr.c $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -DREAL_FASTFIR -lm $+ -DFAST_FILT_UTIL @@ -51,40 +28,5 @@ $(FASTFILT): ../kiss_fft.c kiss_fastfir.c $(FFTUTIL): ../kiss_fft.c fftutil.c kiss_fftnd.c kiss_fftr.c $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ -$(SELFTEST): ../kiss_fft.c $(SELFTESTSRC) kiss_fftnd.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ - -$(TESTKFC): ../kiss_fft.c kfc.c - $(CC) -o $@ $(CFLAGS) -I.. -DKFC_TEST $(TYPEFLAGS) -lm $+ - -$(TESTREAL): ../kiss_fft.c kiss_fftr.c test_real.c - $(CC) -o $@ $(CFLAGS) -I.. $(TYPEFLAGS) -lm $+ - -$(BENCHKISS): benchkiss.c ../kiss_fft.c pstats.c - $(CC) -o $@ $(CFLAGS) -I.. benchkiss.c $(TYPEFLAGS) ../kiss_fft.c pstats.c -lm - -$(BENCHFFTW): benchfftw.c pstats.c - @$(CC) -o $@ $(CFLAGS) -DDATATYPE$(DATATYPE) benchfftw.c pstats.c -lm -l$(FFTWLIB) -L/usr/local/lib/ || echo "FFTW not available for comparison" - -test: all - @./$(TESTKFC) - @echo "======SELF TEST $(DATATYPE)" - @./$(SELFTEST) - @echo "======REAL FFT TEST $(DATATYPE)" - @./$(TESTREAL) - @echo "======TIMING TEST $(DATATYPE)" - @./$(BENCHKISS) -x $(NUMFFTS) -n $(NFFT) - @[ -x ./$(BENCHFFTW) ] && ./$(BENCHFFTW) -x $(NUMFFTS) -n $(NFFT) ||true - -testall: - @(export DATATYPE=double && make test ) - @(export DATATYPE=float && make test ) - @(export DATATYPE=short && make test ) - -selftest.c: - ./mk_test.py 10 12 14 > selftest.c -selftest_short.c: - ./mk_test.py -s 10 12 14 > selftest_short.c - clean: - rm -f *~ bm_* st_* tr_* kf_* tkfc_* ff_* ffr_* *.pyc *.pyo *.dat + rm -f *~ fft_* fastconv_* fastconvr_*