Esempio n. 1
0
    def __init__(self):
        gr.hier_block2.__init__(self,
            "decode_pbch_vcvf",
            gr.io_signature(3, 3, gr.sizeof_gr_complex*240),  # Input signature
            gr.io_signature(1, 1, gr.sizeof_float*120)) # Output signature
        self.message_port_register_hier_out("cell_id")
        # Define blocks and connect them
        style = "tx_diversity"
        self.pre_decoder_1ant = lte.pre_decoder_vcvc(1, style)
        self.pre_decoder_2ant = lte.pre_decoder_vcvc(2, style)
        self.demapper_1ant = lte.layer_demapper_vcvc(1, style)
        self.demapper_2ant = lte.layer_demapper_vcvc(2, style)
        self.interleave = gr.interleave(240*gr.sizeof_gr_complex)
        self.demod = lte.qpsk_soft_demod_vcvf()
        self.descr = lte.descrambling_vfvf()
        
        self.msg_connect(self, "cell_id", self.descr, "cell_id")

        self.connect( (self, 0) , (self.pre_decoder_1ant, 0) )
        self.connect( (self, 1) , (self.pre_decoder_1ant, 1) )
        self.connect( (self, 0) , (self.pre_decoder_2ant, 0) )
        self.connect( (self, 1) , (self.pre_decoder_2ant, 1) )
        self.connect( (self, 2) , (self.pre_decoder_2ant, 2) )
        
        self.connect( self.pre_decoder_1ant, self.demapper_1ant, (self.interleave, 0) )
        self.connect( self.pre_decoder_2ant, self.demapper_2ant, (self.interleave, 1) )
        
        
        self.connect(self.interleave, self.descr, self)
Esempio n. 2
0
    def __init__(self, N_rb_dl, key, out_key, msg_cell_id_name, msg_N_ant_name, msg_cfi_name):
        gr.hier_block2.__init__(self,
            "decode_pcfich_vcm",
            gr.io_signature(3, 3, gr.sizeof_gr_complex * 12 * N_rb_dl),  # Input signature
            gr.io_signature(0, 0, 0)) # Output signature
        
        # register message ports        
        self.message_port_register_hier_out(msg_cell_id_name)
        self.message_port_register_hier_out(msg_N_ant_name)
        self.message_port_register_hier_in(msg_cfi_name)
        # define some variables
        cvlen = 16
        N_ant = 2 # dummy resetable during runtime
        style = "tx_diversity" # PCFICH only uses this value (no spatial multiplexing etc.)
        
        # instatiate blocks with there parameters
        self.demux = lte.pcfich_demux_vcvc(N_rb_dl, key, out_key, msg_cell_id_name)
        self.predecoder = lte.pre_decoder_vcvc(N_ant, cvlen, style)
        self.demapper = lte.layer_demapper_vcvc(N_ant, cvlen, style)
        self.qpsk = lte.qpsk_soft_demod_vcvf(cvlen)
        self.descrambler = lte.pcfich_descrambler_vfvf(out_key, msg_cell_id_name)
        self.unpack = lte.cfi_unpack_vf(out_key, msg_cfi_name)

        # Connect defined blocks
        self.connect((self, 0), (self.demux, 0), (self.predecoder, 0))
        self.connect((self, 1), (self.demux, 1), (self.predecoder, 1))
        self.connect((self, 2), (self.demux, 2), (self.predecoder, 2))
        self.connect(self.predecoder, self.demapper, self.qpsk, self.descrambler, self.unpack)
        
        # Don't forget the message ports
        self.msg_connect(self, msg_N_ant_name, self.predecoder, msg_N_ant_name)
        self.msg_connect(self, msg_N_ant_name, self.demapper, msg_N_ant_name)
        self.msg_connect(self, msg_cell_id_name, self.demux, msg_cell_id_name)
        self.msg_connect(self, msg_cell_id_name, self.descrambler, msg_cell_id_name)
        self.msg_connect(self.unpack, msg_cfi_name, self, msg_cfi_name)
