mirror of https://gerrit.osmocom.org/osmo-tetra
499 lines
13 KiB
Plaintext
499 lines
13 KiB
Plaintext
options:
|
|
parameters:
|
|
author: Jacek Lipkowski SQ5BPF
|
|
catch_exceptions: 'True'
|
|
category: '[GRC Hier Blocks]'
|
|
cmake_opt: ''
|
|
comment: ''
|
|
copyright: ''
|
|
description: cqpsk demodulator for tetra. based on pi4dqpsk_rx.grc (by 'Luca
|
|
Bortolotti' @optiluca) from https://gitlab.com/larryth/tetra-kit/ . It is meant
|
|
as a replacement for simdemod2.py, taked the data from stdin, and dumpd demodulated
|
|
data to STDOUT. Also sends via UDP the information how much the signal is mistuned
|
|
(this option is disabled for the version committed to osmo-tetra)
|
|
gen_cmake: 'On'
|
|
gen_linking: dynamic
|
|
generate_options: no_gui
|
|
hier_block_src_path: '.:'
|
|
id: simdemod3
|
|
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: DQPSK demodulator for Telive, with the AFC packet sending option disabled
|
|
window_size: (1000,1000)
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [8, 8]
|
|
rotation: 0
|
|
state: enabled
|
|
|
|
blocks:
|
|
- name: TETRA_HACK_IP
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: os.getenv('TETRA_HACK_IP') if os.getenv('TETRA_HACK_IP') else "127.0.0.1"
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [304, 92.0]
|
|
rotation: 0
|
|
state: disabled
|
|
- name: TETRA_HACK_PORT
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: int(os.getenv('TETRA_HACK_PORT')) if os.getenv('TETRA_HACK_PORT') else
|
|
7379
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [416, 92.0]
|
|
rotation: 0
|
|
state: disabled
|
|
- name: TETRA_HACK_RXID
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: int(os.getenv('TETRA_HACK_RXID')) if os.getenv('TETRA_HACK_RXID') else
|
|
0
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [176, 92.0]
|
|
rotation: 0
|
|
state: disabled
|
|
- name: arity
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: '4'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [560, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: channel_rate
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: '36000'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [288, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: constel
|
|
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: '''auto'''
|
|
sym_map: '[0, 1, 3, 2]'
|
|
type: dqpsk
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [768, 452.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: decim
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: '32'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [808, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: nfilts
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: '32'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [400, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: rrc_taps
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), 0.35, 11*sps*nfilts)
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [640, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: samp_rate
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: '2000000'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [184, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: sps
|
|
id: variable
|
|
parameters:
|
|
comment: ''
|
|
value: '2'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [480, 12]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: variable_adaptive_algorithm_0
|
|
id: variable_adaptive_algorithm
|
|
parameters:
|
|
comment: ''
|
|
cons: constel
|
|
delta: '10.0'
|
|
ffactor: '0.99'
|
|
modulus: '1'
|
|
step_size: 10e-3
|
|
type: cma
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [904, 444.0]
|
|
rotation: 0
|
|
state: true
|
|
- name: Author_note
|
|
id: note
|
|
parameters:
|
|
alias: ''
|
|
comment: ''
|
|
note: 'This is originally part of the telive software: https://github.com/sq5bpf/telive '
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [8, 156.0]
|
|
rotation: 0
|
|
state: true
|
|
- name: analog_feedforward_agc_cc_0
|
|
id: analog_feedforward_agc_cc
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
num_samples: '8'
|
|
reference: '1'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [312, 220.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: blocks_file_descriptor_source_0
|
|
id: blocks_file_descriptor_source
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
fd: '0'
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
repeat: 'False'
|
|
type: complex
|
|
vlen: '1'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [112, 220.0]
|
|
rotation: 0
|
|
state: true
|
|
- name: blocks_null_sink_0
|
|
id: blocks_null_sink
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
bus_structure_sink: '[[0,],]'
|
|
comment: ''
|
|
num_inputs: '3'
|
|
type: float
|
|
vlen: '1'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [800, 224.0]
|
|
rotation: 0
|
|
state: true
|
|
- name: blocks_unpack_k_bits_bb_0
|
|
id: blocks_unpack_k_bits_bb
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
k: constel.bits_per_symbol()
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [752, 564.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: digital_constellation_decoder_cb_0
|
|
id: digital_constellation_decoder_cb
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
constellation: constel
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [576, 452.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: digital_diff_phasor_cc_0
|
|
id: digital_diff_phasor_cc
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [624, 356.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: digital_fll_band_edge_cc_0
|
|
id: digital_fll_band_edge_cc
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
filter_size: '45'
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
rolloff: '0.35'
|
|
samps_per_sym: sps
|
|
type: cc
|
|
w: cmath.pi/100.0
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [544, 192.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: digital_linear_equalizer_0
|
|
id: digital_linear_equalizer
|
|
parameters:
|
|
adapt_after_training: 'True'
|
|
affinity: ''
|
|
alg: variable_adaptive_algorithm_0
|
|
alias: ''
|
|
comment: ''
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
num_taps: '15'
|
|
sps: sps
|
|
training_sequence: '[ ]'
|
|
training_start_tag: corr_est
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [368, 360.0]
|
|
rotation: 0
|
|
state: true
|
|
- name: digital_map_bb_0
|
|
id: digital_map_bb
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
map: constel.pre_diff_code()
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [576, 564.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: digital_pfb_clock_sync_xxx_0
|
|
id: digital_pfb_clock_sync_xxx
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
filter_size: nfilts
|
|
init_phase: nfilts/2
|
|
loop_bw: 2*cmath.pi/100.0
|
|
max_dev: '1.5'
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
osps: sps
|
|
sps: sps
|
|
taps: rrc_taps
|
|
type: ccf
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [128, 344.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: import_0
|
|
id: import
|
|
parameters:
|
|
alias: ''
|
|
comment: ''
|
|
imports: import cmath
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [944, 12.0]
|
|
rotation: 0
|
|
state: enabled
|
|
- name: import_1
|
|
id: import
|
|
parameters:
|
|
alias: ''
|
|
comment: ''
|
|
imports: import os
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [1040, 12.0]
|
|
rotation: 0
|
|
state: true
|
|
- name: send_udp_to_telive
|
|
id: epy_block
|
|
parameters:
|
|
_source_code: "\"\"\"\nEmbedded Python Blocks:\n\nEach time this file is saved,\
|
|
\ GRC will instantiate the first class it finds\nto get ports and parameters\
|
|
\ of your block. The arguments to __init__ will\nbe the parameters. All of\
|
|
\ them are required to have default values!\n\"\"\"\n\nimport numpy as np\n\
|
|
from gnuradio import gr\nimport socket\n\nclass blk(gr.sync_block): # other\
|
|
\ base classes are basic_block, decim_block, interp_block\n \"\"\"Embedded\
|
|
\ Python Block - periodically send UDP packet to telive\"\"\"\n\n def __init__(self,\
|
|
\ ntimes=10, rxid=0, port=7379, ip=\"127.0.0.1\",scaling=10): # only default\
|
|
\ arguments here\n \"\"\"arguments to this function show up as parameters\
|
|
\ in GRC\"\"\"\n gr.sync_block.__init__(\n self,\n \
|
|
\ name='Send UDP messages to telive', # will show up in GRC\n \
|
|
\ in_sig=[np.float32],\n out_sig=None\n )\n # if\
|
|
\ an attribute with the same name as a parameter is found,\n # a callback\
|
|
\ is registered (properties work, too).\n self.sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)\n\
|
|
\ self.counter=0\n self.ntimes=ntimes\n self.tetra_hack_rxid=int(rxid)\n\
|
|
\ self.tetra_hack_ip=str(ip)\n self.tetra_hack_port=int(port)\n\
|
|
\ self.tetra_hack_scaling=scaling\n \n \n\n def work(self,\
|
|
\ input_items, output_items):\n \"\"\"example: multiply with constant\"\
|
|
\"\"\n self.counter=(self.counter+1)%self.ntimes\n if self.counter==0:\n\
|
|
\ mmm=\"TETMON_begin FUNC:AFCVAL AFC:%i RX:%i TETMON_end\" % ( int\
|
|
\ (input_items[0][0] * self.tetra_hack_scaling * - 1.0), self.tetra_hack_rxid)\n\
|
|
\ message=bytes(mmm, \"utf-8\")\n self.sock.sendto(message,\
|
|
\ (self.tetra_hack_ip, self.tetra_hack_port))\n return len(input_items\
|
|
\ [0])\n"
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
ip: TETRA_HACK_IP
|
|
maxoutbuf: '0'
|
|
minoutbuf: '0'
|
|
ntimes: '5'
|
|
port: TETRA_HACK_PORT
|
|
rxid: TETRA_HACK_RXID
|
|
scaling: '100'
|
|
states:
|
|
_io_cache: ('Send UDP messages to telive', 'blk', [('ntimes', '10'), ('rxid',
|
|
'0'), ('port', '7379'), ('ip', "'127.0.0.1'"), ('scaling', '10')], [('0', 'float',
|
|
1)], [], 'Embedded Python Block - periodically send UDP packet to telive', ['ntimes'])
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [960, 140.0]
|
|
rotation: 0
|
|
state: disabled
|
|
- name: stdout_sink
|
|
id: blocks_file_descriptor_sink
|
|
parameters:
|
|
affinity: ''
|
|
alias: ''
|
|
comment: ''
|
|
fd: '1'
|
|
type: byte
|
|
vlen: '1'
|
|
states:
|
|
bus_sink: false
|
|
bus_source: false
|
|
bus_structure: null
|
|
coordinate: [960, 564.0]
|
|
rotation: 0
|
|
state: true
|
|
|
|
connections:
|
|
- [analog_feedforward_agc_cc_0, '0', digital_fll_band_edge_cc_0, '0']
|
|
- [blocks_file_descriptor_source_0, '0', analog_feedforward_agc_cc_0, '0']
|
|
- [blocks_unpack_k_bits_bb_0, '0', stdout_sink, '0']
|
|
- [digital_constellation_decoder_cb_0, '0', digital_map_bb_0, '0']
|
|
- [digital_diff_phasor_cc_0, '0', digital_constellation_decoder_cb_0, '0']
|
|
- [digital_fll_band_edge_cc_0, '0', digital_pfb_clock_sync_xxx_0, '0']
|
|
- [digital_fll_band_edge_cc_0, '1', blocks_null_sink_0, '0']
|
|
- [digital_fll_band_edge_cc_0, '1', send_udp_to_telive, '0']
|
|
- [digital_fll_band_edge_cc_0, '2', blocks_null_sink_0, '1']
|
|
- [digital_fll_band_edge_cc_0, '3', blocks_null_sink_0, '2']
|
|
- [digital_linear_equalizer_0, '0', digital_diff_phasor_cc_0, '0']
|
|
- [digital_map_bb_0, '0', blocks_unpack_k_bits_bb_0, '0']
|
|
- [digital_pfb_clock_sync_xxx_0, '0', digital_linear_equalizer_0, '0']
|
|
|
|
metadata:
|
|
file_format: 1
|
|
grc_version: 3.10.5.1
|