From 958c9920a5f05c97952f72c93b2e9dca231cfb8b Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sat, 27 Nov 2021 19:57:03 +0100 Subject: Start access code cross correlation --- tests/correlator/acgen.dat | Bin 5120 -> 3840 bytes tests/correlator/acgen.grc | 24 +- tests/correlator/acgen.py | 25 +- tests/correlator/acproc.py | 48 ++- tests/correlator/correlator.grc | 816 +++++++++++++++++++++++++++++++++++++--- tests/correlator/correlator.py | 244 +++++++++--- 6 files changed, 1007 insertions(+), 150 deletions(-) (limited to 'tests/correlator') diff --git a/tests/correlator/acgen.dat b/tests/correlator/acgen.dat index 537dcc5..a13db8e 100644 Binary files a/tests/correlator/acgen.dat and b/tests/correlator/acgen.dat differ diff --git a/tests/correlator/acgen.grc b/tests/correlator/acgen.grc index ec7c1e8..abdc3bc 100644 --- a/tests/correlator/acgen.grc +++ b/tests/correlator/acgen.grc @@ -1,7 +1,6 @@ options: parameters: author: Naoki Pross - catch_exceptions: 'True' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' @@ -23,6 +22,7 @@ options: sizing_mode: fixed thread_safe_setters: '' title: Access Code Symbols Generator + window_size: '' states: bus_sink: false bus_source: false @@ -36,7 +36,7 @@ blocks: id: variable parameters: comment: '' - value: '[ 0xaa, 0xff, 0x0a ]' + value: '[ 0xaa, 0xff, 0xff ]' states: bus_sink: false bus_source: false @@ -50,7 +50,6 @@ blocks: 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 @@ -75,6 +74,18 @@ blocks: coordinate: [464, 308.0] rotation: 0 state: true +- name: padding_zeros + id: variable + parameters: + comment: '' + value: '10' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [40, 364.0] + rotation: 0 + state: true - name: samp_rate id: variable parameters: @@ -84,7 +95,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [200, 44.0] + coordinate: [208, 12.0] rotation: 0 state: enabled - name: sps @@ -96,7 +107,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [312, 44.0] + coordinate: [304, 12.0] rotation: 0 state: true - name: blocks_file_sink_0 @@ -147,7 +158,7 @@ blocks: repeat: 'False' tags: '[]' type: byte - vector: '[0x00] * 10 + access_code * 10' + vector: '[0x00] * padding_zeros + access_code * 10' vlen: '1' states: bus_sink: false @@ -169,7 +180,6 @@ blocks: maxoutbuf: '0' minoutbuf: '0' samples_per_symbol: sps - truncate: 'False' verbose: 'False' states: bus_sink: false diff --git a/tests/correlator/acgen.py b/tests/correlator/acgen.py index 5fbdbb4..4d18b92 100755 --- a/tests/correlator/acgen.py +++ b/tests/correlator/acgen.py @@ -7,13 +7,12 @@ # GNU Radio Python Flow Graph # Title: Access Code Symbols Generator # Author: Naoki Pross -# GNU Radio version: 3.9.2.0 +# GNU Radio version: 3.8.2.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes -from gnuradio.fft import window import sys import signal from argparse import ArgumentParser @@ -21,21 +20,20 @@ from gnuradio.eng_arg import eng_float, intx from gnuradio import eng_notation - - class acgen(gr.top_block): def __init__(self): - gr.top_block.__init__(self, "Access Code Symbols Generator", catch_exceptions=True) + gr.top_block.__init__(self, "Access Code Symbols Generator") ################################################## # Variables ################################################## self.sps = sps = 4 self.samp_rate = samp_rate = 32000 + self.padding_zeros = padding_zeros = 10 self.excess_bw = excess_bw = 1 self.const = const = digital.constellation_qpsk().base() - self.access_code = access_code = [ 0xaa, 0xff, 0x0a ] + self.access_code = access_code = [ 0xaa, 0xff, 0xff ] ################################################## # Blocks @@ -47,9 +45,8 @@ class acgen(gr.top_block): pre_diff_code=True, excess_bw=excess_bw, verbose=False, - log=False, - truncate=False) - self.blocks_vector_source_x_0 = blocks.vector_source_b([0x00] * 10 + access_code * 10, False, 1, []) + log=False) + self.blocks_vector_source_x_0 = blocks.vector_source_b([0x00] * padding_zeros + access_code * 10, False, 1, []) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char*1, samp_rate,True) self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, 'acgen.dat', False) self.blocks_file_sink_0.set_unbuffered(False) @@ -77,6 +74,13 @@ class acgen(gr.top_block): self.samp_rate = samp_rate self.blocks_throttle_0.set_sample_rate(self.samp_rate) + def get_padding_zeros(self): + return self.padding_zeros + + def set_padding_zeros(self, padding_zeros): + self.padding_zeros = padding_zeros + self.blocks_vector_source_x_0.set_data([0x00] * self.padding_zeros + self.access_code * 10, []) + def get_excess_bw(self): return self.excess_bw @@ -94,7 +98,8 @@ class acgen(gr.top_block): def set_access_code(self, access_code): self.access_code = access_code - self.blocks_vector_source_x_0.set_data([0x00] * 10 + self.access_code * 10, []) + self.blocks_vector_source_x_0.set_data([0x00] * self.padding_zeros + self.access_code * 10, []) + diff --git a/tests/correlator/acproc.py b/tests/correlator/acproc.py index e119520..50c9a38 100755 --- a/tests/correlator/acproc.py +++ b/tests/correlator/acproc.py @@ -2,19 +2,21 @@ import numpy as np import matplotlib.pyplot as plt -import acgen +from acgen import acgen -# Parameters -# samples per symbol -sps = 4 -# number of initial bytes (to ignore) -nzeros = 10 -# length of the access code in bytes -aclen = 2 +# parameters +access_code_bits = [ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, ] +access_code = list(np.packbits([0] * 3 + access_code_bits)) +padding_zeros = 10 # Create samples -print("Modulating symbols") -acgen.main() +print(f"Modulating symbols for access code {access_code_bits} = {access_code} with after {padding_zeros} empty bytes") +gen = acgen() +gen.set_access_code(access_code) +gen.set_padding_zeros(padding_zeros) + +gen.start() +gen.wait() # Extract one sequence print("Extracting symbol sequence") @@ -27,17 +29,24 @@ plt.title("Raw Data (time domain)") plt.show() # take only symbols -symbols = data[1::sps] +symbols = data[1::gen.sps] + plt.plot(symbols.real, symbols.imag) plt.title("Symbols only (constellation)") plt.show() # where ac symbols start, in symbols -ac_start = nzeros * 8 -ac_end = ac_start + aclen * 8 +ac_start = (padding_zeros) * 8 + 3 # plus three because code is 13 bits +ac_end = ac_start + int(np.ceil(len(access_code_bits) / 2.)) # divided by two because QPSK ac = symbols[ac_start:ac_end] +print(f"Generated {len(ac)} (left padded) symbols from a {len(access_code_bits)} bit sequence") +print(list(ac)) + +print(f"Upsampled to {gen.sps} samples per symbos") +print(sum([[i, i, i, i] for i in ac], [])) + fig, (ax1, ax2) = plt.subplots(2, 1) fig.tight_layout() @@ -51,7 +60,14 @@ plt.show() fir = list(np.conj(ac[::-1])) -# print the symbols -print(f"Generated {len(ac)} symbols from a {aclen} byte sequence") -print("Reversed symbols (for FIR filter):") +# Print the symbols +print("Reversed complex conjugate symbols (for FIR filter):") print(fir) + +# Compute cross correlation + +xc = np.convolve(fir, ac) + +plt.plot(np.abs(xc)) +plt.title("Cross correlation (FIR)") +plt.show() diff --git a/tests/correlator/correlator.grc b/tests/correlator/correlator.grc index cc57e18..723a99d 100644 --- a/tests/correlator/correlator.grc +++ b/tests/correlator/correlator.grc @@ -1,7 +1,6 @@ options: parameters: author: Naoki Pross - catch_exceptions: 'True' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' @@ -23,6 +22,7 @@ options: sizing_mode: fixed thread_safe_setters: '' title: Correlator Test + window_size: '' states: bus_sink: false bus_source: false @@ -32,13 +32,31 @@ options: state: enabled blocks: +- name: access_code_symbols_sps + 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), + (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)]' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [224, 132.0] + rotation: 0 + state: true - 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 @@ -48,9 +66,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [432, 164.0] + coordinate: [592, 484.0] rotation: 0 - state: true + state: enabled - name: excess_bw id: variable parameters: @@ -60,9 +78,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [432, 340.0] + coordinate: [496, 484.0] rotation: 0 - state: true + state: enabled - name: nfilts id: variable parameters: @@ -72,9 +90,22 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [696, 356.0] + coordinate: [224, 988.0] rotation: 0 - state: true + state: enabled +- name: revconj_access_code_symbols + 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)]' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [992, 620.0] + rotation: 0 + state: enabled - name: rrc_taps id: variable parameters: @@ -84,9 +115,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [768, 356.0] + coordinate: [304, 988.0] rotation: 0 - state: true + state: enabled - name: samp_rate id: variable parameters: @@ -96,7 +127,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [256, 52.0] + coordinate: [8, 116.0] rotation: 0 state: enabled - name: sps @@ -108,9 +139,21 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [352, 52.0] + coordinate: [104, 116.0] rotation: 0 - state: true + state: enabled +- name: testvec + id: variable + parameters: + comment: '' + value: '[31, 53] + [0x12, 0xe3, 0x9b, 0xee, 0x84, 0x23]' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [48, 492.0] + rotation: 0 + state: enabled - name: timing_loop_bw id: variable parameters: @@ -120,11 +163,11 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [696, 420.0] + coordinate: [224, 1068.0] rotation: 0 - state: true -- name: blocks_complex_to_mag_0 - id: blocks_complex_to_mag + state: enabled +- name: blocks_complex_to_magphase_0 + id: blocks_complex_to_magphase parameters: affinity: '' alias: '' @@ -136,9 +179,43 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1584, 80.0] + coordinate: [1008, 696.0] rotation: 0 - state: true + state: enabled +- 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: [1072, 1112.0] + rotation: 0 + state: disabled +- name: blocks_multiply_const_vxx_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: [1280, 788.0] + rotation: 0 + state: enabled - name: blocks_null_sink_0 id: blocks_null_sink parameters: @@ -153,9 +230,117 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1528, 216.0] + coordinate: [1056, 840.0] rotation: 0 - state: true + state: enabled +- name: blocks_null_sink_0_0 + id: blocks_null_sink + parameters: + affinity: '' + alias: '' + bus_structure_sink: '[[0,],]' + comment: '' + num_inputs: '1' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1080, 1048.0] + rotation: 0 + state: disabled +- name: blocks_null_sink_1_0 + 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: [1336, 1176.0] + rotation: 0 + state: disabled +- name: blocks_null_sink_1_0_0 + 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: [1288, 856.0] + rotation: 0 + state: disabled +- 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, 344.0] + rotation: 0 + state: enabled +- name: blocks_stream_mux_0 + id: blocks_stream_mux + parameters: + affinity: '' + alias: '' + comment: '' + lengths: '[15, len(testvec)]' + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: byte + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [288, 392.0] + rotation: 0 + state: enabled +- name: blocks_stream_mux_1 + id: blocks_stream_mux + parameters: + affinity: '' + alias: '' + comment: '' + lengths: '[len(access_code_symbols_sps), sps * (len(testvec) + 15)]' + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [776, 280.0] + rotation: 0 + state: disabled - name: blocks_throttle_0 id: blocks_throttle parameters: @@ -166,15 +351,15 @@ blocks: maxoutbuf: '0' minoutbuf: '0' samples_per_second: samp_rate - type: byte + type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [248, 260.0] + coordinate: [1272, 404.0] rotation: 0 - state: true + state: enabled - name: blocks_vector_source_x_0 id: blocks_vector_source_x parameters: @@ -183,18 +368,59 @@ blocks: comment: '' maxoutbuf: '0' minoutbuf: '0' - repeat: 'False' + repeat: 'True' tags: '[]' type: byte - vector: ([0x00] * 10 + [0xaa, 0xff, 0x0a] + [0x00] * 10) * 20 + vector: testvec vlen: '1' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [16, 244.0] + coordinate: [48, 404.0] rotation: 0 - state: true + state: enabled +- name: blocks_vector_source_x_1 + id: blocks_vector_source_x + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + repeat: 'True' + tags: '[]' + type: complex + vector: access_code_symbols_sps + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [224, 204.0] + rotation: 0 + 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: '0.1' + seed: '243' + taps: '1. ' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [992, 364.0] + rotation: 0 + state: enabled - name: digital_cma_equalizer_cc_0 id: digital_cma_equalizer_cc parameters: @@ -211,7 +437,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [992, 188.0] + coordinate: [528, 812.0] rotation: 0 state: enabled - name: digital_constellation_decoder_cb_0 @@ -227,9 +453,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1264, 212.0] + coordinate: [800, 836.0] rotation: 0 - state: true + state: enabled - name: digital_constellation_modulator_0 id: digital_constellation_modulator parameters: @@ -243,15 +469,35 @@ blocks: maxoutbuf: '0' minoutbuf: '0' samples_per_symbol: sps - truncate: 'False' verbose: 'False' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [432, 236.0] + coordinate: [496, 380.0] rotation: 0 - state: true + state: enabled +- name: digital_corr_est_cc_0 + id: digital_corr_est_cc + parameters: + affinity: '' + alias: '' + comment: '' + mark_delay: '0' + 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' + threshold_method: digital.THRESHOLD_DYNAMIC + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [768, 1076.0] + rotation: 0 + state: disabled - name: digital_pfb_clock_sync_xxx_0 id: digital_pfb_clock_sync_xxx parameters: @@ -272,9 +518,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [696, 212.0] + coordinate: [224, 836.0] rotation: 0 - state: true + state: enabled - name: fir_filter_xxx_1 id: fir_filter_xxx parameters: @@ -285,17 +531,105 @@ blocks: maxoutbuf: '0' minoutbuf: '0' samp_delay: '0' - taps: '[(-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)]' + taps: revconj_access_code_symbols type: ccc states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1328, 68.0] + coordinate: [768, 700.0] + rotation: 0 + state: enabled +- 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: '' + 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: '""' + 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: [768, 620.0] rotation: 0 state: enabled - name: qtgui_time_sink_x_0 @@ -313,7 +647,7 @@ blocks: alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' - autoscale: 'False' + autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue @@ -326,10 +660,10 @@ blocks: color8: dark red color9: dark green comment: '' - ctrlpanel: 'True' + ctrlpanel: 'False' entags: 'True' grid: 'False' - gui_hint: '' + gui_hint: 2,0,1,1 label1: Signal 1 label10: Signal 10 label2: Signal 2 @@ -384,18 +718,18 @@ blocks: width7: '1' width8: '1' width9: '1' - ylabel: Amplitude - ymax: '50' + ylabel: XC Magnitude + ymax: '100' ymin: '0' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1792, 60.0] + coordinate: [1280, 676.0] rotation: 0 - state: true -- name: qtgui_time_sink_x_1 + state: enabled +- name: qtgui_time_sink_x_0_0 id: qtgui_time_sink_x parameters: affinity: '' @@ -410,7 +744,7 @@ blocks: alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' - autoscale: 'False' + autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue @@ -423,10 +757,107 @@ blocks: color8: dark red color9: dark green comment: '' - ctrlpanel: 'True' + ctrlpanel: 'False' entags: 'True' grid: 'False' - gui_hint: '' + 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: Cross Correlation Magnitude + ymax: '100' + ymin: '0' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1336, 1092.0] + rotation: 0 + 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: '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 @@ -481,7 +912,7 @@ blocks: width7: '1' width8: '1' width9: '1' - ylabel: Amplitude + ylabel: Modulated ymax: '2' ymin: '-2' yunit: '""' @@ -489,21 +920,282 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [696, 108.0] + coordinate: [992, 196.0] rotation: 0 - state: true + state: disabled +- 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: 'False' + 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: [800, 932.0] + rotation: 0 + state: enabled +- 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: '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: 3,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 Phase + ymax: '1' + ymin: '-1' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1456, 772.0] + rotation: 0 + state: enabled +- name: root_raised_cosine_filter_0 + id: root_raised_cosine_filter + parameters: + affinity: '' + alias: '' + alpha: excess_bw + comment: '' + decim: '1' + gain: '2' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + ntaps: 11*samp_rate + samp_rate: samp_rate + sym_rate: '1' + type: fir_filter_ccf + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [496, 180.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: [1480, 404.0] + rotation: 0 + state: enabled +- name: virtual_source_0 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: envelope + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 884.0] + rotation: 0 + state: enabled connections: -- [blocks_complex_to_mag_0, '0', qtgui_time_sink_x_0, '0'] -- [blocks_throttle_0, '0', digital_constellation_modulator_0, '0'] -- [blocks_vector_source_x_0, '0', blocks_throttle_0, '0'] +- [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_multiply_const_vxx_0, '0', qtgui_time_sink_x_2, '0'] +- [blocks_null_source_0, '0', blocks_stream_mux_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_constellation_decoder_cb_0, '0', blocks_null_sink_0, '0'] -- [digital_constellation_modulator_0, '0', digital_pfb_clock_sync_xxx_0, '0'] -- [digital_constellation_modulator_0, '0', qtgui_time_sink_x_1, '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_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_mag_0, '0'] +- [fir_filter_xxx_1, '0', blocks_complex_to_magphase_0, '0'] +- [root_raised_cosine_filter_0, '0', blocks_stream_mux_1, '0'] +- [virtual_source_0, '0', digital_pfb_clock_sync_xxx_0, '0'] metadata: file_format: 1 diff --git a/tests/correlator/correlator.py b/tests/correlator/correlator.py index 79fa3f8..15d9c9c 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.9.2.0 +# GNU Radio version: 3.8.2.0 from distutils.version import StrictVersion @@ -26,24 +26,22 @@ from gnuradio import qtgui from gnuradio.filter import firdes import sip from gnuradio import blocks +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", catch_exceptions=True) + gr.top_block.__init__(self, "Correlator Test") Qt.QWidget.__init__(self) self.setWindowTitle("Correlator Test") qtgui.util.check_set_qss() @@ -80,32 +78,85 @@ 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.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.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)] ################################################## # Blocks ################################################## - self.qtgui_time_sink_x_1 = qtgui.time_sink_c( + self.qtgui_time_sink_x_2 = qtgui.time_sink_f( + 1024, #size + samp_rate, #samp_rate + "", #name + 1 #number of inputs + ) + self.qtgui_time_sink_x_2.set_update_time(0.10) + self.qtgui_time_sink_x_2.set_y_axis(-1, 1) + + self.qtgui_time_sink_x_2.set_y_label('XC Phase', "") + + self.qtgui_time_sink_x_2.enable_tags(True) + self.qtgui_time_sink_x_2.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") + self.qtgui_time_sink_x_2.enable_autoscale(True) + self.qtgui_time_sink_x_2.enable_grid(False) + self.qtgui_time_sink_x_2.enable_axis_labels(True) + self.qtgui_time_sink_x_2.enable_control_panel(False) + self.qtgui_time_sink_x_2.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_2.set_line_label(i, "Data {0}".format(i)) + else: + self.qtgui_time_sink_x_2.set_line_label(i, labels[i]) + self.qtgui_time_sink_x_2.set_line_width(i, widths[i]) + self.qtgui_time_sink_x_2.set_line_color(i, colors[i]) + self.qtgui_time_sink_x_2.set_line_style(i, styles[i]) + self.qtgui_time_sink_x_2.set_line_marker(i, markers[i]) + self.qtgui_time_sink_x_2.set_line_alpha(i, alphas[i]) + + self._qtgui_time_sink_x_2_win = sip.wrapinstance(self.qtgui_time_sink_x_2.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_time_sink_x_2_win, 3, 0, 1, 1) + for r in range(3, 4): + 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_1 = qtgui.time_sink_c( 1024, #size samp_rate, #samp_rate "", #name - 1, #number of inputs - None # parent + 1 #number of inputs ) - self.qtgui_time_sink_x_1.set_update_time(0.10) - self.qtgui_time_sink_x_1.set_y_axis(-2, 2) + self.qtgui_time_sink_x_1_1.set_update_time(0.10) + self.qtgui_time_sink_x_1_1.set_y_axis(-2, 2) - self.qtgui_time_sink_x_1.set_y_label('Amplitude', "") + self.qtgui_time_sink_x_1_1.set_y_label('Equalized', "") - self.qtgui_time_sink_x_1.enable_tags(True) - self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") - self.qtgui_time_sink_x_1.enable_autoscale(False) - self.qtgui_time_sink_x_1.enable_grid(False) - self.qtgui_time_sink_x_1.enable_axis_labels(True) - self.qtgui_time_sink_x_1.enable_control_panel(True) - self.qtgui_time_sink_x_1.enable_stem_plot(False) + 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_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) labels = ['Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', @@ -125,37 +176,40 @@ class correlator(gr.top_block, Qt.QWidget): for i in range(2): if len(labels[i]) == 0: if (i % 2 == 0): - self.qtgui_time_sink_x_1.set_line_label(i, "Re{{Data {0}}}".format(i/2)) + self.qtgui_time_sink_x_1_1.set_line_label(i, "Re{{Data {0}}}".format(i/2)) else: - self.qtgui_time_sink_x_1.set_line_label(i, "Im{{Data {0}}}".format(i/2)) + self.qtgui_time_sink_x_1_1.set_line_label(i, "Im{{Data {0}}}".format(i/2)) else: - self.qtgui_time_sink_x_1.set_line_label(i, labels[i]) - self.qtgui_time_sink_x_1.set_line_width(i, widths[i]) - self.qtgui_time_sink_x_1.set_line_color(i, colors[i]) - self.qtgui_time_sink_x_1.set_line_style(i, styles[i]) - self.qtgui_time_sink_x_1.set_line_marker(i, markers[i]) - self.qtgui_time_sink_x_1.set_line_alpha(i, alphas[i]) - - self._qtgui_time_sink_x_1_win = sip.wrapinstance(self.qtgui_time_sink_x_1.pyqwidget(), Qt.QWidget) - self.top_layout.addWidget(self._qtgui_time_sink_x_1_win) + self.qtgui_time_sink_x_1_1.set_line_label(i, labels[i]) + self.qtgui_time_sink_x_1_1.set_line_width(i, widths[i]) + self.qtgui_time_sink_x_1_1.set_line_color(i, colors[i]) + self.qtgui_time_sink_x_1_1.set_line_style(i, styles[i]) + self.qtgui_time_sink_x_1_1.set_line_marker(i, markers[i]) + self.qtgui_time_sink_x_1_1.set_line_alpha(i, alphas[i]) + + self._qtgui_time_sink_x_1_1_win = sip.wrapinstance(self.qtgui_time_sink_x_1_1.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_1_win, 1, 0, 1, 1) + for r in range(1, 2): + 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 = qtgui.time_sink_f( 1024, #size samp_rate, #samp_rate "", #name - 1, #number of inputs - None # parent + 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) - self.qtgui_time_sink_x_0.set_y_axis(0, 50) + self.qtgui_time_sink_x_0.set_y_axis(0, 100) - self.qtgui_time_sink_x_0.set_y_label('Amplitude', "") + self.qtgui_time_sink_x_0.set_y_label('XC Magnitude', "") self.qtgui_time_sink_x_0.enable_tags(True) self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") - self.qtgui_time_sink_x_0.enable_autoscale(False) + self.qtgui_time_sink_x_0.enable_autoscale(True) self.qtgui_time_sink_x_0.enable_grid(False) self.qtgui_time_sink_x_0.enable_axis_labels(True) - self.qtgui_time_sink_x_0.enable_control_panel(True) + self.qtgui_time_sink_x_0.enable_control_panel(False) self.qtgui_time_sink_x_0.enable_stem_plot(False) @@ -185,8 +239,52 @@ class correlator(gr.top_block, Qt.QWidget): self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) - self.top_layout.addWidget(self._qtgui_time_sink_x_0_win) - self.fir_filter_xxx_1 = filter.fir_filter_ccc(1, [(-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.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win, 2, 0, 1, 1) + for r in range(2, 3): + 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_0 = qtgui.const_sink_c( + 1024, #size + "", #name + 1 #number of inputs + ) + self.qtgui_const_sink_x_0.set_update_time(0.10) + self.qtgui_const_sink_x_0.set_y_axis(-2, 2) + self.qtgui_const_sink_x_0.set_x_axis(-2, 2) + self.qtgui_const_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "") + self.qtgui_const_sink_x_0.enable_autoscale(False) + self.qtgui_const_sink_x_0.enable_grid(False) + self.qtgui_const_sink_x_0.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 = [0, 0, 0, 0, 0, + 0, 0, 0, 0, 0] + markers = [0, 0, 0, 0, 0, + 0, 0, 0, 0, 0] + alphas = [1.0, 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_0.set_line_label(i, "Data {0}".format(i)) + else: + self.qtgui_const_sink_x_0.set_line_label(i, labels[i]) + self.qtgui_const_sink_x_0.set_line_width(i, widths[i]) + self.qtgui_const_sink_x_0.set_line_color(i, colors[i]) + self.qtgui_const_sink_x_0.set_line_style(i, styles[i]) + self.qtgui_const_sink_x_0.set_line_marker(i, markers[i]) + 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.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_constellation_modulator_0 = digital.generic_mod( @@ -196,38 +294,50 @@ class correlator(gr.top_block, Qt.QWidget): pre_diff_code=True, excess_bw=excess_bw, verbose=False, - log=False, - truncate=False) + log=False) self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb(const) self.digital_cma_equalizer_cc_0 = digital.cma_equalizer_cc(15, 1, .002, 1) - self.blocks_vector_source_x_0 = blocks.vector_source_b(([0x00] * 10 + [0xaa, 0xff, 0x0a] + [0x00] * 10) * 20, False, 1, []) - self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char*1, samp_rate,True) + self.channels_channel_model_0 = channels.channel_model( + noise_voltage=0.1, + frequency_offset=0.0, + epsilon=1.0, + taps=[1. ], + noise_seed=243, + block_tags=False) + self.blocks_vector_source_x_0 = blocks.vector_source_b(testvec, True, 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_null_source_0 = blocks.null_source(gr.sizeof_char*1) self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_char*1) - self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1) + self.blocks_multiply_const_vxx_0 = blocks.multiply_const_ff(180 / 3.141592653589793) + self.blocks_complex_to_magphase_0 = blocks.complex_to_magphase(1) ################################################## # Connections ################################################## - self.connect((self.blocks_complex_to_mag_0, 0), (self.qtgui_time_sink_x_0, 0)) - self.connect((self.blocks_throttle_0, 0), (self.digital_constellation_modulator_0, 0)) - self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_throttle_0, 0)) + 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_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.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.digital_pfb_clock_sync_xxx_0, 0)) - self.connect((self.digital_constellation_modulator_0, 0), (self.qtgui_time_sink_x_1, 0)) + self.connect((self.digital_constellation_modulator_0, 0), (self.channels_channel_model_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_mag_0, 0)) + self.connect((self.fir_filter_xxx_1, 0), (self.blocks_complex_to_magphase_0, 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): @@ -258,6 +368,13 @@ class correlator(gr.top_block, Qt.QWidget): self.timing_loop_bw = timing_loop_bw self.digital_pfb_clock_sync_xxx_0.set_loop_bandwidth(self.timing_loop_bw) + def get_testvec(self): + return self.testvec + + def set_testvec(self, testvec): + self.testvec = testvec + self.blocks_vector_source_x_0.set_data(self.testvec, []) + def get_samp_rate(self): return self.samp_rate @@ -265,7 +382,8 @@ 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_1.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) def get_rrc_taps(self): return self.rrc_taps @@ -274,12 +392,26 @@ class correlator(gr.top_block, Qt.QWidget): self.rrc_taps = rrc_taps self.digital_pfb_clock_sync_xxx_0.update_taps(self.rrc_taps) + def get_revconj_access_code_symbols(self): + return self.revconj_access_code_symbols + + def set_revconj_access_code_symbols(self, revconj_access_code_symbols): + self.revconj_access_code_symbols = revconj_access_code_symbols + self.fir_filter_xxx_1.set_taps(self.revconj_access_code_symbols) + def get_const(self): return self.const def set_const(self, const): self.const = const + def get_access_code_symbols_sps(self): + return self.access_code_symbols_sps + + def set_access_code_symbols_sps(self, access_code_symbols_sps): + self.access_code_symbols_sps = access_code_symbols_sps + + @@ -297,9 +429,6 @@ 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) @@ -309,6 +438,11 @@ 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 From 9eb911230923e11773be422f76726dfbfad7e5bc Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 28 Nov 2021 01:07:08 +0100 Subject: Delete acgen stuff, it was all wrong --- tests/correlator/acgen.dat | 15 ---- tests/correlator/acgen.grc | 198 --------------------------------------------- tests/correlator/acgen.py | 125 ---------------------------- tests/correlator/acproc.py | 73 ----------------- 4 files changed, 411 deletions(-) delete mode 100644 tests/correlator/acgen.dat delete mode 100644 tests/correlator/acgen.grc delete mode 100755 tests/correlator/acgen.py delete mode 100755 tests/correlator/acproc.py (limited to 'tests/correlator') diff --git a/tests/correlator/acgen.dat b/tests/correlator/acgen.dat deleted file mode 100644 index a13db8e..0000000 --- a/tests/correlator/acgen.dat +++ /dev/null @@ -1,15 +0,0 @@ -s9s9tytyRRP8|!P8|!99)Eס)Eס - -""bI:bI:T¡T¡SS٦"٦"o:o:̟w̟wS픺S픺Nj#Nj#8:8:]]XźXź"#"#E:E:ŢŢKKдk#дk#9;9;BBZZU2}#U2}#&4;&4;N -N -q?q?##lbZ;lbZ; 颓 vgvga#a#f;f;33##.;.;m=m=xxT#T#P";P";Y~]Y~]ȻȻ(!$(!$;;??DDj$$j$$`<`<3nѣ3nѣ u uĜ&$Ĝ&$#<#<E3E33&$3&$PI@>NN33''&dο&dο''ŮŮ''''DD''^^''''jj''(ǰ(ǰ''ڸڸ''}}''&F&F''''߷߷''gOgO''..''''ZZ''IJIJ'',,'''' - -''zz''鶿鶿''`*`*''϶϶''AA'''':V:V''EE''gg''ᖶᖶ''ww''xx''''{{''''RpRp''~~''Yuf''<2''|!l''t''}t'' -q''p''p{''˙''d}''Ո''Kv''m̶''%/^o''۶''f'' G''\''#''вS?''Pڶ''''wﶿ''t''''(.ٲ''E;''ֱѲ''>ig''nd''ܸ&''Xܰ9:'']$''4ر''I*{''Ů6'',UC''9''y }''i''{ſ''֛Xિ''_¿''Ҽq'?'?B߿'?'4Փ?'?'?t?I_?'?'???'?'? ?d?'?'?C=<''B''3>Y7'?'?jd?@'?'?G?'?'QD?@޿'?'Ϝ?n'?'L??5ǿ'?'>֣''ȿ''f>q'?'?u'?'ߝ?U'?'? ?v-?'?'? -??'?'?'?Y?'?'?|>qZ<''D(~''>mZ'?'??{@'?'?鉞?@'?'>C?x ߿'?'~?ޜ'?'y?xǿ'?'S!> <''}ީȿ''!">.'?'o?3'?'?HG'?'??2?'?'?c??'?'?\U??'?'? -#><''R>''w%$>C -'?'?22?x@'?'?O!?tv'?'?K߿'?'L!?'?'"?hȿ'?' $>''NDȿ''!$>ʚ'?'"?'?'O!?E'?'??x?'?'?L!? ?'?'?"?t?'?'? $><''N>''!$>C -'?'?"?x@'?'?O!?tv'?'?K߿'?'L!?'?'"?hȿ'?' $>''NDȿ''!$>ʚ'?'"?'?'O!?E'?'??x?'?'?L!? ?'?'?"?t?'?'? $><''N>''!$>C -'?'?"?x@'?'?O!?tv'?'?K߿'?'L!?'?'"?hȿ'?' $>''NDȿ''!$>ʚ'?'"?'?'O!?E'?'??x?'?'?L!? ?'?'?"?t?'?'? $><''N>''!$>C -'?'?"?x@'?'?O!?tv'?'?K߿'?'L!?'?'"?hȿ'?' $>''NDȿ''!$>ʚ'?'"?'?'O!?E'?'??x?'?'?L!? ?'?'?"?t?'?'? $><''N>''!$>C -'?'?"?x@'?'?O!?tv'?'?K߿'?'L!?'?'"?hȿ'?' $>''NDȿ''!$>ʚ'?'"?'?'O!?E'?'? \ No newline at end of file diff --git a/tests/correlator/acgen.grc b/tests/correlator/acgen.grc deleted file mode 100644 index abdc3bc..0000000 --- a/tests/correlator/acgen.grc +++ /dev/null @@ -1,198 +0,0 @@ -options: - parameters: - author: Naoki Pross - category: '[GRC Hier Blocks]' - cmake_opt: '' - comment: '' - copyright: '' - description: '' - gen_cmake: 'On' - gen_linking: dynamic - generate_options: no_gui - hier_block_src_path: '.:' - id: acgen - max_nouts: '0' - output_language: python - placement: (0,0) - qt_qss_theme: '' - realtime_scheduling: '' - run: 'True' - run_command: '{python} -u {filename}' - run_options: run - sizing_mode: fixed - thread_safe_setters: '' - title: Access Code Symbols Generator - window_size: '' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [8, 8] - rotation: 0 - state: enabled - -blocks: -- name: access_code - id: variable - parameters: - comment: '' - value: '[ 0xaa, 0xff, 0xff ]' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [40, 292.0] - rotation: 0 - state: true -- 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: [464, 124.0] - rotation: 0 - state: true -- name: excess_bw - id: variable - parameters: - comment: '' - value: '1' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [464, 308.0] - rotation: 0 - state: true -- name: padding_zeros - id: variable - parameters: - comment: '' - value: '10' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [40, 364.0] - rotation: 0 - state: true -- name: samp_rate - id: variable - parameters: - comment: '' - value: '32000' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [208, 12.0] - rotation: 0 - state: enabled -- name: sps - id: variable - parameters: - comment: '' - value: '4' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [304, 12.0] - rotation: 0 - state: true -- name: blocks_file_sink_0 - id: blocks_file_sink - parameters: - affinity: '' - alias: '' - append: 'False' - comment: '' - file: acgen.dat - type: complex - unbuffered: 'False' - vlen: '1' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [752, 204.0] - rotation: 0 - state: true -- name: blocks_throttle_0 - id: blocks_throttle - parameters: - affinity: '' - alias: '' - comment: '' - ignoretag: 'True' - maxoutbuf: '0' - minoutbuf: '0' - samples_per_second: samp_rate - type: byte - vlen: '1' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [264, 220.0] - rotation: 0 - state: true -- name: blocks_vector_source_x_0 - id: blocks_vector_source_x - parameters: - affinity: '' - alias: '' - comment: '' - maxoutbuf: '0' - minoutbuf: '0' - repeat: 'False' - tags: '[]' - type: byte - vector: '[0x00] * padding_zeros + access_code * 10' - vlen: '1' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [40, 204.0] - rotation: 0 - state: true -- 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: [464, 196.0] - rotation: 0 - state: true - -connections: -- [blocks_throttle_0, '0', digital_constellation_modulator_0, '0'] -- [blocks_vector_source_x_0, '0', blocks_throttle_0, '0'] -- [digital_constellation_modulator_0, '0', blocks_file_sink_0, '0'] - -metadata: - file_format: 1 diff --git a/tests/correlator/acgen.py b/tests/correlator/acgen.py deleted file mode 100755 index 4d18b92..0000000 --- a/tests/correlator/acgen.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# -# SPDX-License-Identifier: GPL-3.0 -# -# GNU Radio Python Flow Graph -# Title: Access Code Symbols Generator -# Author: Naoki Pross -# GNU Radio version: 3.8.2.0 - -from gnuradio import blocks -from gnuradio import digital -from gnuradio import gr -from gnuradio.filter import firdes -import sys -import signal -from argparse import ArgumentParser -from gnuradio.eng_arg import eng_float, intx -from gnuradio import eng_notation - - -class acgen(gr.top_block): - - def __init__(self): - gr.top_block.__init__(self, "Access Code Symbols Generator") - - ################################################## - # Variables - ################################################## - self.sps = sps = 4 - self.samp_rate = samp_rate = 32000 - self.padding_zeros = padding_zeros = 10 - self.excess_bw = excess_bw = 1 - self.const = const = digital.constellation_qpsk().base() - self.access_code = access_code = [ 0xaa, 0xff, 0xff ] - - ################################################## - # Blocks - ################################################## - self.digital_constellation_modulator_0 = digital.generic_mod( - constellation=const, - differential=False, - samples_per_symbol=sps, - pre_diff_code=True, - excess_bw=excess_bw, - verbose=False, - log=False) - self.blocks_vector_source_x_0 = blocks.vector_source_b([0x00] * padding_zeros + access_code * 10, False, 1, []) - self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char*1, samp_rate,True) - self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, 'acgen.dat', False) - self.blocks_file_sink_0.set_unbuffered(False) - - - - ################################################## - # Connections - ################################################## - self.connect((self.blocks_throttle_0, 0), (self.digital_constellation_modulator_0, 0)) - self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_throttle_0, 0)) - self.connect((self.digital_constellation_modulator_0, 0), (self.blocks_file_sink_0, 0)) - - - def get_sps(self): - return self.sps - - def set_sps(self, sps): - self.sps = sps - - def get_samp_rate(self): - return self.samp_rate - - def set_samp_rate(self, samp_rate): - self.samp_rate = samp_rate - self.blocks_throttle_0.set_sample_rate(self.samp_rate) - - def get_padding_zeros(self): - return self.padding_zeros - - def set_padding_zeros(self, padding_zeros): - self.padding_zeros = padding_zeros - self.blocks_vector_source_x_0.set_data([0x00] * self.padding_zeros + self.access_code * 10, []) - - def get_excess_bw(self): - return self.excess_bw - - def set_excess_bw(self, excess_bw): - self.excess_bw = excess_bw - - def get_const(self): - return self.const - - def set_const(self, const): - self.const = const - - def get_access_code(self): - return self.access_code - - def set_access_code(self, access_code): - self.access_code = access_code - self.blocks_vector_source_x_0.set_data([0x00] * self.padding_zeros + self.access_code * 10, []) - - - - - -def main(top_block_cls=acgen, options=None): - tb = top_block_cls() - - def sig_handler(sig=None, frame=None): - tb.stop() - tb.wait() - - sys.exit(0) - - signal.signal(signal.SIGINT, sig_handler) - signal.signal(signal.SIGTERM, sig_handler) - - tb.start() - - tb.wait() - - -if __name__ == '__main__': - main() diff --git a/tests/correlator/acproc.py b/tests/correlator/acproc.py deleted file mode 100755 index 50c9a38..0000000 --- a/tests/correlator/acproc.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 - -import numpy as np -import matplotlib.pyplot as plt -from acgen import acgen - -# parameters -access_code_bits = [ 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, ] -access_code = list(np.packbits([0] * 3 + access_code_bits)) -padding_zeros = 10 - -# Create samples -print(f"Modulating symbols for access code {access_code_bits} = {access_code} with after {padding_zeros} empty bytes") -gen = acgen() -gen.set_access_code(access_code) -gen.set_padding_zeros(padding_zeros) - -gen.start() -gen.wait() - -# Extract one sequence -print("Extracting symbol sequence") - -# raw data -data = np.fromfile("acgen.dat", dtype=np.complex64) -plt.plot(data.real) -plt.plot(data.imag) -plt.title("Raw Data (time domain)") -plt.show() - -# take only symbols -symbols = data[1::gen.sps] - -plt.plot(symbols.real, symbols.imag) -plt.title("Symbols only (constellation)") -plt.show() - -# where ac symbols start, in symbols -ac_start = (padding_zeros) * 8 + 3 # plus three because code is 13 bits -ac_end = ac_start + int(np.ceil(len(access_code_bits) / 2.)) # divided by two because QPSK - -ac = symbols[ac_start:ac_end] - -print(f"Generated {len(ac)} (left padded) symbols from a {len(access_code_bits)} bit sequence") -print(list(ac)) - -print(f"Upsampled to {gen.sps} samples per symbos") -print(sum([[i, i, i, i] for i in ac], [])) - -fig, (ax1, ax2) = plt.subplots(2, 1) -fig.tight_layout() - -ax1.plot(ac.real, ac.imag) -ax1.set_title("Symbols of Access Code (constellation)") - -ax2.plot(ac.real, ".-") -ax2.plot(ac.imag, ".-") -ax2.set_title("Symbols of Access Code (time)") -plt.show() - -fir = list(np.conj(ac[::-1])) - -# Print the symbols -print("Reversed complex conjugate symbols (for FIR filter):") -print(fir) - -# Compute cross correlation - -xc = np.convolve(fir, ac) - -plt.plot(np.abs(xc)) -plt.title("Cross correlation (FIR)") -plt.show() -- cgit v1.2.1 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/correlator') 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