Esempio n. 3
0
 def test_001_parts(self):
     print "test 001 PARTS!!!"
     # This test is for integration
     # all parts expect Demux are tested if they decode CFI correctly
     
     self.tb2 = gr.top_block ()
     
     cell_id = 124
     N_ant = 2
     style = "tx_diversity"
     cvlen = 16
     key = "subframe"
     msg_buf_name = "cfi"
     cfi = 1
     
     data = []
     exp_pc = []
     for ns in range(10):
         cfi_seq = get_cfi_sequence(cfi)
         scr = scramble_cfi_sequence(cfi_seq, cell_id, 2*ns)
         mod = qpsk_modulation(scr)
         lay = layer_mapping(mod, N_ant, style)
         prc = pre_coding(lay, N_ant, style)
         prc_prep = [prc[0][i]+prc[1][i] for i in range(len(prc[0]))]
         #print np.shape(prc)
         prep = prepare_for_demapper_block(lay, N_ant, style)
         exp_pc.extend(prep)
         data.extend(prc_prep)
           
     taglist = get_tag_list(len(data)/16, key, 10)
     self.src = blocks.vector_source_c(data, False, cvlen, taglist)
   
     h0 = [complex(1,0)]*len(data)
     h1 = [complex(1,0)]*len(data)
     self.src1 = blocks.vector_source_c(h0, False, cvlen)
     self.src2 = blocks.vector_source_c(h1, False, cvlen)
     self.predecoder = lte.pre_decoder_vcvc(N_ant, cvlen, style)
     self.snk = blocks.vector_sink_c(cvlen)
     self.demapper = lte.layer_demapper_vcvc(N_ant, cvlen, style)
     self.qpsk = lte.qpsk_soft_demod_vcvf(cvlen)
     self.descr = lte.pcfich_descrambler_vfvf(key, msg_buf_name)
     self.descr.set_cell_id(cell_id)
     self.cfi = lte.cfi_unpack_vf(key, msg_buf_name)
     
     self.tb2.connect(self.src, (self.predecoder, 0))
     self.tb2.connect(self.src1, (self.predecoder, 1))
     self.tb2.connect(self.src2, (self.predecoder, 2))
     self.tb2.connect(self.predecoder, self.demapper)
     self.tb2.connect(self.predecoder, self.snk)
     self.tb2.connect(self.demapper, self.qpsk, self.descr, self.cfi)
     
     self.tb2.run()
     print "test 001 PARTS FINISHED!!!\n"
Esempio n. 4
0
    def test_002_pcfich(self):
        print "test_002_pcfich"
        
        # some constants
        cell_id = 124
        N_ant = 2
        style= "tx_diversity"
        vlen = 16
        ns = 0
        
        # new top_block because even the interface changes
        self.tb2 = gr.top_block()
        
        # generate test data together with the expected output
        data = []
        exp_res = []
        for cfi in range(4):
            cfi_seq = get_cfi_sequence(cfi+1)
            scr_cfi_seq = scramble_cfi_sequence(cfi_seq, cell_id, ns)
            mod_cfi_seq = qpsk_modulation(scr_cfi_seq)
            lay_cfi_seq = layer_mapping(mod_cfi_seq, N_ant, style)
            lay_cfi_prep = prepare_for_demapper_block(lay_cfi_seq, N_ant, style)
            exp_res.extend(lay_cfi_prep)
            pc_cfi_seq = pre_coding(lay_cfi_seq, N_ant, style)
            pc_cfi_seq = [pc_cfi_seq[0][i]+pc_cfi_seq[1][i] for i in range(len(pc_cfi_seq[0]))]
            data.extend(pc_cfi_seq)

        # dummy channel estimates        
        intu2 = [complex(1,0)]*len(data)
        intu3 = [complex(1,0)]*len(data)
               
        # get blocks
        self.src1 = blocks.vector_source_c( data, False, vlen)
        self.src2 = blocks.vector_source_c( intu2, False, vlen)
        self.src3 = blocks.vector_source_c( intu3, False, vlen)
        self.pd = lte_swig.pre_decoder_vcvc(1, vlen, style)
        self.snk = blocks.vector_sink_c(vlen)
        
        # connect all blocks
        self.tb2.connect(self.src1, (self.pd,0) )
        self.tb2.connect(self.src2, (self.pd,1) )
        self.tb2.connect(self.src3, (self.pd,2) )
        self.tb2.connect(self.pd, self.snk)
        
        self.pd.set_N_ant(N_ant)
        
        # run flowgraph
        self.tb2.run()
        
        # compare result with expected result
        res = self.snk.data()

        self.assertComplexTuplesAlmostEqual(res, exp_res)
