예제 #1
0
    def __init__(self, subc, vlen, ss):
        gr.hier_block2.__init__(
            self,
            "new_snr_estimator",
            gr.io_signature(2, 2, gr.sizeof_gr_complex * vlen),
            #gr.io_signature2(2,2,gr.sizeof_float*vlen,gr.sizeof_float*vlen/ss*(ss-1)))
            gr.io_signature(1, 1, gr.sizeof_float * vlen))

        print "Created Milan's SINR estimator 2"

        config = station_configuration()

        #    trigger = [0]*vlen
        #    trigger[0] = 1
        #
        #    v = range (vlen/ss)
        #    ones_ind= map(lambda z: z*ss,v)
        #
        #    skip2_pr0 = skip(gr.sizeof_gr_complex,vlen)
        #    skip2_pr1 = skip(gr.sizeof_gr_complex,vlen)
        #    for x in ones_ind:
        #      skip2_pr0.skip(x)
        #      skip2_pr1.skip(x)
        #
        #    #print "skipped ones",ones_ind
        #
        #    v2s_pr0 = gr.vector_to_stream(gr.sizeof_gr_complex,vlen)
        #    v2s_pr1 = gr.vector_to_stream(gr.sizeof_gr_complex,vlen)
        #
        #    s2v2_pr0 = gr.stream_to_vector(gr.sizeof_gr_complex,vlen/ss*(ss-1))
        #    trigger_src_2_pr0 = gr.vector_source_b(trigger,True)
        #    s2v2_pr1 = gr.stream_to_vector(gr.sizeof_gr_complex,vlen/ss*(ss-1))
        #    trigger_src_2_pr1 = gr.vector_source_b(trigger,True)
        #
        #    mag_sq_zeros_pr0 = gr.complex_to_mag_squared(vlen/ss*(ss-1))
        #    mag_sq_zeros_pr1 = gr.complex_to_mag_squared(vlen/ss*(ss-1))
        #
        #
        #    filt_zeros_pr0 = gr.single_pole_iir_filter_ff(0.01,vlen/ss*(ss-1))
        #    filt_zeros_pr1 = gr.single_pole_iir_filter_ff(0.01,vlen/ss*(ss-1))
        #    v1 = vlen/ss*(ss-1)
        #    vevc1 =[-1]*v1
        #    neg_nomin_z = gr.multiply_const_vff(vevc1)
        #    div_z=gr.divide_ff(vlen/ss*(ss-1))
        #    on_zeros = gr.add_const_vff(vevc1)
        #    sum_zeros = add_vff(vlen/ss*(ss-1))
        #
        # For average
        #sum_all = vector_sum_vff(vlen)
        #mult = blocks.multiply_const_ff(1./vlen)
        #scsnr_db_av = blocks.nlog10_ff(10,1,0)
        #filt_end_av = filter.single_pole_iir_filter_ff(0.1)
        #
        #
        #    self.connect((self,0),v2s_pr0,skip2_pr0,s2v2_pr0,mag_sq_zeros_pr0,filt_zeros_pr0)
        #    self.connect(trigger_src_2_pr0,(skip2_pr0,1))
        #
        #
        #
        #    self.connect((self,1),v2s_pr1,skip2_pr1,s2v2_pr1,mag_sq_zeros_pr1,filt_zeros_pr1)
        #    self.connect(trigger_src_2_pr1,(skip2_pr1,1))
        #
        #
        #    # On zeros
        #    self.connect(filt_zeros_pr1,(sum_zeros,0))
        #    self.connect(filt_zeros_pr0,neg_nomin_z,(sum_zeros,1))
        #    self.connect(sum_zeros,div_z)
        #    self.connect(filt_zeros_pr0,(div_z,1))

        estimator = sinr_estimator(vlen, ss, config.dc_null)

        scsnr_db = blocks.nlog10_ff(10, vlen, 0)
        #filt_end = filter.single_pole_iir_filter_ff(0.1,vlen)

        dd = []
        #for i in range (vlen/ss):
        #    dd.extend([i*ss])
        for i in range(vlen / ss):
            if i < (vlen / ss) / 2:
                dd.extend([i * ss + 4 + config.dc_null / 2])
            else:
                dd.extend([i * ss + 4 - config.dc_null / 2])

        #print dd
        interpolator = sinr_interpolator(vlen, ss, dd)

        self.connect((self, 0), (estimator, 0))
        self.connect((self, 1), (estimator, 1))
        #self.connect(estimator,interpolator,filt_end,scsnr_db,self)
        self.connect(estimator, interpolator, scsnr_db, self)
