options: parameters: author: Naoki Pross category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: correlator max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: Correlator Test window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: access_code_symbols id: variable parameters: comment: '' value: .5 * np.array([(-1.4142135623730951-1.4142135623730951j), (1.4142135623730951-1.4142135623730951j), (1.4142135623730951+1.4142135623730951j), (1.4142135623730951+1.4142135623730951j), (-1.4142135623730951-1.4142135623730951j), (1.4142135623730951+1.4142135623730951j), (1.4142135623730951-1.4142135623730951j), (1.4142135623730951-1.4142135623730951j)]) states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 788.0] rotation: 0 state: enabled - name: const id: variable_constellation parameters: comment: '' const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]' dims: '1' precision: '8' rot_sym: '4' soft_dec_lut: None sym_map: '[0, 1, 3, 2]' type: qpsk states: bus_sink: false bus_source: false bus_structure: null coordinate: [592, 360.0] rotation: 0 state: enabled - name: excess_bw id: variable parameters: comment: '' value: '.35' states: bus_sink: false bus_source: false bus_structure: null coordinate: [496, 360.0] rotation: 0 state: enabled - name: frame_len id: variable parameters: comment: '' value: len(testvec) + 4 states: bus_sink: false bus_source: false bus_structure: null coordinate: [304, 380.0] rotation: 0 state: true - name: nfilts id: variable parameters: comment: '' value: '32' states: bus_sink: false bus_source: false bus_structure: null coordinate: [224, 856.0] rotation: 0 state: enabled - name: revconj_access_code_symbols id: variable parameters: comment: '' value: '[(1.4142135623730951+1.4142135623730951j), (1.4142135623730951+1.4142135623730951j), (1.4142135623730951-1.4142135623730951j), (-1.4142135623730951+1.4142135623730951j), (1.4142135623730951-1.4142135623730951j), (1.4142135623730951-1.4142135623730951j), (1.4142135623730951+1.4142135623730951j), (-1.4142135623730951+1.4142135623730951j)]' states: bus_sink: false bus_source: false bus_structure: null coordinate: [784, 1052.0] rotation: 0 state: enabled - name: rrc_taps id: variable parameters: comment: '' value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), excess_bw, 45*nfilts) states: bus_sink: false bus_source: false bus_structure: null coordinate: [304, 856.0] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: int(1e6) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 116.0] rotation: 0 state: enabled - name: sps id: variable parameters: comment: '' value: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [104, 116.0] rotation: 0 state: enabled - name: testvec id: variable parameters: comment: '' value: '[0x1f, 0x35] + [0x12, 0x48] ' states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 356.0] rotation: 0 state: enabled - name: timing_loop_bw id: variable parameters: comment: '' value: 2 * np.pi / 100 states: bus_sink: false bus_source: false bus_structure: null coordinate: [224, 936.0] rotation: 0 state: enabled - name: analog_random_source_x_0 id: analog_random_source_x parameters: affinity: '' alias: '' comment: '' max: '255' maxoutbuf: '0' min: '0' minoutbuf: '0' num_samps: '1000' repeat: 'True' type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 428.0] rotation: 0 state: true - name: blocks_complex_to_magphase_0_0 id: blocks_complex_to_magphase parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1056, 984.0] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: 180 / 3.141592653589793 maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1312, 1076.0] rotation: 0 state: disabled - name: blocks_null_sink_3 id: blocks_null_sink parameters: affinity: '' alias: '' bus_structure_sink: '[[0,],]' comment: '' num_inputs: '1' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1360, 1016.0] rotation: 0 state: true - name: blocks_null_source_0 id: blocks_null_source parameters: affinity: '' alias: '' bus_structure_source: '[[0,],]' comment: '' maxoutbuf: '0' minoutbuf: '0' num_outputs: '1' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [96, 200.0] rotation: 0 state: enabled - name: blocks_repack_bits_bb_0 id: blocks_repack_bits_bb parameters: affinity: '' alias: '' align_output: 'True' comment: '' endianness: gr.GR_MSB_FIRST k: '2' l: '8' len_tag_key: '""' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [816, 1252.0] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: '' maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52001' tcp_no_delay: 'False' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [680, 1428.0] rotation: 0 state: disabled - name: blocks_stream_mux_0 id: blocks_stream_mux parameters: affinity: '' alias: '' comment: '' lengths: '[0, len(testvec), 4]' maxoutbuf: '0' minoutbuf: '0' num_inputs: '3' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [288, 256.0] rotation: 0 state: enabled - name: blocks_stream_to_vector_0 id: blocks_stream_to_vector parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_items: frame_len type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1072, 1264.0] rotation: 0 state: true - name: blocks_tagged_stream_align_0 id: blocks_tagged_stream_align parameters: affinity: '' alias: '' comment: '' lengthtagname: frame_start maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 1260.0] rotation: 0 state: true - name: blocks_tagged_stream_to_pdu_1 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: frame_start type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [352, 1452.0] rotation: 0 state: disabled - name: blocks_throttle_0 id: blocks_throttle parameters: affinity: '' alias: '' comment: '' ignoretag: 'True' maxoutbuf: '0' minoutbuf: '0' samples_per_second: samp_rate type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1272, 268.0] rotation: 0 state: enabled - name: blocks_vector_source_x_0 id: blocks_vector_source_x parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' repeat: 'True' tags: '[]' type: byte vector: testvec * 10000 vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 268.0] rotation: 0 state: enabled - name: channels_channel_model_0 id: channels_channel_model parameters: affinity: '' alias: '' block_tags: 'False' comment: '' epsilon: '1.0' freq_offset: '0.002' maxoutbuf: '0' minoutbuf: '0' noise_voltage: '0.1' seed: '243' taps: np.exp(1j * 30 / 180 * np.pi) states: bus_sink: false bus_source: false bus_structure: null coordinate: [1000, 228.0] rotation: 0 state: enabled - name: digital_cma_equalizer_cc_0 id: digital_cma_equalizer_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' modulus: '1' mu: '.002' num_taps: '15' sps: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 676.0] rotation: 0 state: enabled - name: digital_constellation_decoder_cb_0 id: digital_constellation_decoder_cb parameters: affinity: '' alias: '' comment: '' constellation: const maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [224, 1260.0] rotation: 0 state: enabled - name: digital_constellation_modulator_0 id: digital_constellation_modulator parameters: affinity: '' alias: '' comment: '' constellation: const differential: 'False' excess_bw: excess_bw log: 'False' maxoutbuf: '0' minoutbuf: '0' samples_per_symbol: sps verbose: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [504, 244.0] rotation: 0 state: enabled - name: digital_corr_est_cc_0 id: digital_corr_est_cc parameters: affinity: '' alias: '' comment: '' mark_delay: len(access_code_symbols) // 2 maxoutbuf: '0' minoutbuf: '0' sps: '1' symbols: access_code_symbols threshold: '.9' threshold_method: digital.THRESHOLD_ABSOLUTE states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 668.0] rotation: 0 state: enabled - name: digital_costas_loop_cc_0 id: digital_costas_loop_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' order: '4' use_snr: 'False' w: 2 * 3.141592653589793 / 100 states: bus_sink: false bus_source: false bus_structure: null coordinate: [1104, 808.0] rotation: 0 state: true - name: digital_pfb_clock_sync_xxx_0 id: digital_pfb_clock_sync_xxx parameters: affinity: '' alias: '' comment: '' filter_size: nfilts init_phase: '16' loop_bw: timing_loop_bw max_dev: '1.5' maxoutbuf: '0' minoutbuf: '0' osps: '1' sps: sps taps: rrc_taps type: ccf states: bus_sink: false bus_source: false bus_structure: null coordinate: [224, 700.0] rotation: 0 state: enabled - name: epy_block_0 id: epy_block parameters: _source_code: "import pmt\n\nimport numpy as np\nfrom gnuradio import gr\n\n#\ \ hide debugging print statements for the moment\nprint = lambda x: None\n\n\ class blk(gr.sync_block):\n \"\"\"\n Apply phase and frequency correction\ \ where there is a correlation peak tag.\n\n The correlation peak tags are\ \ NOT propagated, and instead replaced with a\n frame_start tag.\n \"\"\ \"\n def __init__(self):\n gr.sync_block.__init__(\n self,\n\ \ name='Phase and Frequency Correction',\n in_sig=[np.complex64],\n\ \ out_sig=[np.complex64]\n )\n\n # tags should not\ \ be propagated, we then output our own tags\n self.set_tag_propagation_policy(gr.TPP_DONT)\n\ \n # because we do block processing, we need to keep track of the last\ \ tag\n # of the previous block to correct the first values of the next\ \ block\n self.last = None\n self.lastfreq = 0\n\n self.lastnback\ \ = 0\n self.lastnsamples = 0\n\n def block_phase(self, start, end):\n\ \ \"\"\"\n Compute a vector for the phase and frequency correction\ \ for the samples\n between two tags (start and end).\n\n @param\ \ start Tag where the samples should start to be corrected\n @param end\ \ Tag where to stop correcting\n\n @return A vector of phase values\ \ for each sample. To correct the samples\n the data should be\ \ multiplied with np.exp(-1j * phase)\n \"\"\"\n # compute number\ \ of samples between tags\n nsamples = end.offset - start.offset\n\n\ \ # debugging, see last lines of self.work()\n self.lastnsamples\ \ = nsamples\n\n # unpack pmt values into start and end phase\n \ \ sphase = pmt.to_python(start.value)\n ephase = pmt.to_python(end.value)\n\ \n # compute frequency offset between start and end\n phasediff\ \ = (ephase - sphase) % (2 * np.pi)\n freq = phasediff / nsamples\n\n\ \ # save this one for the last block (see variable `end' in self.work)\n\ \ self.lastfreq = freq\n\n # debugging\n print(f\"Correction\ \ for chunk of {nsamples:2d} samples is \" \\\n f\"sphase={sphase:\ \ .4f} rad and freq={freq*1e3: .4f}e-3 rad / sample\")\n\n # compute\ \ chunk values\n return sphase * np.ones(nsamples) + freq * np.arange(0,\ \ nsamples)\n\n def work(self, input_items, output_items):\n counter\ \ = self.nitems_written(0)\n print(f\"Counter is at {counter} (nitems_written)\"\ )\n\n # nicer aliases\n inp = input_items[0]\n out = output_items[0]\n\ \n # read phase tags\n is_phase = lambda tag: pmt.to_python(tag.key)\ \ == \"phase_est\"\n tags = list(filter(is_phase, self.get_tags_in_range(0,\ \ counter, counter + len(inp))))\n\n if not tags:\n print(f\"\ There were no tags in {len(inp)} samples!\")\n out[:] = inp\n \ \ return len(out)\n\n # debugging\n print(f\"Processing\ \ {len(tags)} tags = {tags[-1].offset - tags[0].offset} \" \\\n \ \ f\"samples out of {len(inp)} input samples\")\n\n # compute \"the\ \ middle\"\n enough_samples = lambda pair: ((pair[1].offset - pair[0].offset)\ \ > 0)\n pairs = list(filter(enough_samples, zip(tags, tags[1:])))\n\ \ chunks = [ self.block_phase(start, end) for (start, end) in pairs ]\n\ \ middle = np.concatenate(chunks) if chunks else []\n\n # compute\ \ values at the end, we do not have informations about the future\n #\ \ but we can use the frequency of the last tag to approximate\n nback\ \ = len(inp) - (tags[-1].offset - counter)\n print(f\"Processing {nback}\ \ samples at the back of the buffer\")\n end = np.ones(nback) * pmt.to_python(tags[-1].value)\ \ \\\n + self.lastfreq * np.arange(0, nback)\n\n\n # compute\ \ the \"start\", using the last tag from the previous call\n nfront =\ \ tags[0].offset - counter\n print(f\"Processing {nfront} samples at\ \ the front of the buffer\")\n start = self.block_phase(self.last, tags[0])[-nfront:]\ \ \\\n if self.last and nfront else np.zeros(nfront)\n \ \ # start = np.zeros(nfront)\n\n # debugging\n if nfront + self.lastnback\ \ != self.lastnsamples:\n print(\"Something went wrong: last back\ \ + front != chunk size,\"\\\n f\" {self.lastnback} + {nfront}\ \ != {self.lastnsamples}\")\n self.lastnback = nback\n\n # compute\ \ correction\n correction = np.exp(-1j * np.concatenate([start, middle,\ \ end]))\n length = len(correction)\n\n # write outputs\n \ \ out[:] = inp * correction\n\n # save last tag for next call\n \ \ self.last = tags[-1]\n\n # corr_start phase tags\n is_start\ \ = lambda tag: pmt.to_python(tag.key) == \"corr_start\"\n start_tags\ \ = list(filter(is_start, \\\n self.get_tags_in_range(0, counter,\ \ counter + len(inp))))\n\n for tag in start_tags:\n self.add_item_tag(0,\ \ tag.offset +1, \\\n pmt.intern(\"frame_start\"), pmt.from_long(8))\n\ \n print(f\"Writing {len(out)} samples\")\n return len(out)\n" affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: _io_cache: ('Phase and Frequency Correction', 'blk', [], [('0', 'complex', 1)], [('0', 'complex', 1)], '\n Apply phase and frequency correction where there is a correlation peak tag.\n\n The correlation peak tags are NOT propagated, and instead replaced with a\n frame_start tag.\n ', []) bus_sink: false bus_source: false bus_structure: null coordinate: [1088, 688.0] rotation: 0 state: enabled - name: epy_block_1 id: epy_block parameters: _source_code: "import numpy as np\nfrom gnuradio import gr\n\n# remove print for\ \ now\n# print = lambda x: None\n\nnp.set_printoptions(formatter={'int':hex})\n\ \nclass blk(gr.sync_block):\n def __init__(self, vlen=8):\n gr.sync_block.__init__(\n\ \ self,\n name='Printer',\n in_sig=[(np.byte,\ \ vlen)],\n out_sig=[]\n )\n\n def work(self, input_items,\ \ output_items):\n inp = np.array(input_items[0], dtype=np.uint8)\n \ \ print(f\"Decoded {len(inp)} samples:\\n{inp}\")\n\n return len(inp)\n" affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: frame_len states: _io_cache: ('Printer', 'blk', [('vlen', '8')], [('0', 'byte', 8)], [], '', []) bus_sink: false bus_source: false bus_structure: null coordinate: [1296, 1260.0] rotation: 0 state: enabled - name: epy_block_2 id: epy_block parameters: _source_code: "import pmt\nimport functools\n\nimport numpy as np\nfrom gnuradio\ \ import gr\n\n\nclass blk(gr.decim_block):\n\n def __init__(self, tag=\"\ frame_start\", vlen=1):\n decim = vlen\n\n gr.decim_block.__init__(\n\ \ self,\n name='Split at tag',\n in_sig=[np.byte],\n\ \ out_sig=[(np.byte, vlen)],\n decim = decim -1\n \ \ )\n\n if decim > 1:\n self.set_relative_rate(1. / (decim\ \ -1))\n\n self.tag = tag\n self.vlen = vlen\n\n def work(self,\ \ input_items, output_items):\n # nicer aliases\n inp = input_items[0]\n\ \ inplen = len(inp)\n oup = output_items[0]\n ouplen =\ \ len(oup)\n\n is_frame_start = lambda tag: pmt.to_python(tag.key) ==\ \ self.tag\n tags = list(filter(is_frame_start, self.get_tags_in_window(0,\ \ 0, inplen)))\n\n if len(tags) == 0:\n print(\"There are\ \ not tags!\")\n\n # get indices of where the frames are\n counter\ \ = self.nitems_written(0) # * self.vlen\n offsets = list(map(lambda\ \ t: t.offset - counter, tags))\n indices = list(zip(offsets, offsets[1:]))\n\ \n print(list(map(lambda t: t.offset, tags)))\n print(offsets)\n\ \ print(indices)\n\n # Get chunks\n def get_inp_chunk(index_pair):\ \ \n # read a chunk from the inp array\n # if there are\ \ not enough values the rest is padded with zeros,\n # if there are\ \ too many values, they get cut off\n start = index_pair[0]\n \ \ end = index_pair[1]\n length = end - start\n\n \ \ assert start != end\n\n print(f\"getting chunk from {start}\ \ to {end} of length {length}\")\n\n # not enough values\n \ \ if length < self.vlen:\n pad = self.vlen - length\n \ \ print(f\"Chunk was too short! Adding {pad} zeros to pad\")\n\ \ return np.concatenate([inp[start:end], np.zeros(pad)])\n\n\ \ # too many values\n if length > self.vlen:\n \ \ print(f\"Chunk was too long! Cutting off {length - self.vlen} values\"\ )\n end = start + self.vlen\n return inp[start:end]\n\ \n # okay\n rv = inp[start:end]\n print(rv)\n\ \ return rv\n\n chunks = list(map(get_inp_chunk, indices))\n\ \n assert len(chunks) != 0\n\n print(chunks)\n oup[:] =\ \ np.concatenate(chunks).reshape((-1, self.vlen))\n\n return len(oup)\n" affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: '''frame_start''' vlen: len(testvec) states: _io_cache: ('Split at tag', 'blk', [('tag', "'frame_start'"), ('vlen', '1')], [('0', 'byte', 1)], [('0', 'byte', 1)], '', ['tag', 'vlen']) bus_sink: false bus_source: false bus_structure: null coordinate: [1080, 1140.0] rotation: 0 state: disabled - name: fir_filter_xxx_1 id: fir_filter_xxx parameters: affinity: '' alias: '' comment: '' decim: '1' maxoutbuf: '0' minoutbuf: '0' samp_delay: '0' taps: revconj_access_code_symbols type: ccc states: bus_sink: false bus_source: false bus_structure: null coordinate: [784, 988.0] rotation: 0 state: disabled - name: import_0 id: import parameters: alias: '' comment: '' imports: import numpy as np states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 12.0] rotation: 0 state: true - name: note_0 id: note parameters: alias: '' comment: 'THIS FLOWGRAPH MUST BE RUN FROM THE TERMINAL BECAUSE IT HAS A HUGE OUTPUT (PRINT)' note: README states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 12.0] rotation: 0 state: true - name: qtgui_const_sink_x_0 id: qtgui_const_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: '"blue"' color10: '"red"' color2: '"red"' color3: '"red"' color4: '"red"' color5: '"red"' color6: '"red"' color7: '"red"' color8: '"red"' color9: '"red"' comment: '' grid: 'False' gui_hint: 0,1,2,1 label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '0' marker10: '0' marker2: '0' marker3: '0' marker4: '0' marker5: '0' marker6: '0' marker7: '0' marker8: '0' marker9: '0' name: '"Equalized Signal"' nconnections: '1' size: '1024' style1: '0' style10: '0' style2: '0' style3: '0' style4: '0' style5: '0' style6: '0' style7: '0' style8: '0' style9: '0' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' xmax: '2' xmin: '-2' ymax: '2' ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 572.0] rotation: 0 state: enabled - name: qtgui_const_sink_x_0_0 id: qtgui_const_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: '"blue"' color10: '"red"' color2: '"red"' color3: '"red"' color4: '"red"' color5: '"red"' color6: '"red"' color7: '"red"' color8: '"red"' color9: '"red"' comment: '' grid: 'False' gui_hint: 2,1,2,1 label1: Custom Block label10: '' label2: Costas Loop label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '0' marker10: '0' marker2: '0' marker3: '0' marker4: '0' marker5: '0' marker6: '0' marker7: '0' marker8: '0' marker9: '0' name: '"Phase Locked Signal"' nconnections: '2' size: '1024' style1: '0' style10: '0' style2: '0' style3: '0' style4: '0' style5: '0' style6: '0' style7: '0' style8: '0' style9: '0' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' xmax: '2' xmin: '-2' ymax: '2' ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1416, 772.0] rotation: 0 state: enabled - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate / sps stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '1' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1416, 572.0] rotation: 0 state: true - name: qtgui_time_sink_x_0_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate / sps stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: XC Magnitude ymax: '20' ymin: '0' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1472, 964.0] rotation: 0 state: enabled - name: qtgui_time_sink_x_0_0_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate / sps stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Equalized ymax: '2' ymin: '-2' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1096, 572.0] rotation: 0 state: enabled - name: qtgui_time_sink_x_1_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: 0,0,1,1 label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Modulated ymax: '2' ymin: '-2' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [800, 172.0] rotation: 0 state: enabled - name: qtgui_time_sink_x_1_1 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'True' gui_hint: 1,0,1,1 label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Equalized ymax: '2' ymin: '-2' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 484.0] rotation: 0 state: disabled - name: qtgui_time_sink_x_2_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: XC Phase ymax: '1' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1472, 1060.0] rotation: 0 state: disabled - name: virtual_sink_0 id: virtual_sink parameters: alias: '' comment: '' stream_id: envelope states: bus_sink: false bus_source: false bus_structure: null coordinate: [1488, 268.0] rotation: 0 state: enabled - name: virtual_sink_3 id: virtual_sink parameters: alias: '' comment: '' stream_id: locked states: bus_sink: false bus_source: false bus_structure: null coordinate: [1416, 684.0] rotation: 0 state: true - name: virtual_source_0 id: virtual_source parameters: alias: '' comment: '' stream_id: envelope states: bus_sink: false bus_source: false bus_structure: null coordinate: [16, 748.0] rotation: 0 state: enabled - name: virtual_source_1 id: virtual_source parameters: alias: '' comment: '' stream_id: locked states: bus_sink: false bus_source: false bus_structure: null coordinate: [16, 1260.0] rotation: 0 state: true connections: - [analog_random_source_x_0, '0', blocks_stream_mux_0, '2'] - [blocks_complex_to_magphase_0_0, '0', qtgui_time_sink_x_0_0, '0'] - [blocks_complex_to_magphase_0_0, '1', blocks_multiply_const_vxx_0_0, '0'] - [blocks_complex_to_magphase_0_0, '1', blocks_null_sink_3, '0'] - [blocks_multiply_const_vxx_0_0, '0', qtgui_time_sink_x_2_0, '0'] - [blocks_null_source_0, '0', blocks_stream_mux_0, '0'] - [blocks_repack_bits_bb_0, '0', blocks_stream_to_vector_0, '0'] - [blocks_stream_mux_0, '0', digital_constellation_modulator_0, '0'] - [blocks_stream_to_vector_0, '0', epy_block_1, '0'] - [blocks_tagged_stream_align_0, '0', blocks_repack_bits_bb_0, '0'] - [blocks_tagged_stream_to_pdu_1, pdus, blocks_socket_pdu_0, pdus] - [blocks_throttle_0, '0', virtual_sink_0, '0'] - [blocks_vector_source_x_0, '0', blocks_stream_mux_0, '1'] - [channels_channel_model_0, '0', blocks_throttle_0, '0'] - [digital_cma_equalizer_cc_0, '0', digital_corr_est_cc_0, '0'] - [digital_cma_equalizer_cc_0, '0', fir_filter_xxx_1, '0'] - [digital_cma_equalizer_cc_0, '0', qtgui_const_sink_x_0, '0'] - [digital_cma_equalizer_cc_0, '0', qtgui_time_sink_x_1_1, '0'] - [digital_constellation_decoder_cb_0, '0', blocks_tagged_stream_align_0, '0'] - [digital_constellation_modulator_0, '0', channels_channel_model_0, '0'] - [digital_constellation_modulator_0, '0', qtgui_time_sink_x_1_0, '0'] - [digital_corr_est_cc_0, '0', digital_costas_loop_cc_0, '0'] - [digital_corr_est_cc_0, '0', epy_block_0, '0'] - [digital_corr_est_cc_0, '0', qtgui_time_sink_x_0_0_0, '0'] - [digital_corr_est_cc_0, '1', blocks_complex_to_magphase_0_0, '0'] - [digital_costas_loop_cc_0, '0', qtgui_const_sink_x_0_0, '1'] - [digital_pfb_clock_sync_xxx_0, '0', digital_cma_equalizer_cc_0, '0'] - [epy_block_0, '0', qtgui_const_sink_x_0_0, '0'] - [epy_block_0, '0', qtgui_time_sink_x_0, '0'] - [epy_block_0, '0', virtual_sink_3, '0'] - [fir_filter_xxx_1, '0', blocks_complex_to_magphase_0_0, '0'] - [virtual_source_0, '0', digital_pfb_clock_sync_xxx_0, '0'] - [virtual_source_1, '0', digital_constellation_decoder_cb_0, '0'] metadata: file_format: 1