From db1d1deeddec5301c86876cdc284f33c3a215ff9 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 28 Nov 2021 02:05:49 +0100 Subject: Working access code correlation --- tests/correlator/correlator.grc | 961 ++++++++++++++++++++++++++++++++++------ tests/correlator/correlator.py | 283 ++++++++++-- 2 files changed, 1074 insertions(+), 170 deletions(-) (limited to 'tests') diff --git a/tests/correlator/correlator.grc b/tests/correlator/correlator.grc index 723a99d..9deec54 100644 --- a/tests/correlator/correlator.grc +++ b/tests/correlator/correlator.grc @@ -1,6 +1,7 @@ options: parameters: author: Naoki Pross + catch_exceptions: 'True' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' @@ -22,7 +23,6 @@ options: sizing_mode: fixed thread_safe_setters: '' title: Correlator Test - window_size: '' states: bus_sink: false bus_source: false @@ -32,6 +32,21 @@ options: state: enabled blocks: +- name: 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: [776, 1140.0] + rotation: 0 + state: enabled - name: access_code_symbols_sps id: variable parameters: @@ -50,13 +65,14 @@ blocks: bus_structure: null coordinate: [224, 132.0] rotation: 0 - state: true + state: enabled - name: const id: variable_constellation parameters: comment: '' const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]' dims: '1' + normalization: digital.constellation.AMPLITUDE_NORMALIZATION precision: '8' rot_sym: '4' soft_dec_lut: None @@ -97,13 +113,15 @@ blocks: id: variable parameters: comment: '' - value: '[(1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197+1.4142197j), - (-1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197-1.4142197j)]' + 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: [992, 620.0] + coordinate: [48, 564.0] rotation: 0 state: enabled - name: rrc_taps @@ -146,7 +164,7 @@ blocks: id: variable parameters: comment: '' - value: '[31, 53] + [0x12, 0xe3, 0x9b, 0xee, 0x84, 0x23]' + value: '[31, 53] + [0x12, 0xe3, 0x9b, 0xee, 0x84, 0x23, 0x41, 0xf3]' states: bus_sink: false bus_source: false @@ -166,6 +184,42 @@ blocks: coordinate: [224, 1068.0] rotation: 0 state: enabled +- name: blocks_burst_tagger_0 + id: blocks_burst_tagger + parameters: + affinity: '' + alias: '' + comment: '' + false_key: nothing + false_value: '0' + maxoutbuf: '0' + minoutbuf: '0' + true_key: peak + true_value: 'True' + type: float + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [944, 1580.0] + rotation: 0 + state: disabled +- name: blocks_char_to_short_0 + id: blocks_char_to_short + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [752, 1624.0] + rotation: 0 + state: disabled - name: blocks_complex_to_magphase_0 id: blocks_complex_to_magphase parameters: @@ -179,7 +233,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1008, 696.0] + coordinate: [1048, 696.0] rotation: 0 state: enabled - name: blocks_complex_to_magphase_0_0 @@ -195,7 +249,23 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1072, 1112.0] + coordinate: [1048, 1104.0] + rotation: 0 + state: enabled +- name: blocks_complex_to_magphase_0_1 + 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: [256, 1592.0] rotation: 0 state: disabled - name: blocks_multiply_const_vxx_0 @@ -213,27 +283,28 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1280, 788.0] + coordinate: [1288, 724.0] rotation: 0 state: enabled -- name: blocks_null_sink_0 - id: blocks_null_sink +- name: blocks_multiply_const_vxx_0_0 + id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' - bus_structure_sink: '[[0,],]' comment: '' - num_inputs: '1' - type: byte + const: 180 / 3.141592653589793 + maxoutbuf: '0' + minoutbuf: '0' + type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1056, 840.0] + coordinate: [1336, 1180.0] rotation: 0 - state: enabled -- name: blocks_null_sink_0_0 + state: disabled +- name: blocks_null_sink_0 id: blocks_null_sink parameters: affinity: '' @@ -241,16 +312,16 @@ blocks: bus_structure_sink: '[[0,],]' comment: '' num_inputs: '1' - type: complex + type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1080, 1048.0] + coordinate: [1504, 1696.0] rotation: 0 state: disabled -- name: blocks_null_sink_1_0 +- name: blocks_null_sink_2 id: blocks_null_sink parameters: affinity: '' @@ -264,10 +335,10 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1336, 1176.0] + coordinate: [528, 1720.0] rotation: 0 state: disabled -- name: blocks_null_sink_1_0_0 +- name: blocks_null_sink_3 id: blocks_null_sink parameters: affinity: '' @@ -281,9 +352,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1288, 856.0] + coordinate: [1336, 1232.0] rotation: 0 - state: disabled + state: true - name: blocks_null_source_0 id: blocks_null_source parameters: @@ -303,13 +374,31 @@ blocks: coordinate: [96, 344.0] rotation: 0 state: enabled +- name: blocks_peak_detector2_fb_0 + id: blocks_peak_detector2_fb + parameters: + affinity: '' + alias: '' + alpha: '0.001' + comment: '' + look_ahead: '1000' + maxoutbuf: '0' + minoutbuf: '0' + threshold_factor_rise: '7' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [528, 1620.0] + rotation: 0 + state: disabled - name: blocks_stream_mux_0 id: blocks_stream_mux parameters: affinity: '' alias: '' comment: '' - lengths: '[15, len(testvec)]' + lengths: '[10, len(testvec)]' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' @@ -368,10 +457,10 @@ blocks: comment: '' maxoutbuf: '0' minoutbuf: '0' - repeat: 'True' + repeat: 'False' tags: '[]' type: byte - vector: testvec + vector: testvec * 1600 vlen: '1' states: bus_sink: false @@ -408,12 +497,12 @@ blocks: block_tags: 'False' comment: '' epsilon: '1.0' - freq_offset: '0.0' + freq_offset: '0.000001' maxoutbuf: '0' minoutbuf: '0' - noise_voltage: '0.1' + noise_voltage: '0.2' seed: '243' - taps: '1. ' + taps: -1.4 + .4j states: bus_sink: false bus_source: false @@ -453,9 +542,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [800, 836.0] + coordinate: [1232, 1692.0] rotation: 0 - state: enabled + state: disabled - name: digital_constellation_modulator_0 id: digital_constellation_modulator parameters: @@ -469,6 +558,7 @@ blocks: maxoutbuf: '0' minoutbuf: '0' samples_per_symbol: sps + truncate: 'False' verbose: 'False' states: bus_sink: false @@ -487,17 +577,16 @@ blocks: maxoutbuf: '0' minoutbuf: '0' sps: '1' - symbols: '[(1.4142197+1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), - (-1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j)]' - threshold: '.9' + symbols: access_code_symbols + threshold: '.8' threshold_method: digital.THRESHOLD_DYNAMIC states: bus_sink: false bus_source: false bus_structure: null - coordinate: [768, 1076.0] + coordinate: [776, 1020.0] rotation: 0 - state: disabled + state: enabled - name: digital_pfb_clock_sync_xxx_0 id: digital_pfb_clock_sync_xxx parameters: @@ -537,9 +626,57 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [768, 700.0] + coordinate: [776, 828.0] rotation: 0 state: enabled +- name: high_pass_filter_0 + id: high_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: '' + cutoff_freq: 5e3 + decim: '1' + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_fff + width: '.7' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [528, 1420.0] + rotation: 0 + state: disabled +- name: low_pass_filter_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: '' + cutoff_freq: 7e3 + decim: '1' + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_fff + width: '.8' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [528, 1252.0] + rotation: 0 + state: disabled - name: qtgui_const_sink_x_0 id: qtgui_const_sink_x parameters: @@ -569,7 +706,7 @@ blocks: color9: '"red"' comment: '' grid: 'False' - gui_hint: '' + gui_hint: 0,1,2,1 label1: '' label10: '' label2: '' @@ -591,7 +728,7 @@ blocks: marker7: '0' marker8: '0' marker9: '0' - name: '""' + name: '"Equalized Signal"' nconnections: '1' size: '1024' style1: '0' @@ -629,15 +766,15 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [768, 620.0] + coordinate: [776, 716.0] rotation: 0 state: enabled -- name: qtgui_time_sink_x_0 - id: qtgui_time_sink_x +- name: qtgui_const_sink_x_1 + id: qtgui_const_sink_x parameters: affinity: '' alias: '' - alpha1: '1.0' + alpha1: '.5' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' @@ -649,64 +786,59 @@ blocks: 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 + color1: '"blue"' + color10: '"red"' + color2: '"red"' + color3: '"red"' + color4: '"red"' + color5: '"red"' + color6: '"red"' + color7: '"red"' + color8: '"red"' + color9: '"red"' comment: '' - ctrlpanel: 'False' - entags: 'True' - grid: 'False' - gui_hint: 2,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 + grid: 'True' + gui_hint: 2,1,2,1 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' legend: 'True' - marker1: '-1' - marker10: '-1' - marker2: '-1' - marker3: '-1' - marker4: '-1' - marker5: '-1' - marker6: '-1' - marker7: '-1' - marker8: '-1' - marker9: '-1' - name: '""' + marker1: '9' + marker10: '0' + marker2: '0' + marker3: '0' + marker4: '0' + marker5: '0' + marker6: '0' + marker7: '0' + marker8: '0' + marker9: '0' + name: '"Cross Correlation"' 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' + style1: '2' + style10: '0' + style2: '0' + style3: '0' + style4: '0' + style5: '0' + style6: '0' + style7: '0' + style8: '0' + style9: '0' 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 + type: complex update_time: '0.10' width1: '1' width10: '1' @@ -718,19 +850,19 @@ blocks: width7: '1' width8: '1' width9: '1' - ylabel: XC Magnitude - ymax: '100' - ymin: '0' - yunit: '""' + xmax: '2' + xmin: '-2' + ymax: '2' + ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1280, 676.0] + coordinate: [1048, 612.0] rotation: 0 state: enabled -- name: qtgui_time_sink_x_0_0 - id: qtgui_time_sink_x +- name: qtgui_const_sink_x_2 + id: qtgui_const_sink_x parameters: affinity: '' alias: '' @@ -744,35 +876,418 @@ blocks: alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' - autoscale: 'True' + 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 + color1: '"blue"' + color10: '"red"' + color2: '"red"' + color3: '"red"' + color4: '"red"' + color5: '"red"' + color6: '"red"' + color7: '"red"' + color8: '"red"' + color9: '"red"' comment: '' - ctrlpanel: 'False' - entags: 'True' grid: 'False' - gui_hint: 2,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' + gui_hint: '2,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: '"Phase Correction"' + 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: [1248, 1588.0] + rotation: 0 + state: disabled +- 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: '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: 2,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: 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: [1320, 604.0] + rotation: 0 + state: enabled +- 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 + 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: [1336, 1084.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 + 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: XC Magnitude + ymax: '2' + ymin: '-2' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1048, 1020.0] + rotation: 0 + 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: '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' @@ -815,15 +1330,15 @@ blocks: width7: '1' width8: '1' width9: '1' - ylabel: Cross Correlation Magnitude - ymax: '100' - ymin: '0' + ylabel: Amplitude + ymax: '20' + ymin: '-5' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1336, 1092.0] + coordinate: [784, 1452.0] rotation: 0 state: disabled - name: qtgui_time_sink_x_1_0 @@ -920,9 +1435,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [992, 196.0] + coordinate: [808, 452.0] rotation: 0 - state: disabled + state: enabled - name: qtgui_time_sink_x_1_1 id: qtgui_time_sink_x parameters: @@ -953,7 +1468,7 @@ blocks: comment: '' ctrlpanel: 'False' entags: 'True' - grid: 'False' + grid: 'True' gui_hint: 1,0,1,1 label1: Signal 1 label10: Signal 10 @@ -1017,7 +1532,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [800, 932.0] + coordinate: [776, 612.0] rotation: 0 state: enabled - name: qtgui_time_sink_x_2 @@ -1114,9 +1629,106 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1456, 772.0] + coordinate: [1480, 708.0] rotation: 0 state: enabled +- 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: [1512, 1164.0] + rotation: 0 + state: disabled - name: root_raised_cosine_filter_0 id: root_raised_cosine_filter parameters: @@ -1131,7 +1743,7 @@ blocks: minoutbuf: '0' ntaps: 11*samp_rate samp_rate: samp_rate - sym_rate: '1' + sym_rate: sps * samp_rate type: fir_filter_ccf states: bus_sink: false @@ -1153,6 +1765,32 @@ blocks: coordinate: [1480, 404.0] rotation: 0 state: enabled +- name: virtual_sink_1 + id: virtual_sink + parameters: + alias: '' + comment: '' + stream_id: symbols + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [776, 916.0] + rotation: 0 + state: true +- name: virtual_sink_2 + id: virtual_sink + parameters: + alias: '' + comment: '' + stream_id: xcorrelation + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1080, 836.0] + rotation: 0 + state: true - name: virtual_source_0 id: virtual_source parameters: @@ -1163,39 +1801,78 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [8, 884.0] + coordinate: [32, 884.0] rotation: 0 state: enabled +- name: virtual_source_2 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: symbols + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [32, 1716.0] + rotation: 0 + state: disabled +- name: virtual_source_3 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: xcorrelation + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [32, 1604.0] + rotation: 0 + state: disabled connections: +- [blocks_char_to_short_0, '0', blocks_burst_tagger_0, '1'] - [blocks_complex_to_magphase_0, '0', qtgui_time_sink_x_0, '0'] - [blocks_complex_to_magphase_0, '1', blocks_multiply_const_vxx_0, '0'] -- [blocks_complex_to_magphase_0, '1', blocks_null_sink_1_0_0, '0'] - [blocks_complex_to_magphase_0_0, '0', qtgui_time_sink_x_0_0, '0'] -- [blocks_complex_to_magphase_0_0, '1', blocks_null_sink_1_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_complex_to_magphase_0_1, '0', blocks_burst_tagger_0, '0'] +- [blocks_complex_to_magphase_0_1, '0', blocks_peak_detector2_fb_0, '0'] +- [blocks_complex_to_magphase_0_1, '0', high_pass_filter_0, '0'] +- [blocks_complex_to_magphase_0_1, '0', low_pass_filter_0, '0'] +- [blocks_complex_to_magphase_0_1, '1', blocks_null_sink_2, '0'] - [blocks_multiply_const_vxx_0, '0', qtgui_time_sink_x_2, '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_peak_detector2_fb_0, '0', blocks_char_to_short_0, '0'] - [blocks_stream_mux_0, '0', digital_constellation_modulator_0, '0'] - [blocks_stream_mux_1, '0', channels_channel_model_0, '0'] -- [blocks_stream_mux_1, '0', qtgui_time_sink_x_1_0, '0'] - [blocks_throttle_0, '0', virtual_sink_0, '0'] - [blocks_vector_source_x_0, '0', blocks_stream_mux_0, '1'] - [blocks_vector_source_x_1, '0', root_raised_cosine_filter_0, '0'] - [channels_channel_model_0, '0', blocks_throttle_0, '0'] -- [digital_cma_equalizer_cc_0, '0', digital_constellation_decoder_cb_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_cma_equalizer_cc_0, '0', virtual_sink_1, '0'] - [digital_constellation_decoder_cb_0, '0', blocks_null_sink_0, '0'] - [digital_constellation_modulator_0, '0', blocks_stream_mux_1, '1'] - [digital_constellation_modulator_0, '0', channels_channel_model_0, '0'] -- [digital_corr_est_cc_0, '0', blocks_null_sink_0_0, '0'] +- [digital_constellation_modulator_0, '0', qtgui_time_sink_x_1_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_pfb_clock_sync_xxx_0, '0', digital_cma_equalizer_cc_0, '0'] - [fir_filter_xxx_1, '0', blocks_complex_to_magphase_0, '0'] +- [fir_filter_xxx_1, '0', qtgui_const_sink_x_1, '0'] +- [fir_filter_xxx_1, '0', virtual_sink_2, '0'] +- [high_pass_filter_0, '0', qtgui_time_sink_x_1, '0'] +- [low_pass_filter_0, '0', qtgui_time_sink_x_1, '0'] - [root_raised_cosine_filter_0, '0', blocks_stream_mux_1, '0'] - [virtual_source_0, '0', digital_pfb_clock_sync_xxx_0, '0'] +- [virtual_source_3, '0', blocks_complex_to_magphase_0_1, '0'] metadata: file_format: 1 diff --git a/tests/correlator/correlator.py b/tests/correlator/correlator.py index 15d9c9c..376d061 100755 --- a/tests/correlator/correlator.py +++ b/tests/correlator/correlator.py @@ -7,7 +7,7 @@ # GNU Radio Python Flow Graph # Title: Correlator Test # Author: Naoki Pross -# GNU Radio version: 3.8.2.0 +# GNU Radio version: 3.9.2.0 from distutils.version import StrictVersion @@ -30,18 +30,21 @@ from gnuradio import channels from gnuradio import digital from gnuradio import filter from gnuradio import gr +from gnuradio.fft import window import sys import signal from argparse import ArgumentParser from gnuradio.eng_arg import eng_float, intx from gnuradio import eng_notation + + from gnuradio import qtgui class correlator(gr.top_block, Qt.QWidget): def __init__(self): - gr.top_block.__init__(self, "Correlator Test") + gr.top_block.__init__(self, "Correlator Test", catch_exceptions=True) Qt.QWidget.__init__(self) self.setWindowTitle("Correlator Test") qtgui.util.check_set_qss() @@ -78,12 +81,13 @@ class correlator(gr.top_block, Qt.QWidget): self.nfilts = nfilts = 32 self.excess_bw = excess_bw = .35 self.timing_loop_bw = timing_loop_bw = 2 * 3.141592653589793 / 100 - self.testvec = testvec = [31, 53] + [0x12, 0xe3, 0x9b, 0xee, 0x84, 0x23] + self.testvec = testvec = [31, 53] + [0x12, 0xe3, 0x9b, 0xee, 0x84, 0x23, 0x41, 0xf3] self.samp_rate = samp_rate = 32000 self.rrc_taps = rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), excess_bw, 45*nfilts) - self.revconj_access_code_symbols = revconj_access_code_symbols = [(1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197+1.4142197j), (-1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197-1.4142197j)] + self.revconj_access_code_symbols = revconj_access_code_symbols = [(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)] self.const = const = digital.constellation_qpsk().base() self.access_code_symbols_sps = access_code_symbols_sps = [(1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (-1.4142197-1.4142197j), (-1.4142197-1.4142197j), (-1.4142197-1.4142197j), (-1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197-1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j), (1.4142197+1.4142197j)] + self.access_code_symbols = access_code_symbols = [(-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)] ################################################## # Blocks @@ -92,7 +96,8 @@ class correlator(gr.top_block, Qt.QWidget): 1024, #size samp_rate, #samp_rate "", #name - 1 #number of inputs + 1, #number of inputs + None # parent ) self.qtgui_time_sink_x_2.set_update_time(0.10) self.qtgui_time_sink_x_2.set_y_axis(-1, 1) @@ -143,7 +148,8 @@ class correlator(gr.top_block, Qt.QWidget): 1024, #size samp_rate, #samp_rate "", #name - 1 #number of inputs + 1, #number of inputs + None # parent ) self.qtgui_time_sink_x_1_1.set_update_time(0.10) self.qtgui_time_sink_x_1_1.set_y_axis(-2, 2) @@ -153,7 +159,7 @@ class correlator(gr.top_block, Qt.QWidget): self.qtgui_time_sink_x_1_1.enable_tags(True) self.qtgui_time_sink_x_1_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_1_1.enable_autoscale(True) - self.qtgui_time_sink_x_1_1.enable_grid(False) + self.qtgui_time_sink_x_1_1.enable_grid(True) self.qtgui_time_sink_x_1_1.enable_axis_labels(True) self.qtgui_time_sink_x_1_1.enable_control_panel(False) self.qtgui_time_sink_x_1_1.enable_stem_plot(False) @@ -193,14 +199,169 @@ class correlator(gr.top_block, Qt.QWidget): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) + self.qtgui_time_sink_x_1_0 = qtgui.time_sink_c( + 1024, #size + samp_rate, #samp_rate + "", #name + 1, #number of inputs + None # parent + ) + self.qtgui_time_sink_x_1_0.set_update_time(0.10) + self.qtgui_time_sink_x_1_0.set_y_axis(-2, 2) + + self.qtgui_time_sink_x_1_0.set_y_label('Modulated', "") + + self.qtgui_time_sink_x_1_0.enable_tags(True) + self.qtgui_time_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") + self.qtgui_time_sink_x_1_0.enable_autoscale(True) + self.qtgui_time_sink_x_1_0.enable_grid(False) + self.qtgui_time_sink_x_1_0.enable_axis_labels(True) + self.qtgui_time_sink_x_1_0.enable_control_panel(False) + self.qtgui_time_sink_x_1_0.enable_stem_plot(False) + + + labels = ['Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', + 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10'] + widths = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + colors = ['blue', 'red', 'green', 'black', 'cyan', + 'magenta', 'yellow', 'dark red', 'dark green', 'dark blue'] + alphas = [1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0, 1.0] + styles = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + markers = [-1, -1, -1, -1, -1, + -1, -1, -1, -1, -1] + + + for i in range(2): + if len(labels[i]) == 0: + if (i % 2 == 0): + self.qtgui_time_sink_x_1_0.set_line_label(i, "Re{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_1_0.set_line_label(i, "Im{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_1_0.set_line_label(i, labels[i]) + self.qtgui_time_sink_x_1_0.set_line_width(i, widths[i]) + self.qtgui_time_sink_x_1_0.set_line_color(i, colors[i]) + self.qtgui_time_sink_x_1_0.set_line_style(i, styles[i]) + self.qtgui_time_sink_x_1_0.set_line_marker(i, markers[i]) + self.qtgui_time_sink_x_1_0.set_line_alpha(i, alphas[i]) + + self._qtgui_time_sink_x_1_0_win = sip.wrapinstance(self.qtgui_time_sink_x_1_0.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_0_win, 0, 0, 1, 1) + for r in range(0, 1): + self.top_grid_layout.setRowStretch(r, 1) + for c in range(0, 1): + self.top_grid_layout.setColumnStretch(c, 1) + self.qtgui_time_sink_x_0_0_0 = qtgui.time_sink_c( + 1024, #size + samp_rate, #samp_rate + "", #name + 1, #number of inputs + None # parent + ) + self.qtgui_time_sink_x_0_0_0.set_update_time(0.10) + self.qtgui_time_sink_x_0_0_0.set_y_axis(-2, 2) + + self.qtgui_time_sink_x_0_0_0.set_y_label('XC Magnitude', "") + + self.qtgui_time_sink_x_0_0_0.enable_tags(True) + self.qtgui_time_sink_x_0_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") + self.qtgui_time_sink_x_0_0_0.enable_autoscale(True) + self.qtgui_time_sink_x_0_0_0.enable_grid(False) + self.qtgui_time_sink_x_0_0_0.enable_axis_labels(True) + self.qtgui_time_sink_x_0_0_0.enable_control_panel(False) + self.qtgui_time_sink_x_0_0_0.enable_stem_plot(False) + + + labels = ['Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', + 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10'] + widths = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + colors = ['blue', 'red', 'green', 'black', 'cyan', + 'magenta', 'yellow', 'dark red', 'dark green', 'dark blue'] + alphas = [1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0, 1.0] + styles = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + markers = [-1, -1, -1, -1, -1, + -1, -1, -1, -1, -1] + + + for i in range(2): + if len(labels[i]) == 0: + if (i % 2 == 0): + self.qtgui_time_sink_x_0_0_0.set_line_label(i, "Re{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_0_0_0.set_line_label(i, "Im{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_0_0_0.set_line_label(i, labels[i]) + self.qtgui_time_sink_x_0_0_0.set_line_width(i, widths[i]) + self.qtgui_time_sink_x_0_0_0.set_line_color(i, colors[i]) + self.qtgui_time_sink_x_0_0_0.set_line_style(i, styles[i]) + self.qtgui_time_sink_x_0_0_0.set_line_marker(i, markers[i]) + self.qtgui_time_sink_x_0_0_0.set_line_alpha(i, alphas[i]) + + self._qtgui_time_sink_x_0_0_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0_0_0.pyqwidget(), Qt.QWidget) + self.top_layout.addWidget(self._qtgui_time_sink_x_0_0_0_win) + self.qtgui_time_sink_x_0_0 = qtgui.time_sink_f( + 1024, #size + samp_rate, #samp_rate + "", #name + 1, #number of inputs + None # parent + ) + self.qtgui_time_sink_x_0_0.set_update_time(0.10) + self.qtgui_time_sink_x_0_0.set_y_axis(0, 20) + + self.qtgui_time_sink_x_0_0.set_y_label('XC Magnitude', "") + + self.qtgui_time_sink_x_0_0.enable_tags(True) + self.qtgui_time_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") + self.qtgui_time_sink_x_0_0.enable_autoscale(True) + self.qtgui_time_sink_x_0_0.enable_grid(False) + self.qtgui_time_sink_x_0_0.enable_axis_labels(True) + self.qtgui_time_sink_x_0_0.enable_control_panel(False) + self.qtgui_time_sink_x_0_0.enable_stem_plot(False) + + + labels = ['Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', + 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10'] + widths = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + colors = ['blue', 'red', 'green', 'black', 'cyan', + 'magenta', 'yellow', 'dark red', 'dark green', 'dark blue'] + alphas = [1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0, 1.0] + styles = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + markers = [-1, -1, -1, -1, -1, + -1, -1, -1, -1, -1] + + + for i in range(1): + if len(labels[i]) == 0: + self.qtgui_time_sink_x_0_0.set_line_label(i, "Data {0}".format(i)) + else: + self.qtgui_time_sink_x_0_0.set_line_label(i, labels[i]) + self.qtgui_time_sink_x_0_0.set_line_width(i, widths[i]) + self.qtgui_time_sink_x_0_0.set_line_color(i, colors[i]) + self.qtgui_time_sink_x_0_0.set_line_style(i, styles[i]) + self.qtgui_time_sink_x_0_0.set_line_marker(i, markers[i]) + self.qtgui_time_sink_x_0_0.set_line_alpha(i, alphas[i]) + + self._qtgui_time_sink_x_0_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0_0.pyqwidget(), Qt.QWidget) + self.top_layout.addWidget(self._qtgui_time_sink_x_0_0_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 1024, #size samp_rate, #samp_rate "", #name - 1 #number of inputs + 1, #number of inputs + None # parent ) self.qtgui_time_sink_x_0.set_update_time(0.10) - self.qtgui_time_sink_x_0.set_y_axis(0, 100) + self.qtgui_time_sink_x_0.set_y_axis(0, 20) self.qtgui_time_sink_x_0.set_y_label('XC Magnitude', "") @@ -244,10 +405,56 @@ class correlator(gr.top_block, Qt.QWidget): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) + self.qtgui_const_sink_x_1 = qtgui.const_sink_c( + 1024, #size + "Cross Correlation", #name + 1, #number of inputs + None # parent + ) + self.qtgui_const_sink_x_1.set_update_time(0.10) + self.qtgui_const_sink_x_1.set_y_axis(-2, 2) + self.qtgui_const_sink_x_1.set_x_axis(-2, 2) + self.qtgui_const_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "") + self.qtgui_const_sink_x_1.enable_autoscale(True) + self.qtgui_const_sink_x_1.enable_grid(True) + self.qtgui_const_sink_x_1.enable_axis_labels(True) + + + labels = ['', '', '', '', '', + '', '', '', '', ''] + widths = [1, 1, 1, 1, 1, + 1, 1, 1, 1, 1] + colors = ["blue", "red", "red", "red", "red", + "red", "red", "red", "red", "red"] + styles = [2, 0, 0, 0, 0, + 0, 0, 0, 0, 0] + markers = [9, 0, 0, 0, 0, + 0, 0, 0, 0, 0] + alphas = [.5, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0, 1.0] + + for i in range(1): + if len(labels[i]) == 0: + self.qtgui_const_sink_x_1.set_line_label(i, "Data {0}".format(i)) + else: + self.qtgui_const_sink_x_1.set_line_label(i, labels[i]) + self.qtgui_const_sink_x_1.set_line_width(i, widths[i]) + self.qtgui_const_sink_x_1.set_line_color(i, colors[i]) + self.qtgui_const_sink_x_1.set_line_style(i, styles[i]) + self.qtgui_const_sink_x_1.set_line_marker(i, markers[i]) + self.qtgui_const_sink_x_1.set_line_alpha(i, alphas[i]) + + self._qtgui_const_sink_x_1_win = sip.wrapinstance(self.qtgui_const_sink_x_1.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_const_sink_x_1_win, 2, 1, 2, 1) + for r in range(2, 4): + self.top_grid_layout.setRowStretch(r, 1) + for c in range(1, 2): + self.top_grid_layout.setColumnStretch(c, 1) self.qtgui_const_sink_x_0 = qtgui.const_sink_c( 1024, #size - "", #name - 1 #number of inputs + "Equalized Signal", #name + 1, #number of inputs + None # parent ) self.qtgui_const_sink_x_0.set_update_time(0.10) self.qtgui_const_sink_x_0.set_y_axis(-2, 2) @@ -283,10 +490,15 @@ class correlator(gr.top_block, Qt.QWidget): self.qtgui_const_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_const_sink_x_0_win = sip.wrapinstance(self.qtgui_const_sink_x_0.pyqwidget(), Qt.QWidget) - self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_win) + self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_win, 0, 1, 2, 1) + for r in range(0, 2): + self.top_grid_layout.setRowStretch(r, 1) + for c in range(1, 2): + self.top_grid_layout.setColumnStretch(c, 1) self.fir_filter_xxx_1 = filter.fir_filter_ccc(1, revconj_access_code_symbols) self.fir_filter_xxx_1.declare_sample_delay(0) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(sps, timing_loop_bw, rrc_taps, nfilts, 16, 1.5, 1) + self.digital_corr_est_cc_0 = digital.corr_est_cc(access_code_symbols, 1, 0, .8, digital.THRESHOLD_DYNAMIC) self.digital_constellation_modulator_0 = digital.generic_mod( constellation=const, differential=False, @@ -294,22 +506,23 @@ class correlator(gr.top_block, Qt.QWidget): pre_diff_code=True, excess_bw=excess_bw, verbose=False, - log=False) - self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb(const) + log=False, + truncate=False) self.digital_cma_equalizer_cc_0 = digital.cma_equalizer_cc(15, 1, .002, 1) self.channels_channel_model_0 = channels.channel_model( - noise_voltage=0.1, - frequency_offset=0.0, + noise_voltage=0.2, + frequency_offset=0.000001, epsilon=1.0, - taps=[1. ], + taps=[-1.4 + .4j], noise_seed=243, block_tags=False) - self.blocks_vector_source_x_0 = blocks.vector_source_b(testvec, True, 1, []) + self.blocks_vector_source_x_0 = blocks.vector_source_b(testvec * 1600, False, 1, []) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) - self.blocks_stream_mux_0 = blocks.stream_mux(gr.sizeof_char*1, [15, len(testvec)]) + self.blocks_stream_mux_0 = blocks.stream_mux(gr.sizeof_char*1, [10, len(testvec)]) self.blocks_null_source_0 = blocks.null_source(gr.sizeof_char*1) - self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_char*1) + self.blocks_null_sink_3 = blocks.null_sink(gr.sizeof_float*1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_ff(180 / 3.141592653589793) + self.blocks_complex_to_magphase_0_0 = blocks.complex_to_magphase(1) self.blocks_complex_to_magphase_0 = blocks.complex_to_magphase(1) @@ -319,25 +532,33 @@ class correlator(gr.top_block, Qt.QWidget): ################################################## self.connect((self.blocks_complex_to_magphase_0, 1), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_complex_to_magphase_0, 0), (self.qtgui_time_sink_x_0, 0)) + self.connect((self.blocks_complex_to_magphase_0_0, 1), (self.blocks_null_sink_3, 0)) + self.connect((self.blocks_complex_to_magphase_0_0, 0), (self.qtgui_time_sink_x_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_time_sink_x_2, 0)) self.connect((self.blocks_null_source_0, 0), (self.blocks_stream_mux_0, 0)) self.connect((self.blocks_stream_mux_0, 0), (self.digital_constellation_modulator_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_stream_mux_0, 1)) self.connect((self.channels_channel_model_0, 0), (self.blocks_throttle_0, 0)) - self.connect((self.digital_cma_equalizer_cc_0, 0), (self.digital_constellation_decoder_cb_0, 0)) + self.connect((self.digital_cma_equalizer_cc_0, 0), (self.digital_corr_est_cc_0, 0)) self.connect((self.digital_cma_equalizer_cc_0, 0), (self.fir_filter_xxx_1, 0)) self.connect((self.digital_cma_equalizer_cc_0, 0), (self.qtgui_const_sink_x_0, 0)) self.connect((self.digital_cma_equalizer_cc_0, 0), (self.qtgui_time_sink_x_1_1, 0)) - self.connect((self.digital_constellation_decoder_cb_0, 0), (self.blocks_null_sink_0, 0)) self.connect((self.digital_constellation_modulator_0, 0), (self.channels_channel_model_0, 0)) + self.connect((self.digital_constellation_modulator_0, 0), (self.qtgui_time_sink_x_1_0, 0)) + self.connect((self.digital_corr_est_cc_0, 1), (self.blocks_complex_to_magphase_0_0, 0)) + self.connect((self.digital_corr_est_cc_0, 0), (self.qtgui_time_sink_x_0_0_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.digital_cma_equalizer_cc_0, 0)) self.connect((self.fir_filter_xxx_1, 0), (self.blocks_complex_to_magphase_0, 0)) + self.connect((self.fir_filter_xxx_1, 0), (self.qtgui_const_sink_x_1, 0)) def closeEvent(self, event): self.settings = Qt.QSettings("GNU Radio", "correlator") self.settings.setValue("geometry", self.saveGeometry()) + self.stop() + self.wait() + event.accept() def get_sps(self): @@ -373,7 +594,7 @@ class correlator(gr.top_block, Qt.QWidget): def set_testvec(self, testvec): self.testvec = testvec - self.blocks_vector_source_x_0.set_data(self.testvec, []) + self.blocks_vector_source_x_0.set_data(self.testvec * 1600, []) def get_samp_rate(self): return self.samp_rate @@ -382,6 +603,9 @@ class correlator(gr.top_block, Qt.QWidget): self.samp_rate = samp_rate self.blocks_throttle_0.set_sample_rate(self.samp_rate) self.qtgui_time_sink_x_0.set_samp_rate(self.samp_rate) + self.qtgui_time_sink_x_0_0.set_samp_rate(self.samp_rate) + self.qtgui_time_sink_x_0_0_0.set_samp_rate(self.samp_rate) + self.qtgui_time_sink_x_1_0.set_samp_rate(self.samp_rate) self.qtgui_time_sink_x_1_1.set_samp_rate(self.samp_rate) self.qtgui_time_sink_x_2.set_samp_rate(self.samp_rate) @@ -411,6 +635,11 @@ class correlator(gr.top_block, Qt.QWidget): def set_access_code_symbols_sps(self, access_code_symbols_sps): self.access_code_symbols_sps = access_code_symbols_sps + def get_access_code_symbols(self): + return self.access_code_symbols + + def set_access_code_symbols(self, access_code_symbols): + self.access_code_symbols = access_code_symbols @@ -429,6 +658,9 @@ def main(top_block_cls=correlator, options=None): tb.show() def sig_handler(sig=None, frame=None): + tb.stop() + tb.wait() + Qt.QApplication.quit() signal.signal(signal.SIGINT, sig_handler) @@ -438,11 +670,6 @@ def main(top_block_cls=correlator, options=None): timer.start(500) timer.timeout.connect(lambda: None) - def quitting(): - tb.stop() - tb.wait() - - qapp.aboutToQuit.connect(quitting) qapp.exec_() if __name__ == '__main__': -- cgit v1.2.1