예제 #2
0
  def __init__(self, subc, vlen, ss):
    gr.hier_block2.__init__(self, "new_snr_estimator",
        gr.io_signature(2,2,gr.sizeof_gr_complex*vlen),
        #gr.io_signature2(2,2,gr.sizeof_float*vlen,gr.sizeof_float*vlen/ss*(ss-1)))
        gr.io_signature(1,1,gr.sizeof_float*vlen))

    print "Created Milan's SINR estimator 2"

    config = station_configuration()

#    trigger = [0]*vlen
#    trigger[0] = 1
#
#    v = range (vlen/ss)
#    ones_ind= map(lambda z: z*ss,v)
#
#    skip2_pr0 = skip(gr.sizeof_gr_complex,vlen)
#    skip2_pr1 = skip(gr.sizeof_gr_complex,vlen)
#    for x in ones_ind:
#      skip2_pr0.skip(x)
#      skip2_pr1.skip(x)
#
#    #print "skipped ones",ones_ind
#
#    v2s_pr0 = gr.vector_to_stream(gr.sizeof_gr_complex,vlen)
#    v2s_pr1 = gr.vector_to_stream(gr.sizeof_gr_complex,vlen)
#
#    s2v2_pr0 = gr.stream_to_vector(gr.sizeof_gr_complex,vlen/ss*(ss-1))
#    trigger_src_2_pr0 = gr.vector_source_b(trigger,True)
#    s2v2_pr1 = gr.stream_to_vector(gr.sizeof_gr_complex,vlen/ss*(ss-1))
#    trigger_src_2_pr1 = gr.vector_source_b(trigger,True)
#
#    mag_sq_zeros_pr0 = gr.complex_to_mag_squared(vlen/ss*(ss-1))
#    mag_sq_zeros_pr1 = gr.complex_to_mag_squared(vlen/ss*(ss-1))
#
#
#    filt_zeros_pr0 = gr.single_pole_iir_filter_ff(0.01,vlen/ss*(ss-1))
#    filt_zeros_pr1 = gr.single_pole_iir_filter_ff(0.01,vlen/ss*(ss-1))
#    v1 = vlen/ss*(ss-1)
#    vevc1 =[-1]*v1
#    neg_nomin_z = gr.multiply_const_vff(vevc1)
#    div_z=gr.divide_ff(vlen/ss*(ss-1))
#    on_zeros = gr.add_const_vff(vevc1)
#    sum_zeros = add_vff(vlen/ss*(ss-1))
#    
    # For average
    #sum_all = vector_sum_vff(vlen)
    #mult = blocks.multiply_const_ff(1./vlen)
    #scsnr_db_av = blocks.nlog10_ff(10,1,0)
    #filt_end_av = filter.single_pole_iir_filter_ff(0.1)
#
#
#    self.connect((self,0),v2s_pr0,skip2_pr0,s2v2_pr0,mag_sq_zeros_pr0,filt_zeros_pr0)
#    self.connect(trigger_src_2_pr0,(skip2_pr0,1))
#
#
#
#    self.connect((self,1),v2s_pr1,skip2_pr1,s2v2_pr1,mag_sq_zeros_pr1,filt_zeros_pr1)
#    self.connect(trigger_src_2_pr1,(skip2_pr1,1))
#
#
#    # On zeros
#    self.connect(filt_zeros_pr1,(sum_zeros,0))
#    self.connect(filt_zeros_pr0,neg_nomin_z,(sum_zeros,1))
#    self.connect(sum_zeros,div_z)
#    self.connect(filt_zeros_pr0,(div_z,1))
    

    estimator = sinr_estimator(vlen, ss, config.dc_null)

    scsnr_db = blocks.nlog10_ff(10,vlen,0)
    #filt_end = filter.single_pole_iir_filter_ff(0.1,vlen)



    dd = []
    #for i in range (vlen/ss):
    #    dd.extend([i*ss])
    for i in range (vlen/ss):
        if i < (vlen/ss)/2:
            dd.extend([i*ss + 4 + config.dc_null/2])
        else:
            dd.extend([i*ss + 4 - config.dc_null/2])

    #print dd
    interpolator = sinr_interpolator(vlen, ss,dd)
    
    self.connect((self,0),(estimator,0))
    self.connect((self,1),(estimator,1))
    #self.connect(estimator,interpolator,filt_end,scsnr_db,self)
    self.connect(estimator,interpolator,scsnr_db,self)
