diff options
Diffstat (limited to 'tests/correlator')
-rw-r--r-- | tests/correlator/acgen.dat | bin | 5120 -> 0 bytes | |||
-rw-r--r-- | tests/correlator/acgen.grc | 188 | ||||
-rwxr-xr-x | tests/correlator/acgen.py | 120 | ||||
-rwxr-xr-x | tests/correlator/acproc.py | 57 | ||||
-rw-r--r-- | tests/correlator/correlator.grc | 1475 | ||||
-rwxr-xr-x | tests/correlator/correlator.py | 445 |
6 files changed, 1825 insertions, 460 deletions
diff --git a/tests/correlator/acgen.dat b/tests/correlator/acgen.dat Binary files differdeleted file mode 100644 index 537dcc5..0000000 --- a/tests/correlator/acgen.dat +++ /dev/null diff --git a/tests/correlator/acgen.grc b/tests/correlator/acgen.grc deleted file mode 100644 index ec7c1e8..0000000 --- a/tests/correlator/acgen.grc +++ /dev/null @@ -1,188 +0,0 @@ -options: - parameters: - author: Naoki Pross - catch_exceptions: 'True' - 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 - 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, 0x0a ]' - 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' - normalization: digital.constellation.AMPLITUDE_NORMALIZATION - 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: samp_rate - id: variable - parameters: - comment: '' - value: '32000' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [200, 44.0] - rotation: 0 - state: enabled -- name: sps - id: variable - parameters: - comment: '' - value: '4' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [312, 44.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] * 10 + 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 - truncate: 'False' - 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 5fbdbb4..0000000 --- a/tests/correlator/acgen.py +++ /dev/null @@ -1,120 +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.9.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 -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) - - ################################################## - # Variables - ################################################## - self.sps = sps = 4 - self.samp_rate = samp_rate = 32000 - self.excess_bw = excess_bw = 1 - self.const = const = digital.constellation_qpsk().base() - self.access_code = access_code = [ 0xaa, 0xff, 0x0a ] - - ################################################## - # 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, - truncate=False) - self.blocks_vector_source_x_0 = blocks.vector_source_b([0x00] * 10 + 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_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] * 10 + 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 e119520..0000000 --- a/tests/correlator/acproc.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python3 - -import numpy as np -import matplotlib.pyplot as plt -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 - -# Create samples -print("Modulating symbols") -acgen.main() - -# 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::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 = symbols[ac_start:ac_end] - -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(f"Generated {len(ac)} symbols from a {aclen} byte sequence") -print("Reversed symbols (for FIR filter):") -print(fir) diff --git a/tests/correlator/correlator.grc b/tests/correlator/correlator.grc index cc57e18..9deec54 100644 --- a/tests/correlator/correlator.grc +++ b/tests/correlator/correlator.grc @@ -32,6 +32,40 @@ 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: + 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: enabled - name: const id: variable_constellation parameters: @@ -48,9 +82,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 +94,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 +106,24 @@ 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.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: [48, 564.0] + rotation: 0 + state: enabled - name: rrc_taps id: variable parameters: @@ -84,9 +133,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 +145,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 +157,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, 0x41, 0xf3]' + 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 +181,31 @@ 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_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: '' @@ -136,9 +217,93 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1584, 80.0] + coordinate: [752, 1624.0] rotation: 0 - state: true + state: disabled +- name: blocks_complex_to_magphase_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: [1048, 696.0] + rotation: 0 + 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: [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 + 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: [1288, 724.0] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: 180 / 3.141592653589793 + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1336, 1180.0] + rotation: 0 + state: disabled - name: blocks_null_sink_0 id: blocks_null_sink parameters: @@ -153,9 +318,118 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1528, 216.0] + coordinate: [1504, 1696.0] + rotation: 0 + state: disabled +- name: blocks_null_sink_2 + 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: [528, 1720.0] + rotation: 0 + state: disabled +- name: blocks_null_sink_3 + id: blocks_null_sink + parameters: + affinity: '' + alias: '' + bus_structure_sink: '[[0,],]' + comment: '' + num_inputs: '1' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1336, 1232.0] rotation: 0 state: true +- name: blocks_null_source_0 + id: blocks_null_source + parameters: + affinity: '' + alias: '' + bus_structure_source: '[[0,],]' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + num_outputs: '1' + type: byte + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [96, 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: '[10, 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 +440,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: @@ -186,15 +460,56 @@ blocks: repeat: 'False' tags: '[]' type: byte - vector: ([0x00] * 10 + [0xaa, 0xff, 0x0a] + [0x00] * 10) * 20 + vector: testvec * 1600 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.000001' + maxoutbuf: '0' + minoutbuf: '0' + noise_voltage: '0.2' + seed: '243' + taps: -1.4 + .4j + 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 +526,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 +542,9 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1264, 212.0] + coordinate: [1232, 1692.0] rotation: 0 - state: true + state: disabled - name: digital_constellation_modulator_0 id: digital_constellation_modulator parameters: @@ -249,9 +564,29 @@ blocks: 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: access_code_symbols + threshold: '.8' + threshold_method: digital.THRESHOLD_DYNAMIC + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [776, 1020.0] + rotation: 0 + state: enabled - name: digital_pfb_clock_sync_xxx_0 id: digital_pfb_clock_sync_xxx parameters: @@ -272,9 +607,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,19 +620,339 @@ 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: [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: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: '"blue"' + color10: '"red"' + color2: '"red"' + color3: '"red"' + color4: '"red"' + color5: '"red"' + color6: '"red"' + color7: '"red"' + color8: '"red"' + color9: '"red"' + comment: '' + grid: 'False' + gui_hint: 0,1,2,1 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '0' + marker10: '0' + marker2: '0' + marker3: '0' + marker4: '0' + marker5: '0' + marker6: '0' + marker7: '0' + marker8: '0' + marker9: '0' + name: '"Equalized Signal"' + nconnections: '1' + size: '1024' + style1: '0' + style10: '0' + style2: '0' + style3: '0' + style4: '0' + style5: '0' + style6: '0' + style7: '0' + style8: '0' + style9: '0' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: complex + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + xmax: '2' + xmin: '-2' + ymax: '2' + ymin: '-2' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [776, 716.0] + rotation: 0 + state: enabled +- name: qtgui_const_sink_x_1 + id: qtgui_const_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '.5' + 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: '"red"' + color2: '"red"' + color3: '"red"' + color4: '"red"' + color5: '"red"' + color6: '"red"' + color7: '"red"' + color8: '"red"' + color9: '"red"' + comment: '' + grid: 'True' + gui_hint: 2,1,2,1 + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + 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' + style1: '2' + 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: [1048, 612.0] rotation: 0 state: enabled +- name: qtgui_const_sink_x_2 + id: qtgui_const_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: '"blue"' + color10: '"red"' + color2: '"red"' + color3: '"red"' + color4: '"red"' + color5: '"red"' + color6: '"red"' + color7: '"red"' + color8: '"red"' + color9: '"red"' + comment: '' + grid: 'False' + gui_hint: '2,1,2,1 ' + label1: '' + 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: @@ -313,7 +968,7 @@ blocks: alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' - autoscale: 'False' + autoscale: 'True' axislabels: 'True' color1: blue color10: dark blue @@ -326,7 +981,104 @@ blocks: color8: dark red color9: dark green comment: '' - ctrlpanel: 'True' + 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: '' @@ -384,17 +1136,114 @@ blocks: width7: '1' width8: '1' width9: '1' - ylabel: Amplitude - ymax: '50' + ylabel: XC Magnitude + ymax: '20' ymin: '0' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1792, 60.0] + coordinate: [1336, 1084.0] rotation: 0 - state: true + 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: @@ -423,7 +1272,7 @@ blocks: color8: dark red color9: dark green comment: '' - ctrlpanel: 'True' + ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' @@ -469,7 +1318,7 @@ blocks: tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' - type: complex + type: float update_time: '0.10' width1: '1' width10: '1' @@ -482,6 +1331,200 @@ blocks: width8: '1' width9: '1' ylabel: Amplitude + ymax: '20' + ymin: '-5' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [784, 1452.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 + label3: Signal 3 + label4: Signal 4 + label5: Signal 5 + label6: Signal 6 + label7: Signal 7 + label8: Signal 8 + label9: Signal 9 + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '""' + nconnections: '1' + size: '1024' + srate: samp_rate + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: complex + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Modulated + ymax: '2' + ymin: '-2' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [808, 452.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_1_1 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'True' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'True' + gui_hint: 1,0,1,1 + label1: Signal 1 + label10: Signal 10 + label2: Signal 2 + label3: Signal 3 + label4: Signal 4 + label5: Signal 5 + label6: Signal 6 + label7: Signal 7 + label8: Signal 8 + label9: Signal 9 + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '""' + nconnections: '1' + size: '1024' + srate: samp_rate + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: complex + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Equalized ymax: '2' ymin: '-2' yunit: '""' @@ -489,21 +1532,347 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [696, 108.0] + coordinate: [776, 612.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: [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: + 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: sps * samp_rate + 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_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: + alias: '' + comment: '' + stream_id: envelope + states: + bus_sink: false + bus_source: false + bus_structure: null + 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_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'] -- [digital_cma_equalizer_cc_0, '0', digital_constellation_decoder_cb_0, '0'] +- [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_0, '0', qtgui_time_sink_x_0_0, '0'] +- [blocks_complex_to_magphase_0_0, '1', blocks_multiply_const_vxx_0_0, '0'] +- [blocks_complex_to_magphase_0_0, '1', blocks_null_sink_3, '0'] +- [blocks_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_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_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', 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_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_mag_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 79fa3f8..376d061 100755 --- a/tests/correlator/correlator.py +++ b/tests/correlator/correlator.py @@ -26,6 +26,7 @@ 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 @@ -80,32 +81,143 @@ 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, 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.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 ################################################## - 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 None # parent ) - 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_2.set_update_time(0.10) + self.qtgui_time_sink_x_2.set_y_axis(-1, 1) - self.qtgui_time_sink_x_1.set_y_label('Amplitude', "") + self.qtgui_time_sink_x_2.set_y_label('XC Phase', "") - 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_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 + ) + 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_1.set_y_label('Equalized', "") + + 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(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) + + + 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_1.set_line_label(i, "Re{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_1_1.set_line_label(i, "Im{{Data {0}}}".format(i/2)) + else: + 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_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', @@ -125,19 +237,122 @@ 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_0.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_0.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_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 @@ -146,16 +361,16 @@ class correlator(gr.top_block, Qt.QWidget): None # parent ) 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, 20) - 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,10 +400,105 @@ 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_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 + "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) + 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, 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, @@ -198,28 +508,49 @@ class correlator(gr.top_block, Qt.QWidget): verbose=False, log=False, truncate=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.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_char*1) - self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1) + self.channels_channel_model_0 = channels.channel_model( + noise_voltage=0.2, + frequency_offset=0.000001, + epsilon=1.0, + taps=[-1.4 + .4j], + noise_seed=243, + block_tags=False) + 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, [10, len(testvec)]) + self.blocks_null_source_0 = blocks.null_source(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) ################################################## # 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.digital_cma_equalizer_cc_0, 0), (self.digital_constellation_decoder_cb_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_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_corr_est_cc_0, 0)) self.connect((self.digital_cma_equalizer_cc_0, 0), (self.fir_filter_xxx_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_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_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_mag_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): @@ -258,6 +589,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 * 1600, []) + def get_samp_rate(self): return self.samp_rate @@ -265,7 +603,11 @@ 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_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) def get_rrc_taps(self): return self.rrc_taps @@ -274,12 +616,31 @@ 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 + + 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 + |