import mutils as m
import sys
from pylab import *

if len(sys.argv) != 3:
    print("""
Show some FFT and sign/mag diagnostics for raw Ettus RF samples.
Used mainly to check the RF logger is working OK.

Usage: From shell, run "ipython --pylab" then:
  %run diag_raw5.py n_secs raw5_filename
where: n_secs = # of seconds to analyze
       filename.raw5_000 = raw 50MHz Ettus RF file
Example (note - the '%' character below is needed):
  %run diag_raw5.py 120 test_L1.raw5_00000
""")
    sys.exit(1)

save_figs = True
n_secs = int(sys.argv[1])

d=m.read_raw2b(sys.argv[2],25000*20/2,offset=(-25000*20/2))

print("Doing 1D FFT")
figure()
x_f = r_[0:25000]/25000. * 50 ;
plot( x_f, 20*log10( m.do_1d_avg_fft( d, 25000, 20 ) ) )
xlabel('Frequency [MHz: L1=1565-1615MHz, L2=1215-1265MHz]')
ylabel('20*log10(abs(FFT))')
if save_figs:
    savefig('diag_FFT_1D.png')

print("Doing sign/mag and 2D FFT")
fftlen = 1024
dfft = zeros( (n_secs,fftlen) )
sign_mag = zeros( (n_secs,4) )
for i in range(0,n_secs):
    d=m.read_raw2b(sys.argv[2],fftlen*20/2,offset=int(i*25e6),verbose=False)
    dfft[i,:] = 20*log10(m.do_1d_avg_fft( d, fftlen, 20 ))
    sign_mag[i,0] = 100.*len(find(real(d)>0))/len(d)
    sign_mag[i,1] = 100.*len(find(fabs(real(d))>=3))/len(d)
    sign_mag[i,2] = 100.*len(find(imag(d)>0))/len(d)
    sign_mag[i,3] = 100.*len(find(fabs(imag(d))>=3))/len(d)
ax=figure()
imshow(dfft,extent=[0,50,0,n_secs],aspect=0.75*50./n_secs)
xlabel('Frequency [MHz: L1=1565-1615MHz, L2=1215-1265MHz]')
ylabel('Time')
if save_figs:
    savefig('diag_FFT_2D.png')

figure()
x_t = r_[0:n_secs]
subplot(211)
plot(x_t, sign_mag[:,0], '-x',x_t, sign_mag[:,2], '-x')
legend(('IS','QS'))
ylabel("Percent")
subplot(212)
plot(x_t, sign_mag[:,1], '-x',x_t, sign_mag[:,3], '-x')
legend(('IM','QM'))
ylabel("Percent")
xlabel("Time [s]")
suptitle('Desired sign=50%, mag=33%')
if save_figs:
    savefig('diag_sign_mag.png')

show()
