def __init__(self, fft_length): gr.hier_block2.__init__(self, "foe", gr.io_signature2(2,2,gr.sizeof_gr_complex,gr.sizeof_char), gr.io_signature(1,1,gr.sizeof_float)) self.input = (self,0) self.time_sync = (self,1) # P(d) self.nominator = schmidl_nominator(fft_length) # sample nominator sampler = vector_sampler(gr.sizeof_gr_complex,1) self.connect(self.input, self.nominator, (sampler,0)) self.connect(self.time_sync, (sampler,1)) # calculate epsilon from P(d), epsilon is normalized fractional frequency offset angle = complex_to_arg() self.epsilon = gr.multiply_const_ff(1.0/math.pi) self.connect(sampler, angle, self.epsilon, self) try: gr.hier_block.update_var_names(self, "foe", vars()) gr.hier_block.update_var_names(self, "foe", vars(self)) except: pass
def __init__(self, fft_length): gr.hier_block2.__init__( self, "foe", gr.io_signature2(2, 2, gr.sizeof_gr_complex, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_float)) self.input = (self, 0) self.time_sync = (self, 1) # P(d) self.nominator = schmidl_nominator(fft_length) # sample nominator sampler = vector_sampler(gr.sizeof_gr_complex, 1) self.connect(self.input, self.nominator, (sampler, 0)) self.connect(self.time_sync, (sampler, 1)) # calculate epsilon from P(d), epsilon is normalized fractional frequency offset angle = complex_to_arg() self.epsilon = gr.multiply_const_ff(1.0 / math.pi) self.connect(sampler, angle, self.epsilon, self) try: gr.hier_block.update_var_names(self, "foe", vars()) gr.hier_block.update_var_names(self, "foe", vars(self)) except: pass
def __init__(self, vlen): gr.hier_block2.__init__(self, "coarse_frequency_offset_estimation", gr.io_signature2(2,2,gr.sizeof_gr_complex,gr.sizeof_char), gr.io_signature (1,1,gr.sizeof_float)) ## Preamble Extraction sampler = vector_sampler(gr.sizeof_gr_complex,vlen) self.connect(self,sampler) self.connect((self,1),(sampler,1)) ## Split block into two parts splitter = gr.vector_to_streams(gr.sizeof_gr_complex*vlen/2,2) self.connect(sampler,splitter) ## Multiply 2nd sub-part with conjugate of 1st sub-part conj_mult = gr.multiply_conjugate_cc(vlen/2) self.connect((splitter,1),(conj_mult,0)) self.connect((splitter,0),(conj_mult,1)) ## Sum of Products psum = vector_sum_vcc(vlen/2) self.connect((conj_mult,0),psum) ## Complex to Angle angle = complex_to_arg() self.connect(psum,angle) ## Normalize norm = gr.multiply_const_ff(1.0/math.pi) self.connect(angle,norm) ## Setup Output Connections self.connect(norm,self)
def __init__(self, vlen): gr.hier_block2.__init__( self, "coarse_frequency_offset_estimation", gr.io_signature2(2, 2, gr.sizeof_gr_complex, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_float)) ## Preamble Extraction sampler = vector_sampler(gr.sizeof_gr_complex, vlen) self.connect(self, sampler) self.connect((self, 1), (sampler, 1)) ## Split block into two parts splitter = gr.vector_to_streams(gr.sizeof_gr_complex * vlen / 2, 2) self.connect(sampler, splitter) ## Multiply 2nd sub-part with conjugate of 1st sub-part conj_mult = gr.multiply_conjugate_cc(vlen / 2) self.connect((splitter, 1), (conj_mult, 0)) self.connect((splitter, 0), (conj_mult, 1)) ## Sum of Products psum = vector_sum_vcc(vlen / 2) self.connect((conj_mult, 0), psum) ## Complex to Angle angle = complex_to_arg() self.connect(psum, angle) ## Normalize norm = gr.multiply_const_ff(1.0 / math.pi) self.connect(angle, norm) ## Setup Output Connections self.connect(norm, self)