from scipy import *
from pylab import *
from pyspuc import *
from pyspuc.sim_qpsk_double import *
from pyspuc.qpsk_double import *
from pyspuc.noise import *
from pyspuc.loop_filter_double import *
from pyspuc.qpsk_ber_test import *
from pyspuc.complex_double import *
NOOFFSET=0
NORAND=1
TIME=0
FREQ=0
FREQC=0
SYM_LOOP_ON = 10
CAR_LOOP_ON = 1000
WAITSYMBOLS = 2900
snr=20
num = 10000
actual_over=2.00
ENV = sim_qpsk_double()
random_offset = noise()
if(NORAND): random_offset.set_seed(123)
else: random_offset.set_seed(10*time())
if(NOOFFSET): timing_offset = 0
else: timing_offset = 0.5*random_offset.uni()*actual_over
ENV.num = num
ENV.snr = snr
ENV.time = TIME
ENV.freq = FREQ
MYQPSK = qpsk_double()
ENV.loop_init(actual_over, timing_offset)
ENV.BER_mon.init_delay(68)
rcv_symbols=0
symbols = 0
y = zeros(num)
inc = 0
SAMPF = open("samp.dat","w")
RESF = open("res.dat","w")
while (symbols < num):
ENV.step()
tmp = str(ENV.RECEIVER.baseband.re)
adc = str(ENV.adc_out.re)
base = str(ENV.base.re)
RESF.write(base+"\n")
if(inc < num-1):
y[inc] = (float)(ENV.base.re)
inc = inc + 1
if(TIME) :
if(ENV.rcv_symbols == SYM_LOOP_ON) :
ENV.RECEIVER.symbol_loop_filter.k0_en = 1
if(FREQC) :
if(ENV.rcv_symbols == CAR_LOOP_ON) :
ENV.RECEIVER.carrier_loop_filter.k1_en = 1
ENV.RECEIVER.carrier_loop_filter.k0_en = 1
if (ENV.RECEIVER.symclk()==1):
if (ENV.rcv_symbols > WAITSYMBOLS):
data = ENV.RECEIVER.data()
symbols = ENV.BER_mon.synchronise(symbols,data)
if (ENV.BER_mon.found_sync()):
ENV.BER_mon.ber_results(symbols)
symbols = symbols+1
SAMPF.write(str(ENV.RECEIVER.carrier_error))
SAMPF.write(' ')
SAMPF.write(str(ENV.RECEIVER.carrier_loop_out))
SAMPF.write(' ')
SAMPF.write(str(ENV.RECEIVER.final_baseband.re))
SAMPF.write('\n')
if (ENV.rcv_symbols > num and not ENV.BER_mon.found_sync()):
break
ENV.BER_mon.final_results(symbols)
ENV.loop_end()
SAMPF.close()
RESF.close()
plot(y)