#!/usr/local/bin/python3.13
options:
  parameters:
    author: Josh Morman
    catch_exceptions: 'True'
    category: '[GRC Hier Blocks]'
    cmake_opt: ''
    comment: ''
    copyright: '2020'
    description: ''
    gen_cmake: 'On'
    gen_linking: dynamic
    generate_options: qt_gui
    hier_block_src_path: '.:'
    id: le_vs_dfe
    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: Compare Linear and Decision Feedback Equalizers
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [8, 8]
    rotation: 0
    state: enabled

blocks:
- name: alg
  id: variable_adaptive_algorithm
  parameters:
    comment: ''
    cons: cons
    delta: '40'
    ffactor: '.99'
    modulus: '4'
    step_size: gain
    type: lms
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1056, 476.0]
    rotation: 0
    state: enabled
- name: alg_2
  id: variable_adaptive_algorithm
  parameters:
    comment: ''
    cons: cons
    delta: '40'
    ffactor: '0.999'
    modulus: '4'
    step_size: gain
    type: lms
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1440, 676.0]
    rotation: 0
    state: enabled
- name: cons
  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: [616, 12.0]
    rotation: 0
    state: true
- name: corr_calc
  id: variable
  parameters:
    comment: ''
    value: corr_thresh/(corr_max*corr_max)
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1144, 100.0]
    rotation: 0
    state: enabled
- name: corr_max
  id: variable
  parameters:
    comment: ''
    value: numpy.abs(numpy.dot(modulated_sync_word,numpy.conj(modulated_sync_word)))
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1160, 36.0]
    rotation: 0
    state: enabled
- name: corr_thresh
  id: variable_qtgui_range
  parameters:
    comment: ''
    gui_hint: ''
    label: Absolute Corr Thresh (Mag Sq)
    min_len: '200'
    orient: Qt.Horizontal
    rangeType: float
    start: '0.1'
    step: '1.0'
    stop: 5e6
    value: 3e6
    widget: counter_slider
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1256, 36.0]
    rotation: 0
    state: enabled
- name: data
  id: variable
  parameters:
    comment: ''
    value: '[0]*4+[random.getrandbits(8) for i in range(payload_size)]'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [472, 68.0]
    rotation: 0
    state: enabled
- name: delay
  id: variable_qtgui_range
  parameters:
    comment: ''
    gui_hint: ''
    label: ''
    min_len: '200'
    orient: Qt.Horizontal
    rangeType: float
    start: '0'
    step: '1'
    stop: '8'
    value: '0'
    widget: counter_slider
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [904, 20.0]
    rotation: 0
    state: true
- name: eb
  id: variable
  parameters:
    comment: ''
    value: '0.35'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [112, 596.0]
    rotation: 0
    state: enabled
- name: gain
  id: variable
  parameters:
    comment: ''
    value: '.001'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1440, 756.0]
    rotation: 0
    state: true
- name: modulated_sync_word
  id: variable
  parameters:
    comment: "Note that the modulated sync word\nas generated by Modulate Vector\n\
      block has some filtering transients.\n\nOffset to the beginning of the \nactual\
      \ preamble"
    value: modulated_sync_word_pre[86:(512+86)]
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [240, 676.0]
    rotation: 0
    state: enabled
- name: modulated_sync_word_pre
  id: variable_modulate_vector
  parameters:
    comment: ''
    data: ' preamble+preamble'
    mod: rxmod
    taps: '[1]'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [48, 724.0]
    rotation: 0
    state: enabled
- name: noise_voltage
  id: variable
  parameters:
    comment: ''
    value: pow(10.0,(-snr/20.0))
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [688, 396.0]
    rotation: 0
    state: true
- name: num_plot_evm
  id: variable
  parameters:
    comment: ''
    value: '4096'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [528, 732.0]
    rotation: 0
    state: true
- name: num_taps
  id: variable
  parameters:
    comment: ''
    value: '16'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [888, 516]
    rotation: 0
    state: true
- name: payload_size
  id: variable
  parameters:
    comment: ''
    value: '100'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [488, 12.0]
    rotation: 0
    state: enabled
