osmo-tetra/src/demod/simdemod3.grc

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