from gnuradio import gr import math, numpy, cmath # Square Wave Convoluter class onesquare(gr.sync_block): def __init__(self, real_mode=False): self.real_mode = real_mode if real_mode: gr.sync_block.__init__(self, name="onesquare", in_sig=[numpy.float32], out_sig=[numpy.float32]) self.work = self.f_work else: gr.sync_block.__init__(self, name="onesquare", in_sig=[numpy.complex64], out_sig=[numpy.complex64]) self.work = self.c_work def c_work(self, input_items, output_items): in0 = input_items[0] out = output_items[0] x = 0 for i in range( len(in0) ): if i>=len(out) or i>=len(in0): break out[i] = (1 if in0[i].real >= 0 else -1) + (1j if in0[i].imag >= 0 else -1j) x += 1 return x def f_work(self, input_items, output_items): in0 = input_items[0] out = output_items[0] x = 0 for i in range( len(in0) ): if i>=len(out) or i>=len(in0): break out[i] = (1 if in0[i] >= 0 else -1) x += 1 # print "x=%d ; len(in0)=%d ; len(out)=%d" % ( x, len(in0), len(out) ) return x