mirror of
https://github.com/mborgerding/kissfft.git
synced 2025-07-22 23:14:35 -04:00
'make snr' now tests 2d ffts
This commit is contained in:
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user