Esempio n. 5
0
 def setUp (self):
     self.tb = gr.top_block ()
     
     intu1 = [0]*240
     intu2 = [0]*240
     intu3 = [0]*240
                  
     self.src1 = gr.vector_source_c( intu1, False, 240)
     self.src2 = gr.vector_source_c( intu2, False, 240)
     self.src3 = gr.vector_source_c( intu3, False, 240)
     
     self.pd = lte_swig.pre_decoder_vcvc(2,'tx_diversity')
     
     self.snk = gr.vector_sink_c(240)
     
     self.tb.connect(self.src1,(self.pd,0) )
     self.tb.connect(self.src2,(self.pd,1) )
     self.tb.connect(self.src3,(self.pd,2) )
     self.tb.connect(self.pd,self.snk)
Esempio n. 6
0
 def setUp (self):
     self.tb = gr.top_block ()
     
     N_ant = 2
     vlen = 240
     style = 'tx_diversity'
     
     intu1 = [0]*vlen
     intu2 = [0]*vlen
     intu3 = [0]*vlen
                  
     self.src1 = blocks.vector_source_c( intu1, False, vlen)
     self.src2 = blocks.vector_source_c( intu2, False, vlen)
     self.src3 = blocks.vector_source_c( intu3, False, vlen)
     
     self.pd = lte_swig.pre_decoder_vcvc(N_ant, vlen, style)
     
     self.snk = blocks.vector_sink_c(vlen)
     
     self.tb.connect(self.src1,(self.pd,0) )
     self.tb.connect(self.src2,(self.pd,1) )
     self.tb.connect(self.src3,(self.pd,2) )
     self.tb.connect(self.pd,self.snk)