- name: phase
  id: variable_qtgui_range
  parameters:
    comment: ''
    gui_hint: ''
    label: phase
    min_len: '200'
    orient: Qt.Horizontal
    rangeType: float
    start: '0.00'
    step: '.1'
    stop: '3.14'
    value: '0'
    widget: counter_slider
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1432, 52.0]
    rotation: 0
    state: enabled
- name: preamble
  id: variable
  parameters:
    comment: ''
    value: '[0x27,0x2F,0x18,0x5D,0x5B,0x2A,0x3F,0x71,0x63,0x3C,0x17,0x0C,0x0A,0x41,0xD6,0x1F,0x4C,0x23,0x65,0x68,0xED,0x1C,0x77,0xA7,0x0E,0x0A,0x9E,0x47,0x82,0xA4,0x57,0x24,]'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [224, 140.0]
    rotation: 0
    state: enabled
- name: preamble_symbols
  id: variable
  parameters:
    comment: ''
    value: helpers.map_symbols_to_constellation(helpers.unpack_values(preamble, 8,
      2), cons)
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [656, 524.0]
    rotation: 0
    state: enabled
- name: rxmod
  id: variable
  parameters:
    comment: ''
    value: digital.generic_mod(cons, False, sps, True, eb, False, False)
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [48, 660.0]
    rotation: 0
    state: enabled
- name: samp_rate
  id: variable
  parameters:
    comment: ''
    value: '10000'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [192, 68.0]
    rotation: 0
    state: enabled
- name: snr
  id: variable
  parameters:
    comment: ''
    value: '10'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [608, 396.0]
    rotation: 0
    state: true
- name: sps
  id: variable
  parameters:
    comment: ''
    value: '4'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [48, 596.0]
    rotation: 0
    state: enabled
- name: blocks_head_0
  id: blocks_head
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    num_items: num_plot_evm
    type: float
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [544, 828.0]
    rotation: 180
    state: enabled
- name: blocks_head_0_0
  id: blocks_head
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    num_items: num_plot_evm
    type: float
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [552, 892.0]
    rotation: 180
    state: enabled
- name: blocks_short_to_float_0
  id: blocks_short_to_float
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    scale: '1'
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1356.0, 704]
    rotation: 270
    state: disabled
- name: blocks_tag_gate_0
  id: blocks_tag_gate
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    propagate_tags: 'False'
    single_key: '""'
    type: complex
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1008, 756.0]
    rotation: 180
    state: enabled
- name: blocks_tag_gate_0_0
  id: blocks_tag_gate
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    propagate_tags: 'False'
    single_key: '""'
    type: complex
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [928, 884.0]
    rotation: 180
    state: enabled
- 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: [440, 268.0]
    rotation: 0
    state: enabled
- name: blocks_vector_source_x_0_0
  id: blocks_vector_source_x
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    repeat: 'True'
    tags: '[]'
    type: byte
    vector: preamble+data
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [16, 252.0]
    rotation: 0
    state: enabled
- name: blocks_vector_to_stream_0
  id: blocks_vector_to_stream
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    num_items: num_taps
    type: complex
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1232.0, 744]
    rotation: 270
    state: disabled
- name: channels_channel_model_0
  id: channels_channel_model
  parameters:
    affinity: ''
    alias: ''
    block_tags: 'False'
    comment: ''
    epsilon: '1.0'
    freq_offset: '0.0'
    maxoutbuf: '0'
    minoutbuf: '0'
    noise_voltage: noise_voltage
    seed: '-44982235'
    taps: (2.0,-0.459489+-0.156287j,0.185799+0.022878j,0.060229+0.002171j,-0.023041+-0.016539j,-0.004507+0.011984j,-0.002597+0.002675j,0.002320+0.000621j,-0.001420+-0.000126j,-0.000118+-0.000520j,-0.000029+-0.000201j,0.000060+-0.000002j,0.169089+-0.500778j,0.419112+0.042402j,-0.139208+0.030027j,-0.080077+0.036473j,0.026689+0.000837j,-0.002449+0.002320j,-0.000567+-0.002068j,0.001528+0.002867j,0.000944+-0.000166j,0.000218+0.000007j,0.000214+-0.000150j,0.000004+0.000008j)
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [600, 228.0]
    rotation: 0
    state: enabled
