kissfft/test/testkiss.m
2003-12-04 04:08:52 +00:00

59 lines
1.4 KiB
Matlab
Executable File

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*nrows;
scale_f2t=nfft*nrows;
else
scale_t2f=1;
scale_f2t=1/(nfft*nrows);
endif
kfft= sprintf('./fftutil_%s',prec);
sig=floor(32767*rand(nrows,nfft)) + j*floor(32767*rand(nrows,nfft));
filesave('time.dat',prec,sig);
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,nrows ) * scale_t2f;
if nrows == 1,
Fsig=fft(sig);
else
Fsig=fft2(sig);
endif
diff = Fsig - Fsigcomp;
noise_pow = sum( conj(diff).*diff );
sig_pow = sum( conj(Fsig).*Fsig );
snr_t2f = 10*log10( sig_pow / noise_pow )
avg_scale = mean( abs(Fsig) ./ abs(Fsigcomp) );
var_scale = var( abs(Fsig) ./ abs(Fsigcomp) );
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,nrows) * scale_f2t;
diff = sig - sigcomp;
noise_pow = sum( conj(diff).*diff );
sig_pow = sum( conj(sig).*sig );
snr_f2t = 10*log10( sig_pow / noise_pow )
avg_scale = mean( abs(sig) ./ abs(sigcomp) );
var_scale = var( abs(sig) ./ abs(sigcomp) );
snr=[snr_t2f snr_f2t];
endfunction