예제 #3
0
    def __init__(self, subc, vlen, ss):
        gr.hier_block2.__init__(
            self,
            "new_snr_estimator",
            gr.io_signature(2, 2, gr.sizeof_gr_complex * vlen),
            #gr.io_signature2(2,2,gr.sizeof_float*vlen,gr.sizeof_float*vlen/ss*(ss-1)))
            gr.io_signature2(2, 2, gr.sizeof_float * vlen, gr.sizeof_float))

        print "Created Milan's SINR estimator"

        trigger = [0] * vlen
        trigger[0] = 1

        v = range(vlen / ss)
        ones_ind = map(lambda z: z * ss, v)

        skip2_pr0 = skip(gr.sizeof_gr_complex, vlen)
        skip2_pr1 = skip(gr.sizeof_gr_complex, vlen)
        for x in ones_ind:
            skip2_pr0.skip(x)
            skip2_pr1.skip(x)

        #print "skipped ones",ones_ind

        v2s_pr0 = gr.vector_to_stream(gr.sizeof_gr_complex, vlen)
        v2s_pr1 = gr.vector_to_stream(gr.sizeof_gr_complex, vlen)

        s2v2_pr0 = gr.stream_to_vector(gr.sizeof_gr_complex,
                                       vlen / ss * (ss - 1))
        trigger_src_2_pr0 = gr.vector_source_b(trigger, True)
        s2v2_pr1 = gr.stream_to_vector(gr.sizeof_gr_complex,
                                       vlen / ss * (ss - 1))
        trigger_src_2_pr1 = gr.vector_source_b(trigger, True)

        mag_sq_zeros_pr0 = gr.complex_to_mag_squared(vlen / ss * (ss - 1))
        mag_sq_zeros_pr1 = gr.complex_to_mag_squared(vlen / ss * (ss - 1))

        filt_zeros_pr0 = gr.single_pole_iir_filter_ff(0.01,
                                                      vlen / ss * (ss - 1))
        filt_zeros_pr1 = gr.single_pole_iir_filter_ff(0.01,
                                                      vlen / ss * (ss - 1))
        v1 = vlen / ss * (ss - 1)
        vevc1 = [-1] * v1
        neg_nomin_z = gr.multiply_const_vff(vevc1)
        div_z = gr.divide_ff(vlen / ss * (ss - 1))
        on_zeros = gr.add_const_vff(vevc1)
        sum_zeros = add_vff(vlen / ss * (ss - 1))

        # For average
        sum_all = vector_sum_vff(vlen)
        mult = gr.multiply_const_ff(1. / vlen)
        scsnr_db_av = gr.nlog10_ff(10, 1, 0)
        filt_end_av = gr.single_pole_iir_filter_ff(0.1)

        self.connect((self, 0), v2s_pr0, skip2_pr0, s2v2_pr0, mag_sq_zeros_pr0,
                     filt_zeros_pr0)
        self.connect(trigger_src_2_pr0, (skip2_pr0, 1))

        self.connect((self, 1), v2s_pr1, skip2_pr1, s2v2_pr1, mag_sq_zeros_pr1,
                     filt_zeros_pr1)
        self.connect(trigger_src_2_pr1, (skip2_pr1, 1))

        # On zeros
        self.connect(filt_zeros_pr1, (sum_zeros, 0))
        self.connect(filt_zeros_pr0, neg_nomin_z, (sum_zeros, 1))
        self.connect(sum_zeros, div_z)
        self.connect(filt_zeros_pr0, (div_z, 1))

        scsnr_db = gr.nlog10_ff(10, vlen, 0)
        filt_end = gr.single_pole_iir_filter_ff(0.1, vlen)

        dd = []
        for i in range(vlen / ss):
            dd.extend([i * ss])
        #print dd
        interpolator = sinr_interpolator(vlen, ss, dd)

        self.connect(div_z, interpolator, filt_end, scsnr_db, self)
        self.connect(interpolator, sum_all, mult, scsnr_db_av, filt_end_av,
                     (self, 1))