- name: digital_constellation_modulator_0
  id: digital_constellation_modulator
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    constellation: cons
    differential: 'False'
    excess_bw: '0.35'
    log: 'False'
    maxoutbuf: '0'
    minoutbuf: '0'
    samples_per_symbol: '4'
    verbose: 'False'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [216, 244.0]
    rotation: 0
    state: enabled
- name: digital_corr_est_cc_0
  id: digital_corr_est_cc
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    mark_delay: '12'
    maxoutbuf: '0'
    minoutbuf: '0'
    sps: sps
    symbols: modulated_sync_word
    threshold: corr_calc
    threshold_method: digital.THRESHOLD_ABSOLUTE
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1040, 236]
    rotation: 0
    state: enabled
- name: digital_decision_feedback_equalizer_0
  id: digital_decision_feedback_equalizer
  parameters:
    adapt_after_training: 'True'
    affinity: ''
    alg: alg_2
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    num_taps_fwd: '13'
    num_taps_rev: '3'
    sps: '4'
    training_sequence: preamble_symbols
    training_start_tag: corr_est
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1392.0, 416]
    rotation: 270
    state: true
- name: digital_linear_equalizer_0
  id: digital_linear_equalizer
  parameters:
    adapt_after_training: 'True'
    affinity: ''
    alg: alg
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    num_taps: num_taps
    sps: '4'
    training_sequence: preamble_symbols
    training_start_tag: corr_est
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1212.0, 424]
    rotation: 270
    state: enabled
- name: digital_meas_evm_cc_0
  id: digital_meas_evm_cc
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    cons: cons
    maxoutbuf: '0'
    meas_type: digital.evm_measurement_t_EVM_PERCENT
    minoutbuf: '0'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [752, 832.0]
    rotation: 180
    state: enabled
- name: digital_meas_evm_cc_0_0
  id: digital_meas_evm_cc
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    cons: cons
    maxoutbuf: '0'
    meas_type: digital.evm_measurement_t_EVM_PERCENT
    minoutbuf: '0'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [736, 896.0]
    rotation: 180
    state: enabled
- name: helpers
  id: epy_module
  parameters:
    alias: ''
    comment: ''
    source_code: "# this module will be imported in the into your flowgraph\n\n\n\
      def unpack_values(values_in, bits_per_value, bits_per_symbol):   \n    # verify\
      \ that 8 is divisible by bits_per_symbol \n    m = bits_per_value / bits_per_symbol\n\
      \    # print(m)\n    mask = 2**(bits_per_symbol)-1\n        \n    if bits_per_value\
      \ != m*bits_per_symbol:\n        print(\"error - bits per symbols must fit nicely\
      \ into bits_per_value bit values\")\n        return []\n        \n    num_values\
      \ = len(values_in)\n    # print(num_values)\n    num_symbols = int(num_values*(\
      \ m) )\n    # print(num_symbols)\n    cur_byte = 0\n    cur_bit = 0\n    out\
      \ = []\n    for i in range(num_symbols):\n        s = (values_in[cur_byte] >>\
      \ (bits_per_value-bits_per_symbol-cur_bit)) & mask\n        out.append(s)\n\
      \        cur_bit += bits_per_symbol\n        \n        if cur_bit >= bits_per_value:\n\
      \            cur_bit = 0\n            cur_byte += 1\n            \n        #\
      \ if cur_byte >= num_values:\n            # break;\n            \n    return\
      \ out\n    \ndef map_symbols_to_constellation(symbols, cons):\n    # print(\"\
      symbols:\")\n    # print(symbols)\n    # print(\"points:\")\n    # print(cons.points())\n\
      \    l = list(map(lambda x: cons.points()[x], symbols))\n    # print(\"Training\
      \ Symbols\")\n    # print(l)\n    return l\n"
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [616, 148.0]
    rotation: 0
    state: true
- name: import_0
  id: import
  parameters:
    alias: ''
    comment: ''
    imports: import numpy
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [192, 12.0]
    rotation: 0
    state: enabled
- name: import_0_0
  id: import
  parameters:
    alias: ''
    comment: ''
    imports: import random
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [768, 12.0]
    rotation: 0
    state: enabled
