diff --git a/Rx/direct_parser_AX100GolayASM.grc b/Rx/direct_parser_AX100GolayASM.grc
new file mode 100644
index 0000000..e12b4f0
--- /dev/null
+++ b/Rx/direct_parser_AX100GolayASM.grc
@@ -0,0 +1,783 @@
+options:
+ parameters:
+ author: ''
+ 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: direct_parser
+ 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
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 20.0]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: 2.4e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 12]
+ rotation: 0
+ state: enabled
+- name: blocks_file_sink_1
+ id: blocks_file_sink
+ parameters:
+ affinity: ''
+ alias: ''
+ append: 'False'
+ comment: ''
+ file: /home/jonathan/CommsSDR/output/RecordingIris1.wav
+ type: complex
+ unbuffered: 'False'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [392, 164.0]
+ rotation: 180
+ state: true
+- name: blocks_message_debug_0
+ id: blocks_message_debug
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ en_uvec: 'True'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [936, 208.0]
+ rotation: 0
+ state: true
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [408, 116.0]
+ rotation: 0
+ state: true
+- name: blocks_uchar_to_float_0
+ id: blocks_uchar_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [920, 72.0]
+ rotation: 0
+ state: true
+- name: digital_gfsk_demod_0
+ id: digital_gfsk_demod
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ freq_error: '0.0'
+ gain_mu: '0.175'
+ log: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mu: '0.5'
+ omega_relative_limit: '0.005'
+ samples_per_symbol: '2'
+ sensitivity: '1.0'
+ verbose: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [632, 28.0]
+ rotation: 0
+ state: true
+- name: osmosdr_source_0
+ id: osmosdr_source
+ parameters:
+ affinity: ''
+ alias: ''
+ ant0: ''
+ ant1: ''
+ ant10: ''
+ ant11: ''
+ ant12: ''
+ ant13: ''
+ ant14: ''
+ ant15: ''
+ ant16: ''
+ ant17: ''
+ ant18: ''
+ ant19: ''
+ ant2: ''
+ ant20: ''
+ ant21: ''
+ ant22: ''
+ ant23: ''
+ ant24: ''
+ ant25: ''
+ ant26: ''
+ ant27: ''
+ ant28: ''
+ ant29: ''
+ ant3: ''
+ ant30: ''
+ ant31: ''
+ ant4: ''
+ ant5: ''
+ ant6: ''
+ ant7: ''
+ ant8: ''
+ ant9: ''
+ args: '""'
+ bb_gain0: '20'
+ bb_gain1: '20'
+ bb_gain10: '20'
+ bb_gain11: '20'
+ bb_gain12: '20'
+ bb_gain13: '20'
+ bb_gain14: '20'
+ bb_gain15: '20'
+ bb_gain16: '20'
+ bb_gain17: '20'
+ bb_gain18: '20'
+ bb_gain19: '20'
+ bb_gain2: '20'
+ bb_gain20: '20'
+ bb_gain21: '20'
+ bb_gain22: '20'
+ bb_gain23: '20'
+ bb_gain24: '20'
+ bb_gain25: '20'
+ bb_gain26: '20'
+ bb_gain27: '20'
+ bb_gain28: '20'
+ bb_gain29: '20'
+ bb_gain3: '20'
+ bb_gain30: '20'
+ bb_gain31: '20'
+ bb_gain4: '20'
+ bb_gain5: '20'
+ bb_gain6: '20'
+ bb_gain7: '20'
+ bb_gain8: '20'
+ bb_gain9: '20'
+ bw0: '0'
+ 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'
+ clock_source0: ''
+ clock_source1: ''
+ clock_source2: ''
+ clock_source3: ''
+ clock_source4: ''
+ clock_source5: ''
+ clock_source6: ''
+ clock_source7: ''
+ comment: ''
+ corr0: '0'
+ corr1: '0'
+ corr10: '0'
+ corr11: '0'
+ corr12: '0'
+ corr13: '0'
+ corr14: '0'
+ corr15: '0'
+ corr16: '0'
+ corr17: '0'
+ corr18: '0'
+ corr19: '0'
+ corr2: '0'
+ corr20: '0'
+ corr21: '0'
+ corr22: '0'
+ corr23: '0'
+ corr24: '0'
+ corr25: '0'
+ corr26: '0'
+ corr27: '0'
+ corr28: '0'
+ corr29: '0'
+ corr3: '0'
+ corr30: '0'
+ corr31: '0'
+ corr4: '0'
+ corr5: '0'
+ corr6: '0'
+ corr7: '0'
+ corr8: '0'
+ corr9: '0'
+ dc_offset_mode0: '0'
+ dc_offset_mode1: '0'
+ dc_offset_mode10: '0'
+ dc_offset_mode11: '0'
+ dc_offset_mode12: '0'
+ dc_offset_mode13: '0'
+ dc_offset_mode14: '0'
+ dc_offset_mode15: '0'
+ dc_offset_mode16: '0'
+ dc_offset_mode17: '0'
+ dc_offset_mode18: '0'
+ dc_offset_mode19: '0'
+ dc_offset_mode2: '0'
+ dc_offset_mode20: '0'
+ dc_offset_mode21: '0'
+ dc_offset_mode22: '0'
+ dc_offset_mode23: '0'
+ dc_offset_mode24: '0'
+ dc_offset_mode25: '0'
+ dc_offset_mode26: '0'
+ dc_offset_mode27: '0'
+ dc_offset_mode28: '0'
+ dc_offset_mode29: '0'
+ dc_offset_mode3: '0'
+ dc_offset_mode30: '0'
+ dc_offset_mode31: '0'
+ dc_offset_mode4: '0'
+ dc_offset_mode5: '0'
+ dc_offset_mode6: '0'
+ dc_offset_mode7: '0'
+ dc_offset_mode8: '0'
+ dc_offset_mode9: '0'
+ freq0: '145000000'
+ freq1: 100e6
+ freq10: 100e6
+ freq11: 100e6
+ freq12: 100e6
+ freq13: 100e6
+ freq14: 100e6
+ freq15: 100e6
+ freq16: 100e6
+ freq17: 100e6
+ freq18: 100e6
+ freq19: 100e6
+ freq2: 100e6
+ freq20: 100e6
+ freq21: 100e6
+ freq22: 100e6
+ freq23: 100e6
+ freq24: 100e6
+ freq25: 100e6
+ freq26: 100e6
+ freq27: 100e6
+ freq28: 100e6
+ freq29: 100e6
+ freq3: 100e6
+ freq30: 100e6
+ freq31: 100e6
+ freq4: 100e6
+ freq5: 100e6
+ freq6: 100e6
+ freq7: 100e6
+ freq8: 100e6
+ freq9: 100e6
+ gain0: '10'
+ gain1: '10'
+ gain10: '10'
+ gain11: '10'
+ gain12: '10'
+ gain13: '10'
+ gain14: '10'
+ gain15: '10'
+ gain16: '10'
+ gain17: '10'
+ gain18: '10'
+ gain19: '10'
+ gain2: '10'
+ gain20: '10'
+ gain21: '10'
+ gain22: '10'
+ gain23: '10'
+ gain24: '10'
+ gain25: '10'
+ gain26: '10'
+ gain27: '10'
+ gain28: '10'
+ gain29: '10'
+ gain3: '10'
+ gain30: '10'
+ gain31: '10'
+ gain4: '10'
+ gain5: '10'
+ gain6: '10'
+ gain7: '10'
+ gain8: '10'
+ gain9: '10'
+ gain_mode0: 'False'
+ gain_mode1: 'False'
+ gain_mode10: 'False'
+ gain_mode11: 'False'
+ gain_mode12: 'False'
+ gain_mode13: 'False'
+ gain_mode14: 'False'
+ gain_mode15: 'False'
+ gain_mode16: 'False'
+ gain_mode17: 'False'
+ gain_mode18: 'False'
+ gain_mode19: 'False'
+ gain_mode2: 'False'
+ gain_mode20: 'False'
+ gain_mode21: 'False'
+ gain_mode22: 'False'
+ gain_mode23: 'False'
+ gain_mode24: 'False'
+ gain_mode25: 'False'
+ gain_mode26: 'False'
+ gain_mode27: 'False'
+ gain_mode28: 'False'
+ gain_mode29: 'False'
+ gain_mode3: 'False'
+ gain_mode30: 'False'
+ gain_mode31: 'False'
+ gain_mode4: 'False'
+ gain_mode5: 'False'
+ gain_mode6: 'False'
+ gain_mode7: 'False'
+ gain_mode8: 'False'
+ gain_mode9: 'False'
+ if_gain0: '20'
+ if_gain1: '20'
+ if_gain10: '20'
+ if_gain11: '20'
+ if_gain12: '20'
+ if_gain13: '20'
+ if_gain14: '20'
+ if_gain15: '20'
+ if_gain16: '20'
+ if_gain17: '20'
+ if_gain18: '20'
+ if_gain19: '20'
+ if_gain2: '20'
+ if_gain20: '20'
+ if_gain21: '20'
+ if_gain22: '20'
+ if_gain23: '20'
+ if_gain24: '20'
+ if_gain25: '20'
+ if_gain26: '20'
+ if_gain27: '20'
+ if_gain28: '20'
+ if_gain29: '20'
+ if_gain3: '20'
+ if_gain30: '20'
+ if_gain31: '20'
+ if_gain4: '20'
+ if_gain5: '20'
+ if_gain6: '20'
+ if_gain7: '20'
+ if_gain8: '20'
+ if_gain9: '20'
+ iq_balance_mode0: '0'
+ iq_balance_mode1: '0'
+ iq_balance_mode10: '0'
+ iq_balance_mode11: '0'
+ iq_balance_mode12: '0'
+ iq_balance_mode13: '0'
+ iq_balance_mode14: '0'
+ iq_balance_mode15: '0'
+ iq_balance_mode16: '0'
+ iq_balance_mode17: '0'
+ iq_balance_mode18: '0'
+ iq_balance_mode19: '0'
+ iq_balance_mode2: '0'
+ iq_balance_mode20: '0'
+ iq_balance_mode21: '0'
+ iq_balance_mode22: '0'
+ iq_balance_mode23: '0'
+ iq_balance_mode24: '0'
+ iq_balance_mode25: '0'
+ iq_balance_mode26: '0'
+ iq_balance_mode27: '0'
+ iq_balance_mode28: '0'
+ iq_balance_mode29: '0'
+ iq_balance_mode3: '0'
+ iq_balance_mode30: '0'
+ iq_balance_mode31: '0'
+ iq_balance_mode4: '0'
+ iq_balance_mode5: '0'
+ iq_balance_mode6: '0'
+ iq_balance_mode7: '0'
+ iq_balance_mode8: '0'
+ iq_balance_mode9: '0'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ nchan: '1'
+ num_mboards: '1'
+ sample_rate: samp_rate
+ 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: [104, 148.0]
+ rotation: 0
+ state: true
+- name: qtgui_freq_sink_x_0
+ id: qtgui_freq_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'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ 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'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ label: Relative Gain
+ label1: ''
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ norm_window: 'False'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: complex
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [400, 28.0]
+ rotation: 180
+ state: true
+- 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
+ 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: [896, 324.0]
+ rotation: 180
+ state: true
+- name: qtgui_waterfall_sink_x_0
+ id: qtgui_waterfall_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'
+ axislabels: 'True'
+ bw: samp_rate
+ color1: '0'
+ color10: '0'
+ color2: '0'
+ color3: '0'
+ color4: '0'
+ color5: '0'
+ color6: '0'
+ color7: '0'
+ color8: '0'
+ color9: '0'
+ comment: ''
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ int_max: '10'
+ int_min: '-140'
+ label1: ''
+ label10: ''
+ label2: ''
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ showports: 'False'
+ type: complex
+ update_time: '0.10'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [624, 252.0]
+ rotation: 0
+ state: true
+- name: satellites_ax100_deframer_0
+ id: satellites_ax100_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mode: '"ASM"'
+ options: '""'
+ scrambler: '"CCSDS"'
+ threshold: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [856, 124.0]
+ rotation: 180
+ state: true
+- name: satellites_telemetry_parser_0
+ id: satellites_telemetry_parser
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ definition: gomx_1
+ file: /home/jonathan/CommsSDR/output/output_AX100.txt
+ options: '""'
+ output: file
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 172.0]
+ rotation: 180
+ state: true
+
+connections:
+- [blocks_throttle_0, '0', blocks_file_sink_1, '0']
+- [blocks_throttle_0, '0', digital_gfsk_demod_0, '0']
+- [blocks_throttle_0, '0', qtgui_freq_sink_x_0, '0']
+- [blocks_throttle_0, '0', qtgui_waterfall_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', qtgui_time_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', satellites_ax100_deframer_0, '0']
+- [digital_gfsk_demod_0, '0', blocks_uchar_to_float_0, '0']
+- [osmosdr_source_0, '0', blocks_throttle_0, '0']
+- [satellites_ax100_deframer_0, out, blocks_message_debug_0, print]
+- [satellites_ax100_deframer_0, out, blocks_message_debug_0, print_pdu]
+- [satellites_ax100_deframer_0, out, satellites_telemetry_parser_0, in]
+
+metadata:
+ file_format: 1
diff --git a/Rx/direct_parser_AX25.grc b/Rx/direct_parser_AX25.grc
new file mode 100644
index 0000000..b1b8dec
--- /dev/null
+++ b/Rx/direct_parser_AX25.grc
@@ -0,0 +1,827 @@
+options:
+ parameters:
+ author: ''
+ 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: direct_parser
+ 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
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 20.0]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: decimation
+ id: variable
+ parameters:
+ comment: ''
+ value: '20'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 76.0]
+ rotation: 0
+ state: enabled
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: 2.4e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 12]
+ rotation: 0
+ state: enabled
+- name: transition_bw
+ id: variable
+ parameters:
+ comment: ''
+ value: '1000'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [280, 12.0]
+ rotation: 0
+ state: enabled
+- name: blocks_file_sink_1
+ id: blocks_file_sink
+ parameters:
+ affinity: ''
+ alias: ''
+ append: 'False'
+ comment: ''
+ file: /home/jonathan/CommsSDR/output/RecordingIris1.wav
+ type: complex
+ unbuffered: 'False'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [392, 164.0]
+ rotation: 180
+ state: true
+- name: blocks_message_debug_0
+ id: blocks_message_debug
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ en_uvec: 'True'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [936, 208.0]
+ rotation: 0
+ state: true
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [408, 116.0]
+ rotation: 0
+ state: true
+- name: blocks_uchar_to_float_0
+ id: blocks_uchar_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [920, 72.0]
+ rotation: 0
+ state: true
+- name: digital_gfsk_demod_0
+ id: digital_gfsk_demod
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ freq_error: '0.0'
+ gain_mu: '0.175'
+ log: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mu: '0.5'
+ omega_relative_limit: '0.005'
+ samples_per_symbol: '2'
+ sensitivity: '1.0'
+ verbose: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [632, 28.0]
+ rotation: 0
+ state: true
+- name: freq_xlating_fir_filter_xxx_0
+ id: freq_xlating_fir_filter_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ center_freq: '0'
+ comment: ''
+ decim: decimation
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samp_rate: samp_rate
+ taps: ' firdes.complex_band_pass(1, samp_rate, -samp_rate/(2*decimation), samp_rate/(2*decimation),
+ transition_bw)'
+ type: ccc
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [496, 324.0]
+ rotation: 0
+ state: true
+- name: osmosdr_source_0
+ id: osmosdr_source
+ parameters:
+ affinity: ''
+ alias: ''
+ ant0: ''
+ ant1: ''
+ ant10: ''
+ ant11: ''
+ ant12: ''
+ ant13: ''
+ ant14: ''
+ ant15: ''
+ ant16: ''
+ ant17: ''
+ ant18: ''
+ ant19: ''
+ ant2: ''
+ ant20: ''
+ ant21: ''
+ ant22: ''
+ ant23: ''
+ ant24: ''
+ ant25: ''
+ ant26: ''
+ ant27: ''
+ ant28: ''
+ ant29: ''
+ ant3: ''
+ ant30: ''
+ ant31: ''
+ ant4: ''
+ ant5: ''
+ ant6: ''
+ ant7: ''
+ ant8: ''
+ ant9: ''
+ args: '""'
+ bb_gain0: '20'
+ bb_gain1: '20'
+ bb_gain10: '20'
+ bb_gain11: '20'
+ bb_gain12: '20'
+ bb_gain13: '20'
+ bb_gain14: '20'
+ bb_gain15: '20'
+ bb_gain16: '20'
+ bb_gain17: '20'
+ bb_gain18: '20'
+ bb_gain19: '20'
+ bb_gain2: '20'
+ bb_gain20: '20'
+ bb_gain21: '20'
+ bb_gain22: '20'
+ bb_gain23: '20'
+ bb_gain24: '20'
+ bb_gain25: '20'
+ bb_gain26: '20'
+ bb_gain27: '20'
+ bb_gain28: '20'
+ bb_gain29: '20'
+ bb_gain3: '20'
+ bb_gain30: '20'
+ bb_gain31: '20'
+ bb_gain4: '20'
+ bb_gain5: '20'
+ bb_gain6: '20'
+ bb_gain7: '20'
+ bb_gain8: '20'
+ bb_gain9: '20'
+ bw0: '0'
+ 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'
+ clock_source0: ''
+ clock_source1: ''
+ clock_source2: ''
+ clock_source3: ''
+ clock_source4: ''
+ clock_source5: ''
+ clock_source6: ''
+ clock_source7: ''
+ comment: ''
+ corr0: '0'
+ corr1: '0'
+ corr10: '0'
+ corr11: '0'
+ corr12: '0'
+ corr13: '0'
+ corr14: '0'
+ corr15: '0'
+ corr16: '0'
+ corr17: '0'
+ corr18: '0'
+ corr19: '0'
+ corr2: '0'
+ corr20: '0'
+ corr21: '0'
+ corr22: '0'
+ corr23: '0'
+ corr24: '0'
+ corr25: '0'
+ corr26: '0'
+ corr27: '0'
+ corr28: '0'
+ corr29: '0'
+ corr3: '0'
+ corr30: '0'
+ corr31: '0'
+ corr4: '0'
+ corr5: '0'
+ corr6: '0'
+ corr7: '0'
+ corr8: '0'
+ corr9: '0'
+ dc_offset_mode0: '0'
+ dc_offset_mode1: '0'
+ dc_offset_mode10: '0'
+ dc_offset_mode11: '0'
+ dc_offset_mode12: '0'
+ dc_offset_mode13: '0'
+ dc_offset_mode14: '0'
+ dc_offset_mode15: '0'
+ dc_offset_mode16: '0'
+ dc_offset_mode17: '0'
+ dc_offset_mode18: '0'
+ dc_offset_mode19: '0'
+ dc_offset_mode2: '0'
+ dc_offset_mode20: '0'
+ dc_offset_mode21: '0'
+ dc_offset_mode22: '0'
+ dc_offset_mode23: '0'
+ dc_offset_mode24: '0'
+ dc_offset_mode25: '0'
+ dc_offset_mode26: '0'
+ dc_offset_mode27: '0'
+ dc_offset_mode28: '0'
+ dc_offset_mode29: '0'
+ dc_offset_mode3: '0'
+ dc_offset_mode30: '0'
+ dc_offset_mode31: '0'
+ dc_offset_mode4: '0'
+ dc_offset_mode5: '0'
+ dc_offset_mode6: '0'
+ dc_offset_mode7: '0'
+ dc_offset_mode8: '0'
+ dc_offset_mode9: '0'
+ freq0: '145000000'
+ freq1: 100e6
+ freq10: 100e6
+ freq11: 100e6
+ freq12: 100e6
+ freq13: 100e6
+ freq14: 100e6
+ freq15: 100e6
+ freq16: 100e6
+ freq17: 100e6
+ freq18: 100e6
+ freq19: 100e6
+ freq2: 100e6
+ freq20: 100e6
+ freq21: 100e6
+ freq22: 100e6
+ freq23: 100e6
+ freq24: 100e6
+ freq25: 100e6
+ freq26: 100e6
+ freq27: 100e6
+ freq28: 100e6
+ freq29: 100e6
+ freq3: 100e6
+ freq30: 100e6
+ freq31: 100e6
+ freq4: 100e6
+ freq5: 100e6
+ freq6: 100e6
+ freq7: 100e6
+ freq8: 100e6
+ freq9: 100e6
+ gain0: '10'
+ gain1: '10'
+ gain10: '10'
+ gain11: '10'
+ gain12: '10'
+ gain13: '10'
+ gain14: '10'
+ gain15: '10'
+ gain16: '10'
+ gain17: '10'
+ gain18: '10'
+ gain19: '10'
+ gain2: '10'
+ gain20: '10'
+ gain21: '10'
+ gain22: '10'
+ gain23: '10'
+ gain24: '10'
+ gain25: '10'
+ gain26: '10'
+ gain27: '10'
+ gain28: '10'
+ gain29: '10'
+ gain3: '10'
+ gain30: '10'
+ gain31: '10'
+ gain4: '10'
+ gain5: '10'
+ gain6: '10'
+ gain7: '10'
+ gain8: '10'
+ gain9: '10'
+ gain_mode0: 'False'
+ gain_mode1: 'False'
+ gain_mode10: 'False'
+ gain_mode11: 'False'
+ gain_mode12: 'False'
+ gain_mode13: 'False'
+ gain_mode14: 'False'
+ gain_mode15: 'False'
+ gain_mode16: 'False'
+ gain_mode17: 'False'
+ gain_mode18: 'False'
+ gain_mode19: 'False'
+ gain_mode2: 'False'
+ gain_mode20: 'False'
+ gain_mode21: 'False'
+ gain_mode22: 'False'
+ gain_mode23: 'False'
+ gain_mode24: 'False'
+ gain_mode25: 'False'
+ gain_mode26: 'False'
+ gain_mode27: 'False'
+ gain_mode28: 'False'
+ gain_mode29: 'False'
+ gain_mode3: 'False'
+ gain_mode30: 'False'
+ gain_mode31: 'False'
+ gain_mode4: 'False'
+ gain_mode5: 'False'
+ gain_mode6: 'False'
+ gain_mode7: 'False'
+ gain_mode8: 'False'
+ gain_mode9: 'False'
+ if_gain0: '20'
+ if_gain1: '20'
+ if_gain10: '20'
+ if_gain11: '20'
+ if_gain12: '20'
+ if_gain13: '20'
+ if_gain14: '20'
+ if_gain15: '20'
+ if_gain16: '20'
+ if_gain17: '20'
+ if_gain18: '20'
+ if_gain19: '20'
+ if_gain2: '20'
+ if_gain20: '20'
+ if_gain21: '20'
+ if_gain22: '20'
+ if_gain23: '20'
+ if_gain24: '20'
+ if_gain25: '20'
+ if_gain26: '20'
+ if_gain27: '20'
+ if_gain28: '20'
+ if_gain29: '20'
+ if_gain3: '20'
+ if_gain30: '20'
+ if_gain31: '20'
+ if_gain4: '20'
+ if_gain5: '20'
+ if_gain6: '20'
+ if_gain7: '20'
+ if_gain8: '20'
+ if_gain9: '20'
+ iq_balance_mode0: '0'
+ iq_balance_mode1: '0'
+ iq_balance_mode10: '0'
+ iq_balance_mode11: '0'
+ iq_balance_mode12: '0'
+ iq_balance_mode13: '0'
+ iq_balance_mode14: '0'
+ iq_balance_mode15: '0'
+ iq_balance_mode16: '0'
+ iq_balance_mode17: '0'
+ iq_balance_mode18: '0'
+ iq_balance_mode19: '0'
+ iq_balance_mode2: '0'
+ iq_balance_mode20: '0'
+ iq_balance_mode21: '0'
+ iq_balance_mode22: '0'
+ iq_balance_mode23: '0'
+ iq_balance_mode24: '0'
+ iq_balance_mode25: '0'
+ iq_balance_mode26: '0'
+ iq_balance_mode27: '0'
+ iq_balance_mode28: '0'
+ iq_balance_mode29: '0'
+ iq_balance_mode3: '0'
+ iq_balance_mode30: '0'
+ iq_balance_mode31: '0'
+ iq_balance_mode4: '0'
+ iq_balance_mode5: '0'
+ iq_balance_mode6: '0'
+ iq_balance_mode7: '0'
+ iq_balance_mode8: '0'
+ iq_balance_mode9: '0'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ nchan: '1'
+ num_mboards: '1'
+ sample_rate: samp_rate
+ 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: [104, 148.0]
+ rotation: 0
+ state: true
+- name: qtgui_freq_sink_x_0
+ id: qtgui_freq_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'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ 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'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ label: Relative Gain
+ label1: ''
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ norm_window: 'False'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: complex
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [400, 28.0]
+ rotation: 180
+ state: true
+- 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
+ 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: [896, 324.0]
+ rotation: 180
+ state: true
+- name: qtgui_waterfall_sink_x_0
+ id: qtgui_waterfall_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'
+ axislabels: 'True'
+ bw: '120000'
+ color1: '0'
+ color10: '0'
+ color2: '0'
+ color3: '0'
+ color4: '0'
+ color5: '0'
+ color6: '0'
+ color7: '0'
+ color8: '0'
+ color9: '0'
+ comment: ''
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ int_max: '10'
+ int_min: '-140'
+ label1: ''
+ label10: ''
+ label2: ''
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ showports: 'False'
+ type: complex
+ update_time: '0.10'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [640, 236.0]
+ rotation: 0
+ state: true
+- name: satellites_ax25_deframer_0
+ id: satellites_ax25_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ g3ruh_scrambler: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [880, 132.0]
+ rotation: 180
+ state: true
+- name: satellites_telemetry_parser_0
+ id: satellites_telemetry_parser
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ definition: gomx_1
+ file: /home/jonathan/CommsSDR/output/output_AX25.txt
+ options: '""'
+ output: file
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 172.0]
+ rotation: 180
+ state: true
+
+connections:
+- [blocks_throttle_0, '0', blocks_file_sink_1, '0']
+- [blocks_throttle_0, '0', freq_xlating_fir_filter_xxx_0, '0']
+- [blocks_throttle_0, '0', qtgui_freq_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', qtgui_time_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', satellites_ax25_deframer_0, '0']
+- [digital_gfsk_demod_0, '0', blocks_uchar_to_float_0, '0']
+- [freq_xlating_fir_filter_xxx_0, '0', digital_gfsk_demod_0, '0']
+- [freq_xlating_fir_filter_xxx_0, '0', qtgui_waterfall_sink_x_0, '0']
+- [osmosdr_source_0, '0', blocks_throttle_0, '0']
+- [satellites_ax25_deframer_0, out, blocks_message_debug_0, print]
+- [satellites_ax25_deframer_0, out, blocks_message_debug_0, print_pdu]
+- [satellites_ax25_deframer_0, out, satellites_telemetry_parser_0, in]
+
+metadata:
+ file_format: 1
diff --git a/WavProcessing/ax100Wav_parser.py b/WavProcessing/ax100Wav_parser.py
new file mode 100755
index 0000000..607c984
--- /dev/null
+++ b/WavProcessing/ax100Wav_parser.py
@@ -0,0 +1,294 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+#
+# SPDX-License-Identifier: GPL-3.0
+#
+# GNU Radio Python Flow Graph
+# Title: Not titled yet
+# GNU Radio version: 3.9.4.0
+
+from distutils.version import StrictVersion
+
+if __name__ == '__main__':
+ import ctypes
+ import sys
+ if sys.platform.startswith('linux'):
+ try:
+ x11 = ctypes.cdll.LoadLibrary('libX11.so')
+ x11.XInitThreads()
+ except:
+ print("Warning: failed to XInitThreads()")
+
+from PyQt5 import Qt
+from gnuradio import qtgui
+from gnuradio.filter import firdes
+import sip
+from gnuradio import blocks
+import pmt
+from gnuradio import digital
+from gnuradio import gr
+from gnuradio.fft import window
+import sys
+import signal
+from argparse import ArgumentParser
+from gnuradio.eng_arg import eng_float, intx
+from gnuradio import eng_notation
+import satellites.components.datasinks
+import satellites.components.deframers
+
+
+
+from gnuradio import qtgui
+
+class ax100Wav_parser(gr.top_block, Qt.QWidget):
+
+ def __init__(self):
+ gr.top_block.__init__(self, "Not titled yet", catch_exceptions=True)
+ Qt.QWidget.__init__(self)
+ self.setWindowTitle("Not titled yet")
+ qtgui.util.check_set_qss()
+ try:
+ self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
+ except:
+ pass
+ self.top_scroll_layout = Qt.QVBoxLayout()
+ self.setLayout(self.top_scroll_layout)
+ self.top_scroll = Qt.QScrollArea()
+ self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
+ self.top_scroll_layout.addWidget(self.top_scroll)
+ self.top_scroll.setWidgetResizable(True)
+ self.top_widget = Qt.QWidget()
+ self.top_scroll.setWidget(self.top_widget)
+ self.top_layout = Qt.QVBoxLayout(self.top_widget)
+ self.top_grid_layout = Qt.QGridLayout()
+ self.top_layout.addLayout(self.top_grid_layout)
+
+ self.settings = Qt.QSettings("GNU Radio", "ax100Wav_parser")
+
+ try:
+ if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ self.restoreGeometry(self.settings.value("geometry").toByteArray())
+ else:
+ self.restoreGeometry(self.settings.value("geometry"))
+ except:
+ pass
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.samp_rate = samp_rate = 2.4e6
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.satellites_telemetry_parser_0 = satellites.components.datasinks.telemetry_parser('gomx_1', file = '/home/jonathan/CommsSDR/output/output_AX100.txt', options="")
+ self.satellites_ax100_deframer_0 = satellites.components.deframers.ax100_deframer(mode = "ASM", scrambler = "CCSDS", syncword_threshold = 0, options="")
+ self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c(
+ 1024, #size
+ window.WIN_BLACKMAN_hARRIS, #wintype
+ 0, #fc
+ samp_rate, #bw
+ "", #name
+ 1, #number of inputs
+ None # parent
+ )
+ self.qtgui_waterfall_sink_x_0.set_update_time(0.10)
+ self.qtgui_waterfall_sink_x_0.enable_grid(False)
+ self.qtgui_waterfall_sink_x_0.enable_axis_labels(True)
+
+
+
+ labels = ['', '', '', '', '',
+ '', '', '', '', '']
+ colors = [0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0]
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+
+ for i in range(1):
+ if len(labels[i]) == 0:
+ self.qtgui_waterfall_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i])
+ self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10)
+
+ self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.qwidget(), Qt.QWidget)
+
+ self.top_layout.addWidget(self._qtgui_waterfall_sink_x_0_win)
+ self.qtgui_time_sink_x_0 = qtgui.time_sink_f(
+ 1024, #size
+ samp_rate, #samp_rate
+ "", #name
+ 1, #number of inputs
+ None # parent
+ )
+ self.qtgui_time_sink_x_0.set_update_time(0.10)
+ self.qtgui_time_sink_x_0.set_y_axis(-1, 1)
+
+ self.qtgui_time_sink_x_0.set_y_label('Amplitude', "")
+
+ self.qtgui_time_sink_x_0.enable_tags(True)
+ self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
+ self.qtgui_time_sink_x_0.enable_autoscale(False)
+ self.qtgui_time_sink_x_0.enable_grid(False)
+ self.qtgui_time_sink_x_0.enable_axis_labels(True)
+ self.qtgui_time_sink_x_0.enable_control_panel(False)
+ self.qtgui_time_sink_x_0.enable_stem_plot(False)
+
+
+ labels = ['Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5',
+ 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10']
+ widths = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ colors = ['blue', 'red', 'green', 'black', 'cyan',
+ 'magenta', 'yellow', 'dark red', 'dark green', 'dark blue']
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+ styles = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ markers = [-1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1]
+
+
+ for i in range(1):
+ if len(labels[i]) == 0:
+ self.qtgui_time_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_time_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_time_sink_x_0.set_line_width(i, widths[i])
+ self.qtgui_time_sink_x_0.set_line_color(i, colors[i])
+ self.qtgui_time_sink_x_0.set_line_style(i, styles[i])
+ self.qtgui_time_sink_x_0.set_line_marker(i, markers[i])
+ self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self._qtgui_time_sink_x_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0.qwidget(), Qt.QWidget)
+ self.top_layout.addWidget(self._qtgui_time_sink_x_0_win)
+ self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
+ 1024, #size
+ window.WIN_BLACKMAN_hARRIS, #wintype
+ 0, #fc
+ samp_rate, #bw
+ "", #name
+ 1,
+ None # parent
+ )
+ self.qtgui_freq_sink_x_0.set_update_time(0.10)
+ self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
+ self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
+ self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
+ self.qtgui_freq_sink_x_0.enable_autoscale(False)
+ self.qtgui_freq_sink_x_0.enable_grid(False)
+ self.qtgui_freq_sink_x_0.set_fft_average(1.0)
+ self.qtgui_freq_sink_x_0.enable_axis_labels(True)
+ self.qtgui_freq_sink_x_0.enable_control_panel(False)
+ self.qtgui_freq_sink_x_0.set_fft_window_normalized(False)
+
+
+
+ labels = ['', '', '', '', '',
+ '', '', '', '', '']
+ widths = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ colors = ["blue", "red", "green", "black", "cyan",
+ "magenta", "yellow", "dark red", "dark green", "dark blue"]
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+
+ for i in range(1):
+ if len(labels[i]) == 0:
+ self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
+ self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
+ self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.qwidget(), Qt.QWidget)
+ self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
+ self.digital_gfsk_demod_0 = digital.gfsk_demod(
+ samples_per_symbol=2,
+ sensitivity=1.0,
+ gain_mu=0.175,
+ mu=0.5,
+ omega_relative_limit=0.005,
+ freq_error=0.0,
+ verbose=False,
+ log=True)
+ self.blocks_uchar_to_float_0 = blocks.uchar_to_float()
+ self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
+ self.blocks_message_debug_0 = blocks.message_debug(True)
+ self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, '/home/jonathan/CommsSDR/output/recordingASMGolay.wav', False, 0, 0)
+ self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL)
+
+
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.msg_connect((self.satellites_ax100_deframer_0, 'out'), (self.blocks_message_debug_0, 'print_pdu'))
+ self.msg_connect((self.satellites_ax100_deframer_0, 'out'), (self.blocks_message_debug_0, 'print'))
+ self.msg_connect((self.satellites_ax100_deframer_0, 'out'), (self.satellites_telemetry_parser_0, 'in'))
+ self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0))
+ self.connect((self.blocks_throttle_0, 0), (self.digital_gfsk_demod_0, 0))
+ self.connect((self.blocks_throttle_0, 0), (self.qtgui_freq_sink_x_0, 0))
+ self.connect((self.blocks_throttle_0, 0), (self.qtgui_waterfall_sink_x_0, 0))
+ self.connect((self.blocks_uchar_to_float_0, 0), (self.qtgui_time_sink_x_0, 0))
+ self.connect((self.blocks_uchar_to_float_0, 0), (self.satellites_ax100_deframer_0, 0))
+ self.connect((self.digital_gfsk_demod_0, 0), (self.blocks_uchar_to_float_0, 0))
+
+
+ def closeEvent(self, event):
+ self.settings = Qt.QSettings("GNU Radio", "ax100Wav_parser")
+ self.settings.setValue("geometry", self.saveGeometry())
+ self.stop()
+ self.wait()
+
+ event.accept()
+
+ def get_samp_rate(self):
+ return self.samp_rate
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+ self.blocks_throttle_0.set_sample_rate(self.samp_rate)
+ self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
+ self.qtgui_time_sink_x_0.set_samp_rate(self.samp_rate)
+ self.qtgui_waterfall_sink_x_0.set_frequency_range(0, self.samp_rate)
+
+
+
+
+def main(top_block_cls=ax100Wav_parser, options=None):
+
+ if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ style = gr.prefs().get_string('qtgui', 'style', 'raster')
+ Qt.QApplication.setGraphicsSystem(style)
+ qapp = Qt.QApplication(sys.argv)
+
+ tb = top_block_cls()
+
+ tb.start()
+
+ tb.show()
+
+ def sig_handler(sig=None, frame=None):
+ tb.stop()
+ tb.wait()
+
+ Qt.QApplication.quit()
+
+ signal.signal(signal.SIGINT, sig_handler)
+ signal.signal(signal.SIGTERM, sig_handler)
+
+ timer = Qt.QTimer()
+ timer.start(500)
+ timer.timeout.connect(lambda: None)
+
+ qapp.exec_()
+
+if __name__ == '__main__':
+ main()
diff --git a/WavProcessing/ax25wav_parser.py b/WavProcessing/ax25wav_parser.py
new file mode 100755
index 0000000..77ff1db
--- /dev/null
+++ b/WavProcessing/ax25wav_parser.py
@@ -0,0 +1,313 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+#
+# SPDX-License-Identifier: GPL-3.0
+#
+# GNU Radio Python Flow Graph
+# Title: Not titled yet
+# GNU Radio version: 3.9.4.0
+
+from distutils.version import StrictVersion
+
+if __name__ == '__main__':
+ import ctypes
+ import sys
+ if sys.platform.startswith('linux'):
+ try:
+ x11 = ctypes.cdll.LoadLibrary('libX11.so')
+ x11.XInitThreads()
+ except:
+ print("Warning: failed to XInitThreads()")
+
+from PyQt5 import Qt
+from gnuradio import qtgui
+from gnuradio.filter import firdes
+import sip
+from gnuradio import blocks
+import pmt
+from gnuradio import digital
+from gnuradio import filter
+from gnuradio import gr
+from gnuradio.fft import window
+import sys
+import signal
+from argparse import ArgumentParser
+from gnuradio.eng_arg import eng_float, intx
+from gnuradio import eng_notation
+import satellites.components.datasinks
+import satellites.components.deframers
+
+
+
+from gnuradio import qtgui
+
+class ax25wav_parser(gr.top_block, Qt.QWidget):
+
+ def __init__(self):
+ gr.top_block.__init__(self, "Not titled yet", catch_exceptions=True)
+ Qt.QWidget.__init__(self)
+ self.setWindowTitle("Not titled yet")
+ qtgui.util.check_set_qss()
+ try:
+ self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
+ except:
+ pass
+ self.top_scroll_layout = Qt.QVBoxLayout()
+ self.setLayout(self.top_scroll_layout)
+ self.top_scroll = Qt.QScrollArea()
+ self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
+ self.top_scroll_layout.addWidget(self.top_scroll)
+ self.top_scroll.setWidgetResizable(True)
+ self.top_widget = Qt.QWidget()
+ self.top_scroll.setWidget(self.top_widget)
+ self.top_layout = Qt.QVBoxLayout(self.top_widget)
+ self.top_grid_layout = Qt.QGridLayout()
+ self.top_layout.addLayout(self.top_grid_layout)
+
+ self.settings = Qt.QSettings("GNU Radio", "ax25wav_parser")
+
+ try:
+ if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ self.restoreGeometry(self.settings.value("geometry").toByteArray())
+ else:
+ self.restoreGeometry(self.settings.value("geometry"))
+ except:
+ pass
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.transition_bw = transition_bw = 1000
+ self.samp_rate = samp_rate = 2.4e6
+ self.decimation = decimation = 20
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.satellites_telemetry_parser_0 = satellites.components.datasinks.telemetry_parser('gomx_1', file = '/home/jonathan/CommsSDR/output/output_AX25.txt', options="")
+ self.satellites_ax25_deframer_0 = satellites.components.deframers.ax25_deframer(g3ruh_scrambler=True, options="")
+ self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c(
+ 1024, #size
+ window.WIN_BLACKMAN_hARRIS, #wintype
+ 0, #fc
+ 120000, #bw
+ "", #name
+ 1, #number of inputs
+ None # parent
+ )
+ self.qtgui_waterfall_sink_x_0.set_update_time(0.10)
+ self.qtgui_waterfall_sink_x_0.enable_grid(False)
+ self.qtgui_waterfall_sink_x_0.enable_axis_labels(True)
+
+
+
+ labels = ['', '', '', '', '',
+ '', '', '', '', '']
+ colors = [0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0]
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+
+ for i in range(1):
+ if len(labels[i]) == 0:
+ self.qtgui_waterfall_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i])
+ self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10)
+
+ self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.qwidget(), Qt.QWidget)
+
+ self.top_layout.addWidget(self._qtgui_waterfall_sink_x_0_win)
+ self.qtgui_time_sink_x_0 = qtgui.time_sink_f(
+ 1024, #size
+ samp_rate, #samp_rate
+ "", #name
+ 1, #number of inputs
+ None # parent
+ )
+ self.qtgui_time_sink_x_0.set_update_time(0.10)
+ self.qtgui_time_sink_x_0.set_y_axis(-1, 1)
+
+ self.qtgui_time_sink_x_0.set_y_label('Amplitude', "")
+
+ self.qtgui_time_sink_x_0.enable_tags(True)
+ self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
+ self.qtgui_time_sink_x_0.enable_autoscale(False)
+ self.qtgui_time_sink_x_0.enable_grid(False)
+ self.qtgui_time_sink_x_0.enable_axis_labels(True)
+ self.qtgui_time_sink_x_0.enable_control_panel(False)
+ self.qtgui_time_sink_x_0.enable_stem_plot(False)
+
+
+ labels = ['Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5',
+ 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10']
+ widths = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ colors = ['blue', 'red', 'green', 'black', 'cyan',
+ 'magenta', 'yellow', 'dark red', 'dark green', 'dark blue']
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+ styles = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ markers = [-1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1]
+
+
+ for i in range(1):
+ if len(labels[i]) == 0:
+ self.qtgui_time_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_time_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_time_sink_x_0.set_line_width(i, widths[i])
+ self.qtgui_time_sink_x_0.set_line_color(i, colors[i])
+ self.qtgui_time_sink_x_0.set_line_style(i, styles[i])
+ self.qtgui_time_sink_x_0.set_line_marker(i, markers[i])
+ self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self._qtgui_time_sink_x_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0.qwidget(), Qt.QWidget)
+ self.top_layout.addWidget(self._qtgui_time_sink_x_0_win)
+ self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
+ 1024, #size
+ window.WIN_BLACKMAN_hARRIS, #wintype
+ 0, #fc
+ samp_rate, #bw
+ "", #name
+ 1,
+ None # parent
+ )
+ self.qtgui_freq_sink_x_0.set_update_time(0.10)
+ self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
+ self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
+ self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
+ self.qtgui_freq_sink_x_0.enable_autoscale(False)
+ self.qtgui_freq_sink_x_0.enable_grid(False)
+ self.qtgui_freq_sink_x_0.set_fft_average(1.0)
+ self.qtgui_freq_sink_x_0.enable_axis_labels(True)
+ self.qtgui_freq_sink_x_0.enable_control_panel(False)
+ self.qtgui_freq_sink_x_0.set_fft_window_normalized(False)
+
+
+
+ labels = ['', '', '', '', '',
+ '', '', '', '', '']
+ widths = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ colors = ["blue", "red", "green", "black", "cyan",
+ "magenta", "yellow", "dark red", "dark green", "dark blue"]
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+
+ for i in range(1):
+ if len(labels[i]) == 0:
+ self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
+ self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
+ self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.qwidget(), Qt.QWidget)
+ self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
+ self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc(decimation, firdes.complex_band_pass(1, samp_rate, -samp_rate/(2*decimation), samp_rate/(2*decimation), transition_bw), 0, samp_rate)
+ self.digital_gfsk_demod_0 = digital.gfsk_demod(
+ samples_per_symbol=2,
+ sensitivity=1.0,
+ gain_mu=0.175,
+ mu=0.5,
+ omega_relative_limit=0.005,
+ freq_error=0.0,
+ verbose=False,
+ log=True)
+ self.blocks_uchar_to_float_0 = blocks.uchar_to_float()
+ self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
+ self.blocks_message_debug_0 = blocks.message_debug(True)
+ self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, '/home/jonathan/CommsSDR/output/recordingAX25.wav', True, 0, 0)
+ self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL)
+
+
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.msg_connect((self.satellites_ax25_deframer_0, 'out'), (self.blocks_message_debug_0, 'print'))
+ self.msg_connect((self.satellites_ax25_deframer_0, 'out'), (self.blocks_message_debug_0, 'print_pdu'))
+ self.msg_connect((self.satellites_ax25_deframer_0, 'out'), (self.satellites_telemetry_parser_0, 'in'))
+ self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0))
+ self.connect((self.blocks_throttle_0, 0), (self.freq_xlating_fir_filter_xxx_0, 0))
+ self.connect((self.blocks_throttle_0, 0), (self.qtgui_freq_sink_x_0, 0))
+ self.connect((self.blocks_uchar_to_float_0, 0), (self.qtgui_time_sink_x_0, 0))
+ self.connect((self.blocks_uchar_to_float_0, 0), (self.satellites_ax25_deframer_0, 0))
+ self.connect((self.digital_gfsk_demod_0, 0), (self.blocks_uchar_to_float_0, 0))
+ self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.digital_gfsk_demod_0, 0))
+ self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.qtgui_waterfall_sink_x_0, 0))
+
+
+ def closeEvent(self, event):
+ self.settings = Qt.QSettings("GNU Radio", "ax25wav_parser")
+ self.settings.setValue("geometry", self.saveGeometry())
+ self.stop()
+ self.wait()
+
+ event.accept()
+
+ def get_transition_bw(self):
+ return self.transition_bw
+
+ def set_transition_bw(self, transition_bw):
+ self.transition_bw = transition_bw
+ self.freq_xlating_fir_filter_xxx_0.set_taps( firdes.complex_band_pass(1, self.samp_rate, -self.samp_rate/(2*self.decimation), self.samp_rate/(2*self.decimation), self.transition_bw))
+
+ def get_samp_rate(self):
+ return self.samp_rate
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+ self.blocks_throttle_0.set_sample_rate(self.samp_rate)
+ self.freq_xlating_fir_filter_xxx_0.set_taps( firdes.complex_band_pass(1, self.samp_rate, -self.samp_rate/(2*self.decimation), self.samp_rate/(2*self.decimation), self.transition_bw))
+ self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
+ self.qtgui_time_sink_x_0.set_samp_rate(self.samp_rate)
+
+ def get_decimation(self):
+ return self.decimation
+
+ def set_decimation(self, decimation):
+ self.decimation = decimation
+ self.freq_xlating_fir_filter_xxx_0.set_taps( firdes.complex_band_pass(1, self.samp_rate, -self.samp_rate/(2*self.decimation), self.samp_rate/(2*self.decimation), self.transition_bw))
+
+
+
+
+def main(top_block_cls=ax25wav_parser, options=None):
+
+ if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ style = gr.prefs().get_string('qtgui', 'style', 'raster')
+ Qt.QApplication.setGraphicsSystem(style)
+ qapp = Qt.QApplication(sys.argv)
+
+ tb = top_block_cls()
+
+ tb.start()
+
+ tb.show()
+
+ def sig_handler(sig=None, frame=None):
+ tb.stop()
+ tb.wait()
+
+ Qt.QApplication.quit()
+
+ signal.signal(signal.SIGINT, sig_handler)
+ signal.signal(signal.SIGTERM, sig_handler)
+
+ timer = Qt.QTimer()
+ timer.start(500)
+ timer.timeout.connect(lambda: None)
+
+ qapp.exec_()
+
+if __name__ == '__main__':
+ main()
diff --git a/WavProcessing/wav_parser_AX100GolayASM.grc b/WavProcessing/wav_parser_AX100GolayASM.grc
new file mode 100644
index 0000000..754de44
--- /dev/null
+++ b/WavProcessing/wav_parser_AX100GolayASM.grc
@@ -0,0 +1,429 @@
+options:
+ parameters:
+ author: ''
+ 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: ax100Wav_parser
+ 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
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 20.0]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: 2.4e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 12]
+ rotation: 0
+ state: enabled
+- name: blocks_file_source_0
+ id: blocks_file_source
+ parameters:
+ affinity: ''
+ alias: ''
+ begin_tag: pmt.PMT_NIL
+ comment: ''
+ file: /home/jonathan/CommsSDR/output/recordingASMGolay.wav
+ length: '0'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ offset: '0'
+ repeat: 'False'
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [96, 124.0]
+ rotation: 0
+ state: true
+- name: blocks_message_debug_0
+ id: blocks_message_debug
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ en_uvec: 'True'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [936, 208.0]
+ rotation: 0
+ state: true
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [408, 116.0]
+ rotation: 0
+ state: true
+- name: blocks_uchar_to_float_0
+ id: blocks_uchar_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [920, 72.0]
+ rotation: 0
+ state: true
+- name: digital_gfsk_demod_0
+ id: digital_gfsk_demod
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ freq_error: '0.0'
+ gain_mu: '0.175'
+ log: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mu: '0.5'
+ omega_relative_limit: '0.005'
+ samples_per_symbol: '2'
+ sensitivity: '1.0'
+ verbose: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [632, 28.0]
+ rotation: 0
+ state: true
+- name: qtgui_freq_sink_x_0
+ id: qtgui_freq_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'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ 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'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ label: Relative Gain
+ label1: ''
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ norm_window: 'False'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: complex
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [400, 28.0]
+ rotation: 180
+ state: true
+- 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
+ 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: [896, 324.0]
+ rotation: 180
+ state: true
+- name: qtgui_waterfall_sink_x_0
+ id: qtgui_waterfall_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'
+ axislabels: 'True'
+ bw: samp_rate
+ color1: '0'
+ color10: '0'
+ color2: '0'
+ color3: '0'
+ color4: '0'
+ color5: '0'
+ color6: '0'
+ color7: '0'
+ color8: '0'
+ color9: '0'
+ comment: ''
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ int_max: '10'
+ int_min: '-140'
+ label1: ''
+ label10: ''
+ label2: ''
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ showports: 'False'
+ type: complex
+ update_time: '0.10'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 244.0]
+ rotation: 0
+ state: true
+- name: satellites_ax100_deframer_0
+ id: satellites_ax100_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mode: '"ASM"'
+ options: '""'
+ scrambler: '"CCSDS"'
+ threshold: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [856, 124.0]
+ rotation: 180
+ state: true
+- name: satellites_telemetry_parser_0
+ id: satellites_telemetry_parser
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ definition: gomx_1
+ file: /home/jonathan/CommsSDR/output/output_AX100.txt
+ options: '""'
+ output: file
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 172.0]
+ rotation: 180
+ state: true
+
+connections:
+- [blocks_file_source_0, '0', blocks_throttle_0, '0']
+- [blocks_throttle_0, '0', digital_gfsk_demod_0, '0']
+- [blocks_throttle_0, '0', qtgui_freq_sink_x_0, '0']
+- [blocks_throttle_0, '0', qtgui_waterfall_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', qtgui_time_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', satellites_ax100_deframer_0, '0']
+- [digital_gfsk_demod_0, '0', blocks_uchar_to_float_0, '0']
+- [satellites_ax100_deframer_0, out, blocks_message_debug_0, print]
+- [satellites_ax100_deframer_0, out, blocks_message_debug_0, print_pdu]
+- [satellites_ax100_deframer_0, out, satellites_telemetry_parser_0, in]
+
+metadata:
+ file_format: 1
diff --git a/WavProcessing/wav_parser_AX25.grc b/WavProcessing/wav_parser_AX25.grc
new file mode 100644
index 0000000..2361f9e
--- /dev/null
+++ b/WavProcessing/wav_parser_AX25.grc
@@ -0,0 +1,473 @@
+options:
+ parameters:
+ author: ''
+ 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: ax25wav_parser
+ 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
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 20.0]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: decimation
+ id: variable
+ parameters:
+ comment: ''
+ value: '20'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 76.0]
+ rotation: 0
+ state: enabled
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: 2.4e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 12]
+ rotation: 0
+ state: enabled
+- name: transition_bw
+ id: variable
+ parameters:
+ comment: ''
+ value: '1000'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [280, 12.0]
+ rotation: 0
+ state: enabled
+- name: blocks_file_source_0
+ id: blocks_file_source
+ parameters:
+ affinity: ''
+ alias: ''
+ begin_tag: pmt.PMT_NIL
+ comment: ''
+ file: /home/jonathan/CommsSDR/output/recordingAX25.wav
+ length: '0'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ offset: '0'
+ repeat: 'False'
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [152, 156.0]
+ rotation: 0
+ state: true
+- name: blocks_message_debug_0
+ id: blocks_message_debug
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ en_uvec: 'True'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [936, 208.0]
+ rotation: 0
+ state: true
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [408, 116.0]
+ rotation: 0
+ state: true
+- name: blocks_uchar_to_float_0
+ id: blocks_uchar_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [920, 72.0]
+ rotation: 0
+ state: true
+- name: digital_gfsk_demod_0
+ id: digital_gfsk_demod
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ freq_error: '0.0'
+ gain_mu: '0.175'
+ log: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mu: '0.5'
+ omega_relative_limit: '0.005'
+ samples_per_symbol: '2'
+ sensitivity: '1.0'
+ verbose: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [632, 28.0]
+ rotation: 0
+ state: true
+- name: freq_xlating_fir_filter_xxx_0
+ id: freq_xlating_fir_filter_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ center_freq: '0'
+ comment: ''
+ decim: decimation
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samp_rate: samp_rate
+ taps: ' firdes.complex_band_pass(1, samp_rate, -samp_rate/(2*decimation), samp_rate/(2*decimation),
+ transition_bw)'
+ type: ccc
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [496, 324.0]
+ rotation: 0
+ state: true
+- name: qtgui_freq_sink_x_0
+ id: qtgui_freq_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'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ 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'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ label: Relative Gain
+ label1: ''
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ norm_window: 'False'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: complex
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [400, 28.0]
+ rotation: 180
+ state: true
+- 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
+ 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: [896, 324.0]
+ rotation: 180
+ state: true
+- name: qtgui_waterfall_sink_x_0
+ id: qtgui_waterfall_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'
+ axislabels: 'True'
+ bw: '120000'
+ color1: '0'
+ color10: '0'
+ color2: '0'
+ color3: '0'
+ color4: '0'
+ color5: '0'
+ color6: '0'
+ color7: '0'
+ color8: '0'
+ color9: '0'
+ comment: ''
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: ''
+ int_max: '10'
+ int_min: '-140'
+ label1: ''
+ label10: ''
+ label2: ''
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '1'
+ showports: 'False'
+ type: complex
+ update_time: '0.10'
+ wintype: window.WIN_BLACKMAN_hARRIS
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [640, 236.0]
+ rotation: 0
+ state: true
+- name: satellites_ax25_deframer_0
+ id: satellites_ax25_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ g3ruh_scrambler: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [880, 132.0]
+ rotation: 180
+ state: true
+- name: satellites_telemetry_parser_0
+ id: satellites_telemetry_parser
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ definition: gomx_1
+ file: /home/jonathan/CommsSDR/output/output_AX25.txt
+ options: '""'
+ output: file
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 172.0]
+ rotation: 180
+ state: true
+
+connections:
+- [blocks_file_source_0, '0', blocks_throttle_0, '0']
+- [blocks_throttle_0, '0', freq_xlating_fir_filter_xxx_0, '0']
+- [blocks_throttle_0, '0', qtgui_freq_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', qtgui_time_sink_x_0, '0']
+- [blocks_uchar_to_float_0, '0', satellites_ax25_deframer_0, '0']
+- [digital_gfsk_demod_0, '0', blocks_uchar_to_float_0, '0']
+- [freq_xlating_fir_filter_xxx_0, '0', digital_gfsk_demod_0, '0']
+- [freq_xlating_fir_filter_xxx_0, '0', qtgui_waterfall_sink_x_0, '0']
+- [satellites_ax25_deframer_0, out, blocks_message_debug_0, print]
+- [satellites_ax25_deframer_0, out, blocks_message_debug_0, print_pdu]
+- [satellites_ax25_deframer_0, out, satellites_telemetry_parser_0, in]
+
+metadata:
+ file_format: 1
diff --git a/addPythonPaths.txt b/addPythonPaths.txt
new file mode 100644
index 0000000..22ebd8d
--- /dev/null
+++ b/addPythonPaths.txt
@@ -0,0 +1,2 @@
+export PYTHONPATH=/usr/local/lib/python3.10/site-packages
+export LD_LIBRARY_PATH=/usr/local/lib
diff --git a/examples/.idea/.gitignore b/examples/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/examples/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/examples/.idea/Workshop Tutorials.iml b/examples/.idea/Workshop Tutorials.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/examples/.idea/Workshop Tutorials.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/discord.xml b/examples/.idea/discord.xml
new file mode 100644
index 0000000..30bab2a
--- /dev/null
+++ b/examples/.idea/discord.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/inspectionProfiles/Project_Default.xml b/examples/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..d12e343
--- /dev/null
+++ b/examples/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/inspectionProfiles/profiles_settings.xml b/examples/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/examples/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/misc.xml b/examples/.idea/misc.xml
new file mode 100644
index 0000000..dc9ea49
--- /dev/null
+++ b/examples/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/examples/.idea/modules.xml b/examples/.idea/modules.xml
new file mode 100644
index 0000000..a0270f5
--- /dev/null
+++ b/examples/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/GESAC Workshop software tutorial.pptx b/examples/GESAC Workshop software tutorial.pptx
new file mode 100644
index 0000000..908ce62
Binary files /dev/null and b/examples/GESAC Workshop software tutorial.pptx differ
diff --git a/examples/fm_radio/fm_radio_rx.py b/examples/fm_radio/fm_radio_rx.py
new file mode 100644
index 0000000..4c92003
--- /dev/null
+++ b/examples/fm_radio/fm_radio_rx.py
@@ -0,0 +1,202 @@
+
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: Radio
+# Generated: Wed Aug 13 10:59:27 2014
+##################################################
+
+from gnuradio import analog
+from gnuradio import audio
+from gnuradio import blocks
+from gnuradio import eng_notation
+from gnuradio import filter
+from gnuradio import gr
+from gnuradio import wxgui
+from gnuradio.eng_option import eng_option
+from gnuradio.fft import window
+from gnuradio.filter import firdes
+from gnuradio.wxgui import fftsink2
+from gnuradio.wxgui import forms
+from grc_gnuradio import wxgui as grc_wxgui
+from optparse import OptionParser
+import osmosdr
+import wx
+
+class radio(grc_wxgui.top_block_gui):
+
+ def __init__(self):
+ grc_wxgui.top_block_gui.__init__(self, title="Radio")
+ _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
+ self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.volume = volume = 1
+ self.sample_rate = sample_rate = 5e6
+ self.freq = freq = 107.1e6
+ self.fm_sample = fm_sample = 500e3
+ self.audio_rate = audio_rate = 48e3
+
+ ##################################################
+ # Blocks
+ ##################################################
+ _volume_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._volume_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_volume_sizer,
+ value=self.volume,
+ callback=self.set_volume,
+ label="Volume",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._volume_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_volume_sizer,
+ value=self.volume,
+ callback=self.set_volume,
+ minimum=0,
+ maximum=10,
+ num_steps=20,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.Add(_volume_sizer)
+ _freq_sizer = wx.BoxSizer(wx.VERTICAL)
+ self._freq_text_box = forms.text_box(
+ parent=self.GetWin(),
+ sizer=_freq_sizer,
+ value=self.freq,
+ callback=self.set_freq,
+ label="Frequency",
+ converter=forms.float_converter(),
+ proportion=0,
+ )
+ self._freq_slider = forms.slider(
+ parent=self.GetWin(),
+ sizer=_freq_sizer,
+ value=self.freq,
+ callback=self.set_freq,
+ minimum=80e6,
+ maximum=180e6,
+ num_steps=1000,
+ style=wx.SL_HORIZONTAL,
+ cast=float,
+ proportion=1,
+ )
+ self.Add(_freq_sizer)
+ self.wxgui_fftsink2_0 = fftsink2.fft_sink_c(
+ self.GetWin(),
+ baseband_freq=freq,
+ y_per_div=10,
+ y_divs=10,
+ ref_level=0,
+ ref_scale=2.0,
+ sample_rate=sample_rate,
+ fft_size=1024,
+ fft_rate=15,
+ average=False,
+ avg_alpha=None,
+ title="FFT Plot",
+ peak_hold=False,
+ )
+ self.Add(self.wxgui_fftsink2_0.win)
+ self.rational_resampler_xxx_0 = filter.rational_resampler_fff(
+ interpolation=int(audio_rate/1000),
+ decimation=int(fm_sample/10000),
+ taps=None,
+ fractional_bw=None,
+ )
+ self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" )
+ self.osmosdr_source_0.set_sample_rate(sample_rate)
+ self.osmosdr_source_0.set_center_freq(freq, 0)
+ self.osmosdr_source_0.set_freq_corr(0, 0)
+ self.osmosdr_source_0.set_dc_offset_mode(0, 0)
+ self.osmosdr_source_0.set_iq_balance_mode(0, 0)
+ self.osmosdr_source_0.set_gain_mode(False, 0)
+ self.osmosdr_source_0.set_gain(10, 0)
+ self.osmosdr_source_0.set_if_gain(20, 0)
+ self.osmosdr_source_0.set_bb_gain(20, 0)
+ self.osmosdr_source_0.set_antenna("", 0)
+ self.osmosdr_source_0.set_bandwidth(0, 0)
+
+ self.low_pass_filter_0 = filter.fir_filter_ccf(int(sample_rate / fm_sample), firdes.low_pass(
+ 1, sample_rate, 100e3, 10e3, firdes.WIN_HAMMING, 6.76))
+ self.blocks_multiply_xx_0 = blocks.multiply_vff(1)
+ self.audio_sink_0 = audio.sink(int(audio_rate), "", True)
+ self.analog_wfm_rcv_0 = analog.wfm_rcv(
+ quad_rate=fm_sample,
+ audio_decimation=10,
+ )
+ self.analog_const_source_x_0 = analog.sig_source_f(0, analog.GR_CONST_WAVE, 0, 0, volume)
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0, 0))
+ self.connect((self.osmosdr_source_0, 0), (self.wxgui_fftsink2_0, 0))
+ self.connect((self.blocks_multiply_xx_0, 0), (self.audio_sink_0, 0))
+ self.connect((self.analog_const_source_x_0, 0), (self.blocks_multiply_xx_0, 1))
+ self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_xx_0, 0))
+ self.connect((self.osmosdr_source_0, 0), (self.low_pass_filter_0, 0))
+ self.connect((self.analog_wfm_rcv_0, 0), (self.rational_resampler_xxx_0, 0))
+
+
+
+ def get_volume(self):
+ return self.volume
+
+ def set_volume(self, volume):
+ self.volume = volume
+ self.analog_const_source_x_0.set_offset(self.volume)
+ self._volume_slider.set_value(self.volume)
+ self._volume_text_box.set_value(self.volume)
+
+ def get_sample_rate(self):
+ return self.sample_rate
+
+ def set_sample_rate(self, sample_rate):
+ self.sample_rate = sample_rate
+ self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.sample_rate, 100e3, 10e3, firdes.WIN_HAMMING, 6.76))
+ self.osmosdr_source_0.set_sample_rate(self.sample_rate)
+ self.wxgui_fftsink2_0.set_sample_rate(self.sample_rate)
+
+ def get_freq(self):
+ return self.freq
+
+ def set_freq(self, freq):
+ self.freq = freq
+ self.osmosdr_source_0.set_center_freq(self.freq, 0)
+ self._freq_slider.set_value(self.freq)
+ self._freq_text_box.set_value(self.freq)
+ self.wxgui_fftsink2_0.set_baseband_freq(self.freq)
+
+ def get_fm_sample(self):
+ return self.fm_sample
+
+ def set_fm_sample(self, fm_sample):
+ self.fm_sample = fm_sample
+
+ def get_audio_rate(self):
+ return self.audio_rate
+
+ def set_audio_rate(self, audio_rate):
+ self.audio_rate = audio_rate
+
+if __name__ == '__main__':
+ import ctypes
+ import sys
+ if sys.platform.startswith('linux'):
+ try:
+ x11 = ctypes.cdll.LoadLibrary('libX11.so')
+ x11.XInitThreads()
+ except:
+ print("Warning: failed to XInitThreads()")
+ parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+ (options, args) = parser.parse_args()
+ tb = radio()
+ tb.Start(True)
+ tb.Wait()
diff --git a/examples/fm_radio/lesson1.grc b/examples/fm_radio/lesson1.grc
new file mode 100644
index 0000000..c06cb9a
--- /dev/null
+++ b/examples/fm_radio/lesson1.grc
@@ -0,0 +1,1102 @@
+
+
+ Thu Aug 14 15:04:15 2014
+
+ options
+
+ id
+ top_block
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ max_nouts
+ 0
+
+
+ realtime_scheduling
+
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ channel_width
+
+
+ _enabled
+ True
+
+
+ value
+ 200e3
+
+
+ alias
+
+
+
+ _coordinate
+ (9, 346)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ channel_freq
+
+
+ _enabled
+ True
+
+
+ value
+ 96.5e6
+
+
+ alias
+
+
+
+ _coordinate
+ (8, 287)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 20e6
+
+
+ alias
+
+
+
+ _coordinate
+ (8, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ center_freq
+
+
+ _enabled
+ True
+
+
+ value
+ 97.9e6
+
+
+ alias
+
+
+
+ _coordinate
+ (8, 229)
+
+
+ _rotation
+ 0
+
+
+
+ osmosdr_source
+
+ id
+ osmosdr_source_0
+
+
+ _enabled
+ True
+
+
+ type
+ fc32
+
+
+ args
+
+
+
+ nchan
+ 1
+
+
+ sample_rate
+ samp_rate
+
+
+ freq0
+ center_freq
+
+
+ corr0
+ 0
+
+
+ dc_offset_mode0
+ 0
+
+
+ iq_balance_mode0
+ 0
+
+
+ gain_mode0
+ False
+
+
+ gain0
+ 0
+
+
+ if_gain0
+ 20
+
+
+ bb_gain0
+ 20
+
+
+ ant0
+
+
+
+ bw0
+ 0
+
+
+ freq1
+ 100e6
+
+
+ corr1
+ 0
+
+
+ dc_offset_mode1
+ 0
+
+
+ iq_balance_mode1
+ 0
+
+
+ gain_mode1
+ False
+
+
+ gain1
+ 10
+
+
+ if_gain1
+ 20
+
+
+ bb_gain1
+ 20
+
+
+ ant1
+
+
+
+ bw1
+ 0
+
+
+ freq2
+ 100e6
+
+
+ corr2
+ 0
+
+
+ dc_offset_mode2
+ 0
+
+
+ iq_balance_mode2
+ 0
+
+
+ gain_mode2
+ False
+
+
+ gain2
+ 10
+
+
+ if_gain2
+ 20
+
+
+ bb_gain2
+ 20
+
+
+ ant2
+
+
+
+ bw2
+ 0
+
+
+ freq3
+ 100e6
+
+
+ corr3
+ 0
+
+
+ dc_offset_mode3
+ 0
+
+
+ iq_balance_mode3
+ 0
+
+
+ gain_mode3
+ False
+
+
+ gain3
+ 10
+
+
+ if_gain3
+ 20
+
+
+ bb_gain3
+ 20
+
+
+ ant3
+
+
+
+ bw3
+ 0
+
+
+ freq4
+ 100e6
+
+
+ corr4
+ 0
+
+
+ dc_offset_mode4
+ 0
+
+
+ iq_balance_mode4
+ 0
+
+
+ gain_mode4
+ False
+
+
+ gain4
+ 10
+
+
+ if_gain4
+ 20
+
+
+ bb_gain4
+ 20
+
+
+ ant4
+
+
+
+ bw4
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (135, 94)
+
+
+ _rotation
+ 0
+
+
+
+ analog_sig_source_x
+
+ id
+ analog_sig_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samp_rate
+ samp_rate
+
+
+ waveform
+ analog.GR_COS_WAVE
+
+
+ freq
+ center_freq - channel_freq
+
+
+ amp
+ 1
+
+
+ offset
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (152, 285)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_multiply_xx
+
+ id
+ blocks_multiply_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (373, 260)
+
+
+ _rotation
+ 0
+
+
+
+ rational_resampler_xxx
+
+ id
+ rational_resampler_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccc
+
+
+ interp
+ 12
+
+
+ decim
+ 5
+
+
+ taps
+
+
+
+ fbw
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (740, 125)
+
+
+ _rotation
+ 0
+
+
+
+ low_pass_filter
+
+ id
+ low_pass_filter_0
+
+
+ _enabled
+ True
+
+
+ type
+ fir_filter_ccf
+
+
+ decim
+ int(samp_rate/channel_width)
+
+
+ interp
+ 1
+
+
+ gain
+ 1
+
+
+ samp_rate
+ samp_rate
+
+
+ cutoff_freq
+ 75e3
+
+
+ width
+ 25e3
+
+
+ win
+ firdes.WIN_HAMMING
+
+
+ beta
+ 6.76
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (544, 143)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ FFT Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ center_freq
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ True
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (359, 10)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0_0
+
+
+ _enabled
+ False
+
+
+ type
+ complex
+
+
+ title
+ FFT Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ channel_freq
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ True
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (514, 293)
+
+
+ _rotation
+ 0
+
+
+
+ analog_wfm_rcv
+
+ id
+ analog_wfm_rcv_0
+
+
+ _enabled
+ True
+
+
+ quad_rate
+ 480e3
+
+
+ audio_decimation
+ 10
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (793, 245)
+
+
+ _rotation
+ 0
+
+
+
+ audio_sink
+
+ id
+ audio_sink_0
+
+
+ _enabled
+ True
+
+
+ samp_rate
+ 48000
+
+
+ device_name
+
+
+
+ ok_to_block
+ True
+
+
+ num_inputs
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (827, 383)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ audio_gain
+
+
+ _enabled
+ True
+
+
+ label
+
+
+
+ value
+ 1
+
+
+ min
+ 0
+
+
+ max
+ 10
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (299, 368)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_multiply_const_vxx
+
+ id
+ blocks_multiply_const_vxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ audio_gain
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (823, 324)
+
+
+ _rotation
+ 0
+
+
+
+ osmosdr_source_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ osmosdr_source_0
+ blocks_multiply_xx_0
+ 0
+ 0
+
+
+ analog_sig_source_x_0
+ blocks_multiply_xx_0
+ 0
+ 1
+
+
+ blocks_multiply_xx_0
+ wxgui_fftsink2_0_0
+ 0
+ 0
+
+
+ blocks_multiply_xx_0
+ low_pass_filter_0
+ 0
+ 0
+
+
+ low_pass_filter_0
+ rational_resampler_xxx_0
+ 0
+ 0
+
+
+ rational_resampler_xxx_0
+ analog_wfm_rcv_0
+ 0
+ 0
+
+
+ analog_wfm_rcv_0
+ blocks_multiply_const_vxx_0
+ 0
+ 0
+
+
+ blocks_multiply_const_vxx_0
+ audio_sink_0
+ 0
+ 0
+
+
diff --git a/examples/images/basic_signal.png b/examples/images/basic_signal.png
new file mode 100644
index 0000000..b5ffed1
Binary files /dev/null and b/examples/images/basic_signal.png differ
diff --git a/examples/images/basic_signal_fir.png b/examples/images/basic_signal_fir.png
new file mode 100644
index 0000000..5ab497f
Binary files /dev/null and b/examples/images/basic_signal_fir.png differ
diff --git a/examples/images/basic_signal_wav.png b/examples/images/basic_signal_wav.png
new file mode 100644
index 0000000..0495c50
Binary files /dev/null and b/examples/images/basic_signal_wav.png differ
diff --git a/examples/images/basic_signal_wav_python.png b/examples/images/basic_signal_wav_python.png
new file mode 100644
index 0000000..d3942aa
Binary files /dev/null and b/examples/images/basic_signal_wav_python.png differ
diff --git a/examples/images/data_decoder.png b/examples/images/data_decoder.png
new file mode 100644
index 0000000..bc7e226
Binary files /dev/null and b/examples/images/data_decoder.png differ
diff --git a/examples/images/data_flowgraph.png b/examples/images/data_flowgraph.png
new file mode 100644
index 0000000..877f99f
Binary files /dev/null and b/examples/images/data_flowgraph.png differ
diff --git a/examples/images/doppler_apply.png b/examples/images/doppler_apply.png
new file mode 100644
index 0000000..d17d0a2
Binary files /dev/null and b/examples/images/doppler_apply.png differ
diff --git a/examples/images/doppler_flowgraph.png b/examples/images/doppler_flowgraph.png
new file mode 100644
index 0000000..5dc3973
Binary files /dev/null and b/examples/images/doppler_flowgraph.png differ
diff --git a/examples/images/doppler_shift_calc.png b/examples/images/doppler_shift_calc.png
new file mode 100644
index 0000000..cc3b9f2
Binary files /dev/null and b/examples/images/doppler_shift_calc.png differ
diff --git a/examples/images/falconsat_param.png b/examples/images/falconsat_param.png
new file mode 100644
index 0000000..542d26f
Binary files /dev/null and b/examples/images/falconsat_param.png differ
diff --git a/examples/images/fsk.gif b/examples/images/fsk.gif
new file mode 100644
index 0000000..ec13dd4
Binary files /dev/null and b/examples/images/fsk.gif differ
diff --git a/examples/images/fsk_mod.png b/examples/images/fsk_mod.png
new file mode 100644
index 0000000..0f70f80
Binary files /dev/null and b/examples/images/fsk_mod.png differ
diff --git a/examples/images/install_sat.png b/examples/images/install_sat.png
new file mode 100644
index 0000000..e75d6d0
Binary files /dev/null and b/examples/images/install_sat.png differ
diff --git a/examples/images/install_usrp.png b/examples/images/install_usrp.png
new file mode 100644
index 0000000..07984fb
Binary files /dev/null and b/examples/images/install_usrp.png differ
diff --git a/examples/images/record_signal.png b/examples/images/record_signal.png
new file mode 100644
index 0000000..305f8a0
Binary files /dev/null and b/examples/images/record_signal.png differ
diff --git a/examples/images/uplink_func.png b/examples/images/uplink_func.png
new file mode 100644
index 0000000..c8053dc
Binary files /dev/null and b/examples/images/uplink_func.png differ
diff --git a/examples/images/uplink_sink.png b/examples/images/uplink_sink.png
new file mode 100644
index 0000000..8dea7b7
Binary files /dev/null and b/examples/images/uplink_sink.png differ
diff --git a/examples/images/usrp_source_config_1.png b/examples/images/usrp_source_config_1.png
new file mode 100644
index 0000000..c78f04e
Binary files /dev/null and b/examples/images/usrp_source_config_1.png differ
diff --git a/examples/images/usrp_source_config_2.png b/examples/images/usrp_source_config_2.png
new file mode 100644
index 0000000..c624252
Binary files /dev/null and b/examples/images/usrp_source_config_2.png differ
diff --git a/examples/signal_record/gnuradio_recorder.grc b/examples/signal_record/gnuradio_recorder.grc
new file mode 100644
index 0000000..618d408
--- /dev/null
+++ b/examples/signal_record/gnuradio_recorder.grc
@@ -0,0 +1,112 @@
+options:
+ parameters:
+ author: ''
+ 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: gnuradio_recorder
+ 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
+ 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: 2.4e6
+ 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: /home/gesac/Desktop/testrecording.wav
+ type: complex
+ unbuffered: 'False'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [480, 144.0]
+ rotation: 0
+ state: true
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [264, 160.0]
+ rotation: 0
+ state: true
+- name: zeromq_sub_source_0
+ id: zeromq_sub_source
+ parameters:
+ address: tcp://127.0.0.1:50250
+ affinity: ''
+ alias: ''
+ comment: ''
+ hwm: '-1'
+ key: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ pass_tags: 'False'
+ timeout: '100'
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [16, 136.0]
+ rotation: 0
+ state: true
+
+connections:
+- [blocks_throttle_0, '0', blocks_file_sink_0, '0']
+- [zeromq_sub_source_0, '0', blocks_throttle_0, '0']
+
+metadata:
+ file_format: 1
diff --git a/examples/telemetry_parser.grc b/examples/telemetry_parser.grc
new file mode 100644
index 0000000..23d6d06
--- /dev/null
+++ b/examples/telemetry_parser.grc
@@ -0,0 +1,127 @@
+options:
+ parameters:
+ author: Daniel Estevez
+ catch_exceptions: 'True'
+ category: '[GRC Hier Blocks]'
+ cmake_opt: ''
+ comment: ''
+ copyright: ''
+ description: ''
+ gen_cmake: 'On'
+ gen_linking: dynamic
+ generate_options: no_gui
+ hier_block_src_path: '.:'
+ id: telemetry_parser
+ 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: Telemetry parser component example
+ 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: [208, 12]
+ rotation: 0
+ state: enabled
+- name: blocks_wavfile_source_0
+ id: blocks_wavfile_source
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ file: /home/jonathan/gr-satellites/satellite-recordings/gomx_1.wav
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ nchan: '1'
+ repeat: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [53, 217]
+ rotation: 0
+ state: enabled
+- name: satellites_afsk_demodulator_0_0
+ id: satellites_afsk_demodulator
+ parameters:
+ af_carrier: '3600'
+ affinity: ''
+ alias: ''
+ baudrate: '4800'
+ comment: ''
+ deviation: '-1200'
+ iq: 'False'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ samp_rate: samp_rate
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [290, 201]
+ rotation: 0
+ state: true
+- name: satellites_telemetry_parser_0
+ id: satellites_telemetry_parser
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ definition: gomx_1
+ file: /home/jonathan/CommsSDR/output/output_telemetry_parser.txt
+ options: '""'
+ output: file
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [760, 217]
+ rotation: 0
+ state: true
+- name: satellites_u482c_deframer_0
+ id: satellites_u482c_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ threshold: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [494, 225]
+ rotation: 0
+ state: true
+
+connections:
+- [blocks_wavfile_source_0, '0', satellites_afsk_demodulator_0_0, '0']
+- [satellites_afsk_demodulator_0_0, '0', satellites_u482c_deframer_0, '0']
+- [satellites_u482c_deframer_0, out, satellites_telemetry_parser_0, in]
+
+metadata:
+ file_format: 1
diff --git a/examples/telemetry_parser.py b/examples/telemetry_parser.py
new file mode 100755
index 0000000..289a041
--- /dev/null
+++ b/examples/telemetry_parser.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+#
+# SPDX-License-Identifier: GPL-3.0
+#
+# GNU Radio Python Flow Graph
+# Title: Telemetry parser component example
+# Author: Daniel Estevez
+# GNU Radio version: 3.9.4.0
+
+from gnuradio import blocks
+from gnuradio import gr
+from gnuradio.filter import firdes
+from gnuradio.fft import window
+import sys
+import signal
+from argparse import ArgumentParser
+from gnuradio.eng_arg import eng_float, intx
+from gnuradio import eng_notation
+import satellites.components.datasinks
+import satellites.components.deframers
+import satellites.components.demodulators
+
+
+
+
+class telemetry_parser(gr.top_block):
+
+ def __init__(self):
+ gr.top_block.__init__(self, "Telemetry parser component example", catch_exceptions=True)
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.samp_rate = samp_rate = 48000
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.satellites_telemetry_parser_0 = satellites.components.datasinks.telemetry_parser('gomx_1', file = '/home/jonathan/CommsSDR/output/output_telemetry_parser.txt', options="")
+ self.satellites_fsk_demodulator_0 = satellites.components.demodulators.fsk_demodulator(baudrate = 9600, samp_rate = samp_rate, iq = False, subaudio = False, options="")
+ self.satellites_ax25_deframer_0 = satellites.components.deframers.ax25_deframer(g3ruh_scrambler=True, options="")
+ self.blocks_wavfile_source_0 = blocks.wavfile_source('/home/jonathan/CommsSDR/examples/satellite-recordings/us01.wav', False)
+
+
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.msg_connect((self.satellites_ax25_deframer_0, 'out'), (self.satellites_telemetry_parser_0, 'in'))
+ self.connect((self.blocks_wavfile_source_0, 0), (self.satellites_fsk_demodulator_0, 0))
+ self.connect((self.satellites_fsk_demodulator_0, 0), (self.satellites_ax25_deframer_0, 0))
+
+
+ def get_samp_rate(self):
+ return self.samp_rate
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+
+
+
+
+def main(top_block_cls=telemetry_parser, options=None):
+ tb = top_block_cls()
+
+ def sig_handler(sig=None, frame=None):
+ tb.stop()
+ tb.wait()
+
+ sys.exit(0)
+
+ signal.signal(signal.SIGINT, sig_handler)
+ signal.signal(signal.SIGTERM, sig_handler)
+
+ tb.start()
+
+ tb.wait()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/telemetry_parser_AX100.grc b/examples/telemetry_parser_AX100.grc
new file mode 100644
index 0000000..ba4e419
--- /dev/null
+++ b/examples/telemetry_parser_AX100.grc
@@ -0,0 +1,128 @@
+options:
+ parameters:
+ author: Daniel Estevez
+ catch_exceptions: 'True'
+ category: '[GRC Hier Blocks]'
+ cmake_opt: ''
+ comment: ''
+ copyright: ''
+ description: ''
+ gen_cmake: 'On'
+ gen_linking: dynamic
+ generate_options: no_gui
+ hier_block_src_path: '.:'
+ id: telemetry_parser
+ 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: Telemetry parser component example
+ 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: [208, 12]
+ rotation: 0
+ state: enabled
+- name: blocks_wavfile_source_0
+ id: blocks_wavfile_source
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ file: /home/jonathan/gr-satellites/satellite-recordings/tw_1b.wav
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ nchan: '1'
+ repeat: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [53, 217]
+ rotation: 0
+ state: enabled
+- name: satellites_ax100_deframer_0
+ id: satellites_ax100_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ mode: '"RS"'
+ options: '""'
+ scrambler: '"CCSDS"'
+ threshold: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [512, 212.0]
+ rotation: 0
+ state: true
+- name: satellites_fsk_demodulator_0
+ id: satellites_fsk_demodulator
+ parameters:
+ affinity: ''
+ alias: ''
+ baudrate: '4800'
+ comment: ''
+ iq: 'False'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ samp_rate: samp_rate
+ subaudio: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [312, 204.0]
+ rotation: 0
+ state: true
+- name: satellites_telemetry_parser_0
+ id: satellites_telemetry_parser
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ definition: gomx_1
+ file: /home/jonathan/CommsSDR/output/output_telemetry_parser.txt
+ options: '""'
+ output: file
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [784, 204.0]
+ rotation: 0
+ state: true
+
+connections:
+- [blocks_wavfile_source_0, '0', satellites_fsk_demodulator_0, '0']
+- [satellites_ax100_deframer_0, out, satellites_telemetry_parser_0, in]
+- [satellites_fsk_demodulator_0, '0', satellites_ax100_deframer_0, '0']
+
+metadata:
+ file_format: 1
diff --git a/examples/telemetry_parser_AX25.grc b/examples/telemetry_parser_AX25.grc
new file mode 100644
index 0000000..1e866df
--- /dev/null
+++ b/examples/telemetry_parser_AX25.grc
@@ -0,0 +1,123 @@
+options:
+ parameters:
+ author: Daniel Estevez
+ catch_exceptions: 'True'
+ category: '[GRC Hier Blocks]'
+ cmake_opt: ''
+ comment: ''
+ copyright: ''
+ description: ''
+ gen_cmake: 'On'
+ gen_linking: dynamic
+ generate_options: no_gui
+ hier_block_src_path: '.:'
+ id: telemetry_parser
+ 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: Telemetry parser component example
+ 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: [208, 12]
+ rotation: 0
+ state: enabled
+- name: blocks_message_debug_0
+ id: blocks_message_debug
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ en_uvec: 'True'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [808, 168.0]
+ rotation: 0
+ state: true
+- name: blocks_wavfile_source_0
+ id: blocks_wavfile_source
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ file: /home/jonathan/CommsSDR/examples/satellite-recordings/us01.wav
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ nchan: '1'
+ repeat: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [53, 217]
+ rotation: 0
+ state: enabled
+- name: satellites_ax25_deframer_0
+ id: satellites_ax25_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ g3ruh_scrambler: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [504, 228.0]
+ rotation: 0
+ state: true
+- name: satellites_fsk_demodulator_0
+ id: satellites_fsk_demodulator
+ parameters:
+ affinity: ''
+ alias: ''
+ baudrate: '9600'
+ comment: ''
+ iq: 'False'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ options: '""'
+ samp_rate: samp_rate
+ subaudio: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [320, 212.0]
+ rotation: 0
+ state: true
+
+connections:
+- [blocks_wavfile_source_0, '0', satellites_fsk_demodulator_0, '0']
+- [satellites_ax25_deframer_0, out, blocks_message_debug_0, print_pdu]
+- [satellites_fsk_demodulator_0, '0', satellites_ax25_deframer_0, '0']
+
+metadata:
+ file_format: 1
diff --git a/examples/uplink/.idea/workspace.xml b/examples/uplink/.idea/workspace.xml
new file mode 100644
index 0000000..5f5e627
--- /dev/null
+++ b/examples/uplink/.idea/workspace.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1648562622029
+
+
+ 1648562622029
+
+
+
+
+
+
+
+
\ No newline at end of file