Esempio n. 7
0
	def __init__(self):
		gr.top_block.__init__(self, "LTE flowgraph")
		Qt.QWidget.__init__(self)
		self.setWindowTitle("LTE flowgraph")
		self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
		self.top_scroll_layout = Qt.QVBoxLayout()
		self.setLayout(self.top_scroll_layout)
		self.top_scroll = Qt.QScrollArea()
		self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
		self.top_scroll_layout.addWidget(self.top_scroll)
		self.top_scroll.setWidgetResizable(True)
		self.top_widget = Qt.QWidget()
		self.top_scroll.setWidget(self.top_widget)
		self.top_layout = Qt.QVBoxLayout(self.top_widget)
		self.top_grid_layout = Qt.QGridLayout()
		self.top_layout.addLayout(self.top_grid_layout)


		##################################################
		# Variables
		##################################################
		self.fftlen = fftlen = 512
		self.cpl0 = cpl0 = 160*fftlen/2048
		self.cpl = cpl = 144*fftlen/2048
		self.slotl = slotl = 7*fftlen+6*cpl+cpl0
		self.samp_rate = samp_rate = slotl/0.0005
		self.style = style = "tx_diversity"
		self.interp_val = interp_val = int(samp_rate/1e4)
		self.N_rb_dl = N_rb_dl = 6

		##################################################
		# Blocks
		##################################################
		self.eq = lte.linear_OFDM_equalizer_hier_vcvc(N_rb_dl)
		self.descr = lte.descrambling_vfvf()
		self.demux = lte.pbch_demux_vcvc(N_rb_dl)
		self.daemon = lte.cell_id_daemon(self.eq.eq, self.demux, self.descr)
		self.qtgui_sink_x_0 = qtgui.sink_c(
			1024, #fftsize
			firdes.WIN_BLACKMAN_hARRIS, #wintype
			0, #fc
			samp_rate, #bw
			"QT GUI Plot", #name
			True, #plotfreq
			True, #plotwaterfall
			True, #plottime
			True, #plotconst
		)
		self._qtgui_sink_x_0_win = sip.wrapinstance(self.qtgui_sink_x_0.pyqwidget(), Qt.QWidget)
		self.top_layout.addWidget(self._qtgui_sink_x_0_win)
		self.lte_viterbi_vfvb_0 = lte.viterbi_vfvb()
		self.lte_remove_cp_cvc_1 = lte.remove_cp_cvc(fftlen)
		self.lte_rate_unmatch_vff_0 = lte.rate_unmatch_vff()
		self.lte_qpsk_soft_demod_vcvf_0 = lte.qpsk_soft_demod_vcvf()
		self.lte_pss_sync_hier_cc_0 = lte.pss_sync_hier_cc(fftlen)
		self.lte_pre_decoder_vcvc_0_0 = lte.pre_decoder_vcvc(2, style)
		self.lte_pre_decoder_vcvc_0 = lte.pre_decoder_vcvc(1, style)
		self.lte_mib_unpack_vb_0 = lte.mib_unpack_vb()
		self.lte_layer_demapper_vcvc_0_0 = lte.layer_demapper_vcvc(2, style)
		self.lte_layer_demapper_vcvc_0 = lte.layer_demapper_vcvc(1, style)
		self.lte_hier_sss_sync_cc_0 = lte.hier_sss_sync_cc(self.daemon, fftlen)
		self.lte_hier_freq_estimate_cc_0 = lte.hier_freq_estimate_cc(fftlen)
		self.lte_extract_occupied_tones_vcvc_0 = lte.extract_occupied_tones_vcvc(N_rb_dl,fftlen)
		self.lte_crc_calculator_vbvb_0 = lte.crc_calculator_vbvb()
		self.lte_cp_time_freq_sync_cc_0 = lte.cp_time_freq_sync_cc(fftlen)
		self.gr_vector_to_stream_0 = gr.vector_to_stream(gr.sizeof_gr_complex*1, 240)
		self.gr_throttle_0 = gr.throttle(gr.sizeof_gr_complex*1, samp_rate)
		self.gr_interleave_0 = gr.interleave(gr.sizeof_gr_complex*240)
		self.gr_file_source_0 = gr.file_source(gr.sizeof_gr_complex*1, "/home/demel/Dokumente/Messungen_31_10_2012/samples_12.5MSps_20dB.iq", False)
		self.fft_vxx_0 = fft.fft_vcc(fftlen, True, (window.rectangular(fftlen)), False, 1)
		self.blks2_rational_resampler_xxx_0 = blks2.rational_resampler_ccc(
			interpolation=interp_val,
			decimation=1250,
			taps=None,
			fractional_bw=None,
		)

		##################################################
		# Connections
		##################################################
		self.connect((self.gr_file_source_0, 0), (self.blks2_rational_resampler_xxx_0, 0))
		self.connect((self.blks2_rational_resampler_xxx_0, 0), (self.gr_throttle_0, 0))
		self.connect((self.lte_hier_freq_estimate_cc_0, 0), (self.lte_hier_sss_sync_cc_0, 0))
		self.connect((self.lte_pss_sync_hier_cc_0, 0), (self.lte_hier_freq_estimate_cc_0, 0))
		self.connect((self.lte_cp_time_freq_sync_cc_0, 0), (self.lte_pss_sync_hier_cc_0, 0))
		self.connect((self.gr_throttle_0, 0), (self.lte_cp_time_freq_sync_cc_0, 0))
		self.connect((self.lte_hier_sss_sync_cc_0, 0), (self.lte_remove_cp_cvc_1, 0))
		self.connect((self.fft_vxx_0, 0), (self.lte_extract_occupied_tones_vcvc_0, 0))
		self.connect((self.lte_remove_cp_cvc_1, 0), (self.fft_vxx_0, 0))
		self.connect((self.lte_extract_occupied_tones_vcvc_0, 0), (self.eq, 0))
		self.connect((self.lte_pre_decoder_vcvc_0, 0), (self.lte_layer_demapper_vcvc_0, 0))
		self.connect((self.eq, 0), (self.demux, 0))
		self.connect((self.eq, 1), (self.demux, 1))
		self.connect((self.eq, 2), (self.demux, 2))
		self.connect((self.lte_pre_decoder_vcvc_0_0, 0), (self.lte_layer_demapper_vcvc_0_0, 0))
		self.connect((self.lte_layer_demapper_vcvc_0_0, 0), (self.gr_interleave_0, 1))
		self.connect((self.demux, 1), (self.lte_pre_decoder_vcvc_0_0, 1))
		self.connect((self.demux, 1), (self.lte_pre_decoder_vcvc_0, 1))
		self.connect((self.demux, 0), (self.lte_pre_decoder_vcvc_0, 0))
		self.connect((self.demux, 2), (self.lte_pre_decoder_vcvc_0_0, 2))
		self.connect((self.demux, 0), (self.lte_pre_decoder_vcvc_0_0, 0))
		self.connect((self.lte_qpsk_soft_demod_vcvf_0, 0), (self.descr, 0))
		self.connect((self.gr_interleave_0, 0), (self.lte_qpsk_soft_demod_vcvf_0, 0))
		self.connect((self.lte_layer_demapper_vcvc_0, 0), (self.gr_interleave_0, 0))
		self.connect((self.descr, 0), (self.lte_rate_unmatch_vff_0, 0))
		self.connect((self.lte_crc_calculator_vbvb_0, 1), (self.lte_mib_unpack_vb_0, 1))
		self.connect((self.lte_crc_calculator_vbvb_0, 0), (self.lte_mib_unpack_vb_0, 0))
		self.connect((self.lte_viterbi_vfvb_0, 0), (self.lte_crc_calculator_vbvb_0, 0))
		self.connect((self.lte_rate_unmatch_vff_0, 0), (self.lte_viterbi_vfvb_0, 0))
		self.connect((self.gr_interleave_0, 0), (self.gr_vector_to_stream_0, 0))
		self.connect((self.gr_vector_to_stream_0, 0), (self.qtgui_sink_x_0, 0))