- name: import_0_1
  id: import
  parameters:
    alias: ''
    comment: ''
    imports: from cmath import exp, pi
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [312, 12.0]
    rotation: 0
    state: true
- name: note_0
  id: note
  parameters:
    alias: ''
    comment: 'This flowgraph demonstrates the difference between

      the Linear and Decision Feedback Equalizer structures

      for a channel that cannot be completely mitigated using

      a Linear Equalizer'
    note: ''
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [240, 404.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: '.5'
    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: '"red"'
    color2: '"red"'
    color3: '"green"'
    color4: '"red"'
    color5: '"red"'
    color6: '"red"'
    color7: '"red"'
    color8: '"red"'
    color9: '"red"'
    comment: ''
    grid: 'False'
    gui_hint: ''
    label1: Linear Equalizer
    label10: ''
    label2: Decision Feedback Equalizer
    label3: LMS - DD (gr block)
    label4: ''
    label5: ''
    label6: ''
    label7: ''
    label8: ''
    label9: ''
    legend: 'True'
    marker1: '0'
    marker10: '0'
    marker2: '0'
    marker3: '3'
    marker4: '0'
    marker5: '0'
    marker6: '0'
    marker7: '0'
    marker8: '0'
    marker9: '0'
    name: '""'
    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: [824, 616.0]
    rotation: 180
    state: enabled
- name: qtgui_time_sink_x_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: '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: '0'
    marker10: '-1'
    marker2: '1'
    marker3: '-1'
    marker4: '-1'
    marker5: '-1'
    marker6: '-1'
    marker7: '-1'
    marker8: '-1'
    marker9: '-1'
    name: '""'
    nconnections: '1'
    size: num_taps
    srate: samp_rate
    stemplot: 'True'
    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: [1148.0, 920]
    rotation: 270
    state: disabled
- 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: '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: state
    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: Amplitude
    ymax: '3'
    ymin: '-1'
    yunit: '""'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [1316.0, 896]
    rotation: 270
    state: disabled
- name: qtgui_time_sink_x_2
  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: '''Linear Equalizer'''
    label10: Signal 10
    label2: Decision Feedback Equalizer
    label3: LMS - DD (gr block)
    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: EVM Measurement
    nconnections: '2'
    size: num_plot_evm
    srate: '1'
    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: Percent %
    ymax: '101'
    ymin: '-1'
    yunit: '""'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [216, 844.0]
    rotation: 180
    state: true

connections:
- [blocks_head_0, '0', qtgui_time_sink_x_2, '0']
- [blocks_head_0_0, '0', qtgui_time_sink_x_2, '1']
- [blocks_short_to_float_0, '0', qtgui_time_sink_x_1_0, '0']
- [blocks_tag_gate_0, '0', digital_meas_evm_cc_0, '0']
- [blocks_tag_gate_0_0, '0', digital_meas_evm_cc_0_0, '0']
- [blocks_throttle_0, '0', channels_channel_model_0, '0']
- [blocks_vector_source_x_0_0, '0', digital_constellation_modulator_0, '0']
- [blocks_vector_to_stream_0, '0', qtgui_time_sink_x_1, '0']
- [channels_channel_model_0, '0', digital_corr_est_cc_0, '0']
- [digital_constellation_modulator_0, '0', blocks_throttle_0, '0']
- [digital_corr_est_cc_0, '0', digital_decision_feedback_equalizer_0, '0']
- [digital_corr_est_cc_0, '0', digital_linear_equalizer_0, '0']
- [digital_decision_feedback_equalizer_0, '0', blocks_tag_gate_0_0, '0']
- [digital_decision_feedback_equalizer_0, '0', qtgui_const_sink_x_0, '1']
- [digital_linear_equalizer_0, '0', blocks_tag_gate_0, '0']
- [digital_linear_equalizer_0, '0', qtgui_const_sink_x_0, '0']
- [digital_linear_equalizer_0, '1', blocks_vector_to_stream_0, '0']
- [digital_linear_equalizer_0, '2', blocks_short_to_float_0, '0']
- [digital_meas_evm_cc_0, '0', blocks_head_0, '0']
- [digital_meas_evm_cc_0_0, '0', blocks_head_0_0, '0']

metadata:
  file_format: 1
