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