Compare commits
5 Commits
70b88d356a
...
0489d8fc31
| Author | SHA1 | Date | |
|---|---|---|---|
| 0489d8fc31 | |||
| 0fcda39647 | |||
| 7d24b056d5 | |||
| 0bcf1e79e8 | |||
| 98215f94b8 |
97
hamming_7_4_codec.py
Normal file
97
hamming_7_4_codec.py
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
import numpy as np
|
||||||
|
import numpy.typing as npt
|
||||||
|
|
||||||
|
GEN_MATRIX = np.asarray([(1, 1, 1, 0, 0, 0, 0),
|
||||||
|
(1, 0, 0, 1, 1, 0, 0),
|
||||||
|
(0, 1, 0, 1, 0, 1, 0),
|
||||||
|
(1, 1, 0, 1, 0, 0, 1),
|
||||||
|
])
|
||||||
|
PARITY_MATRIX = np.asarray([(0, 0, 0, 1, 1, 1, 1),
|
||||||
|
(0, 1, 1, 0, 0, 1, 1),
|
||||||
|
(1, 0, 1, 0, 1, 0, 1),
|
||||||
|
])
|
||||||
|
DECODER_MATRIX = np.asarray([(0, 0, 1, 0, 0, 0, 0,),
|
||||||
|
(0, 0, 0, 0, 1, 0, 0,),
|
||||||
|
(0, 0, 0, 0, 0, 1, 0,),
|
||||||
|
(0, 0, 0, 0, 0, 0, 1,),
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def number_to_list(number: int, N: int) -> npt.NDArray:
|
||||||
|
"""Return the last N bits of a number as an MSB-first array"""
|
||||||
|
return np.array([(number >> (N-1-i)) % 2 for i in range(0, N)])
|
||||||
|
|
||||||
|
|
||||||
|
def list_to_number(array: npt.NDArray, N: int) -> int:
|
||||||
|
"""Reconstruct a number from the first N elements of an MSB-first array"""
|
||||||
|
output = 0
|
||||||
|
for i in range(0, N):
|
||||||
|
output += array[i] << (N-1-i)
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def encode_nibble(data: int) -> int:
|
||||||
|
"""Encode the lower 4 bits of data as hamming(7,4)"""
|
||||||
|
data_asarr = number_to_list(data, 4)
|
||||||
|
output_asarr = (data_asarr @ GEN_MATRIX) % 2
|
||||||
|
return list_to_number(output_asarr, 7)
|
||||||
|
|
||||||
|
|
||||||
|
def hamming_7_4_encode(data: list[int]) -> list[int]:
|
||||||
|
"""Encode a list of ints using Hamming(7,4)
|
||||||
|
The returned list is twice as long as the list in the argument"""
|
||||||
|
data_encoded = []
|
||||||
|
for element in data:
|
||||||
|
data_encoded += [encode_nibble(element >> 4),
|
||||||
|
encode_nibble(element % 16)]
|
||||||
|
return data_encoded
|
||||||
|
|
||||||
|
|
||||||
|
def decode_nibble(data: int) -> int:
|
||||||
|
"""decode a single nibble using the parity check matrix of Hamming(7,4).
|
||||||
|
This should correct 2 errors maximum."""
|
||||||
|
data_asarr = number_to_list(data, 7)
|
||||||
|
syndrome = (PARITY_MATRIX @ data_asarr) % 2
|
||||||
|
error = list_to_number(syndrome, 3)
|
||||||
|
if error == 0:
|
||||||
|
return list_to_number(data_asarr, 4)
|
||||||
|
data_asarr[error - 1] ^= 1
|
||||||
|
data_decoded = (DECODER_MATRIX @ data_asarr) % 2
|
||||||
|
return list_to_number(data_decoded, 4)
|
||||||
|
|
||||||
|
|
||||||
|
def hamming_7_4_decode(data: list[int]) -> list[int]:
|
||||||
|
"""Decode a list of ints using Hamming(7,4)
|
||||||
|
The returned list is half as long as the list in the argument"""
|
||||||
|
return [(decode_nibble(data[i]) << 4) + (decode_nibble(data[i + 1])) for i in range(0, len(data), 2)]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
msg = 'TEST DE HA5PLS'
|
||||||
|
data_in = [byte for byte in bytearray(msg.encode())]
|
||||||
|
data_encoded = hamming_7_4_encode(data_in)
|
||||||
|
print(f"Data sent: {msg}")
|
||||||
|
|
||||||
|
data_corrupted_1bit = [data ^ (1 << (idx % 7))
|
||||||
|
for idx, data in enumerate(data_encoded)]
|
||||||
|
# print(f"Corrupt data with 1-bit errors: {data_corrupted_1bit}")
|
||||||
|
data_corrected_1bit = hamming_7_4_decode(data_corrupted_1bit)
|
||||||
|
data_corrected_1bit_str = [int.to_bytes(int(i), 1, "big").decode(
|
||||||
|
encoding="utf-8", errors="ignore") for i in data_corrected_1bit]
|
||||||
|
print(f"Recovered data from 1-bit errors: {data_corrected_1bit_str}")
|
||||||
|
|
||||||
|
data_corrupted_2bit = [data ^ (5 << (idx % 7))
|
||||||
|
for idx, data in enumerate(data_encoded)]
|
||||||
|
# print(f"Corrupt data with 2-bit errors: {data_corrupted_2bit}")
|
||||||
|
data_corrected_2bit = hamming_7_4_decode(data_corrupted_2bit)
|
||||||
|
data_corrected_2bit_str = [int.to_bytes(int(i), 1, "big").decode(
|
||||||
|
encoding="utf-8", errors="ignore") for i in data_corrected_2bit]
|
||||||
|
print(f"Recovered data from 1-bit errors: {data_corrected_2bit_str}")
|
||||||
|
|
||||||
|
data_corrupted_3bit = [data ^ (7 << (idx % 7))
|
||||||
|
for idx, data in enumerate(data_encoded)]
|
||||||
|
# print(f"Corrupt data with 3-bit errors: {data_corrupted_3bit}")
|
||||||
|
data_corrected_3bit = hamming_7_4_decode(data_corrupted_3bit)
|
||||||
|
data_corrected_3bit_str = [int.to_bytes(int(i), 1, "big").decode(
|
||||||
|
encoding="utf-8", errors="ignore") for i in data_corrected_3bit]
|
||||||
|
print(f"Recovered data from 1-bit errors: {data_corrected_3bit_str}")
|
||||||
65
header.py
Normal file
65
header.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
from hamming_8_4_codec import hamming_8_4_encode, hamming_8_4_decode
|
||||||
|
from crc import Configuration, Crc16
|
||||||
|
PROTOCOL_IDENTIFIER = 0x0
|
||||||
|
# CRC_POLY = (0xed2f << 1) + 1 # from https://users.ece.cmu.edu/~koopman/crc/index.html as "best 16-bit CRC" on 2025-10-24
|
||||||
|
ONBEAT_CRC = Configuration(Crc16.IBM_3740)
|
||||||
|
|
||||||
|
|
||||||
|
class Onbeat_Header:
|
||||||
|
"""This class represents a header for a single packet of PLSTV."""
|
||||||
|
|
||||||
|
def __init__(self, protocol_id, protocol_configuration: int, callsign: str, pkt_len: int, pkt_sequence_id: int):
|
||||||
|
if protocol_id >= 2 << 4:
|
||||||
|
raise OverflowError(
|
||||||
|
f"protocol identifier should be confined to 4 bits, got {protocol_id}")
|
||||||
|
self.protocol_id = protocol_id
|
||||||
|
|
||||||
|
if protocol_configuration >= 2 << 4:
|
||||||
|
raise OverflowError(
|
||||||
|
f"protocol configuration should be confined to 4 bits, got {protocol_configuration}")
|
||||||
|
self.protocol_configuration = protocol_configuration
|
||||||
|
|
||||||
|
call_len = len(callsign.encode())
|
||||||
|
if call_len >= 10:
|
||||||
|
raise OverflowError(
|
||||||
|
f"Callsign must be confined to 10 bytes, got {callsign} with length {call_len} (using UTF-8)")
|
||||||
|
self.callsign = callsign
|
||||||
|
|
||||||
|
if pkt_len >= 2 << 16:
|
||||||
|
raise OverflowError(
|
||||||
|
f"Maximum allowed packet size is {2 << 16 - 1} got {pkt_len}")
|
||||||
|
self.pkt_len = pkt_len
|
||||||
|
|
||||||
|
if pkt_sequence_id >= 2 << 8:
|
||||||
|
raise OverflowError(
|
||||||
|
f"Packet sequence ID must be confined to 8 bits, got {pkt_sequence_id}")
|
||||||
|
self.pkt_sequence_id = pkt_sequence_id
|
||||||
|
|
||||||
|
def encode(self) -> list[int]:
|
||||||
|
header_asints = []
|
||||||
|
header_asints += [(PROTOCOL_IDENTIFIER << 4) +
|
||||||
|
self.protocol_configuration]
|
||||||
|
header_asints += [(int.from_bytes(self.callsign.encode())
|
||||||
|
>> 8*i) % 2 << 8 for i in range(0, 10)]
|
||||||
|
header_asints += [(self.pkt_len >> 8), self.pkt_len % 2 << 8]
|
||||||
|
header_asints += [self.pkt_sequence_id]
|
||||||
|
header_crc = ONBEAT_CRC.checksum(bytes(header_asints))
|
||||||
|
header_asints += [header_crc]
|
||||||
|
return hamming_8_4_encode(header_asints)
|
||||||
|
|
||||||
|
def decode(self, header_encoded: list[int]):
|
||||||
|
header_corrected = hamming_8_4_decode(header_encoded)
|
||||||
|
checksum = ONBEAT_CRC.checksum(
|
||||||
|
bytes(header_corrected[14] << 8 + header_corrected[15]))
|
||||||
|
if checksum != 0:
|
||||||
|
raise ValueError(
|
||||||
|
"Checksum of header is non-zero, packet is invalid")
|
||||||
|
self.protocol_id = header_corrected[0] >> 4
|
||||||
|
self.protocol_configuration = header_corrected[0] % 16
|
||||||
|
callsign_numeric = 0
|
||||||
|
for i in range(1, 11):
|
||||||
|
callsign_numeric += header_corrected[i]
|
||||||
|
callsign_numeric <<= 8
|
||||||
|
self.callsign = int.to_bytes(callsign_numeric, byteorder="big").decode()
|
||||||
|
self.pkt_len = header_corrected[11] << 8 + header_corrected[12]
|
||||||
|
self.pkt_sequence_id = header_corrected[13]
|
||||||
880
hier_blocks/ONBEAT_demod.grc
Normal file
880
hier_blocks/ONBEAT_demod.grc
Normal file
@@ -0,0 +1,880 @@
|
|||||||
|
options:
|
||||||
|
parameters:
|
||||||
|
author: HA5PLS
|
||||||
|
catch_exceptions: 'True'
|
||||||
|
category: '[ONBEAT]'
|
||||||
|
cmake_opt: ''
|
||||||
|
comment: ''
|
||||||
|
copyright: GPL 3.0 or later
|
||||||
|
description: Hier block for demod of ONBEAT
|
||||||
|
gen_cmake: 'On'
|
||||||
|
gen_linking: dynamic
|
||||||
|
generate_options: hb
|
||||||
|
hier_block_src_path: '.:'
|
||||||
|
id: ONBEAT_Demod
|
||||||
|
max_nouts: '0'
|
||||||
|
output_language: python
|
||||||
|
placement: (0,0)
|
||||||
|
qt_qss_theme: ''
|
||||||
|
realtime_scheduling: ''
|
||||||
|
run: 'True'
|
||||||
|
run_command: '{python} -u {filename}'
|
||||||
|
run_options: prompt
|
||||||
|
sizing_mode: fixed
|
||||||
|
thread_safe_setters: ''
|
||||||
|
title: ONBEAT Demod
|
||||||
|
window_size: (1000,1000)
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [8, 8]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
blocks:
|
||||||
|
- name: QPSK_MAP
|
||||||
|
id: variable_constellation_rect
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]'
|
||||||
|
imag_sect: '2'
|
||||||
|
precision: '8'
|
||||||
|
real_sect: '2'
|
||||||
|
rot_sym: '4'
|
||||||
|
soft_dec_lut: None
|
||||||
|
sym_map: symbol_map
|
||||||
|
w_imag_sect: '1'
|
||||||
|
w_real_sect: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [192, 12.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: FULL_PACKET_LEN
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '4096'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [664, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: OVERSAMPLING
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: intx
|
||||||
|
value: '10'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [448, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: RRC_ALPHA
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '0.35'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [568, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: analog_agc_xx_0
|
||||||
|
id: analog_agc_xx
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
gain: '1.0'
|
||||||
|
max_gain: '65536'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
rate: 1e-4
|
||||||
|
reference: '1.0'
|
||||||
|
type: complex
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [152, 232.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_multiply_const_xx_0
|
||||||
|
id: blocks_multiply_const_xx
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
const: 1j
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [48, 592.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_multiply_const_xx_0_0
|
||||||
|
id: blocks_multiply_const_xx
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
const: '-1'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [48, 680.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_multiply_const_xx_0_1
|
||||||
|
id: blocks_multiply_const_xx
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
const: -1j
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [48, 768.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_repack_bits_bb_0_0_0
|
||||||
|
id: blocks_repack_bits_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
align_output: 'False'
|
||||||
|
comment: ''
|
||||||
|
endianness: gr.GR_MSB_FIRST
|
||||||
|
k: '2'
|
||||||
|
l: '1'
|
||||||
|
len_tag_key: '""'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 584.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_repack_bits_bb_0_1_0
|
||||||
|
id: blocks_repack_bits_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
align_output: 'False'
|
||||||
|
comment: ''
|
||||||
|
endianness: gr.GR_MSB_FIRST
|
||||||
|
k: '2'
|
||||||
|
l: '1'
|
||||||
|
len_tag_key: '""'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 672.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_repack_bits_bb_0_2_0
|
||||||
|
id: blocks_repack_bits_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
align_output: 'False'
|
||||||
|
comment: ''
|
||||||
|
endianness: gr.GR_MSB_FIRST
|
||||||
|
k: '2'
|
||||||
|
l: '1'
|
||||||
|
len_tag_key: '""'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 760.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_repack_bits_bb_0_3
|
||||||
|
id: blocks_repack_bits_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
align_output: 'False'
|
||||||
|
comment: ''
|
||||||
|
endianness: gr.GR_MSB_FIRST
|
||||||
|
k: '2'
|
||||||
|
l: '1'
|
||||||
|
len_tag_key: '""'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 496.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_tag_debug_0
|
||||||
|
id: blocks_tag_debug
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
display: 'True'
|
||||||
|
filter: '""'
|
||||||
|
name: ''
|
||||||
|
num_inputs: '4'
|
||||||
|
type: byte
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1064.0, 896]
|
||||||
|
rotation: 270
|
||||||
|
state: disabled
|
||||||
|
- name: digital_constellation_decoder_cb_0
|
||||||
|
id: digital_constellation_decoder_cb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
constellation: QPSK_MAP
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [240, 504.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_constellation_decoder_cb_0_0
|
||||||
|
id: digital_constellation_decoder_cb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
constellation: QPSK_MAP
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [240, 592.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_constellation_decoder_cb_0_1
|
||||||
|
id: digital_constellation_decoder_cb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
constellation: QPSK_MAP
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [240, 680.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_constellation_decoder_cb_0_2
|
||||||
|
id: digital_constellation_decoder_cb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
constellation: QPSK_MAP
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [240, 768.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_correlate_access_code_tag_xx_0
|
||||||
|
id: digital_correlate_access_code_tag_xx
|
||||||
|
parameters:
|
||||||
|
access_code: syncword
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
tagname: '"syncword_found"'
|
||||||
|
threshold: int(len(syncword)*(1-roc_tolerance))
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [832, 488.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_correlate_access_code_tag_xx_0_0
|
||||||
|
id: digital_correlate_access_code_tag_xx
|
||||||
|
parameters:
|
||||||
|
access_code: syncword
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
tagname: '"syncword_found"'
|
||||||
|
threshold: int(len(syncword)*(1-roc_tolerance))
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [832, 576.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_correlate_access_code_tag_xx_0_1
|
||||||
|
id: digital_correlate_access_code_tag_xx
|
||||||
|
parameters:
|
||||||
|
access_code: syncword
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
tagname: '"syncword_found"'
|
||||||
|
threshold: int(len(syncword)*(1-roc_tolerance))
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [832, 664.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_correlate_access_code_tag_xx_0_2
|
||||||
|
id: digital_correlate_access_code_tag_xx
|
||||||
|
parameters:
|
||||||
|
access_code: syncword
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
tagname: '"syncword_found"'
|
||||||
|
threshold: int(len(syncword)*(1-roc_tolerance))
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [832, 752.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_costas_loop_cc_0
|
||||||
|
id: digital_costas_loop_cc
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
order: '4'
|
||||||
|
use_snr: 'False'
|
||||||
|
w: '0.045'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1008, 184.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_map_bb_0
|
||||||
|
id: digital_map_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
map: symbol_map
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [464, 504.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_map_bb_0_0
|
||||||
|
id: digital_map_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
map: symbol_map
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [464, 592.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_map_bb_0_1
|
||||||
|
id: digital_map_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
map: symbol_map
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [464, 680.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_map_bb_0_2
|
||||||
|
id: digital_map_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
map: symbol_map
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [464, 768.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_symbol_sync_xx_0
|
||||||
|
id: digital_symbol_sync_xx
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
constellation: digital.constellation_bpsk().base()
|
||||||
|
damping: '1.0'
|
||||||
|
loop_bw: '0.045'
|
||||||
|
max_dev: '1.5'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
nfilters: '64'
|
||||||
|
osps: '1'
|
||||||
|
pfb_mf_taps: '[]'
|
||||||
|
resamp_type: digital.IR_MMSE_8TAP
|
||||||
|
sps: '2'
|
||||||
|
ted_gain: '1.0'
|
||||||
|
ted_type: digital.TED_GARDNER
|
||||||
|
type: cc
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 196.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: filter_fft_rrc_filter_0
|
||||||
|
id: filter_fft_rrc_filter
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
alpha: RRC_ALPHA
|
||||||
|
comment: ''
|
||||||
|
decim: OVERSAMPLING//2
|
||||||
|
gain: '1'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
ntaps: 11*OVERSAMPLING
|
||||||
|
nthreads: '1'
|
||||||
|
samp_rate: samp_rate
|
||||||
|
sym_rate: samp_rate/OVERSAMPLING
|
||||||
|
type: ccc
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [352, 204.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: pad_sink_0
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: freq_sync_out
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'True'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1216.0, 344]
|
||||||
|
rotation: 270
|
||||||
|
state: enabled
|
||||||
|
- name: pad_sink_1
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: symbol_sync_out
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'True'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [928.0, 336]
|
||||||
|
rotation: 270
|
||||||
|
state: enabled
|
||||||
|
- name: pad_sink_2
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: RRC_out
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'True'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [560.0, 376]
|
||||||
|
rotation: 270
|
||||||
|
state: enabled
|
||||||
|
- name: pad_sink_3
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: agc_out
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'True'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [296.0, 376]
|
||||||
|
rotation: 270
|
||||||
|
state: disabled
|
||||||
|
- name: pad_sink_4
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: out
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'False'
|
||||||
|
type: message
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1528, 632.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: pad_source_0
|
||||||
|
id: pad_source
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: in
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'False'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [8, 256.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: roc_tolerance
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1000, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: samp_rate
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: 1e6
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [352, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: satellites_fixedlen_to_pdu_0
|
||||||
|
id: satellites_fixedlen_to_pdu
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
pack: 'True'
|
||||||
|
packet_len: FULL_PACKET_LEN
|
||||||
|
syncword_tag: '"syncword_found"'
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1208, 488.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: satellites_fixedlen_to_pdu_0_0
|
||||||
|
id: satellites_fixedlen_to_pdu
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
pack: 'True'
|
||||||
|
packet_len: FULL_PACKET_LEN
|
||||||
|
syncword_tag: '"syncword_found"'
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1208, 576.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: satellites_fixedlen_to_pdu_0_1
|
||||||
|
id: satellites_fixedlen_to_pdu
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
pack: 'True'
|
||||||
|
packet_len: FULL_PACKET_LEN
|
||||||
|
syncword_tag: '"syncword_found"'
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1208, 664.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: satellites_fixedlen_to_pdu_0_2
|
||||||
|
id: satellites_fixedlen_to_pdu
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
pack: 'True'
|
||||||
|
packet_len: FULL_PACKET_LEN
|
||||||
|
syncword_tag: '"syncword_found"'
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1208, 752.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: symbol_map
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: ''
|
||||||
|
value: '[0, 1, 3, 2]'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [352, 96.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: syncword
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: ''
|
||||||
|
value: '"0000011100001001000110110010110101110111100110001010100111111010"'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [824, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: virtual_sink_0
|
||||||
|
id: virtual_sink
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
stream_id: freq_sync_signal
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1304, 176.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: virtual_source_0
|
||||||
|
id: virtual_source
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
stream_id: freq_sync_signal
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [8, 504.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
connections:
|
||||||
|
- [analog_agc_xx_0, '0', filter_fft_rrc_filter_0, '0']
|
||||||
|
- [analog_agc_xx_0, '0', pad_sink_3, '0']
|
||||||
|
- [blocks_multiply_const_xx_0, '0', digital_constellation_decoder_cb_0_0, '0']
|
||||||
|
- [blocks_multiply_const_xx_0_0, '0', digital_constellation_decoder_cb_0_1, '0']
|
||||||
|
- [blocks_multiply_const_xx_0_1, '0', digital_constellation_decoder_cb_0_2, '0']
|
||||||
|
- [blocks_repack_bits_bb_0_0_0, '0', digital_correlate_access_code_tag_xx_0_0, '0']
|
||||||
|
- [blocks_repack_bits_bb_0_1_0, '0', digital_correlate_access_code_tag_xx_0_1, '0']
|
||||||
|
- [blocks_repack_bits_bb_0_2_0, '0', digital_correlate_access_code_tag_xx_0_2, '0']
|
||||||
|
- [blocks_repack_bits_bb_0_3, '0', digital_correlate_access_code_tag_xx_0, '0']
|
||||||
|
- [digital_constellation_decoder_cb_0, '0', digital_map_bb_0, '0']
|
||||||
|
- [digital_constellation_decoder_cb_0_0, '0', digital_map_bb_0_0, '0']
|
||||||
|
- [digital_constellation_decoder_cb_0_1, '0', digital_map_bb_0_1, '0']
|
||||||
|
- [digital_constellation_decoder_cb_0_2, '0', digital_map_bb_0_2, '0']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0, '0', blocks_tag_debug_0, '3']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0, '0', satellites_fixedlen_to_pdu_0, '0']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0_0, '0', blocks_tag_debug_0, '2']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0_0, '0', satellites_fixedlen_to_pdu_0_0,
|
||||||
|
'0']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0_1, '0', blocks_tag_debug_0, '1']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0_1, '0', satellites_fixedlen_to_pdu_0_1,
|
||||||
|
'0']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0_2, '0', blocks_tag_debug_0, '0']
|
||||||
|
- [digital_correlate_access_code_tag_xx_0_2, '0', satellites_fixedlen_to_pdu_0_2,
|
||||||
|
'0']
|
||||||
|
- [digital_costas_loop_cc_0, '0', pad_sink_0, '0']
|
||||||
|
- [digital_costas_loop_cc_0, '0', virtual_sink_0, '0']
|
||||||
|
- [digital_map_bb_0, '0', blocks_repack_bits_bb_0_3, '0']
|
||||||
|
- [digital_map_bb_0_0, '0', blocks_repack_bits_bb_0_0_0, '0']
|
||||||
|
- [digital_map_bb_0_1, '0', blocks_repack_bits_bb_0_1_0, '0']
|
||||||
|
- [digital_map_bb_0_2, '0', blocks_repack_bits_bb_0_2_0, '0']
|
||||||
|
- [digital_symbol_sync_xx_0, '0', digital_costas_loop_cc_0, '0']
|
||||||
|
- [digital_symbol_sync_xx_0, '0', pad_sink_1, '0']
|
||||||
|
- [filter_fft_rrc_filter_0, '0', digital_symbol_sync_xx_0, '0']
|
||||||
|
- [filter_fft_rrc_filter_0, '0', pad_sink_2, '0']
|
||||||
|
- [pad_source_0, '0', analog_agc_xx_0, '0']
|
||||||
|
- [satellites_fixedlen_to_pdu_0, pdus, pad_sink_4, in]
|
||||||
|
- [satellites_fixedlen_to_pdu_0_0, pdus, pad_sink_4, in]
|
||||||
|
- [satellites_fixedlen_to_pdu_0_1, pdus, pad_sink_4, in]
|
||||||
|
- [satellites_fixedlen_to_pdu_0_2, pdus, pad_sink_4, in]
|
||||||
|
- [virtual_source_0, '0', blocks_multiply_const_xx_0, '0']
|
||||||
|
- [virtual_source_0, '0', blocks_multiply_const_xx_0_0, '0']
|
||||||
|
- [virtual_source_0, '0', blocks_multiply_const_xx_0_1, '0']
|
||||||
|
- [virtual_source_0, '0', digital_constellation_decoder_cb_0, '0']
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
file_format: 1
|
||||||
|
grc_version: 3.10.11.0
|
||||||
397
hier_blocks/ONBEAT_mod.grc
Normal file
397
hier_blocks/ONBEAT_mod.grc
Normal file
@@ -0,0 +1,397 @@
|
|||||||
|
options:
|
||||||
|
parameters:
|
||||||
|
author: HA5PLS
|
||||||
|
catch_exceptions: 'True'
|
||||||
|
category: '[ONBEAT]'
|
||||||
|
cmake_opt: ''
|
||||||
|
comment: ''
|
||||||
|
copyright: GPL 3.0 or later
|
||||||
|
description: Hier block for modulation of ONBEAT
|
||||||
|
gen_cmake: 'On'
|
||||||
|
gen_linking: dynamic
|
||||||
|
generate_options: hb
|
||||||
|
hier_block_src_path: '.:'
|
||||||
|
id: ONBEAT_Mod
|
||||||
|
max_nouts: '0'
|
||||||
|
output_language: python
|
||||||
|
placement: (0,0)
|
||||||
|
qt_qss_theme: ''
|
||||||
|
realtime_scheduling: ''
|
||||||
|
run: 'True'
|
||||||
|
run_command: '{python} -u {filename}'
|
||||||
|
run_options: prompt
|
||||||
|
sizing_mode: fixed
|
||||||
|
thread_safe_setters: ''
|
||||||
|
title: ONBEAT Mod
|
||||||
|
window_size: (1000,1000)
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [8, 8]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
blocks:
|
||||||
|
- name: QPSK_MAP
|
||||||
|
id: variable_constellation_rect
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]'
|
||||||
|
imag_sect: '2'
|
||||||
|
precision: '8'
|
||||||
|
real_sect: '2'
|
||||||
|
rot_sym: '4'
|
||||||
|
soft_dec_lut: None
|
||||||
|
sym_map: '[0, 1, 3, 2]'
|
||||||
|
w_imag_sect: '1'
|
||||||
|
w_real_sect: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1104, 20.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: preamble_len
|
||||||
|
id: variable_tag_object
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
key: pmt.intern("packet_len")
|
||||||
|
offset: '0'
|
||||||
|
src: pmt.intern("src")
|
||||||
|
value: pmt.from_long(len(preamble))
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [64, 184.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: syncword_len
|
||||||
|
id: variable_tag_object
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
key: pmt.intern("packet_len")
|
||||||
|
offset: '0'
|
||||||
|
src: pmt.intern("src")
|
||||||
|
value: pmt.from_long((len(syncword)+7)//8)
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [64, 304.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: trailer_len
|
||||||
|
id: variable_tag_object
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
key: pmt.intern("packet_len")
|
||||||
|
offset: '0'
|
||||||
|
src: pmt.intern("src")
|
||||||
|
value: pmt.from_long(64)
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [168, 504.0]
|
||||||
|
rotation: 0
|
||||||
|
state: disabled
|
||||||
|
- name: OVERSAMPLING
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: intx
|
||||||
|
value: '10'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [248, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: RRC_ALPHA
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '0.35'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [368, 8.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_repack_bits_bb_1_0
|
||||||
|
id: blocks_repack_bits_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
align_output: 'False'
|
||||||
|
comment: ''
|
||||||
|
endianness: gr.GR_MSB_FIRST
|
||||||
|
k: '1'
|
||||||
|
l: '8'
|
||||||
|
len_tag_key: '""'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [352, 312.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_repack_bits_bb_1_0_0
|
||||||
|
id: blocks_repack_bits_bb
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
align_output: 'False'
|
||||||
|
comment: ''
|
||||||
|
endianness: gr.GR_MSB_FIRST
|
||||||
|
k: '1'
|
||||||
|
l: '8'
|
||||||
|
len_tag_key: '""'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [456, 512.0]
|
||||||
|
rotation: 0
|
||||||
|
state: disabled
|
||||||
|
- name: blocks_tagged_stream_mux_0
|
||||||
|
id: blocks_tagged_stream_mux
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
lengthtagname: packet_len
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
ninputs: '3'
|
||||||
|
tag_preserve_head_pos: '0'
|
||||||
|
type: byte
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [848, 296.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_vector_source_x_0_0
|
||||||
|
id: blocks_vector_source_x
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
repeat: 'True'
|
||||||
|
tags: '[preamble_len]'
|
||||||
|
type: byte
|
||||||
|
vector: preamble
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [168, 216.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_vector_source_x_0_0_0
|
||||||
|
id: blocks_vector_source_x
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
repeat: 'True'
|
||||||
|
tags: '[syncword_len]'
|
||||||
|
type: byte
|
||||||
|
vector: '[int(i) for i in syncword]'
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [168, 304.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_vector_source_x_0_0_0_0
|
||||||
|
id: blocks_vector_source_x
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
repeat: 'True'
|
||||||
|
tags: '[trailer_len]'
|
||||||
|
type: byte
|
||||||
|
vector: preamble
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [272, 504.0]
|
||||||
|
rotation: 0
|
||||||
|
state: disabled
|
||||||
|
- name: data_len
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: ''
|
||||||
|
value: '1024'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [976, 24.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: digital_constellation_modulator_0
|
||||||
|
id: digital_constellation_modulator
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
constellation: QPSK_MAP
|
||||||
|
differential: 'False'
|
||||||
|
excess_bw: RRC_ALPHA
|
||||||
|
log: 'False'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
samples_per_symbol: OVERSAMPLING
|
||||||
|
truncate: 'False'
|
||||||
|
verbose: 'False'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1088, 296.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: pad_sink_0
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: out
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'False'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1352, 320.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: pad_sink_0_0
|
||||||
|
id: pad_sink
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: dbg
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'True'
|
||||||
|
type: byte
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [576, 136.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: pad_source_0
|
||||||
|
id: pad_source
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
label: in
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
num_streams: '1'
|
||||||
|
optional: 'False'
|
||||||
|
type: byte
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [288, 416.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: preamble
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: ''
|
||||||
|
value: '[0x33 for i in range(0, 128*2, 8)]'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [808, 24.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: syncword
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: ''
|
||||||
|
value: '"0000011100001001000110110010110101110111100110001010100111111010"'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [608, 24.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
connections:
|
||||||
|
- [blocks_repack_bits_bb_1_0, '0', blocks_tagged_stream_mux_0, '1']
|
||||||
|
- [blocks_tagged_stream_mux_0, '0', digital_constellation_modulator_0, '0']
|
||||||
|
- [blocks_vector_source_x_0_0, '0', blocks_tagged_stream_mux_0, '0']
|
||||||
|
- [blocks_vector_source_x_0_0, '0', pad_sink_0_0, '0']
|
||||||
|
- [blocks_vector_source_x_0_0_0, '0', blocks_repack_bits_bb_1_0, '0']
|
||||||
|
- [blocks_vector_source_x_0_0_0_0, '0', blocks_repack_bits_bb_1_0_0, '0']
|
||||||
|
- [digital_constellation_modulator_0, '0', pad_sink_0, '0']
|
||||||
|
- [pad_source_0, '0', blocks_tagged_stream_mux_0, '2']
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
file_format: 1
|
||||||
|
grc_version: 3.10.11.0
|
||||||
9
loremipsum
Normal file
9
loremipsum
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque scelerisque nunc ac mi rhoncus, in commodo elit euismod. Suspendisse eu tempor dolor, in convallis tortor. Quisque semper nec augue sed sollicitudin. Sed at justo neque. Suspendisse dolor dolor, interdum ultricies commodo sollicitudin, congue sed massa. Sed ut tellus in felis feugiat ornare. Nunc in fringilla nisi. Ut eget fermentum massa. Nam nec ex a enim vestibulum commodo ut nec urna. Fusce id iaculis lectus. Integer aliquet quis est sit amet posuere.
|
||||||
|
|
||||||
|
Nulla vitae facilisis ex. Etiam mi ipsum, tristique nec convallis vitae, molestie vel massa. Aliquam erat volutpat. Vivamus molestie lorem nibh, lacinia efficitur magna elementum ac. Morbi ut lectus a mauris sodales ultricies eu vel nisl. Phasellus eget dui ac ante tristique tristique. Suspendisse nisi orci, vestibulum in leo ac, mollis ultricies mi. Donec bibendum, justo quis consequat ultrices, quam est lobortis orci, ut laoreet nibh ligula non felis. Mauris dignissim, odio ac luctus interdum, dolor massa pretium elit, vitae ullamcorper justo orci nec mi. Nunc pharetra et tortor id fringilla. Sed ac gravida diam, quis rutrum dolor. Curabitur sit amet enim nec libero pulvinar dictum. Cras sodales orci et tellus volutpat, eget malesuada odio commodo.
|
||||||
|
|
||||||
|
Curabitur varius ultricies metus nec laoreet. Fusce commodo felis et eros volutpat iaculis. Suspendisse potenti. Etiam augue nibh, consequat at malesuada ac, interdum vel dolor. Morbi nec urna tincidunt, varius eros sed, sagittis odio. Quisque auctor nibh diam, ut feugiat urna fermentum a. Aenean sit amet lectus vehicula, iaculis purus in, suscipit ante. Vestibulum vitae euismod urna. Nam id aliquam lorem. Nullam aliquet leo sit amet mi imperdiet congue. Sed luctus urna erat, sed finibus nisl tincidunt sed. Integer at tortor quam. Praesent id imperdiet lorem.
|
||||||
|
|
||||||
|
Aenean feugiat tempus lorem ac gravida. Praesent quis dolor at risus sodales porttitor a ut tellus. Aenean varius ex in lorem pulvinar, pulvinar mattis elit rhoncus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed varius elit sed justo mattis varius. Curabitur a enim mi. Mauris nec est congue tortor sollicitudin convallis. Donec vestibulum diam risus, quis imperdiet massa consectetur non. Curabitur vel nunc est. Vestibulum convallis ipsum vel diam eleifend, nec gravida arcu auctor. Nam id libero tellus. Etiam at vehicula elit, imperdiet sollicitudin ligula. In hac habitasse platea dictumst. Phasellus lorem ex, efficitur in sem sit amet, fringilla dictum purus. Duis porta pharetra faucibus. Duis turpis tellus, condimentum id fringilla sed, fringilla sed mi.
|
||||||
|
|
||||||
|
Etiam et metus id elit varius faucibus non id justo. Aliquam interdum elit id massa egestas cursus quis sed magna. Sed gravida pellentesque ornare. Integer at pharetra tortor. Nam sit amet velit eu ligula fringilla mattis eu vel tortor. Nunc in ipsum tellus. Vivamus efficitur neque non purus faucibus, nec congue libero consequat.
|
||||||
21
pdu_rx.py
Normal file
21
pdu_rx.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
PACKET_LEN=128
|
||||||
|
|
||||||
|
async def tcp_client():
|
||||||
|
port = 50001
|
||||||
|
reader, writer = await asyncio.open_connection(
|
||||||
|
'127.0.0.1', port)
|
||||||
|
with open("loremipsum", "rb") as file_to_send:
|
||||||
|
while message := file_to_send.read(PACKET_LEN):
|
||||||
|
writer.write(message)
|
||||||
|
sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
while message := await reader.read(PACKET_LEN):
|
||||||
|
print(f"Got: {message.decode()}\n\n")
|
||||||
|
|
||||||
|
asyncio.run(tcp_client())
|
||||||
682
simulation/awgn.grc
Normal file
682
simulation/awgn.grc
Normal file
@@ -0,0 +1,682 @@
|
|||||||
|
options:
|
||||||
|
parameters:
|
||||||
|
author: HA5PLS
|
||||||
|
catch_exceptions: 'True'
|
||||||
|
category: '[GRC Hier Blocks]'
|
||||||
|
cmake_opt: ''
|
||||||
|
comment: ''
|
||||||
|
copyright: GPL 3.0 or later
|
||||||
|
description: wrapper around ONBEAT modulator/demodulator for BER simulation
|
||||||
|
gen_cmake: 'On'
|
||||||
|
gen_linking: dynamic
|
||||||
|
generate_options: qt_gui
|
||||||
|
hier_block_src_path: '.:'
|
||||||
|
id: ONBEAT_AWGN_sim
|
||||||
|
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: ONBEAT AWGN simulator
|
||||||
|
window_size: (1000,1000)
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [16, 16.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
blocks:
|
||||||
|
- name: OVERSAMPLING
|
||||||
|
id: variable
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
value: '10'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [288, 16.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: RRC_ALPHA
|
||||||
|
id: variable
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
value: '0.35'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [816, 16.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: full_packet_len
|
||||||
|
id: variable
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
value: data_len*8
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [456, 88.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: samp_rate
|
||||||
|
id: variable
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
value: 1e6
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [200, 16.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: symbol_map
|
||||||
|
id: variable
|
||||||
|
parameters:
|
||||||
|
comment: ''
|
||||||
|
value: '[0, 1, 3, 2]'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [720, 16.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: EbN0
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '100'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [864, 136.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: ONBEAT_Demod_0
|
||||||
|
id: ONBEAT_Demod
|
||||||
|
parameters:
|
||||||
|
FULL_PACKET_LEN: full_packet_len
|
||||||
|
OVERSAMPLING: OVERSAMPLING
|
||||||
|
RRC_ALPHA: RRC_ALPHA
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
roc_tolerance: '1'
|
||||||
|
samp_rate: samp_rate
|
||||||
|
symbol_map: symbol_map
|
||||||
|
syncword: syncword
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [248, 484.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: ONBEAT_Mod_0
|
||||||
|
id: ONBEAT_Mod
|
||||||
|
parameters:
|
||||||
|
OVERSAMPLING: OVERSAMPLING
|
||||||
|
RRC_ALPHA: RRC_ALPHA
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
data_len: data_len
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
preamble: '[0x33 for i in range(0, 128*2, 8)]'
|
||||||
|
syncword: syncword
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [464, 256.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_tag_gate_0
|
||||||
|
id: blocks_tag_gate
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
propagate_tags: 'False'
|
||||||
|
single_key: '""'
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [752, 264.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: blocks_throttle2_0
|
||||||
|
id: blocks_throttle2
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
ignoretag: 'True'
|
||||||
|
limit: auto
|
||||||
|
maximum: '0.1'
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
samples_per_second: samp_rate*1000
|
||||||
|
type: complex
|
||||||
|
vlen: '1'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1136, 264.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: channels_channel_model_0
|
||||||
|
id: channels_channel_model
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
block_tags: 'False'
|
||||||
|
comment: ''
|
||||||
|
epsilon: time_offset
|
||||||
|
freq_offset: freq_offset
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
noise_voltage: (1/EbN0*(1+RRC_ALPHA)/2)**0.5
|
||||||
|
seed: '0'
|
||||||
|
taps: '1.0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [928, 232.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: data_len
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: intx
|
||||||
|
value: '128'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [576, 88.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: freq_offset
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [960, 136.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: network_socket_pdu_1
|
||||||
|
id: network_socket_pdu
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
host: 0.0.0.0
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
mtu: '10000'
|
||||||
|
port: tx_port
|
||||||
|
tcp_no_delay: 'False'
|
||||||
|
type: TCP_SERVER
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [40, 264.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: pdu_pdu_to_tagged_stream_0
|
||||||
|
id: pdu_pdu_to_tagged_stream
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
maxoutbuf: '0'
|
||||||
|
minoutbuf: '0'
|
||||||
|
tag: packet_len
|
||||||
|
type: byte
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [240, 288.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: qtgui_const_sink_x_0
|
||||||
|
id: qtgui_const_sink_x
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
alpha1: '1.0'
|
||||||
|
alpha10: '1.0'
|
||||||
|
alpha2: '1.0'
|
||||||
|
alpha3: '1.0'
|
||||||
|
alpha4: '1.0'
|
||||||
|
alpha5: '1.0'
|
||||||
|
alpha6: '1.0'
|
||||||
|
alpha7: '1.0'
|
||||||
|
alpha8: '1.0'
|
||||||
|
alpha9: '1.0'
|
||||||
|
autoscale: 'False'
|
||||||
|
axislabels: 'True'
|
||||||
|
color1: '"blue"'
|
||||||
|
color10: '"dark blue"'
|
||||||
|
color2: '"red"'
|
||||||
|
color3: '"green"'
|
||||||
|
color4: '"black"'
|
||||||
|
color5: '"cyan"'
|
||||||
|
color6: '"magenta"'
|
||||||
|
color7: '"yellow"'
|
||||||
|
color8: '"dark red"'
|
||||||
|
color9: '"dark green"'
|
||||||
|
comment: ''
|
||||||
|
grid: 'False'
|
||||||
|
gui_hint: ''
|
||||||
|
label1: ''
|
||||||
|
label10: ''
|
||||||
|
label2: ''
|
||||||
|
label3: ''
|
||||||
|
label4: ''
|
||||||
|
label5: ''
|
||||||
|
label6: ''
|
||||||
|
label7: ''
|
||||||
|
label8: ''
|
||||||
|
label9: ''
|
||||||
|
legend: 'True'
|
||||||
|
marker1: '0'
|
||||||
|
marker10: '0'
|
||||||
|
marker2: '0'
|
||||||
|
marker3: '0'
|
||||||
|
marker4: '0'
|
||||||
|
marker5: '0'
|
||||||
|
marker6: '0'
|
||||||
|
marker7: '0'
|
||||||
|
marker8: '0'
|
||||||
|
marker9: '0'
|
||||||
|
name: '""'
|
||||||
|
nconnections: '1'
|
||||||
|
size: '128'
|
||||||
|
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: [616, 400.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: qtgui_eye_sink_x_0
|
||||||
|
id: qtgui_eye_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: blue
|
||||||
|
color2: blue
|
||||||
|
color3: blue
|
||||||
|
color4: blue
|
||||||
|
color5: blue
|
||||||
|
color6: blue
|
||||||
|
color7: blue
|
||||||
|
color8: blue
|
||||||
|
color9: blue
|
||||||
|
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'
|
||||||
|
nconnections: '1'
|
||||||
|
samp_per_symbol: '1'
|
||||||
|
size: '128'
|
||||||
|
srate: samp_rate
|
||||||
|
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: Amplitude
|
||||||
|
ymax: '1'
|
||||||
|
ymin: '-1'
|
||||||
|
yunit: '""'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 472.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: qtgui_time_sink_x_0
|
||||||
|
id: qtgui_time_sink_x
|
||||||
|
parameters:
|
||||||
|
affinity: ''
|
||||||
|
alias: ''
|
||||||
|
alpha1: '1.0'
|
||||||
|
alpha10: '1.0'
|
||||||
|
alpha2: '1.0'
|
||||||
|
alpha3: '1.0'
|
||||||
|
alpha4: '1.0'
|
||||||
|
alpha5: '1.0'
|
||||||
|
alpha6: '1.0'
|
||||||
|
alpha7: '1.0'
|
||||||
|
alpha8: '1.0'
|
||||||
|
alpha9: '1.0'
|
||||||
|
autoscale: 'False'
|
||||||
|
axislabels: 'True'
|
||||||
|
color1: blue
|
||||||
|
color10: dark blue
|
||||||
|
color2: red
|
||||||
|
color3: green
|
||||||
|
color4: black
|
||||||
|
color5: cyan
|
||||||
|
color6: magenta
|
||||||
|
color7: yellow
|
||||||
|
color8: dark red
|
||||||
|
color9: dark green
|
||||||
|
comment: ''
|
||||||
|
ctrlpanel: 'False'
|
||||||
|
entags: 'True'
|
||||||
|
grid: 'False'
|
||||||
|
gui_hint: ''
|
||||||
|
label1: Signal 1
|
||||||
|
label10: Signal 10
|
||||||
|
label2: Signal 2
|
||||||
|
label3: Signal 3
|
||||||
|
label4: Signal 4
|
||||||
|
label5: Signal 5
|
||||||
|
label6: Signal 6
|
||||||
|
label7: Signal 7
|
||||||
|
label8: Signal 8
|
||||||
|
label9: Signal 9
|
||||||
|
legend: 'True'
|
||||||
|
marker1: '-1'
|
||||||
|
marker10: '-1'
|
||||||
|
marker2: '-1'
|
||||||
|
marker3: '-1'
|
||||||
|
marker4: '-1'
|
||||||
|
marker5: '-1'
|
||||||
|
marker6: '-1'
|
||||||
|
marker7: '-1'
|
||||||
|
marker8: '-1'
|
||||||
|
marker9: '-1'
|
||||||
|
name: '""'
|
||||||
|
nconnections: '1'
|
||||||
|
size: '1024'
|
||||||
|
srate: samp_rate/5
|
||||||
|
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: Amplitude
|
||||||
|
ymax: '1'
|
||||||
|
ymin: '-1'
|
||||||
|
yunit: '""'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [616, 576.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: rx_port
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: str
|
||||||
|
value: '50002'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [104, 152.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: syncword
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: ''
|
||||||
|
value: '"0000011100001001000110110010110101110111100110001010100111111010"'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [456, 16.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: time_offset
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: eng_float
|
||||||
|
value: '1.0'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1064, 136.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: tx_port
|
||||||
|
id: parameter
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
hide: none
|
||||||
|
label: ''
|
||||||
|
short_id: ''
|
||||||
|
type: str
|
||||||
|
value: '50001'
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [16, 152.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: virtual_sink_0
|
||||||
|
id: virtual_sink
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
stream_id: receiver_in
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [1320, 272.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
- name: virtual_source_0
|
||||||
|
id: virtual_source
|
||||||
|
parameters:
|
||||||
|
alias: ''
|
||||||
|
comment: ''
|
||||||
|
stream_id: receiver_in
|
||||||
|
states:
|
||||||
|
bus_sink: false
|
||||||
|
bus_source: false
|
||||||
|
bus_structure: null
|
||||||
|
coordinate: [40, 536.0]
|
||||||
|
rotation: 0
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
connections:
|
||||||
|
- [ONBEAT_Demod_0, '0', qtgui_const_sink_x_0, '0']
|
||||||
|
- [ONBEAT_Demod_0, '1', qtgui_eye_sink_x_0, '0']
|
||||||
|
- [ONBEAT_Demod_0, '2', qtgui_time_sink_x_0, '0']
|
||||||
|
- [ONBEAT_Demod_0, out, network_socket_pdu_1, pdus]
|
||||||
|
- [ONBEAT_Mod_0, '0', blocks_tag_gate_0, '0']
|
||||||
|
- [blocks_tag_gate_0, '0', channels_channel_model_0, '0']
|
||||||
|
- [blocks_throttle2_0, '0', virtual_sink_0, '0']
|
||||||
|
- [channels_channel_model_0, '0', blocks_throttle2_0, '0']
|
||||||
|
- [network_socket_pdu_1, pdus, pdu_pdu_to_tagged_stream_0, pdus]
|
||||||
|
- [pdu_pdu_to_tagged_stream_0, '0', ONBEAT_Mod_0, '0']
|
||||||
|
- [virtual_source_0, '0', ONBEAT_Demod_0, '0']
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
file_format: 1
|
||||||
|
grc_version: 3.10.11.0
|
||||||
Reference in New Issue
Block a user