Esempio n. 8
0
	def __init__(self):
		gr.top_block.__init__(self, "LTE flowgraph")

		##################################################
		# Variables
		##################################################
		self.fftlen = fftlen = 2048
		self.cpl0 = cpl0 = 160*fftlen/2048
		self.cpl = cpl = 144*fftlen/2048
		self.slotl = slotl = 7*fftlen+6*cpl+cpl0
		self.samp_rate = samp_rate = slotl/0.0005
		self.style = style = "tx_diversity"
		self.interp_val = interp_val = int(samp_rate/1e4)
		self.N_rb_dl = N_rb_dl = 6

		##################################################
		# Blocks
		##################################################
		self.eq = lte.linear_OFDM_estimator_hier_vcvc(N_rb_dl)
		self.descr = lte.descrambling_vfvf()
		self.demux = lte.pbch_demux_vcvc(N_rb_dl)
		self.daemon = lte.cell_id_daemon(self.eq.eq, self.demux, self.descr)
		self.lte_viterbi_vfvb_0 = lte.viterbi_vfvb()
		self.lte_remove_cp_cvc_1 = lte.remove_cp_cvc(fftlen)
		self.lte_rate_unmatch_vff_0 = lte.rate_unmatch_vff()
		self.lte_qpsk_soft_demod_vcvf_0 = lte.qpsk_soft_demod_vcvf()
		self.lte_pre_decoder_vcvc_0_0 = lte.pre_decoder_vcvc(2, style)
		self.lte_pre_decoder_vcvc_0 = lte.pre_decoder_vcvc(1, style)
		self.lte_mib_unpack_vb_0 = lte.mib_unpack_vb()
		self.lte_layer_demapper_vcvc_0_0 = lte.layer_demapper_vcvc(2, style)
		self.lte_layer_demapper_vcvc_0 = lte.layer_demapper_vcvc(1, style)
		self.lte_hier_sss_sync_cc_0 = lte.hier_sss_sync_cc(self.daemon, fftlen)
		self.lte_hier_pss_sync_cc_0 = lte.hier_pss_sync_cc(fftlen)
		self.lte_hier_freq_estimate_cc_0 = lte.hier_freq_estimate_cc(fftlen)
		self.lte_extract_occupied_tones_vcvc_0 = lte.extract_occupied_tones_vcvc(N_rb_dl,fftlen)
		self.lte_crc_calculator_vbvb_0 = lte.crc_calculator_vbvb()
		self.lte_cp_time_freq_sync_cc_0 = lte.cp_time_freq_sync_cc(fftlen)
		self.gr_throttle_0 = gr.throttle(gr.sizeof_gr_complex*1, samp_rate)
		self.gr_interleave_0 = gr.interleave(gr.sizeof_gr_complex*240)
		self.gr_file_source_0 = gr.file_source(gr.sizeof_gr_complex*1, "/home/demel/Dokumente/Messungen/Messung_LTE_2012-05-23_12:47:32.dat", False)
		self.fft_vxx_0 = fft.fft_vcc(fftlen, True, (window.rectangular(fftlen)), False, 1)
		self.blks2_rational_resampler_xxx_0 = blks2.rational_resampler_ccc(
			interpolation=interp_val,
			decimation=1000,
			taps=None,
			fractional_bw=None,
		)

		##################################################
		# Connections
		##################################################
		self.connect((self.gr_file_source_0, 0), (self.blks2_rational_resampler_xxx_0, 0))
		self.connect((self.blks2_rational_resampler_xxx_0, 0), (self.gr_throttle_0, 0))
		self.connect((self.lte_hier_freq_estimate_cc_0, 0), (self.lte_hier_sss_sync_cc_0, 0))
		self.connect((self.gr_throttle_0, 0), (self.lte_cp_time_freq_sync_cc_0, 0))
		self.connect((self.lte_hier_sss_sync_cc_0, 0), (self.lte_remove_cp_cvc_1, 0))
		self.connect((self.fft_vxx_0, 0), (self.lte_extract_occupied_tones_vcvc_0, 0))
		self.connect((self.lte_remove_cp_cvc_1, 0), (self.fft_vxx_0, 0))
		self.connect((self.lte_pre_decoder_vcvc_0, 0), (self.lte_layer_demapper_vcvc_0, 0))
		self.connect((self.lte_pre_decoder_vcvc_0_0, 0), (self.lte_layer_demapper_vcvc_0_0, 0))
		self.connect((self.lte_layer_demapper_vcvc_0_0, 0), (self.gr_interleave_0, 1))
		self.connect((self.demux, 1), (self.lte_pre_decoder_vcvc_0_0, 1))
		self.connect((self.demux, 1), (self.lte_pre_decoder_vcvc_0, 1))
		self.connect((self.demux, 0), (self.lte_pre_decoder_vcvc_0, 0))
		self.connect((self.demux, 2), (self.lte_pre_decoder_vcvc_0_0, 2))
		self.connect((self.demux, 0), (self.lte_pre_decoder_vcvc_0_0, 0))
		self.connect((self.lte_qpsk_soft_demod_vcvf_0, 0), (self.descr, 0))
		self.connect((self.gr_interleave_0, 0), (self.lte_qpsk_soft_demod_vcvf_0, 0))
		self.connect((self.lte_layer_demapper_vcvc_0, 0), (self.gr_interleave_0, 0))
		self.connect((self.descr, 0), (self.lte_rate_unmatch_vff_0, 0))
		self.connect((self.lte_crc_calculator_vbvb_0, 1), (self.lte_mib_unpack_vb_0, 1))
		self.connect((self.lte_crc_calculator_vbvb_0, 0), (self.lte_mib_unpack_vb_0, 0))
		self.connect((self.lte_viterbi_vfvb_0, 0), (self.lte_crc_calculator_vbvb_0, 0))
		self.connect((self.lte_rate_unmatch_vff_0, 0), (self.lte_viterbi_vfvb_0, 0))
		self.connect((self.lte_cp_time_freq_sync_cc_0, 0), (self.lte_hier_pss_sync_cc_0, 0))
		self.connect((self.lte_hier_pss_sync_cc_0, 0), (self.lte_hier_freq_estimate_cc_0, 0))
		self.connect((self.lte_extract_occupied_tones_vcvc_0, 0), (self.eq, 0))
		self.connect((self.eq, 0), (self.demux, 0))
		self.connect((self.eq, 1), (self.demux, 1))
		self.connect((self.eq, 2), (self.demux, 2))
