From 39d2974fe30ee28f2522ddc924a247fd318c894d Mon Sep 17 00:00:00 2001 From: Mark Borgerding Date: Thu, 4 Dec 2003 04:08:52 +0000 Subject: [PATCH] 'make snr' now tests 2d ffts --- test/Makefile | 6 ++++-- test/fileload.m | 15 +++++++++++---- test/filesave.m | 8 ++++++-- test/testkiss.m | 42 +++++++++++++++++++++++++++--------------- tools/Makefile | 6 ++++-- tools/fftutil.c | 10 +++++++--- 6 files changed, 59 insertions(+), 28 deletions(-) diff --git a/test/Makefile b/test/Makefile index 655258d..45c7b3a 100644 --- a/test/Makefile +++ b/test/Makefile @@ -4,6 +4,8 @@ endif ifeq "$(NUMFFTS)" "" NUMFFTS=10000 endif +NROWS=30 + ifeq "$(DATATYPE)" "" DATATYPE=float endif @@ -51,8 +53,8 @@ mtime: all $(BENCHFFTW) done snr: all - @echo "### testing SNR for $(NFFT) point $(DATATYPE) FFTs" - @echo "testkiss( $(NFFT) , '$(DATATYPE)' );" | octave -q + @echo "testkiss( $(NFFT) , 1, '$(DATATYPE)' );" | octave -q + @echo "testkiss( $(NFFT) , $(NROWS), '$(DATATYPE)' );" | octave -q test: snr time fftw diff --git a/test/fileload.m b/test/fileload.m index f85e391..da75bac 100755 --- a/test/fileload.m +++ b/test/fileload.m @@ -1,12 +1,19 @@ -function data = fileload( fname , prec , iscomplex ) +function data = fileload( fname , prec , iscomplex ,nrows ) f = fopen(fname,"r", "native"); -data = fread(f,Inf,prec)'; -len=length(data); + +data = fread(f,Inf,prec); + fclose(f); +len = length(data); if iscomplex, data = (data(1:2:len) + j*data(2:2:len) ); -endif + len = len/2; +endif + +tdata = zeros(len/nrows,nrows); +tdata(:) = data; +data = tdata .'; endfunction diff --git a/test/filesave.m b/test/filesave.m index f8fc1f6..ddb17c0 100755 --- a/test/filesave.m +++ b/test/filesave.m @@ -1,10 +1,14 @@ function filesave( fname , prec , data ) +# kiss fft stores data by rows +data = vec(data.'); + +len = length(data); + f = fopen(fname,"w", "native"); -len=length(data); if is_complex(data), - flat=zeros(1,2*len); + flat=zeros( 1,2*len); flat(1:2:2*len) = real(data); flat(2:2:2*len) = imag(data); data = flat; diff --git a/test/testkiss.m b/test/testkiss.m index ba04eff..581082d 100755 --- a/test/testkiss.m +++ b/test/testkiss.m @@ -1,27 +1,35 @@ -function snr= testkiss( nfft , prec ) +function snr= testkiss( nfft , nrows, prec ) +printf('### testing SNR for %d x %d point %s FFTs\n' , nfft,nrows,prec); if strcmp( prec ,'short') - scale_t2f=nfft; - scale_f2t=nfft; + scale_t2f=nfft*nrows; + scale_f2t=nfft*nrows; else scale_t2f=1; - scale_f2t=1/nfft; + scale_f2t=1/(nfft*nrows); endif kfft= sprintf('./fftutil_%s',prec); -siglen = nfft; -sig=floor(32767*rand(1,siglen)) + j*floor(32767*rand(1,siglen)); +sig=floor(32767*rand(nrows,nfft)) + j*floor(32767*rand(nrows,nfft)); filesave('time.dat',prec,sig); -cmd = sprintf('%s -n %d time.dat freq.dat',kfft,nfft); +if nrows > 1 + cmd = sprintf('%s -r %d -n %d time.dat freq.dat',kfft,nrows,nfft); +else + cmd = sprintf('%s -n %d time.dat freq.dat',kfft,nfft); +endif + system(cmd); -Fsigcomp=fileload('freq.dat',prec,1) * scale_t2f; -Fsig=fft(sig); +Fsigcomp=fileload('freq.dat',prec,1,nrows ) * scale_t2f; + +if nrows == 1, + Fsig=fft(sig); +else + Fsig=fft2(sig); +endif -%x=linspace(0,2*pi*(nfft-1)/nfft,nfft); -%plot(x,abs(Fsig),'r',x,abs(Fsigcomp),'g') diff = Fsig - Fsigcomp; noise_pow = sum( conj(diff).*diff ); sig_pow = sum( conj(Fsig).*Fsig ); @@ -29,10 +37,14 @@ Fsig=fft(sig); avg_scale = mean( abs(Fsig) ./ abs(Fsigcomp) ); var_scale = var( abs(Fsig) ./ abs(Fsigcomp) ); -cmd = sprintf('%s -i -n %d freq.dat time2.dat',kfft,nfft); +if nrows > 1 + cmd = sprintf('%s -r %d -i -n %d freq.dat time2.dat',kfft,nrows,nfft); +else + cmd = sprintf('%s -i -n %d freq.dat time2.dat',kfft,nfft); +endif + system(cmd); -sigcomp=fileload('time2.dat',prec,1) * scale_f2t; -%sig=ifft(Fsigcomp); +sigcomp=fileload('time2.dat',prec,1,nrows) * scale_f2t; diff = sig - sigcomp; noise_pow = sum( conj(diff).*diff ); @@ -41,6 +53,6 @@ sigcomp=fileload('time2.dat',prec,1) * scale_f2t; avg_scale = mean( abs(sig) ./ abs(sigcomp) ); var_scale = var( abs(sig) ./ abs(sigcomp) ); -snr=[snr_t2f snr_f2t]; +snr=[snr_t2f snr_f2t]; endfunction diff --git a/tools/Makefile b/tools/Makefile index 655258d..45c7b3a 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -4,6 +4,8 @@ endif ifeq "$(NUMFFTS)" "" NUMFFTS=10000 endif +NROWS=30 + ifeq "$(DATATYPE)" "" DATATYPE=float endif @@ -51,8 +53,8 @@ mtime: all $(BENCHFFTW) done snr: all - @echo "### testing SNR for $(NFFT) point $(DATATYPE) FFTs" - @echo "testkiss( $(NFFT) , '$(DATATYPE)' );" | octave -q + @echo "testkiss( $(NFFT) , 1, '$(DATATYPE)' );" | octave -q + @echo "testkiss( $(NFFT) , $(NROWS), '$(DATATYPE)' );" | octave -q test: snr time fftw diff --git a/tools/fftutil.c b/tools/fftutil.c index 16ee1da..137bf4b 100644 --- a/tools/fftutil.c +++ b/tools/fftutil.c @@ -43,7 +43,11 @@ void fft_file(FILE * fin,FILE * fout,int nfft,int nrows,int isinverse,int useasc while ( fread( buf , sizeof(kiss_fft_cpx) * nfft * nrows ,1, fin ) > 0 ) { for (i=0;i