예제 #4
0
  def __init__(self, subc, vlen, ss):
    gr.hier_block2.__init__(self, "new_snr_estimator",
        gr.io_signature(2,2,gr.sizeof_gr_complex*vlen),
        #gr.io_signature2(2,2,gr.sizeof_float*vlen,gr.sizeof_float*vlen/ss*(ss-1)))
        gr.io_signature2(2,2,gr.sizeof_float*vlen,gr.sizeof_float))

    print "Created Milan's SINR estimator"

    trigger = [0]*vlen
    trigger[0] = 1

    v = range (vlen/ss)
    ones_ind= map(lambda z: z*ss,v)

    skip2_pr0 = skip(gr.sizeof_gr_complex,vlen)
    skip2_pr1 = skip(gr.sizeof_gr_complex,vlen)
    for x in ones_ind:
      skip2_pr0.skip(x)
      skip2_pr1.skip(x)

    #print "skipped ones",ones_ind

    v2s_pr0 = gr.vector_to_stream(gr.sizeof_gr_complex,vlen)
    v2s_pr1 = gr.vector_to_stream(gr.sizeof_gr_complex,vlen)

    s2v2_pr0 = gr.stream_to_vector(gr.sizeof_gr_complex,vlen/ss*(ss-1))
    trigger_src_2_pr0 = gr.vector_source_b(trigger,True)
    s2v2_pr1 = gr.stream_to_vector(gr.sizeof_gr_complex,vlen/ss*(ss-1))
    trigger_src_2_pr1 = gr.vector_source_b(trigger,True)

    mag_sq_zeros_pr0 = gr.complex_to_mag_squared(vlen/ss*(ss-1))
    mag_sq_zeros_pr1 = gr.complex_to_mag_squared(vlen/ss*(ss-1))


    filt_zeros_pr0 = gr.single_pole_iir_filter_ff(0.01,vlen/ss*(ss-1))
    filt_zeros_pr1 = gr.single_pole_iir_filter_ff(0.01,vlen/ss*(ss-1))
    v1 = vlen/ss*(ss-1)
    vevc1 =[-1]*v1
    neg_nomin_z = gr.multiply_const_vff(vevc1)
    div_z=gr.divide_ff(vlen/ss*(ss-1))
    on_zeros = gr.add_const_vff(vevc1)
    sum_zeros = add_vff(vlen/ss*(ss-1))
    
    # For average
    sum_all = vector_sum_vff(vlen)
    mult = gr.multiply_const_ff(1./vlen)
    scsnr_db_av = gr.nlog10_ff(10,1,0)
    filt_end_av = gr.single_pole_iir_filter_ff(0.1)


    self.connect((self,0),v2s_pr0,skip2_pr0,s2v2_pr0,mag_sq_zeros_pr0,filt_zeros_pr0)
    self.connect(trigger_src_2_pr0,(skip2_pr0,1))



    self.connect((self,1),v2s_pr1,skip2_pr1,s2v2_pr1,mag_sq_zeros_pr1,filt_zeros_pr1)
    self.connect(trigger_src_2_pr1,(skip2_pr1,1))


    # On zeros
    self.connect(filt_zeros_pr1,(sum_zeros,0))
    self.connect(filt_zeros_pr0,neg_nomin_z,(sum_zeros,1))
    self.connect(sum_zeros,div_z)
    self.connect(filt_zeros_pr0,(div_z,1))


    scsnr_db = gr.nlog10_ff(10,vlen,0)
    filt_end = gr.single_pole_iir_filter_ff(0.1,vlen)



    dd = []
    for i in range (vlen/ss):
        dd.extend([i*ss])
    #print dd
    interpolator = sinr_interpolator(vlen, ss,dd)

    self.connect(div_z,interpolator,filt_end,scsnr_db,self)
    self.connect(interpolator,sum_all,mult,scsnr_db_av,filt_end_av,(self,1))