Esempio n. 9
0
	def __init__(self):
		gr.top_block.__init__(self, "LTE flowgraph")

		##################################################
		# Variables
		##################################################
		self.fftlen = fftlen = 2048
		self.cpl0 = cpl0 = 160*fftlen/2048
		self.cpl = cpl = 144*fftlen/2048
		self.slotl = slotl = 7*fftlen+6*cpl+cpl0
		self.samp_rate = samp_rate = slotl/0.0005
		self.style = style = "tx_diversity"
		self.interp_val = interp_val = int(samp_rate/1e4)
		self.N_rb_dl = N_rb_dl = 6

		##################################################
		# Blocks
		##################################################
		self.lte_viterbi_vfvb_0 = lte.viterbi_vfvb()
		self.lte_remove_cp_cvc_1 = lte.remove_cp_cvc(fftlen)
		self.lte_rate_unmatch_vff_0 = lte.rate_unmatch_vff()
		self.lte_qpsk_soft_demod_vcvf_0 = lte.qpsk_soft_demod_vcvf()
		self.lte_pre_decoder_vcvc_0_0 = lte.pre_decoder_vcvc(2, style)
		self.lte_pre_decoder_vcvc_0 = lte.pre_decoder_vcvc(1, style)
		self.lte_mib_unpack_vb_0 = lte.mib_unpack_vb()
		self.lte_layer_demapper_vcvc_0_0 = lte.layer_demapper_vcvc(2, style)
		self.lte_layer_demapper_vcvc_0 = lte.layer_demapper_vcvc(1, style)
		self.lte_hier_sss_sync_cc_1 = lte.hier_sss_sync_cc(fftlen)
		self.lte_hier_pss_sync_cc_0 = lte.hier_pss_sync_cc(fftlen)
		self.lte_hier_freq_estimate_cc_0 = lte.hier_freq_estimate_cc(fftlen)
		self.lte_extract_occupied_tones_vcvc_0 = lte.extract_occupied_tones_vcvc(N_rb_dl,fftlen)
		self.lte_crc_calculator_vbvb_0 = lte.crc_calculator_vbvb()
		self.lte_cp_time_freq_sync_cc_0 = lte.cp_time_freq_sync_cc(fftlen)
		self.lte_channel_estimator_0 = lte.channel_estimator(N_rb_dl)
		self.gr_throttle_0 = gr.throttle(gr.sizeof_gr_complex*1, samp_rate/4)
		self.gr_interleave_0 = gr.interleave(gr.sizeof_gr_complex*240)
		self.gr_file_source_0_0 = gr.file_source(gr.sizeof_gr_complex*1, "/home/demel/gr-lte/data/Messung_Resampled_3072MSps.dat", False)
		self.fft_vxx_0 = fft.fft_vcc(fftlen, True, (window.rectangular(fftlen)), False, 1)
		self.descr = lte.descrambling_vfvf()
		self.demux = lte.pbch_demux_vcvc(N_rb_dl)

		##################################################
		# Connections
		##################################################
		self.connect((self.lte_cp_time_freq_sync_cc_0, 0), (self.lte_hier_pss_sync_cc_0, 0))
		self.connect((self.lte_hier_pss_sync_cc_0, 0), (self.lte_hier_freq_estimate_cc_0, 0))
		self.connect((self.gr_throttle_0, 0), (self.lte_cp_time_freq_sync_cc_0, 0))
		self.connect((self.gr_file_source_0_0, 0), (self.gr_throttle_0, 0))
		self.connect((self.fft_vxx_0, 0), (self.lte_extract_occupied_tones_vcvc_0, 0))
		self.connect((self.lte_remove_cp_cvc_1, 0), (self.fft_vxx_0, 0))
		self.connect((self.descr, 0), (self.lte_rate_unmatch_vff_0, 0))
		self.connect((self.lte_qpsk_soft_demod_vcvf_0, 0), (self.descr, 0))
		self.connect((self.demux, 2), (self.lte_pre_decoder_vcvc_0_0, 2))
		self.connect((self.demux, 1), (self.lte_pre_decoder_vcvc_0_0, 1))
		self.connect((self.demux, 0), (self.lte_pre_decoder_vcvc_0_0, 0))
		self.connect((self.demux, 1), (self.lte_pre_decoder_vcvc_0, 1))
		self.connect((self.demux, 0), (self.lte_pre_decoder_vcvc_0, 0))
		self.connect((self.lte_channel_estimator_0, 2), (self.demux, 2))
		self.connect((self.lte_channel_estimator_0, 1), (self.demux, 1))
		self.connect((self.lte_channel_estimator_0, 0), (self.demux, 0))
		self.connect((self.lte_extract_occupied_tones_vcvc_0, 0), (self.lte_channel_estimator_0, 0))
		self.connect((self.lte_rate_unmatch_vff_0, 0), (self.lte_viterbi_vfvb_0, 0))
		self.connect((self.lte_viterbi_vfvb_0, 0), (self.lte_crc_calculator_vbvb_0, 0))
		self.connect((self.lte_crc_calculator_vbvb_0, 0), (self.lte_mib_unpack_vb_0, 0))
		self.connect((self.lte_crc_calculator_vbvb_0, 1), (self.lte_mib_unpack_vb_0, 1))
		self.connect((self.lte_layer_demapper_vcvc_0, 0), (self.gr_interleave_0, 0))
		self.connect((self.gr_interleave_0, 0), (self.lte_qpsk_soft_demod_vcvf_0, 0))
		self.connect((self.lte_layer_demapper_vcvc_0_0, 0), (self.gr_interleave_0, 1))
		self.connect((self.lte_pre_decoder_vcvc_0_0, 0), (self.lte_layer_demapper_vcvc_0_0, 0))
		self.connect((self.lte_pre_decoder_vcvc_0, 0), (self.lte_layer_demapper_vcvc_0, 0))
		self.connect((self.lte_hier_freq_estimate_cc_0, 0), (self.lte_hier_sss_sync_cc_1, 0))
		self.connect((self.lte_hier_sss_sync_cc_1, 0), (self.lte_remove_cp_cvc_1, 0))

		##################################################
		# Asynch Message Connections
		##################################################
		self.msg_connect(self.lte_hier_sss_sync_cc_1, "cell_id", self.demux, "cell_id")
		self.msg_connect(self.lte_hier_sss_sync_cc_1, "cell_id", self.descr, "cell_id")
		self.msg_connect(self.lte_hier_sss_sync_cc_1, "cell_id", self.lte_channel_estimator_0, "cell_id")