kopia lustrzana https://github.com/M17-Project/M17_Implementations
Porównaj commity
10 Commity
5dc77da429
...
b52d1c1fd0
Autor | SHA1 | Data |
---|---|---|
Wojciech Kaczmarski | b52d1c1fd0 | |
Wojciech Kaczmarski | 886d57771c | |
Wojciech Kaczmarski | 06dd06ea80 | |
Wojciech Kaczmarski | 141282f2ae | |
Wojciech Kaczmarski | 69accb038f | |
Wojciech Kaczmarski | a531fcaf51 | |
Clayton Smith | 7b27c1a239 | |
Wojciech Kaczmarski | 939c89b516 | |
Wojciech Kaczmarski | 18ff1df36f | |
Clayton Smith | 475df7fefd |
|
@ -0,0 +1,132 @@
|
|||
options:
|
||||
parameters:
|
||||
author: sp5wwp
|
||||
catch_exceptions: 'True'
|
||||
category: '[GRC Hier Blocks]'
|
||||
cmake_opt: ''
|
||||
comment: ''
|
||||
copyright: ''
|
||||
description: ''
|
||||
gen_cmake: 'On'
|
||||
gen_linking: dynamic
|
||||
generate_options: qt_gui
|
||||
hier_block_src_path: '.:'
|
||||
id: simple_loopback
|
||||
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: Not titled yet
|
||||
window_size: (1000,1000)
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [8, 8]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
|
||||
blocks:
|
||||
- name: samp_rate
|
||||
id: variable
|
||||
parameters:
|
||||
comment: ''
|
||||
value: '48000'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [184, 12]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: blocks_file_sink_0
|
||||
id: blocks_file_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
append: 'False'
|
||||
comment: ''
|
||||
file: ../payload.bin
|
||||
type: byte
|
||||
unbuffered: 'False'
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [528, 204.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: blocks_vector_source_x_0
|
||||
id: blocks_vector_source_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
repeat: 'True'
|
||||
tags: '[]'
|
||||
type: byte
|
||||
vector: (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [8, 204.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: m17_m17_coder_0
|
||||
id: m17_m17_coder
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
debug: 'False'
|
||||
dst_id: ALL
|
||||
maxoutbuf: '0'
|
||||
meta: helloworld
|
||||
minoutbuf: '0'
|
||||
src_id: AB1CDE
|
||||
type: '5'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [200, 188.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: m17_m17_decoder_0
|
||||
id: m17_m17_decoder
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
debug_ctrl: 'False'
|
||||
debug_data: 'False'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
threshold: '0.9'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [360, 204.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
|
||||
connections:
|
||||
- [blocks_vector_source_x_0, '0', m17_m17_coder_0, '0']
|
||||
- [m17_m17_coder_0, '0', m17_m17_decoder_0, '0']
|
||||
- [m17_m17_decoder_0, '0', blocks_file_sink_0, '0']
|
||||
|
||||
metadata:
|
||||
file_format: 1
|
||||
grc_version: 3.10.7.0
|
|
@ -0,0 +1,838 @@
|
|||
options:
|
||||
parameters:
|
||||
author: sp5wwp
|
||||
catch_exceptions: 'True'
|
||||
category: '[GRC Hier Blocks]'
|
||||
cmake_opt: ''
|
||||
comment: ''
|
||||
copyright: ''
|
||||
description: ''
|
||||
gen_cmake: 'On'
|
||||
gen_linking: dynamic
|
||||
generate_options: qt_gui
|
||||
hier_block_src_path: '.:'
|
||||
id: simple_rx
|
||||
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: Simple M17 receiver
|
||||
window_size: (1000,1000)
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [8, 8]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
|
||||
blocks:
|
||||
- name: ppm
|
||||
id: variable_qtgui_range
|
||||
parameters:
|
||||
comment: ''
|
||||
gui_hint: ''
|
||||
label: ppm
|
||||
min_len: '200'
|
||||
orient: QtCore.Qt.Horizontal
|
||||
rangeType: float
|
||||
start: '-10'
|
||||
step: '0.1'
|
||||
stop: '10'
|
||||
value: '0'
|
||||
widget: counter_slider
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [384, 12.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: rf_gain
|
||||
id: variable_qtgui_range
|
||||
parameters:
|
||||
comment: ''
|
||||
gui_hint: ''
|
||||
label: RF gain
|
||||
min_len: '200'
|
||||
orient: QtCore.Qt.Horizontal
|
||||
rangeType: float
|
||||
start: '0'
|
||||
step: '1'
|
||||
stop: '80'
|
||||
value: '20'
|
||||
widget: counter_slider
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [512, 12.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: samp_rate
|
||||
id: variable
|
||||
parameters:
|
||||
comment: ''
|
||||
value: '48000'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [184, 12.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: analog_quadrature_demod_cf_0
|
||||
id: analog_quadrature_demod_cf
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
gain: samp_rate/(2.0*math.pi*800.0)
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [400, 236.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: audio_sink_0
|
||||
id: audio_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
device_name: ''
|
||||
num_inputs: '1'
|
||||
ok_to_block: 'True'
|
||||
samp_rate: samp_rate
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1736, 244.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_file_sink_0
|
||||
id: blocks_file_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
append: 'False'
|
||||
comment: ''
|
||||
file: ../payload.bin
|
||||
type: byte
|
||||
unbuffered: 'False'
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1352, 300.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_file_sink_0_0
|
||||
id: blocks_file_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
append: 'False'
|
||||
comment: ''
|
||||
file: ../../../symb_fifo
|
||||
type: float
|
||||
unbuffered: 'False'
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1352, 388.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: blocks_moving_average_xx_0
|
||||
id: blocks_moving_average_xx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
length: int(0.1*samp_rate)
|
||||
max_iter: '4000'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
scale: 1/int(0.1*samp_rate)
|
||||
type: float
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [496, 380.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: blocks_null_sink_0
|
||||
id: blocks_null_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
bus_structure_sink: '[[0,],]'
|
||||
comment: ''
|
||||
num_inputs: '1'
|
||||
type: byte
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1416, 208.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_packed_to_unpacked_xx_0
|
||||
id: blocks_packed_to_unpacked_xx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
bits_per_chunk: '1'
|
||||
comment: ''
|
||||
endianness: gr.GR_MSB_FIRST
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
num_ports: '1'
|
||||
type: byte
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1416, 68.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_short_to_float_0
|
||||
id: blocks_short_to_float
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
scale: '32768.0'
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1624, 140.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_stream_to_vector_0
|
||||
id: blocks_stream_to_vector
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
num_items: '64'
|
||||
type: byte
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1600, 80.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_sub_xx_0
|
||||
id: blocks_sub_xx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
num_inputs: '2'
|
||||
type: float
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [616, 240.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: blocks_vector_source_x_0
|
||||
id: blocks_vector_source_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
repeat: 'True'
|
||||
tags: '[]'
|
||||
type: byte
|
||||
vector: (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [744, 388.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- 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.0045'
|
||||
max_dev: '4.5'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
nfilters: '128'
|
||||
osps: '1'
|
||||
pfb_mf_taps: '[]'
|
||||
resamp_type: digital.IR_MMSE_8TAP
|
||||
sps: '10'
|
||||
ted_gain: '1.0'
|
||||
ted_type: digital.TED_GARDNER
|
||||
type: ff
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [928, 196.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: iio_pluto_source_0
|
||||
id: iio_pluto_source
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
bandwidth: samp_rate*16
|
||||
bbdc: 'True'
|
||||
buffer_size: '32768'
|
||||
comment: ''
|
||||
filter: ''
|
||||
filter_source: '''Auto'''
|
||||
fpass: '0'
|
||||
frequency: int(433475000*(1+ppm*1e-6))
|
||||
fstop: '0'
|
||||
gain1: '''manual'''
|
||||
len_tag_key: packet_len
|
||||
manual_gain1: rf_gain
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
quadrature: 'True'
|
||||
rfdc: 'True'
|
||||
samplerate: samp_rate*16
|
||||
type: fc32
|
||||
uri: ''
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [16, 156.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: import_0
|
||||
id: import
|
||||
parameters:
|
||||
alias: ''
|
||||
comment: ''
|
||||
imports: import math
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [280, 12.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: m17_m17_coder_0
|
||||
id: m17_m17_coder
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
debug: 'False'
|
||||
dst_id: ALL
|
||||
maxoutbuf: '0'
|
||||
meta: helloworld
|
||||
minoutbuf: '0'
|
||||
src_id: AB1CDE
|
||||
type: '5'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [936, 372.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: m17_m17_decoder_0
|
||||
id: m17_m17_decoder
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
debug_ctrl: 'False'
|
||||
debug_data: 'True'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
threshold: '0.98'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1224, 188.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- 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: 'False'
|
||||
grid: 'True'
|
||||
gui_hint: ''
|
||||
label1: M17 baseband
|
||||
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: '10'
|
||||
size: int(samp_rate/10)
|
||||
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: float
|
||||
update_time: '0.10'
|
||||
width1: '1'
|
||||
width10: '1'
|
||||
width2: '1'
|
||||
width3: '1'
|
||||
width4: '1'
|
||||
width5: '1'
|
||||
width6: '1'
|
||||
width7: '1'
|
||||
width8: '1'
|
||||
width9: '1'
|
||||
ylabel: Amplitude
|
||||
ymax: '5'
|
||||
ymin: '-5'
|
||||
yunit: '""'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [936, 92.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: '2000'
|
||||
srate: '8000'
|
||||
stemplot: 'False'
|
||||
style1: '1'
|
||||
style10: '1'
|
||||
style2: '1'
|
||||
style3: '1'
|
||||
style4: '1'
|
||||
style5: '1'
|
||||
style6: '1'
|
||||
style7: '1'
|
||||
style8: '1'
|
||||
style9: '1'
|
||||
tr_chan: '0'
|
||||
tr_delay: '0'
|
||||
tr_level: '0.0'
|
||||
tr_mode: qtgui.TRIG_MODE_FREE
|
||||
tr_slope: qtgui.TRIG_SLOPE_POS
|
||||
tr_tag: '""'
|
||||
type: float
|
||||
update_time: '0.10'
|
||||
width1: '1'
|
||||
width10: '1'
|
||||
width2: '1'
|
||||
width3: '1'
|
||||
width4: '1'
|
||||
width5: '1'
|
||||
width6: '1'
|
||||
width7: '1'
|
||||
width8: '1'
|
||||
width9: '1'
|
||||
ylabel: Amplitude
|
||||
ymax: '1'
|
||||
ymin: '-1'
|
||||
yunit: '""'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1760, 124.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: qtgui_time_sink_x_0_0
|
||||
id: qtgui_time_sink_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha1: '1.0'
|
||||
alpha10: '1.0'
|
||||
alpha2: '1.0'
|
||||
alpha3: '1.0'
|
||||
alpha4: '1.0'
|
||||
alpha5: '1.0'
|
||||
alpha6: '1.0'
|
||||
alpha7: '1.0'
|
||||
alpha8: '1.0'
|
||||
alpha9: '1.0'
|
||||
autoscale: '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: 'False'
|
||||
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: 'False'
|
||||
marker1: '-1'
|
||||
marker10: '-1'
|
||||
marker2: '-1'
|
||||
marker3: '-1'
|
||||
marker4: '-1'
|
||||
marker5: '-1'
|
||||
marker6: '-1'
|
||||
marker7: '-1'
|
||||
marker8: '-1'
|
||||
marker9: '-1'
|
||||
name: '""'
|
||||
nconnections: '1'
|
||||
size: '100'
|
||||
srate: '4800'
|
||||
stemplot: 'False'
|
||||
style1: '1'
|
||||
style10: '1'
|
||||
style2: '1'
|
||||
style3: '1'
|
||||
style4: '1'
|
||||
style5: '1'
|
||||
style6: '1'
|
||||
style7: '1'
|
||||
style8: '1'
|
||||
style9: '1'
|
||||
tr_chan: '0'
|
||||
tr_delay: '0'
|
||||
tr_level: '0.0'
|
||||
tr_mode: qtgui.TRIG_MODE_FREE
|
||||
tr_slope: qtgui.TRIG_SLOPE_POS
|
||||
tr_tag: '""'
|
||||
type: float
|
||||
update_time: '0.10'
|
||||
width1: '1'
|
||||
width10: '1'
|
||||
width2: '1'
|
||||
width3: '1'
|
||||
width4: '1'
|
||||
width5: '1'
|
||||
width6: '1'
|
||||
width7: '1'
|
||||
width8: '1'
|
||||
width9: '1'
|
||||
ylabel: Amplitude
|
||||
ymax: '5'
|
||||
ymin: '-5'
|
||||
yunit: '""'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1224, 100.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: rational_resampler_xxx_0
|
||||
id: rational_resampler_xxx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
decim: '16'
|
||||
fbw: '0'
|
||||
interp: '1'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
taps: '[]'
|
||||
type: ccc
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [232, 212.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: rational_resampler_xxx_0_0
|
||||
id: rational_resampler_xxx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
decim: int(1920000/samp_rate)
|
||||
fbw: '0'
|
||||
interp: '1'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
taps: '[]'
|
||||
type: ccc
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [240, 420.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: rational_resampler_xxx_1
|
||||
id: rational_resampler_xxx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
decim: '1'
|
||||
fbw: '0'
|
||||
interp: '6'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
taps: '[]'
|
||||
type: fff
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1568, 220.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: root_raised_cosine_filter_0
|
||||
id: root_raised_cosine_filter
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha: '0.5'
|
||||
comment: ''
|
||||
decim: '1'
|
||||
gain: '1'
|
||||
interp: '1'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
ntaps: '81'
|
||||
samp_rate: '10'
|
||||
sym_rate: '1.0'
|
||||
type: fir_filter_fff
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [720, 212.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: soapy_rtlsdr_source_0
|
||||
id: soapy_rtlsdr_source
|
||||
parameters:
|
||||
affinity: ''
|
||||
agc: 'False'
|
||||
alias: ''
|
||||
bias: 'False'
|
||||
center_freq: int(433475000*(1+ppm*1e-6))
|
||||
comment: ''
|
||||
dev_args: ''
|
||||
freq_correction: '0'
|
||||
gain: rf_gain
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
samp_rate: '1920000'
|
||||
type: fc32
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [32, 436.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: vocoder_codec2_decode_ps_0
|
||||
id: vocoder_codec2_decode_ps
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
mode: codec2.MODE_3200
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1432, 140.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
|
||||
connections:
|
||||
- [analog_quadrature_demod_cf_0, '0', blocks_moving_average_xx_0, '0']
|
||||
- [analog_quadrature_demod_cf_0, '0', blocks_sub_xx_0, '0']
|
||||
- [blocks_moving_average_xx_0, '0', blocks_sub_xx_0, '1']
|
||||
- [blocks_packed_to_unpacked_xx_0, '0', blocks_stream_to_vector_0, '0']
|
||||
- [blocks_short_to_float_0, '0', qtgui_time_sink_x_0, '0']
|
||||
- [blocks_short_to_float_0, '0', rational_resampler_xxx_1, '0']
|
||||
- [blocks_stream_to_vector_0, '0', vocoder_codec2_decode_ps_0, '0']
|
||||
- [blocks_sub_xx_0, '0', root_raised_cosine_filter_0, '0']
|
||||
- [blocks_vector_source_x_0, '0', m17_m17_coder_0, '0']
|
||||
- [digital_symbol_sync_xx_0, '0', blocks_file_sink_0_0, '0']
|
||||
- [digital_symbol_sync_xx_0, '0', m17_m17_decoder_0, '0']
|
||||
- [digital_symbol_sync_xx_0, '0', qtgui_time_sink_x_0_0, '0']
|
||||
- [iio_pluto_source_0, '0', rational_resampler_xxx_0, '0']
|
||||
- [m17_m17_coder_0, '0', m17_m17_decoder_0, '0']
|
||||
- [m17_m17_decoder_0, '0', blocks_file_sink_0, '0']
|
||||
- [m17_m17_decoder_0, '0', blocks_null_sink_0, '0']
|
||||
- [m17_m17_decoder_0, '0', blocks_packed_to_unpacked_xx_0, '0']
|
||||
- [rational_resampler_xxx_0, '0', analog_quadrature_demod_cf_0, '0']
|
||||
- [rational_resampler_xxx_0_0, '0', analog_quadrature_demod_cf_0, '0']
|
||||
- [rational_resampler_xxx_1, '0', audio_sink_0, '0']
|
||||
- [root_raised_cosine_filter_0, '0', digital_symbol_sync_xx_0, '0']
|
||||
- [root_raised_cosine_filter_0, '0', qtgui_eye_sink_x_0, '0']
|
||||
- [soapy_rtlsdr_source_0, '0', rational_resampler_xxx_0_0, '0']
|
||||
- [vocoder_codec2_decode_ps_0, '0', blocks_short_to_float_0, '0']
|
||||
|
||||
metadata:
|
||||
file_format: 1
|
||||
grc_version: 3.10.7.0
|
|
@ -0,0 +1,615 @@
|
|||
options:
|
||||
parameters:
|
||||
author: sp5wwp
|
||||
catch_exceptions: 'True'
|
||||
category: '[GRC Hier Blocks]'
|
||||
cmake_opt: ''
|
||||
comment: ''
|
||||
copyright: ''
|
||||
description: ''
|
||||
gen_cmake: 'On'
|
||||
gen_linking: dynamic
|
||||
generate_options: qt_gui
|
||||
hier_block_src_path: '.:'
|
||||
id: simple_tx
|
||||
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: Not titled yet
|
||||
window_size: (1000,1000)
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [8, 8]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
|
||||
blocks:
|
||||
- name: samp_rate
|
||||
id: variable
|
||||
parameters:
|
||||
comment: ''
|
||||
value: '48000'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [184, 12]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: analog_frequency_modulator_fc_0
|
||||
id: analog_frequency_modulator_fc
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
sensitivity: (2.0*math.pi*800.0)/samp_rate
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [720, 196.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: blocks_file_source_0
|
||||
id: blocks_file_source
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
begin_tag: pmt.PMT_NIL
|
||||
comment: ''
|
||||
file: samples/1.aud
|
||||
length: '0'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
offset: '0'
|
||||
repeat: 'True'
|
||||
type: short
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [8, 380.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_file_source_1
|
||||
id: blocks_file_source
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
begin_tag: pmt.PMT_NIL
|
||||
comment: ''
|
||||
file: samples/1.bin
|
||||
length: '0'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
offset: '0'
|
||||
repeat: 'True'
|
||||
type: byte
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [392, 340.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_pack_k_bits_bb_0
|
||||
id: blocks_pack_k_bits_bb
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
k: '8'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [80, 316.0]
|
||||
rotation: 180
|
||||
state: disabled
|
||||
- name: blocks_repack_bits_bb_0
|
||||
id: blocks_repack_bits_bb
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
align_output: 'False'
|
||||
comment: ''
|
||||
endianness: gr.GR_MSB_FIRST
|
||||
k: '8'
|
||||
l: '2'
|
||||
len_tag_key: '""'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [544, 364.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: blocks_vector_source_x_0
|
||||
id: blocks_vector_source_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
repeat: 'True'
|
||||
tags: '[]'
|
||||
type: byte
|
||||
vector: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [16, 180.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: blocks_vector_to_stream_0
|
||||
id: blocks_vector_to_stream
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
num_items: '64'
|
||||
type: byte
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [200, 320.0]
|
||||
rotation: 180
|
||||
state: disabled
|
||||
- name: digital_chunks_to_symbols_xx_0
|
||||
id: digital_chunks_to_symbols_xx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
dimension: '1'
|
||||
in_type: byte
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
num_ports: '1'
|
||||
out_type: float
|
||||
symbol_table: (1.0, 3.0, -1.0, -3.0)
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [728, 376.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: iio_pluto_sink_0
|
||||
id: iio_pluto_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
attenuation1: '30'
|
||||
bandwidth: samp_rate*16
|
||||
buffer_size: '32768'
|
||||
comment: ''
|
||||
cyclic: 'False'
|
||||
filter: ''
|
||||
filter_source: '''Auto'''
|
||||
fpass: '0'
|
||||
frequency: int(433475000*(1+2.75e-6))
|
||||
fstop: '0'
|
||||
len_tag_key: ''
|
||||
samplerate: samp_rate*16
|
||||
type: fc32
|
||||
uri: ''
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1056, 140.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
- name: import_0
|
||||
id: import
|
||||
parameters:
|
||||
alias: ''
|
||||
comment: ''
|
||||
imports: import math
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [280, 12.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: m17_m17_coder_0
|
||||
id: m17_m17_coder
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
debug: 'False'
|
||||
dst_id: ALL
|
||||
maxoutbuf: '0'
|
||||
meta: helloworld
|
||||
minoutbuf: '0'
|
||||
src_id: AB1CDE
|
||||
type: '5'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [200, 164.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: rational_resampler_xxx_0
|
||||
id: rational_resampler_xxx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
decim: '1'
|
||||
fbw: '0'
|
||||
interp: '16'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
taps: '[]'
|
||||
type: ccf
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [888, 172.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: root_raised_cosine_filter_0
|
||||
id: root_raised_cosine_filter
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha: '0.5'
|
||||
comment: ''
|
||||
decim: '1'
|
||||
gain: '10'
|
||||
interp: '10'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
ntaps: '81'
|
||||
samp_rate: '10'
|
||||
sym_rate: '1.0'
|
||||
type: interp_fir_filter_fff
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [512, 156.0]
|
||||
rotation: 0
|
||||
state: true
|
||||
- name: uhd_usrp_sink_0
|
||||
id: uhd_usrp_sink
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
ant0: '"TX/RX"'
|
||||
ant1: '"TX/RX"'
|
||||
ant10: '"TX/RX"'
|
||||
ant11: '"TX/RX"'
|
||||
ant12: '"TX/RX"'
|
||||
ant13: '"TX/RX"'
|
||||
ant14: '"TX/RX"'
|
||||
ant15: '"TX/RX"'
|
||||
ant16: '"TX/RX"'
|
||||
ant17: '"TX/RX"'
|
||||
ant18: '"TX/RX"'
|
||||
ant19: '"TX/RX"'
|
||||
ant2: '"TX/RX"'
|
||||
ant20: '"TX/RX"'
|
||||
ant21: '"TX/RX"'
|
||||
ant22: '"TX/RX"'
|
||||
ant23: '"TX/RX"'
|
||||
ant24: '"TX/RX"'
|
||||
ant25: '"TX/RX"'
|
||||
ant26: '"TX/RX"'
|
||||
ant27: '"TX/RX"'
|
||||
ant28: '"TX/RX"'
|
||||
ant29: '"TX/RX"'
|
||||
ant3: '"TX/RX"'
|
||||
ant30: '"TX/RX"'
|
||||
ant31: '"TX/RX"'
|
||||
ant4: '"TX/RX"'
|
||||
ant5: '"TX/RX"'
|
||||
ant6: '"TX/RX"'
|
||||
ant7: '"TX/RX"'
|
||||
ant8: '"TX/RX"'
|
||||
ant9: '"TX/RX"'
|
||||
bw0: samp_rate*16
|
||||
bw1: '0'
|
||||
bw10: '0'
|
||||
bw11: '0'
|
||||
bw12: '0'
|
||||
bw13: '0'
|
||||
bw14: '0'
|
||||
bw15: '0'
|
||||
bw16: '0'
|
||||
bw17: '0'
|
||||
bw18: '0'
|
||||
bw19: '0'
|
||||
bw2: '0'
|
||||
bw20: '0'
|
||||
bw21: '0'
|
||||
bw22: '0'
|
||||
bw23: '0'
|
||||
bw24: '0'
|
||||
bw25: '0'
|
||||
bw26: '0'
|
||||
bw27: '0'
|
||||
bw28: '0'
|
||||
bw29: '0'
|
||||
bw3: '0'
|
||||
bw30: '0'
|
||||
bw31: '0'
|
||||
bw4: '0'
|
||||
bw5: '0'
|
||||
bw6: '0'
|
||||
bw7: '0'
|
||||
bw8: '0'
|
||||
bw9: '0'
|
||||
center_freq0: int(433475000*(1+2.75e-6))
|
||||
center_freq1: '0'
|
||||
center_freq10: '0'
|
||||
center_freq11: '0'
|
||||
center_freq12: '0'
|
||||
center_freq13: '0'
|
||||
center_freq14: '0'
|
||||
center_freq15: '0'
|
||||
center_freq16: '0'
|
||||
center_freq17: '0'
|
||||
center_freq18: '0'
|
||||
center_freq19: '0'
|
||||
center_freq2: '0'
|
||||
center_freq20: '0'
|
||||
center_freq21: '0'
|
||||
center_freq22: '0'
|
||||
center_freq23: '0'
|
||||
center_freq24: '0'
|
||||
center_freq25: '0'
|
||||
center_freq26: '0'
|
||||
center_freq27: '0'
|
||||
center_freq28: '0'
|
||||
center_freq29: '0'
|
||||
center_freq3: '0'
|
||||
center_freq30: '0'
|
||||
center_freq31: '0'
|
||||
center_freq4: '0'
|
||||
center_freq5: '0'
|
||||
center_freq6: '0'
|
||||
center_freq7: '0'
|
||||
center_freq8: '0'
|
||||
center_freq9: '0'
|
||||
clock_rate: 0e0
|
||||
clock_source0: ''
|
||||
clock_source1: ''
|
||||
clock_source2: ''
|
||||
clock_source3: ''
|
||||
clock_source4: ''
|
||||
clock_source5: ''
|
||||
clock_source6: ''
|
||||
clock_source7: ''
|
||||
comment: ''
|
||||
dev_addr: ''
|
||||
dev_args: ''
|
||||
gain0: '60'
|
||||
gain1: '0'
|
||||
gain10: '0'
|
||||
gain11: '0'
|
||||
gain12: '0'
|
||||
gain13: '0'
|
||||
gain14: '0'
|
||||
gain15: '0'
|
||||
gain16: '0'
|
||||
gain17: '0'
|
||||
gain18: '0'
|
||||
gain19: '0'
|
||||
gain2: '0'
|
||||
gain20: '0'
|
||||
gain21: '0'
|
||||
gain22: '0'
|
||||
gain23: '0'
|
||||
gain24: '0'
|
||||
gain25: '0'
|
||||
gain26: '0'
|
||||
gain27: '0'
|
||||
gain28: '0'
|
||||
gain29: '0'
|
||||
gain3: '0'
|
||||
gain30: '0'
|
||||
gain31: '0'
|
||||
gain4: '0'
|
||||
gain5: '0'
|
||||
gain6: '0'
|
||||
gain7: '0'
|
||||
gain8: '0'
|
||||
gain9: '0'
|
||||
gain_type0: default
|
||||
gain_type1: default
|
||||
gain_type10: default
|
||||
gain_type11: default
|
||||
gain_type12: default
|
||||
gain_type13: default
|
||||
gain_type14: default
|
||||
gain_type15: default
|
||||
gain_type16: default
|
||||
gain_type17: default
|
||||
gain_type18: default
|
||||
gain_type19: default
|
||||
gain_type2: default
|
||||
gain_type20: default
|
||||
gain_type21: default
|
||||
gain_type22: default
|
||||
gain_type23: default
|
||||
gain_type24: default
|
||||
gain_type25: default
|
||||
gain_type26: default
|
||||
gain_type27: default
|
||||
gain_type28: default
|
||||
gain_type29: default
|
||||
gain_type3: default
|
||||
gain_type30: default
|
||||
gain_type31: default
|
||||
gain_type4: default
|
||||
gain_type5: default
|
||||
gain_type6: default
|
||||
gain_type7: default
|
||||
gain_type8: default
|
||||
gain_type9: default
|
||||
len_tag_name: '""'
|
||||
lo_export0: 'False'
|
||||
lo_export1: 'False'
|
||||
lo_export10: 'False'
|
||||
lo_export11: 'False'
|
||||
lo_export12: 'False'
|
||||
lo_export13: 'False'
|
||||
lo_export14: 'False'
|
||||
lo_export15: 'False'
|
||||
lo_export16: 'False'
|
||||
lo_export17: 'False'
|
||||
lo_export18: 'False'
|
||||
lo_export19: 'False'
|
||||
lo_export2: 'False'
|
||||
lo_export20: 'False'
|
||||
lo_export21: 'False'
|
||||
lo_export22: 'False'
|
||||
lo_export23: 'False'
|
||||
lo_export24: 'False'
|
||||
lo_export25: 'False'
|
||||
lo_export26: 'False'
|
||||
lo_export27: 'False'
|
||||
lo_export28: 'False'
|
||||
lo_export29: 'False'
|
||||
lo_export3: 'False'
|
||||
lo_export30: 'False'
|
||||
lo_export31: 'False'
|
||||
lo_export4: 'False'
|
||||
lo_export5: 'False'
|
||||
lo_export6: 'False'
|
||||
lo_export7: 'False'
|
||||
lo_export8: 'False'
|
||||
lo_export9: 'False'
|
||||
lo_source0: internal
|
||||
lo_source1: internal
|
||||
lo_source10: internal
|
||||
lo_source11: internal
|
||||
lo_source12: internal
|
||||
lo_source13: internal
|
||||
lo_source14: internal
|
||||
lo_source15: internal
|
||||
lo_source16: internal
|
||||
lo_source17: internal
|
||||
lo_source18: internal
|
||||
lo_source19: internal
|
||||
lo_source2: internal
|
||||
lo_source20: internal
|
||||
lo_source21: internal
|
||||
lo_source22: internal
|
||||
lo_source23: internal
|
||||
lo_source24: internal
|
||||
lo_source25: internal
|
||||
lo_source26: internal
|
||||
lo_source27: internal
|
||||
lo_source28: internal
|
||||
lo_source29: internal
|
||||
lo_source3: internal
|
||||
lo_source30: internal
|
||||
lo_source31: internal
|
||||
lo_source4: internal
|
||||
lo_source5: internal
|
||||
lo_source6: internal
|
||||
lo_source7: internal
|
||||
lo_source8: internal
|
||||
lo_source9: internal
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
nchan: '1'
|
||||
num_mboards: '1'
|
||||
otw: ''
|
||||
samp_rate: samp_rate*16
|
||||
sd_spec0: ''
|
||||
sd_spec1: ''
|
||||
sd_spec2: ''
|
||||
sd_spec3: ''
|
||||
sd_spec4: ''
|
||||
sd_spec5: ''
|
||||
sd_spec6: ''
|
||||
sd_spec7: ''
|
||||
show_lo_controls: 'False'
|
||||
start_time: '-1.0'
|
||||
stream_args: ''
|
||||
stream_chans: '[]'
|
||||
sync: sync
|
||||
time_source0: ''
|
||||
time_source1: ''
|
||||
time_source2: ''
|
||||
time_source3: ''
|
||||
time_source4: ''
|
||||
time_source5: ''
|
||||
time_source6: ''
|
||||
time_source7: ''
|
||||
type: fc32
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1064, 316.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: vocoder_codec2_encode_sp_0
|
||||
id: vocoder_codec2_encode_sp
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
mode: codec2.MODE_3200
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [160, 412.0]
|
||||
rotation: 0
|
||||
state: disabled
|
||||
|
||||
connections:
|
||||
- [analog_frequency_modulator_fc_0, '0', rational_resampler_xxx_0, '0']
|
||||
- [blocks_file_source_0, '0', vocoder_codec2_encode_sp_0, '0']
|
||||
- [blocks_file_source_1, '0', blocks_repack_bits_bb_0, '0']
|
||||
- [blocks_pack_k_bits_bb_0, '0', m17_m17_coder_0, '0']
|
||||
- [blocks_repack_bits_bb_0, '0', digital_chunks_to_symbols_xx_0, '0']
|
||||
- [blocks_vector_source_x_0, '0', m17_m17_coder_0, '0']
|
||||
- [blocks_vector_to_stream_0, '0', blocks_pack_k_bits_bb_0, '0']
|
||||
- [digital_chunks_to_symbols_xx_0, '0', root_raised_cosine_filter_0, '0']
|
||||
- [m17_m17_coder_0, '0', root_raised_cosine_filter_0, '0']
|
||||
- [rational_resampler_xxx_0, '0', iio_pluto_sink_0, '0']
|
||||
- [rational_resampler_xxx_0, '0', uhd_usrp_sink_0, '0']
|
||||
- [root_raised_cosine_filter_0, '0', analog_frequency_modulator_fc_0, '0']
|
||||
- [vocoder_codec2_encode_sp_0, '0', blocks_vector_to_stream_0, '0']
|
||||
|
||||
metadata:
|
||||
file_format: 1
|
||||
grc_version: 3.10.7.0
|
|
@ -1,4 +1,4 @@
|
|||
m17-coder-sym: m17-coder-sym.c golay.c crc.c
|
||||
m17-coder-sym: m17-coder-sym.c golay.c golay.h crc.c crc.h ../inc/m17.h
|
||||
gcc -O2 -w m17-coder-sym.c golay.c crc.c -o m17-coder-sym -lm
|
||||
|
||||
clean:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
m17-decoder-sym: m17-decoder-sym.c golay.c viterbi.c crc.c
|
||||
m17-decoder-sym: m17-decoder-sym.c golay.c golay.h viterbi.c viterbi.h crc.c crc.h ../inc/m17.h
|
||||
gcc -Wall -O2 m17-decoder-sym.c golay.c viterbi.c crc.c -o m17-decoder-sym -lm
|
||||
|
||||
clean:
|
||||
|
|
|
@ -24,6 +24,7 @@ uint16_t lich_chunk[96]; //raw, soft LSF chunk extracted from the LIC
|
|||
uint8_t lich_b[6]; //48-bit decoded LICH
|
||||
uint8_t lich_cnt; //LICH_CNT
|
||||
uint8_t lich_chunks_rcvd=0; //flags set for each LSF chunk received
|
||||
uint16_t expected_next_fn=0; //frame number of the next frame expected to arrive
|
||||
|
||||
uint16_t enc_data[272]; //raw frame data soft bits
|
||||
uint8_t frame_data[19]; //decoded frame data, 144 bits (16+128), plus 4 flushing bits
|
||||
|
@ -201,6 +202,32 @@ int main(void)
|
|||
//if it is a frame
|
||||
if(!fl)
|
||||
{
|
||||
//extract data
|
||||
for(uint16_t i=0; i<272; i++)
|
||||
{
|
||||
enc_data[i]=d_soft_bit[96+i];
|
||||
}
|
||||
|
||||
//decode
|
||||
uint32_t e=decodePunctured(frame_data, enc_data, P_2, 272, 12);
|
||||
|
||||
uint16_t fn = (frame_data[1] << 8) | frame_data[2];
|
||||
|
||||
//dump data - first byte is empty
|
||||
printf("FN: %04X PLD: ", fn);
|
||||
for(uint8_t i=3; i<19; i++)
|
||||
{
|
||||
printf("%02X", frame_data[i]);
|
||||
}
|
||||
#ifdef SHOW_VITERBI_ERRS
|
||||
printf(" e=%1.1f\n", (float)e/0xFFFF);
|
||||
#else
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
//send codec2 stream to stdout
|
||||
//write(STDOUT_FILENO, &frame_data[3], 16);
|
||||
|
||||
//extract LICH
|
||||
for(uint16_t i=0; i<96; i++)
|
||||
{
|
||||
|
@ -210,6 +237,11 @@ int main(void)
|
|||
//Golay decoder
|
||||
decode_LICH(lich_b, lich_chunk);
|
||||
lich_cnt=lich_b[5]>>5;
|
||||
|
||||
//If we're at the start of a superframe, or we missed a frame, reset the LICH state
|
||||
if((lich_cnt==0) || ((fn % 0x8000)!=expected_next_fn))
|
||||
lich_chunks_rcvd=0;
|
||||
|
||||
lich_chunks_rcvd|=(1<<lich_cnt);
|
||||
memcpy(&lsf[lich_cnt*5], lich_b, 5);
|
||||
|
||||
|
@ -262,33 +294,9 @@ int main(void)
|
|||
else
|
||||
printf(" LSF_CRC_OK ");
|
||||
printf("\n");
|
||||
|
||||
lich_chunks_rcvd=0; //reset all flags
|
||||
}
|
||||
|
||||
//extract data
|
||||
for(uint16_t i=0; i<272; i++)
|
||||
{
|
||||
enc_data[i]=d_soft_bit[96+i];
|
||||
}
|
||||
|
||||
//decode
|
||||
uint32_t e=decodePunctured(frame_data, enc_data, P_2, 272, 12);
|
||||
|
||||
//dump data - first byte is empty
|
||||
printf("FN: %02X%02X PLD: ", frame_data[1], frame_data[2]);
|
||||
for(uint8_t i=3; i<19; i++)
|
||||
{
|
||||
printf("%02X", frame_data[i]);
|
||||
}
|
||||
#ifdef SHOW_VITERBI_ERRS
|
||||
printf(" e=%1.1f\n", (float)e/0xFFFF);
|
||||
#else
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
//send codec2 stream to stdout
|
||||
//write(STDOUT_FILENO, &frame_data[3], 16);
|
||||
expected_next_fn = (fn + 1) % 0x8000;
|
||||
}
|
||||
else //lsf
|
||||
{
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
m17-packet-encode: m17-packet-encode.c crc.c
|
||||
m17-packet-encode: m17-packet-encode.c crc.c crc.h ../inc/m17.h
|
||||
gcc -O2 -Wall m17-packet-encode.c crc.c -o m17-packet-encode -lm
|
||||
|
||||
m17-packet-decode: m17-packet-decode.c viterbi.c crc.c
|
||||
m17-packet-decode: m17-packet-decode.c viterbi.c viterbi.h crc.c crc.h ../inc/m17.h
|
||||
gcc -O2 -Wall m17-packet-decode.c viterbi.c crc.c -o m17-packet-decode -lm
|
||||
|
||||
all: m17-packet-encode m17-packet-decode
|
||||
|
||||
install: all
|
||||
sudo install m17-packet-encode /usr/local/bin
|
||||
sudo install m17-packet-decode /usr/local/bin
|
||||
|
||||
clean:
|
||||
rm m17-packet-encode m17-packet-decode
|
||||
|
|
|
@ -21,9 +21,11 @@ uint16_t d_soft_bit[2*SYM_PER_PLD]; //deinterleaved soft bits
|
|||
|
||||
uint8_t lsf[30+1]; //complete LSF (one byte extra needed for the Viterbi decoder)
|
||||
uint8_t frame_data[26+1]; //decoded frame data, 206 bits, plus 4 flushing bits
|
||||
uint8_t packet_data[33*25]; //whole packet data
|
||||
|
||||
uint8_t syncd=0; //syncword found?
|
||||
uint8_t fl=0; //Frame=0 of LSF=1
|
||||
int8_t last_fn; //last received frame number (-1 when idle)
|
||||
uint8_t pushed; //counter for pushed symbols
|
||||
|
||||
//decodes a 6-byte long array to a callsign
|
||||
|
@ -94,24 +96,28 @@ int main(void)
|
|||
dist = eucl_norm(last, pkt_sync, 8);
|
||||
|
||||
//fprintf(stderr, "pkt_sync dist: %3.5f\n", dist);
|
||||
if(dist<DIST_THRESH) //Frame syncword detected
|
||||
if(dist<DIST_THRESH) //frame syncword detected
|
||||
{
|
||||
//fprintf(stderr, "pkt_sync\n");
|
||||
syncd=1;
|
||||
pushed=0;
|
||||
fl=0;
|
||||
}
|
||||
|
||||
//calculate euclidean norm
|
||||
dist = eucl_norm(last, lsf_sync, 8);
|
||||
|
||||
//fprintf(stderr, "lsf_sync dist: %3.5f\n", dist);
|
||||
if(dist<DIST_THRESH) //LSF syncword
|
||||
else
|
||||
{
|
||||
//fprintf(stderr, "lsf_sync\n");
|
||||
syncd=1;
|
||||
pushed=0;
|
||||
fl=1;
|
||||
//calculate euclidean norm again, this time against LSF syncword
|
||||
dist = eucl_norm(last, lsf_sync, 8);
|
||||
|
||||
//fprintf(stderr, "lsf_sync dist: %3.5f\n", dist);
|
||||
if(dist<DIST_THRESH) //LSF syncword
|
||||
{
|
||||
//fprintf(stderr, "lsf_sync\n");
|
||||
syncd=1;
|
||||
pushed=0;
|
||||
last_fn=-1;
|
||||
memset(packet_data, 0, 33*25);
|
||||
fl=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -176,25 +182,48 @@ int main(void)
|
|||
if(!fl)
|
||||
{
|
||||
//decode
|
||||
#ifdef SHOW_VITERBI_ERRS
|
||||
uint32_t e=decodePunctured(frame_data, d_soft_bit, P_3, SYM_PER_PLD*2, 8);
|
||||
#else
|
||||
decodePunctured(frame_data, d_soft_bit, P_3, SYM_PER_PLD*2, 8);
|
||||
#endif
|
||||
|
||||
//dump data - first byte is empty
|
||||
if(frame_data[1]==0x05) //if text message (TODO: check its length)
|
||||
//dump FN
|
||||
uint8_t rx_fn=(frame_data[26]>>2)&0x1F;
|
||||
uint8_t rx_last=frame_data[26]>>7;
|
||||
//fprintf(stderr, "FN%d, (%d)\n", rx_fn, rx_last);
|
||||
|
||||
//copy data - might require some fixing
|
||||
if(rx_fn<=31 && rx_fn==last_fn+1 && !rx_last)
|
||||
{
|
||||
fprintf(stderr, "%s", &frame_data[2]);
|
||||
memcpy(&packet_data[rx_fn*25], &frame_data[1], 25);
|
||||
last_fn++;
|
||||
}
|
||||
else
|
||||
else if(rx_last)
|
||||
{
|
||||
fprintf(stderr, "PKT: ");
|
||||
for(uint8_t i=1; i<27; i++)
|
||||
memcpy(&packet_data[(last_fn+1)*25], &frame_data[1], rx_fn);
|
||||
|
||||
//dump data
|
||||
if(packet_data[0]==0x05) //if a text message
|
||||
{
|
||||
fprintf(stderr, "%02X", frame_data[i]);
|
||||
fprintf(stderr, "%s", &packet_data[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "PKT: ");
|
||||
for(uint16_t i=0; i<last_fn*25+rx_fn; i++)
|
||||
{
|
||||
fprintf(stderr, "%02X", packet_data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
#ifdef SHOW_VITERBI_ERRS
|
||||
fprintf(stderr, " e=%1.1f\n", (float)e/0xFFFF);
|
||||
#else
|
||||
fprintf(stderr, "\n");
|
||||
//fprintf(stderr, "\n");
|
||||
#endif
|
||||
|
||||
//send codec2 stream to stdout
|
||||
|
@ -205,7 +234,11 @@ int main(void)
|
|||
//fprintf(stderr, "LSF\n");
|
||||
|
||||
//decode
|
||||
#ifdef SHOW_VITERBI_ERRS
|
||||
uint32_t e=decodePunctured(lsf, d_soft_bit, P_1, 2*SYM_PER_PLD, 61);
|
||||
#else
|
||||
decodePunctured(lsf, d_soft_bit, P_1, 2*SYM_PER_PLD, 61);
|
||||
#endif
|
||||
|
||||
//shift the buffer 1 position left - get rid of the encoded flushing bits
|
||||
for(uint8_t i=0; i<30; i++)
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "$#" -lt 5 ]
|
||||
then
|
||||
echo "Not enough parameters."
|
||||
echo "Usage: sh m17-sms.sh dst src can message output_file"
|
||||
echo "Exiting."
|
||||
exit
|
||||
fi
|
||||
|
||||
str=$4
|
||||
printf -v _ %s%n "$str" len #get UTF-8 encoded length
|
||||
len=$(($len+2)) #add the 2 additional bytes (0x05 and 0x00)
|
||||
echo -en "\x05"$str"\x00" | m17-packet-encode -S $2 -D $1 -C $3 -n $len -o $5
|
||||
sox -t raw -r 48000 -b 16 -c 1 -L -e signed-integer $5 $5".wav"
|
Ładowanie…
Reference in New Issue