diff --git a/.gitignore b/.gitignore index f5074d8..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -*.grc diff --git a/amRadio.grc b/amRadio.grc new file mode 100644 index 0000000..810915b --- /dev/null +++ b/amRadio.grc @@ -0,0 +1,1254 @@ +options: + parameters: + author: Mike Markowski + 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: amRadio + 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: AM Receiver + window_size: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [16, 146] + rotation: 0 + state: enabled + +blocks: +- name: audio_Hz + id: variable + parameters: + comment: '' + value: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [193, 145] + rotation: 0 + state: enabled +- name: fine_daHz + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: 1,1,1,1 + label: Fine (daHz) + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '-400' + step: '10' + stop: '400' + value: '190' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [625, 283] + rotation: 0 + state: true +- name: freq_kHz + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: 0,1,1,1 + label: Freq (kHz) + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '530' + step: '10' + stop: '1700' + value: '1060' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [623, 148] + rotation: 0 + state: true +- name: mute + id: variable_qtgui_check_box + parameters: + comment: '' + 'false': 'False' + gui_hint: 0,2,1,1 + label: '' + 'true': 'True' + type: bool + value: 'False' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [761, 146] + rotation: 0 + state: true +- name: rfGain_dB + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: 1,0,1,1 + label: RF Gain (dB) + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: int + start: '10' + step: '1' + stop: '90' + value: '45' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [489, 283] + rotation: 0 + state: true +- name: sa_Hz + id: variable + parameters: + comment: 8 Sa/cycle + value: '8' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [290, 144] + rotation: 0 + state: enabled +- name: samp_rate + id: variable + parameters: + comment: '' + value: audio_Hz * sa_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [371, 146] + rotation: 0 + state: enabled +- name: up0_Hz + id: variable + parameters: + comment: 'Up-converter start frequency. + + + My SDR requires an + + up-converterfor + + frequencies < 70 MHz. + + + Set this to 0 if you don''t + + need an up-converter.' + value: int(125e6) + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [193, 233] + rotation: 0 + state: enabled +- name: volume + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: 0,0,1,1 + label: Audio Gain + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '0' + step: 500e-3 + stop: '1' + value: '0.2' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [475, 147] + rotation: 0 + state: true +- name: analog_agc_xx_0 + id: analog_agc_xx + parameters: + affinity: '' + alias: '' + comment: 'Counter AM + + rises and falls.' + gain: '1.0' + max_gain: '65536' + maxoutbuf: '0' + minoutbuf: '0' + rate: 1e-4 + reference: '1.0' + type: complex + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [238, 1439] + rotation: 0 + state: true +- name: audio_sink_0_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: Soundcard. + device_name: '' + num_inputs: '1' + ok_to_block: 'False' + samp_rate: int(audio_Hz) + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [964, 1455] + rotation: 0 + state: enabled +- name: blocks_add_const_vxx_0 + id: blocks_add_const_vxx + parameters: + affinity: '' + alias: '' + comment: '1 is added during + + modulation so that + + a carrier exists even + + without audio.' + const: '-1' + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [594, 1463] + rotation: 0 + state: true +- name: blocks_complex_to_mag_0 + id: blocks_complex_to_mag + parameters: + affinity: '' + alias: '' + comment: Amplitude of sample. + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [413, 1467] + rotation: 0 + state: true +- name: blocks_msgpair_to_var_0 + id: blocks_msgpair_to_var + parameters: + affinity: '' + alias: '' + comment: '' + target: freq_kHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1352, 852.0] + rotation: 0 + state: true +- name: blocks_multiply_const_vxx_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: Volume. + const: volume + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [791, 1463] + rotation: 0 + state: enabled +- name: blocks_mute_xx_0 + id: blocks_mute_xx + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + mute: mute + type: complex + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [584, 736] + rotation: 0 + state: true +- name: epy_block_0 + id: epy_block + parameters: + _source_code: "'''Convert an arbitrary frequency in the AM broadcast band to the\ + \ frequency\nof the nearest radio station frequency.\n\nMike Markowski, mike.ab3ap@gmail.com\n\ + Feb 2021\n'''\n\nimport numpy as np\nfrom gnuradio import gr\nimport pmt\n\n\ + class snapBlock(gr.basic_block):\n\n\tdef __init__(self):\n\t\tgr.basic_block.__init__(\n\ + \t\t\tself,\n\t\t\tname=\"Snap to Station\",\n\t\t\tin_sig=None,\n\t\t\tout_sig=None)\n\ + \n\t\t# User input that is only somewhere near a station frequency.\n\t\tself.message_port_register_in(pmt.intern('raw_Hz_in'))\n\ + \t\tself.set_msg_handler(pmt.intern('raw_Hz_in'), self.stationSnap)\n\n\t\t\ + # Output in Hz and kHz that is exactly a station frequency.\n\t\tself.message_port_register_out(pmt.intern('snapped_Hz_out'))\n\ + \t\tself.message_port_register_out(pmt.intern('snapped_kHz_out'))\n\n\tdef stationSnap(self,\ + \ msg):\n\n\t\t'''Accept a pmt pair with user selected frequency information\ + \ and\n\t\tadjust it to the nearest broadcast AM frequency.\n\n\t\tInputs:\n\ + \t\t msg (dictionary) : assumed to contain only: (freq . )\n\n\t\tOutputs:\n\ + \t\t freq_Hz_out (pmt.dict) : (freq . snappedFreq) where snappedFreq\n\t\t\ + \ is input frequency in Hz moved to nearest broadcast frequency.\n\t\t freq_kHz_out\ + \ (pmt.dict) : (freq . snappedFreq) where snappedFreq\n\t\t is input frequency\ + \ in kHz moved to nearest broadcast frequency.\n\t\t'''\n\n\t\t# Disassemble\ + \ pmt pair.\n\t\tcmd = pmt.car(msg)\n\t\tfreq = pmt.cdr(msg)\n\t\tfreqRaw_kHz\ + \ = pmt.to_python(freq) / 1e3 # Easier to work in kHz.\n\n\t\t# Snap user-clicked\ + \ freq to nearest AM station.\n\t\tspacing = 10 # N. American broadcast AM spacing\ + \ in kHz.\n\t\tfreq_kHz = float(round(freqRaw_kHz / spacing) * spacing)\n\t\t\ + freq_Hz = freq_kHz * 1e3\n\n\t\t# Generate output message, (freq . freq_Hz).\n\ + \t\tpair = pmt.cons(cmd, pmt.to_pmt(freq_Hz))\n\t\tself.message_port_pub(pmt.intern('snapped_Hz_out'),\ + \ pair)\n\n\t\t# Generate output message, (freq . freq_kHz).\n\t\tpair2 = pmt.cons(cmd,\ + \ pmt.to_pmt(freq_kHz))\n\t\tself.message_port_pub(pmt.intern('snapped_kHz_out'),\ + \ pair2)\n" + affinity: '' + alias: '' + comment: 'Snap user choice + + to nearest station.' + maxoutbuf: '0' + minoutbuf: '0' + states: + _io_cache: ('Snap to Station', 'snapBlock', [], [('raw_Hz_in', 'message', 1)], + [('snapped_kHz_out', 'message', 1), ('snapped_Hz_out', 'message', 1)], '', []) + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1072, 920.0] + rotation: 0 + state: true +- name: epy_block_1 + id: epy_block + parameters: + _source_code: "'''Convert a pmt pair (freq . f_Hz) to (freq . f_kHz).\n\nMike\ + \ Markowski, mike.ab3ap@gmail.com\nFeb 2021\n'''\n\nimport numpy as np\nfrom\ + \ gnuradio import gr\nimport pmt\n\ndelta_Hz = 0\n\nclass cvtBlock(gr.basic_block):\n\ + \n\tdef __init__(self, offset_Hz=0):\n\t\t\"\"\"arguments to this function show\ + \ up as parameters in GRC\"\"\"\n\n\t\tglobal delta_Hz\n\n\t\tgr.basic_block.__init__(\n\ + \t\t\tself,\n\t\t\tname='kHz to Hz',\n\t\t\tin_sig=None,\n\t\t\tout_sig=None\n\ + \t\t)\n\t\tdelta_Hz = offset_Hz\n\n\t\tself.message_port_register_in(pmt.intern('freq_kHz_in'))\n\ + \t\tself.set_msg_handler(pmt.intern('freq_kHz_in'), self.kHzToHz)\n\n\t\tself.message_port_register_out(pmt.intern('freq_Hz_out'))\n\ + \t\tself.message_port_register_out(pmt.intern('upConv_Hz_out'))\n\n\tdef kHzToHz(self,\ + \ msg):\n\t\t'''msg expected to be pmt pair (freq . val).'''\n\n\t\tglobal delta_Hz\n\ + \n\t\tcmd = pmt.car(msg)\n\t\tfreq_Hz = 1e3 * pmt.to_python(pmt.cdr(msg))\n\t\ + \tupConv_Hz = freq_Hz + delta_Hz\n\n\t\thzDict = pmt.make_dict()\n\t\thzDict\ + \ = pmt.dict_add(hzDict, cmd, pmt.to_pmt(freq_Hz))\n\t\tself.message_port_pub(pmt.intern('freq_Hz_out'),\ + \ hzDict)\n\n\t\thzDict = pmt.make_dict()\n\t\thzDict = pmt.dict_add(hzDict,\ + \ cmd, pmt.to_pmt(upConv_Hz))\n\t\tself.message_port_pub(pmt.intern('upConv_Hz_out'),\ + \ hzDict)\n\n" + affinity: '' + alias: '' + comment: 'kHz is easier to work with, + + but SDR needs Hz.' + maxoutbuf: '0' + minoutbuf: '0' + offset_Hz: up0_Hz + (fine_daHz * 10) + states: + _io_cache: ('kHz to Hz', 'cvtBlock', [('offset_Hz', '0')], [('freq_kHz_in', 'message', + 1)], [('upConv_Hz_out', 'message', 1), ('freq_Hz_out', 'message', 1)], 'arguments + to this function show up as parameters in GRC', []) + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1056, 1120.0] + rotation: 0 + state: true +- name: fosphor_qt_sink_c_0 + id: fosphor_qt_sink_c + parameters: + affinity: '' + alias: '' + comment: '' + freq_center: freq_kHz * 1e3 + freq_span: samp_rate + gui_hint: spectra@0:0,0,1,1 + maxoutbuf: '0' + minoutbuf: '0' + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [736, 820.0] + rotation: 0 + state: enabled +- name: low_pass_filter_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: "Baseband output:\n 48 kSa/s\n bw=5 kHz" + cutoff_freq: 5e3 + decim: int(samp_rate / audio_Hz) + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_ccf + width: '500' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [736, 604.0] + rotation: 0 + state: true +- name: note_0_0 + id: note + parameters: + alias: '' + comment: '' + note: Receive chain + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [16, 254] + rotation: 0 + state: true +- name: note_1 + id: note + parameters: + alias: '' + comment: 'Mike Markowski + + mike.ab3ap@gmail.com + + 11 Feb 2021' + note: AM Receiver + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [22, 18] + rotation: 0 + state: true +- name: note_1_0 + id: note + parameters: + alias: '' + comment: '' + note: GUI Niceties + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [412, 931] + rotation: 0 + state: true +- name: qtgui_edit_box_msg_0 + id: qtgui_edit_box_msg + parameters: + affinity: '' + alias: '' + comment: '' + gui_hint: 1,2, 1,1 + is_pair: 'True' + is_static: 'True' + key: freq + label: Freq (kHz) + maxoutbuf: '0' + minoutbuf: '0' + type: float + value: '1060' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [744, 1092.0] + rotation: 0 + state: true +- name: qtgui_sink_x_0 + id: qtgui_sink_x + parameters: + affinity: '' + alias: '' + bw: audio_Hz + comment: '' + fc: freq_kHz * 1e3 + fftsize: '1024' + gui_hint: 'spectra@2: 0,0,1,1' + maxoutbuf: '0' + minoutbuf: '0' + name: Audio, Frequency + plotconst: 'True' + plotfreq: 'True' + plottime: 'True' + plotwaterfall: 'True' + rate: '10' + showports: 'False' + showrf: 'False' + type: float + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [795, 1545] + rotation: 0 + state: true +- name: qtgui_sink_x_0_0 + id: qtgui_sink_x + parameters: + affinity: '' + alias: '' + bw: samp_rate + comment: '' + fc: freq_kHz * 1e3 + fftsize: '1024' + gui_hint: 'spectra@1 : 0,0,1,1' + maxoutbuf: '0' + minoutbuf: '0' + name: Full Spectrum + plotconst: 'True' + plotfreq: 'True' + plottime: 'True' + plotwaterfall: 'True' + rate: '10' + showports: 'True' + showrf: 'True' + type: complex + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [736, 900.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'True' + entags: 'False' + grid: 'True' + gui_hint: spectra@3:0,0,1,1 + label1: Audio + 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: Audio, Time + nconnections: '1' + size: '1024' + srate: audio_Hz + 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: [790, 1353] + rotation: 0 + state: enabled +- name: spectra + id: qtgui_tab_widget + parameters: + alias: '' + comment: '' + gui_hint: 2,0,1,3 + label0: RTSA + label1: Full RF Spectrum + label10: Tab 10 + label11: Tab 11 + label12: Tab 12 + label13: Tab 13 + label14: Tab 14 + label15: Tab 15 + label16: Tab 16 + label17: Tab 17 + label18: Tab 18 + label19: Tab 19 + label2: Station, Freq + label3: Station, Time + label4: Tab 4 + label5: Tab 5 + label6: Tab 6 + label7: Tab 7 + label8: Tab 8 + label9: Tab 9 + num_tabs: '4' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [624, 420] + rotation: 0 + state: true +- name: uhd_usrp_source_0 + id: uhd_usrp_source + parameters: + affinity: '' + alias: '' + ant0: TX/RX + ant1: RX2 + ant10: RX2 + ant11: RX2 + ant12: RX2 + ant13: RX2 + ant14: RX2 + ant15: RX2 + ant16: RX2 + ant17: RX2 + ant18: RX2 + ant19: RX2 + ant2: RX2 + ant20: RX2 + ant21: RX2 + ant22: RX2 + ant23: RX2 + ant24: RX2 + ant25: RX2 + ant26: RX2 + ant27: RX2 + ant28: RX2 + ant29: RX2 + ant3: RX2 + ant30: RX2 + ant31: RX2 + ant4: RX2 + ant5: RX2 + ant6: RX2 + ant7: RX2 + ant8: RX2 + ant9: RX2 + bw0: samp_rate + bw1: '0' + bw10: '0' + bw11: '0' + bw12: '0' + bw13: '0' + bw14: '0' + bw15: '0' + bw16: '0' + bw17: '0' + bw18: '0' + bw19: '0' + bw2: '0' + bw20: '0' + bw21: '0' + bw22: '0' + bw23: '0' + bw24: '0' + bw25: '0' + bw26: '0' + bw27: '0' + bw28: '0' + bw29: '0' + bw3: '0' + bw30: '0' + bw31: '0' + bw4: '0' + bw5: '0' + bw6: '0' + bw7: '0' + bw8: '0' + bw9: '0' + center_freq0: up0_Hz + (freq_kHz * 1e3) + (fine_daHz * 10) + center_freq1: '0' + center_freq10: '0' + center_freq11: '0' + center_freq12: '0' + center_freq13: '0' + center_freq14: '0' + center_freq15: '0' + center_freq16: '0' + center_freq17: '0' + center_freq18: '0' + center_freq19: '0' + center_freq2: '0' + center_freq20: '0' + center_freq21: '0' + center_freq22: '0' + center_freq23: '0' + center_freq24: '0' + center_freq25: '0' + center_freq26: '0' + center_freq27: '0' + center_freq28: '0' + center_freq29: '0' + center_freq3: '0' + center_freq30: '0' + center_freq31: '0' + center_freq4: '0' + center_freq5: '0' + center_freq6: '0' + center_freq7: '0' + center_freq8: '0' + center_freq9: '0' + clock_rate: 0e0 + clock_source0: '' + clock_source1: '' + clock_source2: '' + clock_source3: '' + clock_source4: '' + clock_source5: '' + clock_source6: '' + clock_source7: '' + comment: '' + dc_offs0: 0+0j + dc_offs1: 0+0j + dc_offs10: 0+0j + dc_offs11: 0+0j + dc_offs12: 0+0j + dc_offs13: 0+0j + dc_offs14: 0+0j + dc_offs15: 0+0j + dc_offs16: 0+0j + dc_offs17: 0+0j + dc_offs18: 0+0j + dc_offs19: 0+0j + dc_offs2: 0+0j + dc_offs20: 0+0j + dc_offs21: 0+0j + dc_offs22: 0+0j + dc_offs23: 0+0j + dc_offs24: 0+0j + dc_offs25: 0+0j + dc_offs26: 0+0j + dc_offs27: 0+0j + dc_offs28: 0+0j + dc_offs29: 0+0j + dc_offs3: 0+0j + dc_offs30: 0+0j + dc_offs31: 0+0j + dc_offs4: 0+0j + dc_offs5: 0+0j + dc_offs6: 0+0j + dc_offs7: 0+0j + dc_offs8: 0+0j + dc_offs9: 0+0j + dc_offs_enb0: default + dc_offs_enb1: default + dc_offs_enb10: default + dc_offs_enb11: default + dc_offs_enb12: default + dc_offs_enb13: default + dc_offs_enb14: default + dc_offs_enb15: default + dc_offs_enb16: default + dc_offs_enb17: default + dc_offs_enb18: default + dc_offs_enb19: default + dc_offs_enb2: default + dc_offs_enb20: default + dc_offs_enb21: default + dc_offs_enb22: default + dc_offs_enb23: default + dc_offs_enb24: default + dc_offs_enb25: default + dc_offs_enb26: default + dc_offs_enb27: default + dc_offs_enb28: default + dc_offs_enb29: default + dc_offs_enb3: default + dc_offs_enb30: default + dc_offs_enb31: default + dc_offs_enb4: default + dc_offs_enb5: default + dc_offs_enb6: default + dc_offs_enb7: default + dc_offs_enb8: default + dc_offs_enb9: default + dev_addr: '""' + dev_args: '""' + gain0: rfGain_dB + gain1: '0' + gain10: '0' + gain11: '0' + gain12: '0' + gain13: '0' + gain14: '0' + gain15: '0' + gain16: '0' + gain17: '0' + gain18: '0' + gain19: '0' + gain2: '0' + gain20: '0' + gain21: '0' + gain22: '0' + gain23: '0' + gain24: '0' + gain25: '0' + gain26: '0' + gain27: '0' + gain28: '0' + gain29: '0' + gain3: '0' + gain30: '0' + gain31: '0' + gain4: '0' + gain5: '0' + gain6: '0' + gain7: '0' + gain8: '0' + gain9: '0' + gain_type0: default + gain_type1: default + gain_type10: default + gain_type11: default + gain_type12: default + gain_type13: default + gain_type14: default + gain_type15: default + gain_type16: default + gain_type17: default + gain_type18: default + gain_type19: default + gain_type2: default + gain_type20: default + gain_type21: default + gain_type22: default + gain_type23: default + gain_type24: default + gain_type25: default + gain_type26: default + gain_type27: default + gain_type28: default + gain_type29: default + gain_type3: default + gain_type30: default + gain_type31: default + gain_type4: default + gain_type5: default + gain_type6: default + gain_type7: default + gain_type8: default + gain_type9: default + iq_imbal0: 0+0j + iq_imbal1: 0+0j + iq_imbal10: 0+0j + iq_imbal11: 0+0j + iq_imbal12: 0+0j + iq_imbal13: 0+0j + iq_imbal14: 0+0j + iq_imbal15: 0+0j + iq_imbal16: 0+0j + iq_imbal17: 0+0j + iq_imbal18: 0+0j + iq_imbal19: 0+0j + iq_imbal2: 0+0j + iq_imbal20: 0+0j + iq_imbal21: 0+0j + iq_imbal22: 0+0j + iq_imbal23: 0+0j + iq_imbal24: 0+0j + iq_imbal25: 0+0j + iq_imbal26: 0+0j + iq_imbal27: 0+0j + iq_imbal28: 0+0j + iq_imbal29: 0+0j + iq_imbal3: 0+0j + iq_imbal30: 0+0j + iq_imbal31: 0+0j + iq_imbal4: 0+0j + iq_imbal5: 0+0j + iq_imbal6: 0+0j + iq_imbal7: 0+0j + iq_imbal8: 0+0j + iq_imbal9: 0+0j + iq_imbal_enb0: default + iq_imbal_enb1: default + iq_imbal_enb10: default + iq_imbal_enb11: default + iq_imbal_enb12: default + iq_imbal_enb13: default + iq_imbal_enb14: default + iq_imbal_enb15: default + iq_imbal_enb16: default + iq_imbal_enb17: default + iq_imbal_enb18: default + iq_imbal_enb19: default + iq_imbal_enb2: default + iq_imbal_enb20: default + iq_imbal_enb21: default + iq_imbal_enb22: default + iq_imbal_enb23: default + iq_imbal_enb24: default + iq_imbal_enb25: default + iq_imbal_enb26: default + iq_imbal_enb27: default + iq_imbal_enb28: default + iq_imbal_enb29: default + iq_imbal_enb3: default + iq_imbal_enb30: default + iq_imbal_enb31: default + iq_imbal_enb4: default + iq_imbal_enb5: default + iq_imbal_enb6: default + iq_imbal_enb7: default + iq_imbal_enb8: default + iq_imbal_enb9: default + lo_export0: 'False' + lo_export1: 'False' + lo_export10: 'False' + lo_export11: 'False' + lo_export12: 'False' + lo_export13: 'False' + lo_export14: 'False' + lo_export15: 'False' + lo_export16: 'False' + lo_export17: 'False' + lo_export18: 'False' + lo_export19: 'False' + lo_export2: 'False' + lo_export20: 'False' + lo_export21: 'False' + lo_export22: 'False' + lo_export23: 'False' + lo_export24: 'False' + lo_export25: 'False' + lo_export26: 'False' + lo_export27: 'False' + lo_export28: 'False' + lo_export29: 'False' + lo_export3: 'False' + lo_export30: 'False' + lo_export31: 'False' + lo_export4: 'False' + lo_export5: 'False' + lo_export6: 'False' + lo_export7: 'False' + lo_export8: 'False' + lo_export9: 'False' + lo_source0: internal + lo_source1: internal + lo_source10: internal + lo_source11: internal + lo_source12: internal + lo_source13: internal + lo_source14: internal + lo_source15: internal + lo_source16: internal + lo_source17: internal + lo_source18: internal + lo_source19: internal + lo_source2: internal + lo_source20: internal + lo_source21: internal + lo_source22: internal + lo_source23: internal + lo_source24: internal + lo_source25: internal + lo_source26: internal + lo_source27: internal + lo_source28: internal + lo_source29: internal + lo_source3: internal + lo_source30: internal + lo_source31: internal + lo_source4: internal + lo_source5: internal + lo_source6: internal + lo_source7: internal + lo_source8: internal + lo_source9: internal + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + num_mboards: '1' + otw: '' + rx_agc0: Disabled + rx_agc1: Default + rx_agc10: Default + rx_agc11: Default + rx_agc12: Default + rx_agc13: Default + rx_agc14: Default + rx_agc15: Default + rx_agc16: Default + rx_agc17: Default + rx_agc18: Default + rx_agc19: Default + rx_agc2: Default + rx_agc20: Default + rx_agc21: Default + rx_agc22: Default + rx_agc23: Default + rx_agc24: Default + rx_agc25: Default + rx_agc26: Default + rx_agc27: Default + rx_agc28: Default + rx_agc29: Default + rx_agc3: Default + rx_agc30: Default + rx_agc31: Default + rx_agc4: Default + rx_agc5: Default + rx_agc6: Default + rx_agc7: Default + rx_agc8: Default + rx_agc9: Default + samp_rate: samp_rate + sd_spec0: '' + sd_spec1: '' + sd_spec2: '' + sd_spec3: '' + sd_spec4: '' + sd_spec5: '' + sd_spec6: '' + sd_spec7: '' + show_lo_controls: 'False' + start_time: '-1.0' + stream_args: '' + stream_chans: '[]' + sync: none + 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: [296, 684.0] + rotation: 0 + state: enabled +- name: virtual_sink_0 + id: virtual_sink + parameters: + alias: '' + comment: "Tuned station.\n\nBaseband output:\n 48 kSa/s\n bw=5 kHz" + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [928, 652.0] + rotation: 0 + state: enabled +- name: virtual_sink_2_0 + id: virtual_sink + parameters: + alias: '' + comment: 'Station chosen + + by clicking gui.' + stream_id: amStation_kHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1344, 916.0] + rotation: 0 + state: enabled +- name: virtual_sink_2_1 + id: virtual_sink + parameters: + alias: '' + comment: 'Station chosen by user + + via QT Gui Sink and + + up-converted.' + stream_id: upConv_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1328, 1116.0] + rotation: 0 + state: true +- name: virtual_source_0 + id: virtual_source + parameters: + alias: '' + comment: '48 kSa/s + + bw=5 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [42, 1463] + rotation: 0 + state: true +- name: virtual_source_2_0 + id: virtual_source + parameters: + alias: '' + comment: 'Station chosen + + by clicking gui.' + stream_id: amStation_kHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [504, 1132.0] + rotation: 0 + state: enabled +- name: virtual_source_2_1_0 + id: virtual_source + parameters: + alias: '' + comment: 'Station message from + + QT Gui Message Edit Box.' + stream_id: upConv_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [48, 732.0] + rotation: 0 + state: enabled + +connections: +- [analog_agc_xx_0, '0', blocks_complex_to_mag_0, '0'] +- [blocks_add_const_vxx_0, '0', blocks_multiply_const_vxx_0, '0'] +- [blocks_add_const_vxx_0, '0', qtgui_sink_x_0, '0'] +- [blocks_add_const_vxx_0, '0', qtgui_time_sink_x_0, '0'] +- [blocks_complex_to_mag_0, '0', blocks_add_const_vxx_0, '0'] +- [blocks_multiply_const_vxx_0, '0', audio_sink_0_0, '0'] +- [blocks_mute_xx_0, '0', fosphor_qt_sink_c_0, '0'] +- [blocks_mute_xx_0, '0', low_pass_filter_0, '0'] +- [blocks_mute_xx_0, '0', qtgui_sink_x_0_0, '0'] +- [epy_block_0, snapped_Hz_out, qtgui_sink_x_0_0, freq] +- [epy_block_0, snapped_kHz_out, blocks_msgpair_to_var_0, inpair] +- [epy_block_0, snapped_kHz_out, virtual_sink_2_0, '0'] +- [epy_block_1, upConv_Hz_out, virtual_sink_2_1, '0'] +- [fosphor_qt_sink_c_0, freq, epy_block_0, raw_Hz_in] +- [low_pass_filter_0, '0', virtual_sink_0, '0'] +- [qtgui_edit_box_msg_0, msg, epy_block_1, freq_kHz_in] +- [qtgui_sink_x_0_0, freq, epy_block_0, raw_Hz_in] +- [uhd_usrp_source_0, '0', blocks_mute_xx_0, '0'] +- [virtual_source_0, '0', analog_agc_xx_0, '0'] +- [virtual_source_2_0, '0', qtgui_edit_box_msg_0, val] +- [virtual_source_2_1_0, '0', uhd_usrp_source_0, command] + +metadata: + file_format: 1 diff --git a/ex 1.grc b/ex 1.grc new file mode 100644 index 0000000..24080b8 --- /dev/null +++ b/ex 1.grc @@ -0,0 +1,641 @@ +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: ex1 + 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: fm radio example + window_size: (1000,1000) + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [8, 8] + rotation: 0 + state: enabled + +blocks: +- name: center_freq + id: variable + parameters: + comment: '' + value: 97.9e6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [168, 784.0] + rotation: 0 + state: enabled +- name: channel_freq + id: variable + parameters: + comment: '' + value: '96100000.0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [48, 864.0] + rotation: 0 + state: enabled +- name: channel_width + id: variable + parameters: + comment: '' + value: 200e3 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [168, 864.0] + rotation: 0 + state: enabled +- name: samp_rate + id: variable + parameters: + comment: '' + value: 20e6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [64, 784.0] + rotation: 0 + state: enabled +- name: volume_adjust + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: '' + label: '' + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '0' + step: '.01' + stop: '5' + value: '1' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [984, 872.0] + rotation: 0 + state: enabled +- name: analog_sig_source_x_0 + id: analog_sig_source_x + parameters: + affinity: '' + alias: '' + amp: '1' + comment: '' + freq: center_freq - channel_freq + maxoutbuf: '0' + minoutbuf: '0' + offset: '0' + phase: '0' + samp_rate: samp_rate + showports: 'False' + type: complex + waveform: analog.GR_COS_WAVE + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [128, 616.0] + rotation: 0 + state: enabled +- name: analog_wfm_rcv_0 + id: analog_wfm_rcv + parameters: + affinity: '' + alias: '' + audio_decimation: '10' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + quad_rate: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [816, 608.0] + rotation: 0 + state: enabled +- name: audio_sink_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + num_inputs: '1' + ok_to_block: 'True' + samp_rate: '48000' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1080, 504.0] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: volume_adjust + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1048, 672.0] + rotation: 0 + state: enabled +- name: blocks_multiply_xx_0 + id: blocks_multiply_xx + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [440, 552.0] + rotation: 0 + state: enabled +- name: low_pass_filter_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: '' + cutoff_freq: 75e3 + decim: int(samp_rate/channel_width) + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_ccf + width: 25e3 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [488, 748.0] + rotation: 0 + state: enabled +- 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: center_freq + 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: '0' + 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: [96, 380.0] + rotation: 0 + state: enabled +- name: qtgui_sink_x_0_0 + id: qtgui_sink_x + parameters: + affinity: '' + alias: '' + bw: samp_rate + comment: '' + fc: channel_freq + fftsize: '32768' + gui_hint: '' + maxoutbuf: '0' + minoutbuf: '0' + name: '""' + plotconst: 'True' + plotfreq: 'True' + plottime: 'True' + plotwaterfall: 'True' + rate: '10' + showports: 'False' + showrf: 'True' + type: complex + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [800, 280.0] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_0 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '5' + fbw: '0' + interp: '12' + maxoutbuf: '0' + minoutbuf: '0' + taps: '[]' + type: ccc + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [608, 560.0] + rotation: 0 + state: enabled + +connections: +- [analog_sig_source_x_0, '0', blocks_multiply_xx_0, '1'] +- [analog_wfm_rcv_0, '0', blocks_multiply_const_vxx_0, '0'] +- [blocks_multiply_const_vxx_0, '0', audio_sink_0, '0'] +- [blocks_multiply_xx_0, '0', low_pass_filter_0, '0'] +- [blocks_multiply_xx_0, '0', qtgui_sink_x_0_0, '0'] +- [low_pass_filter_0, '0', rational_resampler_xxx_0, '0'] +- [osmosdr_source_0, '0', blocks_multiply_xx_0, '0'] +- [rational_resampler_xxx_0, '0', analog_wfm_rcv_0, '0'] + +metadata: + file_format: 1 + grc_version: 3.10.9.2 diff --git a/fmRadio.grc b/fmRadio.grc new file mode 100644 index 0000000..cb78c7e --- /dev/null +++ b/fmRadio.grc @@ -0,0 +1,3713 @@ +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: fmRadio + 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: Stereo FM Receiver + window_size: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [51, 195] + rotation: 0 + state: enabled + +blocks: +- name: audioSrc + id: variable_qtgui_chooser + parameters: + comment: '' + gui_hint: 0,3,1,2 + label: Audio + label0: Main + label1: SCA 67 kHz + label2: SCA 92 kHz + label3: '' + label4: '' + labels: '[]' + num_opts: '3' + option0: '0' + option1: '1' + option2: '2' + option3: '3' + option4: '4' + options: '[0, 1, 2]' + orient: Qt.QVBoxLayout + type: int + value: '0' + widget: combo_box + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [512, 196.0] + rotation: 0 + state: true +- name: audio_Hz + id: variable + parameters: + comment: '' + value: 48e3 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [60, 398] + rotation: 0 + state: enabled +- name: deviation_Hz + id: variable + parameters: + comment: 'FM broadcast + + deviation.' + value: 75e3 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1520, 920.0] + rotation: 0 + state: true +- name: downRate_Hz + id: variable + parameters: + comment: '' + value: 10* audio_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [60, 464] + rotation: 0 + state: enabled +- name: freq_MHz + id: variable + parameters: + comment: '' + value: '104.5' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [200, 1412.0] + rotation: 0 + state: true +- name: fsPilot_Hz + id: variable + parameters: + comment: 'Sample rate when working + + with 38 kHz stero pilot tone.' + value: 2 * audio_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [54, 284] + rotation: 0 + state: enabled +- name: lpTaps + id: variable_low_pass_filter_taps + parameters: + beta: '6.76' + comment: '' + cutoff_freq: 100e3 + gain: '1.0' + samp_rate: downRate_Hz + value: '' + width: 10e3 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1680, 916.0] + rotation: 0 + state: enabled +- name: mute + id: variable_qtgui_check_box + parameters: + comment: '' + 'false': 'False' + gui_hint: 0,5,1,1 + label: Mute + 'true': 'True' + type: bool + value: 'False' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [661, 199] + rotation: 0 + state: true +- name: rfGain_dB + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: 1,0,1,3 + label: RF Gain (dB) + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: int + start: '10' + step: '1' + stop: '90' + value: '50' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [368, 332.0] + rotation: 0 + state: true +- name: rrc_taps + id: variable_rrc_filter_taps + parameters: + alpha: '1.0' + comment: '' + gain: '1.0' + ntaps: '151' + samp_rate: '19000' + sym_rate: 19000/8 + value: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [768, 4648.0] + rotation: 0 + state: true +- name: rrc_taps_manchester + id: variable + parameters: + comment: '' + value: '[rrc_taps[n] - rrc_taps[n+8] for n in range(len(rrc_taps)-8)]' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [768, 4576.0] + rotation: 0 + state: true +- name: samp_rate + id: variable + parameters: + comment: 'This rate provides + + a nice spectrum for + + Fosphor display. + + + For RTL-SDR, use 2.4 MSa/s.' + value: 4.8e6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [60, 529] + rotation: 0 + state: enabled +- name: taps_sca + id: variable_low_pass_filter_taps + parameters: + beta: '6.76' + comment: '' + cutoff_freq: 10e3 + gain: '1.0' + samp_rate: downRate_Hz / 2 + value: '' + width: 1e2 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [312, 3340.0] + rotation: 0 + state: enabled +- name: taps_sca_0 + id: variable_low_pass_filter_taps + parameters: + beta: '6.76' + comment: '' + cutoff_freq: 10e3 + gain: '1.0' + samp_rate: downRate_Hz / 2 + value: '' + width: 1e2 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [312, 3692.0] + rotation: 0 + state: enabled +- name: volume + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: 0,0,1,3 + label: Volume + min_len: '200' + orient: QtCore.Qt.Horizontal + rangeType: float + start: '0' + step: '0.01' + stop: '1' + value: '0.1' + widget: counter_slider + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [371, 196] + rotation: 0 + state: true +- name: analog_agc_xx_0 + id: analog_agc_xx + parameters: + affinity: '' + alias: '' + comment: '' + gain: '53' + max_gain: '1000' + maxoutbuf: '0' + minoutbuf: '0' + rate: 2e-3 + reference: '0.585' + type: complex + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [992, 4480.0] + rotation: 0 + state: true +- name: analog_fm_deemph_0 + id: analog_fm_deemph + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: audio_Hz + tau: 75e-6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [454, 2839] + rotation: 0 + state: enabled +- name: analog_fm_deemph_0_1 + id: analog_fm_deemph + parameters: + affinity: '' + alias: '' + comment: Undo pre-emphasis. + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: audio_Hz + tau: 75e-6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [454, 2937] + rotation: 0 + state: enabled +- name: analog_fm_demod_cf_0 + id: analog_fm_demod_cf + parameters: + affinity: '' + alias: '' + audio_decim: '10' + audio_pass: '15000' + audio_stop: '16000' + chan_rate: 480e3 + comment: '' + deviation: '75000' + gain: '1.0' + maxoutbuf: '0' + minoutbuf: '0' + tau: 75e-6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [592, 3212.0] + rotation: 0 + state: true +- name: analog_fm_demod_cf_0_0 + id: analog_fm_demod_cf + parameters: + affinity: '' + alias: '' + audio_decim: '10' + audio_pass: '15000' + audio_stop: '16000' + chan_rate: 480e3 + comment: '' + deviation: '75000' + gain: '1.0' + maxoutbuf: '0' + minoutbuf: '0' + tau: 75e-6 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [592, 3564.0] + rotation: 0 + state: true +- name: analog_pll_refout_cc_0 + id: analog_pll_refout_cc + parameters: + affinity: '' + alias: '' + comment: '~19 kHz pilot + + + Lock onto received + + f=~19 kHz pilot +/- 0.01 rad. + + (2 pi f) / fs = 1.24 rad/Sa' + max_freq: (2 * 3.1416 * 19e3) / (2 * audio_Hz) + 0.1 + maxoutbuf: '0' + min_freq: (2 * 3.1416 * 19e3) / (2 * audio_Hz) - 0.1 + minoutbuf: '0' + w: (2 * 3.1416)/100 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [680, 1976.0] + rotation: 0 + state: enabled +- name: audio_sink_0_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: Soundcard. + device_name: '' + num_inputs: '2' + ok_to_block: 'True' + samp_rate: int(audio_Hz) + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [718, 4075] + rotation: 0 + state: enabled +- name: band_pass_filter_0 + id: band_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: "Output:\n 96 kSa/s\n fc=19 kHz\n bw=2 kHz" + decim: int(downRate_Hz / fsPilot_Hz) + gain: '1' + high_cutoff_freq: 20e3 + interp: '1' + low_cutoff_freq: 18e3 + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: downRate_Hz + type: fir_filter_fff + width: '500' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [272, 1927] + rotation: 0 + state: enabled +- name: band_pass_filter_0_0 + id: band_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: Clean PLL output. + decim: '1' + gain: '1' + high_cutoff_freq: 39e3 + interp: '1' + low_cutoff_freq: 37e3 + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: fsPilot_Hz + type: fir_filter_ccf + width: '500' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [432, 2212.0] + rotation: 0 + state: enabled +- name: band_pass_filter_0_1 + id: band_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: "Output:\n 96 kSa/s\n fc=38 kHz\n bw: 30 kHz" + decim: int(downRate_Hz / fsPilot_Hz) + gain: '10' + high_cutoff_freq: 53e3 + interp: '1' + low_cutoff_freq: 23e3 + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: downRate_Hz + type: fir_filter_fcc + width: '500' + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [260, 2539] + rotation: 0 + state: enabled +- name: blocks_add_xx_0 + id: blocks_add_xx + parameters: + affinity: '' + alias: '' + comment: Recover 2L. + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [331, 2835] + rotation: 0 + state: enabled +- name: blocks_complex_to_arg_0 + id: blocks_complex_to_arg + parameters: + affinity: '' + alias: '' + comment: 'Quadrature demod: + + arg(x_n / x_n-1)' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1336, 856.0] + rotation: 0 + state: enabled +- name: blocks_complex_to_real_0 + id: blocks_complex_to_real + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [768, 2552.0] + rotation: 0 + state: enabled +- name: blocks_complex_to_real_0_0 + id: blocks_complex_to_real + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [648, 2208.0] + rotation: 0 + state: enabled +- name: blocks_delay_0_0 + id: blocks_delay + parameters: + affinity: '' + alias: '' + comment: x_n-1 + delay: '1' + maxoutbuf: '0' + minoutbuf: '0' + num_ports: '1' + showports: 'False' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1088, 904.0] + rotation: 0 + state: enabled +- name: blocks_divide_xx_0 + id: blocks_divide_xx + parameters: + affinity: '' + alias: '' + comment: x_n / x_n-1 + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1216, 840.0] + rotation: 0 + state: enabled +- name: blocks_float_to_complex_0 + id: blocks_float_to_complex + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [504, 1984.0] + rotation: 0 + state: enabled +- name: blocks_msgpair_to_var_0 + id: blocks_msgpair_to_var + parameters: + affinity: '' + alias: '' + comment: '' + target: freq_MHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1912, 1296.0] + rotation: 0 + state: true +- name: blocks_msgpair_to_var_0_0 + id: blocks_msgpair_to_var + parameters: + affinity: '' + alias: '' + comment: '' + target: freq_MHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1528, 1488.0] + rotation: 0 + state: true +- name: blocks_multiply_const_vxx_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: volume + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [626, 2847] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: Volume. + const: volume + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [627, 2945] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0_0_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: Volume. + const: volume + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [808, 3260.0] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0_0_0_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: Volume. + const: volume + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [808, 3612.0] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_1 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: Gain + const: 8 * downRate_Hz / (2 * 3.1416 * deviation_Hz) + maxoutbuf: '0' + minoutbuf: '0' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1512, 848.0] + rotation: 0 + state: enabled +- name: blocks_multiply_xx_0 + id: blocks_multiply_xx + parameters: + affinity: '' + alias: '' + comment: ~38 kHz pilot + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [296, 2264.0] + rotation: 0 + state: enabled +- name: blocks_multiply_xx_0_0 + id: blocks_multiply_xx + parameters: + affinity: '' + alias: '' + comment: 'Mix L-R to + + baseband.' + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: complex + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [448, 2536.0] + rotation: 0 + state: enabled +- name: blocks_mute_xx_0 + id: blocks_mute_xx + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + mute: mute + type: complex + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [680, 872.0] + rotation: 0 + state: true +- name: blocks_selector_0 + id: blocks_selector + parameters: + affinity: '' + alias: '' + comment: '' + enabled: 'True' + input_index: audioSrc + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '3' + num_outputs: '1' + output_index: '0' + showports: 'True' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [470, 3996] + rotation: 0 + state: enabled +- name: blocks_selector_0_0 + id: blocks_selector + parameters: + affinity: '' + alias: '' + comment: 'Select Main or SCA audio. + + Controlled by GUI.' + enabled: 'True' + input_index: audioSrc + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '3' + num_outputs: '1' + output_index: '0' + showports: 'True' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [470, 4139] + rotation: 0 + state: enabled +- name: blocks_sub_xx_0 + id: blocks_sub_xx + parameters: + affinity: '' + alias: '' + comment: Recover 2R. + maxoutbuf: '0' + minoutbuf: '0' + num_inputs: '2' + type: float + vlen: '1' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [330, 2933] + rotation: 0 + state: enabled +- name: digital_constellation_receiver_cb_0 + id: digital_constellation_receiver_cb + parameters: + affinity: '' + alias: '' + comment: '' + constellation: digital.constellation_bpsk().base() + fmax: '0.002' + fmin: '-0.002' + loop_bw: 2*3.1416 / 100 + maxoutbuf: '0' + minoutbuf: '0' + showports: 'False' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1488, 4400.0] + rotation: 0 + state: true +- name: digital_diff_decoder_bb_0_0 + id: digital_diff_decoder_bb + parameters: + affinity: '' + alias: '' + coding: digital.DIFF_DIFFERENTIAL + comment: Bits + maxoutbuf: '0' + minoutbuf: '0' + modulus: '2' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1752, 4384.0] + rotation: 0 + state: enabled +- name: digital_symbol_sync_xx_0_0 + id: digital_symbol_sync_xx + parameters: + affinity: '' + alias: '' + comment: 1 Sa/sym + constellation: digital.constellation_bpsk().base() + damping: '1.0' + loop_bw: '0.01' + max_dev: '0.1' + maxoutbuf: '0' + minoutbuf: '0' + nfilters: '128' + osps: '1' + pfb_mf_taps: '[]' + resamp_type: digital.IR_MMSE_8TAP + sps: '16' + ted_gain: '1.0' + ted_type: digital.TED_ZERO_CROSSING + type: cc + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1168, 4444.0] + rotation: 0 + state: true +- name: epy_block_0 + id: epy_block + parameters: + _source_code: "'''Convert an arbitrary frequency in the FM broadcast band to the\ + \ frequency\nof the nearest radio station frequency.\n\nMike Markowski, mike.ab3ap@gmail.com\n\ + Feb 2021\n'''\n\nimport numpy as np\nfrom gnuradio import gr\nimport pmt\n\n\ + class snapBlock(gr.basic_block):\n\n\tdef __init__(self):\n\t\tgr.basic_block.__init__(\n\ + \t\t\tself,\n\t\t\tname=\"Snap to Station\",\n\t\t\tin_sig=None,\n\t\t\tout_sig=None)\n\ + \n\t\t# User input that is only somewhere near a station frequency.\n\t\tself.message_port_register_in(pmt.intern('raw_Hz_in'))\n\ + \t\tself.set_msg_handler(pmt.intern('raw_Hz_in'), self.stationSnap)\n\n\t\t\ + # Output in Hz and MHz that is exactly a station frequency.\n\t\tself.message_port_register_out(pmt.intern('snapped_Hz_out'))\n\ + \t\tself.message_port_register_out(pmt.intern('snapped_MHz_out'))\n\n\tdef stationSnap(self,\ + \ msg):\n\n\t\t'''Accept a pmt pair with user selected frequency information\ + \ and\n\t\tadjust it to the nearest broadcast FM frequency.\n\n\t\tInputs:\n\ + \t\t msg (dictionary) : assumed to contain only: (freq . )\n\n\t\tOutputs:\n\ + \t\t freq_Hz_out (pmt.dict) : (freq . snappedFreq) where snappedFreq\n\t\t\ + \ is input frequency in Hz moved to nearest broadcast frequency.\n\t\t freq_MHz_out\ + \ (pmt.dict) : (freq . snappedFreq) where snappedFreq\n\t\t is input frequency\ + \ in MHz moved to nearest broadcast frequency.\n\t\t'''\n\n\t\t# Disassemble\ + \ pmt pair.\n\t\tcmd = pmt.car(msg)\n\t\tfreq = pmt.cdr(msg)\n\t\tfreqRaw_MHz\ + \ = pmt.to_python(freq) / 1e6 # Easier to work in MHz.\n\n\t\t# Snap user-clicked\ + \ freq to nearest FM station.\n\t\tspacing = 0.2 # N. American broadcast FM\ + \ spacing in MHz.\n\t\tnearest = 0.1 # Round to nearest odd tenth of MHz.\n\t\ + \tfreq_MHz = nearest + round((freqRaw_MHz - nearest)/spacing) * spacing\n\t\t\ + freq_Hz = freq_MHz * 1e6\n\n\t\t# Generate output message, (freq . freq_Hz).\n\ + \t\tpair = pmt.cons(cmd, pmt.to_pmt(freq_Hz))\n\t\tself.message_port_pub(pmt.intern('snapped_Hz_out'),\ + \ pair)\n\n\t\t# Generate output message, (freq . freq_MHz).\n\t\tpair = pmt.cons(cmd,\ + \ pmt.to_pmt(freq_MHz))\n\t\tself.message_port_pub(pmt.intern('snapped_MHz_out'),\ + \ pair)\n" + affinity: '' + alias: '' + comment: 'Snap user choice + + to nearest station.' + maxoutbuf: '0' + minoutbuf: '0' + states: + _io_cache: ('Snap to Station', 'snapBlock', [], [('raw_Hz_in', 'message', 1)], + [('snapped_MHz_out', 'message', 1), ('snapped_Hz_out', 'message', 1)], '', []) + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1600, 1344.0] + rotation: 0 + state: true +- name: epy_block_1 + id: epy_block + parameters: + _source_code: "'''Convert a pmt pair (freq . f_Hz) to (freq . f_MHz).\n\nMike\ + \ Markowski, mike.ab3ap@gmail.com\nFeb 2021\n'''\n\nimport numpy as np\nfrom\ + \ gnuradio import gr\nimport pmt\n\nclass cvtBlock(gr.basic_block):\n\n\tdef\ + \ __init__(self):\n\t\t\"\"\"arguments to this function show up as parameters\ + \ in GRC\"\"\"\n\t\tgr.basic_block.__init__(\n\t\t\tself,\n\t\t\tname='MHz to\ + \ Hz',\n\t\t\tin_sig=None,\n\t\t\tout_sig=None\n\t\t)\n\n\t\tself.message_port_register_in(pmt.intern('freq_MHz_in'))\n\ + \t\tself.set_msg_handler(pmt.intern('freq_MHz_in'), self.MHzToHz)\n\n\t\tself.message_port_register_out(pmt.intern('freq_Hz_out'))\n\ + \n\tdef MHzToHz(self, msg):\n\t\t'''msg expected to be pmt pair (freq . val).'''\n\ + \n\t\tcmd = pmt.car(msg)\n\t\tfreq_Hz = 1e6 * pmt.to_python(pmt.cdr(msg))\n\n\ + \t\thzDict = pmt.make_dict()\n\t\thzDict = pmt.dict_add(hzDict, cmd, pmt.to_pmt(freq_Hz))\n\ + \t\tself.message_port_pub(pmt.intern('freq_Hz_out'), hzDict)\n" + affinity: '' + alias: '' + comment: 'MHz is easier to work with, + + but SDR needs Hz.' + maxoutbuf: '0' + minoutbuf: '0' + states: + _io_cache: ('MHz to Hz', 'cvtBlock', [], [('freq_MHz_in', 'message', 1)], [('freq_Hz_out', + 'message', 1)], 'arguments to this function show up as parameters in GRC', []) + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1528, 1552.0] + rotation: 0 + state: enabled +- name: fir_filter_xxx_0 + id: fir_filter_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_delay: '0' + taps: lpTaps + type: fff + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1688, 840.0] + rotation: 0 + state: enabled +- name: fir_filter_xxx_2 + id: fir_filter_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_delay: '0' + taps: rrc_taps_manchester + type: ccc + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [768, 4496.0] + rotation: 0 + state: enabled +- name: fosphor_qt_sink_c_0 + id: fosphor_qt_sink_c + parameters: + affinity: '' + alias: '' + comment: '' + freq_center: freq_MHz * 1e6 + freq_span: samp_rate + gui_hint: 'spectra@0 : 0,0,1,1' + maxoutbuf: '0' + minoutbuf: '0' + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1208, 1240.0] + rotation: 0 + state: enabled +- name: freq_xlating_fir_filter_xxx_0_0 + id: freq_xlating_fir_filter_xxx + parameters: + affinity: '' + alias: '' + center_freq: 67.65e3 + comment: '' + decim: '2' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: downRate_Hz + taps: taps_sca + type: fcf + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [304, 3236] + rotation: 0 + state: enabled +- name: freq_xlating_fir_filter_xxx_0_0_0 + id: freq_xlating_fir_filter_xxx + parameters: + affinity: '' + alias: '' + center_freq: 92e3 + comment: '' + decim: '2' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: downRate_Hz + taps: taps_sca + type: fcf + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [304, 3586] + rotation: 0 + state: enabled +- name: freq_xlating_fir_filter_xxx_1_0 + id: freq_xlating_fir_filter_xxx + parameters: + affinity: '' + alias: '' + center_freq: 57e3 + comment: 'Bandpass fc=57 kHz, bw=5 kHz + + 48 kSa/s' + decim: '10' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: downRate_Hz + taps: firdes.low_pass(1.0, downRate_Hz, 7.5e3, 5e3) + type: fcc + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [344, 4480.0] + rotation: 0 + state: enabled +- name: low_pass_filter_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: "Channel to baseband:\n 480 kSa/s\n bw=100 kHz" + cutoff_freq: 100e3 + decim: int(samp_rate / downRate_Hz) + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_ccf + width: 5e3 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [880, 788.0] + rotation: 0 + state: true +- name: low_pass_filter_0_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: Mono filtered to 15 kHz cutoff. + cutoff_freq: 15e3 + decim: int(downRate_Hz / audio_Hz) + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: downRate_Hz + type: fir_filter_fff + width: 1.5e3 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [263, 1635] + rotation: 0 + state: enabled +- name: low_pass_filter_0_0_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: Audio filtered to 15 kHz cutoff. + cutoff_freq: 15e3 + decim: '2' + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: fsPilot_Hz + type: fir_filter_ccf + width: 1.5e3 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [576, 2492.0] + rotation: 0 + state: enabled +- name: note_0 + id: note + parameters: + alias: 'Inspired by URL: https://www.nutsvolts.com/magazine/article/fm-reception-with-the-gnu-radio-companion' + comment: "Mike Markowski\nFeb 4, 2021\nmike.ab3ap@gmail.com\n\nInspired by and\ + \ modeled after URL: \nhttps://www.nutsvolts.com/magazine/article/fm-reception-with-the-gnu-radio-companion" + note: FM radio project! + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [56, 25] + rotation: 0 + state: true +- name: note_0_0 + id: note + parameters: + alias: 'Inspired by URL: https://www.nutsvolts.com/magazine/article/fm-reception-with-the-gnu-radio-companion' + comment: 'GUI blocks here are laid + + out as in displayed GUI.' + note: GUI info + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [760, 420.0] + rotation: 0 + state: true +- name: note_0_1 + id: note + parameters: + alias: '' + comment: 'Tune to desired station and + + output 100 kHz channel.' + note: Tuner + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [47, 755] + rotation: 0 + state: true +- name: note_0_1_0 + id: note + parameters: + alias: '' + comment: '*** samp_rate must be a multiple of + + downRate_Hz, and downRate_Hz must be + + a multiple of audio_Hz.' + note: Rates + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [176, 465] + rotation: 0 + state: true +- name: note_1 + id: note + parameters: + alias: '' + comment: 'This simply supports clicking + + on QT Gui Sink to change stations.' + note: GUI Niceties + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [888, 1344.0] + rotation: 0 + state: true +- name: note_2 + id: note + parameters: + alias: '' + comment: 'fc=67.65 kHz + + bw=18 kHz + + FM modulated' + note: SCA1 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [65, 3142] + rotation: 0 + state: true +- name: note_2_0 + id: note + parameters: + alias: '' + comment: 'fc=92 kHz + + bw=16 kHz + + FM modulated' + note: SCA2 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [64, 3486] + rotation: 0 + state: enabled +- name: note_2_0_0 + id: note + parameters: + alias: '' + comment: "GUI is used to select\n Stereo main,\n Mono SCA@67 kHz, or\n Mono\ + \ SCA@92 kHz." + note: Audio source + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [66, 3871] + rotation: 0 + state: enabled +- name: note_3_1 + id: note + parameters: + alias: '' + comment: "fc=57 kHz, 3rd harmonic of pilot. \n1187.5 b/s (48 subcarrier cycles/bit).\n\ + Taken from gr-rds sample code." + note: RDS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [64, 4376.0] + rotation: 0 + state: enabled +- name: note_4 + id: note + parameters: + alias: '' + comment: '' + note: L+R (mono) + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [47, 1624] + rotation: 0 + state: true +- name: note_4_0 + id: note + parameters: + alias: '' + comment: '' + note: 19 kHz pilot + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [49, 1921] + rotation: 0 + state: true +- name: note_4_0_0 + id: note + parameters: + alias: '' + comment: '' + note: 38 kHz pilot + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [47, 2209] + rotation: 0 + state: true +- name: note_4_0_1 + id: note + parameters: + alias: '' + comment: '' + note: L-R + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [36, 2533] + rotation: 0 + state: true +- name: note_5 + id: note + parameters: + alias: '' + comment: '' + note: Stereo signals + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [42, 2798] + rotation: 0 + state: true +- name: note_6 + id: note + parameters: + alias: '' + comment: 'If you don''t have gr-fosphor + + installed, use QT GUI Sink.' + note: GUI choice + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1504, 1248.0] + rotation: 0 + state: enabled +- name: qtgui_const_sink_x_0 + id: qtgui_const_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: '"blue"' + color10: '"red"' + color2: '"red"' + color3: '"red"' + color4: '"red"' + color5: '"red"' + color6: '"red"' + color7: '"red"' + color8: '"red"' + color9: '"red"' + comment: '' + grid: 'False' + gui_hint: 'spectra@10 : 1,0,1,1' + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '0' + marker10: '0' + marker2: '0' + marker3: '0' + marker4: '0' + marker5: '0' + marker6: '0' + marker7: '0' + marker8: '0' + marker9: '0' + name: '""' + nconnections: '1' + size: '1024' + style1: '0' + style10: '0' + style2: '0' + style3: '0' + style4: '0' + style5: '0' + style6: '0' + style7: '0' + style8: '0' + style9: '0' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: complex + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + xmax: '2' + xmin: '-2' + ymax: '2' + ymin: '-2' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1840, 4672.0] + rotation: 0 + state: enabled +- name: qtgui_edit_box_msg_0 + id: qtgui_edit_box_msg + parameters: + affinity: '' + alias: '' + comment: '' + gui_hint: 1,3, 1,1 + is_pair: 'True' + is_static: 'True' + key: freq + label: Freq (MHz) + maxoutbuf: '0' + minoutbuf: '0' + type: float + value: '104.5' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1208, 1504.0] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_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: '0.2' + axislabels: 'True' + bw: audio_Hz + 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: 'False' + grid: 'True' + gui_hint: 'spectra@3 : 0,0,1,1' + label: Relative Gain + label1: '' + label10: '''''' + label2: '''''' + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'False' + maxoutbuf: '0' + minoutbuf: '0' + name: L+R + nconnections: '1' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: '0' + ymin: '-120' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [506, 1628] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_0_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: '0.1' + axislabels: 'True' + bw: 2e3 + 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: 19e3 + fftsize: '2048' + freqhalf: 'False' + grid: 'True' + gui_hint: 'spectra@4 : 0,0,1,1' + label: Relative Gain + label1: '' + label10: '''''' + label2: '''''' + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'False' + maxoutbuf: '0' + minoutbuf: '0' + name: 19 kHz Pilot + nconnections: '1' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: [484, 1873] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_0_0_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: '0.1' + axislabels: 'True' + bw: 2e3 + 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: 38e3 + fftsize: '2048' + freqhalf: 'False' + grid: 'True' + gui_hint: 'spectra@5 : 0,0,1,1' + label: Relative Gain + label1: '' + label10: '''''' + label2: '''''' + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'False' + maxoutbuf: '0' + minoutbuf: '0' + name: 38 kHz Pilot + nconnections: '1' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: [832, 2176.0] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_0_1 + 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: '0.2' + axislabels: 'True' + bw: audio_Hz + 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: 38e3 + fftsize: '1024' + freqhalf: 'False' + grid: 'True' + gui_hint: 'spectra@6 : 0,0,1,1' + label: Relative Gain + label1: '' + label10: '''''' + label2: '''''' + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'False' + maxoutbuf: '0' + minoutbuf: '0' + name: L-R + nconnections: '1' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: [980, 2499] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_0_1_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: '0.2' + axislabels: 'True' + bw: audio_Hz + 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: 'False' + grid: 'True' + gui_hint: 'spectra@7 : 0,0,1,1' + label: Relative Gain + label1: Left + label10: '''''' + label2: Right + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'True' + maxoutbuf: '0' + minoutbuf: '0' + name: Left & Right + nconnections: '2' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: [850, 2757] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_0_1_1 + 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: '0.1' + axislabels: 'True' + bw: audio_Hz + 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: 'False' + grid: 'True' + gui_hint: 'spectra@8 : 0,0,1,1' + label: Relative Gain + label1: '' + label10: '''''' + label2: '''''' + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'False' + maxoutbuf: '0' + minoutbuf: '0' + name: SCA + nconnections: '1' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: [1000, 3376.0] + rotation: 0 + state: enabled +- name: qtgui_freq_sink_x_0_0_1_1_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: '0.1' + axislabels: 'True' + bw: audio_Hz + 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: 'False' + grid: 'True' + gui_hint: 'spectra@9 : 0,0,1,1' + label: Relative Gain + label1: '' + label10: '''''' + label2: '''''' + label3: '''''' + label4: '''''' + label5: '''''' + label6: '''''' + label7: '''''' + label8: '''''' + label9: '''''' + legend: 'False' + maxoutbuf: '0' + minoutbuf: '0' + name: SCA + nconnections: '1' + norm_window: 'False' + showports: 'False' + tr_chan: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_tag: '""' + type: float + 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: [984, 3728.0] + rotation: 0 + state: enabled +- name: qtgui_sink_x_0 + id: qtgui_sink_x + parameters: + affinity: '' + alias: '' + bw: 480e3 + comment: '' + fc: '0' + fftsize: '8192' + gui_hint: 'spectra@2 : 0,0,1,1' + maxoutbuf: '0' + minoutbuf: '0' + name: Tuned Station + plotconst: 'True' + plotfreq: 'True' + plottime: 'True' + plotwaterfall: 'True' + rate: '10' + showports: 'False' + showrf: 'False' + type: float + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1960, 960.0] + rotation: 0 + state: enabled +- name: qtgui_sink_x_0_0 + id: qtgui_sink_x + parameters: + affinity: '' + alias: '' + bw: samp_rate + comment: '' + fc: freq_MHz * 1e6 + fftsize: '1024' + gui_hint: 'spectra@1 : 0,0,1,1' + maxoutbuf: '0' + minoutbuf: '0' + name: Full Spectrum + plotconst: 'True' + plotfreq: 'True' + plottime: 'True' + plotwaterfall: 'True' + rate: '10' + showports: 'True' + showrf: 'True' + type: complex + wintype: window.WIN_BLACKMAN_hARRIS + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1208, 1328.0] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: blue + color10: dark blue + color2: red + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'True' + gui_hint: 'spectra@10 : 0,0,1,1' + label1: I + label10: Signal 10 + label2: Q + label3: Signal 3 + label4: Signal 4 + label5: Signal 5 + label6: Signal 6 + label7: Signal 7 + label8: Signal 8 + label9: Signal 9 + legend: 'True' + marker1: '0' + marker10: '-1' + marker2: '0' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '""' + nconnections: '1' + size: '200' + srate: 19e3 + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: complex + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Symbol Sync + ymax: '1' + ymin: '-1' + yunit: '""' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1488, 4576.0] + rotation: 0 + state: true +- name: qtgui_time_sink_x_1 + 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: 'True' + axislabels: 'True' + color1: cyan + color10: dark blue + color2: green + color3: green + color4: black + color5: cyan + color6: magenta + color7: yellow + color8: dark red + color9: dark green + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'True' + gui_hint: 'spectra@10 : 2,0,1,1' + label1: PLL Error + label10: Signal 10 + label2: PLL Phase + label3: PLL Frequency + 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: '0' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: '""' + nconnections: '3' + size: '1024' + srate: samp_rate + stemplot: 'False' + style1: '1' + style10: '1' + style2: '0' + 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: [1840, 4552.0] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_1 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: 19 kSa/s + decim: int(downRate_Hz // 10) + fbw: '0' + interp: '19000' + maxoutbuf: '0' + minoutbuf: '0' + taps: '[]' + type: ccc + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [584, 4480.0] + rotation: 0 + state: true +- name: rds_decoder_0_0 + id: rds_decoder + parameters: + affinity: '' + alias: '' + comment: '' + debug: 'False' + log: 'False' + maxoutbuf: '0' + minoutbuf: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1944, 4384.0] + rotation: 0 + state: true +- name: rds_panel_0_0 + id: rds_panel + parameters: + affinity: '' + alias: '' + comment: '' + freq: freq_MHz + gui_hint: '' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [2304, 4400.0] + rotation: 0 + state: true +- name: rds_parser_0_0 + id: rds_parser + parameters: + affinity: '' + alias: '' + comment: '' + debug: 'False' + log: 'False' + maxoutbuf: '0' + minoutbuf: '0' + pty_locale: '0' + reset: '0' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [2120, 4376.0] + rotation: 0 + state: true +- name: rtlsdr_source_0 + id: rtlsdr_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: 'Output: 2.4 MSa/s' + 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: '2' + 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: freq_MHz * 1e6 + 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: rfGain_dB + 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: 'True' + 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: '2' + 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: none + 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: [360, 1012.0] + rotation: 0 + state: disabled +- name: spectra + id: qtgui_tab_widget + parameters: + alias: '' + comment: '' + gui_hint: 2,0,1,9 + label0: RTSA + label1: Full Spectrum + label10: RDS Symbols + label11: Tab 11 + label12: Tab 12 + label13: Tab 13 + label14: Tab 14 + label15: Tab 15 + label16: Tab 16 + label17: Tab 17 + label18: Tab 18 + label19: Tab 19 + label2: Station Channel + label3: L+R + label4: 19 kHz Pilot + label5: 38 kHz Pilot + label6: L-R + label7: Left & Right + label8: SCA 67 kHz + label9: SCA 92 kHz + num_tabs: '11' + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [512, 412.0] + rotation: 0 + state: true +- name: uhd_usrp_source_0 + id: uhd_usrp_source + parameters: + affinity: '' + alias: '' + ant0: TX/RX + ant1: RX2 + ant10: RX2 + ant11: RX2 + ant12: RX2 + ant13: RX2 + ant14: RX2 + ant15: RX2 + ant16: RX2 + ant17: RX2 + ant18: RX2 + ant19: RX2 + ant2: RX2 + ant20: RX2 + ant21: RX2 + ant22: RX2 + ant23: RX2 + ant24: RX2 + ant25: RX2 + ant26: RX2 + ant27: RX2 + ant28: RX2 + ant29: RX2 + ant3: RX2 + ant30: RX2 + ant31: RX2 + ant4: RX2 + ant5: RX2 + ant6: RX2 + ant7: RX2 + ant8: RX2 + ant9: RX2 + bw0: samp_rate + bw1: '0' + bw10: '0' + bw11: '0' + bw12: '0' + bw13: '0' + bw14: '0' + bw15: '0' + bw16: '0' + bw17: '0' + bw18: '0' + bw19: '0' + bw2: '0' + bw20: '0' + bw21: '0' + bw22: '0' + bw23: '0' + bw24: '0' + bw25: '0' + bw26: '0' + bw27: '0' + bw28: '0' + bw29: '0' + bw3: '0' + bw30: '0' + bw31: '0' + bw4: '0' + bw5: '0' + bw6: '0' + bw7: '0' + bw8: '0' + bw9: '0' + center_freq0: freq_MHz * 1e6 + center_freq1: '0' + center_freq10: '0' + center_freq11: '0' + center_freq12: '0' + center_freq13: '0' + center_freq14: '0' + center_freq15: '0' + center_freq16: '0' + center_freq17: '0' + center_freq18: '0' + center_freq19: '0' + center_freq2: '0' + center_freq20: '0' + center_freq21: '0' + center_freq22: '0' + center_freq23: '0' + center_freq24: '0' + center_freq25: '0' + center_freq26: '0' + center_freq27: '0' + center_freq28: '0' + center_freq29: '0' + center_freq3: '0' + center_freq30: '0' + center_freq31: '0' + center_freq4: '0' + center_freq5: '0' + center_freq6: '0' + center_freq7: '0' + center_freq8: '0' + center_freq9: '0' + clock_rate: 0e0 + clock_source0: '' + clock_source1: '' + clock_source2: '' + clock_source3: '' + clock_source4: '' + clock_source5: '' + clock_source6: '' + clock_source7: '' + comment: '' + dc_offs0: 0+0j + dc_offs1: 0+0j + dc_offs10: 0+0j + dc_offs11: 0+0j + dc_offs12: 0+0j + dc_offs13: 0+0j + dc_offs14: 0+0j + dc_offs15: 0+0j + dc_offs16: 0+0j + dc_offs17: 0+0j + dc_offs18: 0+0j + dc_offs19: 0+0j + dc_offs2: 0+0j + dc_offs20: 0+0j + dc_offs21: 0+0j + dc_offs22: 0+0j + dc_offs23: 0+0j + dc_offs24: 0+0j + dc_offs25: 0+0j + dc_offs26: 0+0j + dc_offs27: 0+0j + dc_offs28: 0+0j + dc_offs29: 0+0j + dc_offs3: 0+0j + dc_offs30: 0+0j + dc_offs31: 0+0j + dc_offs4: 0+0j + dc_offs5: 0+0j + dc_offs6: 0+0j + dc_offs7: 0+0j + dc_offs8: 0+0j + dc_offs9: 0+0j + dc_offs_enb0: default + dc_offs_enb1: default + dc_offs_enb10: default + dc_offs_enb11: default + dc_offs_enb12: default + dc_offs_enb13: default + dc_offs_enb14: default + dc_offs_enb15: default + dc_offs_enb16: default + dc_offs_enb17: default + dc_offs_enb18: default + dc_offs_enb19: default + dc_offs_enb2: default + dc_offs_enb20: default + dc_offs_enb21: default + dc_offs_enb22: default + dc_offs_enb23: default + dc_offs_enb24: default + dc_offs_enb25: default + dc_offs_enb26: default + dc_offs_enb27: default + dc_offs_enb28: default + dc_offs_enb29: default + dc_offs_enb3: default + dc_offs_enb30: default + dc_offs_enb31: default + dc_offs_enb4: default + dc_offs_enb5: default + dc_offs_enb6: default + dc_offs_enb7: default + dc_offs_enb8: default + dc_offs_enb9: default + dev_addr: '""' + dev_args: '""' + gain0: rfGain_dB + gain1: '0' + gain10: '0' + gain11: '0' + gain12: '0' + gain13: '0' + gain14: '0' + gain15: '0' + gain16: '0' + gain17: '0' + gain18: '0' + gain19: '0' + gain2: '0' + gain20: '0' + gain21: '0' + gain22: '0' + gain23: '0' + gain24: '0' + gain25: '0' + gain26: '0' + gain27: '0' + gain28: '0' + gain29: '0' + gain3: '0' + gain30: '0' + gain31: '0' + gain4: '0' + gain5: '0' + gain6: '0' + gain7: '0' + gain8: '0' + gain9: '0' + gain_type0: default + gain_type1: default + gain_type10: default + gain_type11: default + gain_type12: default + gain_type13: default + gain_type14: default + gain_type15: default + gain_type16: default + gain_type17: default + gain_type18: default + gain_type19: default + gain_type2: default + gain_type20: default + gain_type21: default + gain_type22: default + gain_type23: default + gain_type24: default + gain_type25: default + gain_type26: default + gain_type27: default + gain_type28: default + gain_type29: default + gain_type3: default + gain_type30: default + gain_type31: default + gain_type4: default + gain_type5: default + gain_type6: default + gain_type7: default + gain_type8: default + gain_type9: default + iq_imbal0: 0+0j + iq_imbal1: 0+0j + iq_imbal10: 0+0j + iq_imbal11: 0+0j + iq_imbal12: 0+0j + iq_imbal13: 0+0j + iq_imbal14: 0+0j + iq_imbal15: 0+0j + iq_imbal16: 0+0j + iq_imbal17: 0+0j + iq_imbal18: 0+0j + iq_imbal19: 0+0j + iq_imbal2: 0+0j + iq_imbal20: 0+0j + iq_imbal21: 0+0j + iq_imbal22: 0+0j + iq_imbal23: 0+0j + iq_imbal24: 0+0j + iq_imbal25: 0+0j + iq_imbal26: 0+0j + iq_imbal27: 0+0j + iq_imbal28: 0+0j + iq_imbal29: 0+0j + iq_imbal3: 0+0j + iq_imbal30: 0+0j + iq_imbal31: 0+0j + iq_imbal4: 0+0j + iq_imbal5: 0+0j + iq_imbal6: 0+0j + iq_imbal7: 0+0j + iq_imbal8: 0+0j + iq_imbal9: 0+0j + iq_imbal_enb0: default + iq_imbal_enb1: default + iq_imbal_enb10: default + iq_imbal_enb11: default + iq_imbal_enb12: default + iq_imbal_enb13: default + iq_imbal_enb14: default + iq_imbal_enb15: default + iq_imbal_enb16: default + iq_imbal_enb17: default + iq_imbal_enb18: default + iq_imbal_enb19: default + iq_imbal_enb2: default + iq_imbal_enb20: default + iq_imbal_enb21: default + iq_imbal_enb22: default + iq_imbal_enb23: default + iq_imbal_enb24: default + iq_imbal_enb25: default + iq_imbal_enb26: default + iq_imbal_enb27: default + iq_imbal_enb28: default + iq_imbal_enb29: default + iq_imbal_enb3: default + iq_imbal_enb30: default + iq_imbal_enb31: default + iq_imbal_enb4: default + iq_imbal_enb5: default + iq_imbal_enb6: default + iq_imbal_enb7: default + iq_imbal_enb8: default + iq_imbal_enb9: default + lo_export0: 'False' + lo_export1: 'False' + lo_export10: 'False' + lo_export11: 'False' + lo_export12: 'False' + lo_export13: 'False' + lo_export14: 'False' + lo_export15: 'False' + lo_export16: 'False' + lo_export17: 'False' + lo_export18: 'False' + lo_export19: 'False' + lo_export2: 'False' + lo_export20: 'False' + lo_export21: 'False' + lo_export22: 'False' + lo_export23: 'False' + lo_export24: 'False' + lo_export25: 'False' + lo_export26: 'False' + lo_export27: 'False' + lo_export28: 'False' + lo_export29: 'False' + lo_export3: 'False' + lo_export30: 'False' + lo_export31: 'False' + lo_export4: 'False' + lo_export5: 'False' + lo_export6: 'False' + lo_export7: 'False' + lo_export8: 'False' + lo_export9: 'False' + lo_source0: internal + lo_source1: internal + lo_source10: internal + lo_source11: internal + lo_source12: internal + lo_source13: internal + lo_source14: internal + lo_source15: internal + lo_source16: internal + lo_source17: internal + lo_source18: internal + lo_source19: internal + lo_source2: internal + lo_source20: internal + lo_source21: internal + lo_source22: internal + lo_source23: internal + lo_source24: internal + lo_source25: internal + lo_source26: internal + lo_source27: internal + lo_source28: internal + lo_source29: internal + lo_source3: internal + lo_source30: internal + lo_source31: internal + lo_source4: internal + lo_source5: internal + lo_source6: internal + lo_source7: internal + lo_source8: internal + lo_source9: internal + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + num_mboards: '1' + otw: '' + rx_agc0: Disabled + rx_agc1: Default + rx_agc10: Default + rx_agc11: Default + rx_agc12: Default + rx_agc13: Default + rx_agc14: Default + rx_agc15: Default + rx_agc16: Default + rx_agc17: Default + rx_agc18: Default + rx_agc19: Default + rx_agc2: Default + rx_agc20: Default + rx_agc21: Default + rx_agc22: Default + rx_agc23: Default + rx_agc24: Default + rx_agc25: Default + rx_agc26: Default + rx_agc27: Default + rx_agc28: Default + rx_agc29: Default + rx_agc3: Default + rx_agc30: Default + rx_agc31: Default + rx_agc4: Default + rx_agc5: Default + rx_agc6: Default + rx_agc7: Default + rx_agc8: Default + rx_agc9: Default + samp_rate: samp_rate + sd_spec0: '' + sd_spec1: '' + sd_spec2: '' + sd_spec3: '' + sd_spec4: '' + sd_spec5: '' + sd_spec6: '' + sd_spec7: '' + show_lo_controls: 'False' + start_time: '-1.0' + stream_args: '' + stream_chans: '[]' + sync: none + 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: [360, 828.0] + rotation: 0 + state: enabled +- name: virtual_sink_0 + id: virtual_sink + parameters: + alias: '' + comment: "Demodulated station:\n 480 kSa/s\n bw=100 kHz" + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1960, 848.0] + rotation: 0 + state: enabled +- name: virtual_sink_0_0 + id: virtual_sink + parameters: + alias: '' + comment: "Audio output:\n 48 kSa/s\n bw=15 kHz" + stream_id: L+R + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [506, 1737] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_0 + id: virtual_sink + parameters: + alias: '' + comment: "Output:\n 96 kSa/s\n fc=38 kHz\n bw=2 kHz" + stream_id: 38 kHz pilot + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [640, 2272.0] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_1 + id: virtual_sink + parameters: + alias: '' + comment: "Audio output:\n 48 kSa/s\n bw=15 kHz" + stream_id: L-R + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [981, 2607] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_1_0 + id: virtual_sink + parameters: + alias: '' + comment: "Output:\n 48 kSa/s\n audio bw: 9 kHz" + stream_id: scaAudio67 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [984, 3260.0] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_1_0_0 + id: virtual_sink + parameters: + alias: '' + comment: Left Speaker. + stream_id: mainL + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [849, 2906] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_1_0_0_0 + id: virtual_sink + parameters: + alias: '' + comment: "Right Speaker:\n 48 kSa/s\n audio bw: 15 kHz" + stream_id: mainR + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [850, 2978] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_1_0_1 + id: virtual_sink + parameters: + alias: '' + comment: "Output:\n 48 kSa/s\n audio bw: 9 kHz" + stream_id: scaAudio92 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [984, 3612.0] + rotation: 0 + state: enabled +- name: virtual_sink_0_0_2 + id: virtual_sink + parameters: + alias: '' + comment: "Output:\n 96 kSa/s\n fc=19 kHz\n bw=2 kHz\n\n Unfiltered!" + stream_id: 19 kHz pilot + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [904, 1992.0] + rotation: 0 + state: enabled +- name: virtual_sink_2 + id: virtual_sink + parameters: + alias: '' + comment: 'Station chosen by user + + via QT Gui Sink.' + stream_id: fmStation_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1744, 1568.0] + rotation: 0 + state: enabled +- name: virtual_sink_2_0 + id: virtual_sink + parameters: + alias: '' + comment: 'Station chosen + + by clicking gui.' + stream_id: fmStation_MHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [1912, 1352.0] + rotation: 0 + state: enabled +- name: virtual_source_0 + id: virtual_source + parameters: + alias: '' + comment: '480 kSa/s + + bw=100 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [69, 1683] + rotation: 0 + state: enabled +- name: virtual_source_0_0 + id: virtual_source + parameters: + alias: '' + comment: '480 kSa/s + + bw=100 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [77, 1983] + rotation: 0 + state: enabled +- name: virtual_source_0_0_0 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: 19 kHz pilot + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [73, 2272] + rotation: 0 + state: enabled +- name: virtual_source_0_0_1 + id: virtual_source + parameters: + alias: '' + comment: '480 kSa/s + + bw=100 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [64, 2595] + rotation: 0 + state: enabled +- name: virtual_source_0_0_1_0 + id: virtual_source + parameters: + alias: '' + comment: '480 kSa/s + + bw=100 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [97, 3244] + rotation: 0 + state: enabled +- name: virtual_source_0_0_1_0_0 + id: virtual_source + parameters: + alias: '' + comment: '480 kSa/s + + bw=100 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [99, 3594] + rotation: 0 + state: enabled +- name: virtual_source_0_0_1_0_0_0_0_0 + id: virtual_source + parameters: + alias: '' + comment: '480 kSa/s + + bw=100 kHz' + stream_id: baseband + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [128, 4488.0] + rotation: 0 + state: enabled +- name: virtual_source_0_1_0 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: 38 kHz pilot + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [252, 2486] + rotation: 0 + state: enabled +- name: virtual_source_0_1_1 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: L+R + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [113, 2862] + rotation: 0 + state: enabled +- name: virtual_source_0_1_1_0 + id: virtual_source + parameters: + alias: '' + comment: '' + stream_id: L-R + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [112, 2927] + rotation: 0 + state: enabled +- name: virtual_source_0_1_2_0_0 + id: virtual_source + parameters: + alias: '' + comment: Main Left. + stream_id: mainL + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [171, 3992] + rotation: 0 + state: enabled +- name: virtual_source_0_1_2_0_0_0 + id: virtual_source + parameters: + alias: '' + comment: Main Right. + stream_id: mainR + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [170, 4066] + rotation: 0 + state: enabled +- name: virtual_source_0_1_2_0_0_1 + id: virtual_source + parameters: + alias: '' + comment: SCA at 67 kHz. + stream_id: scaAudio67 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [166, 4147] + rotation: 0 + state: enabled +- name: virtual_source_0_1_2_0_0_1_0 + id: virtual_source + parameters: + alias: '' + comment: SCA at 92 kHz. + stream_id: scaAudio92 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [168, 4238] + rotation: 0 + state: enabled +- name: virtual_source_2 + id: virtual_source + parameters: + alias: '' + comment: 'Station chosen by user + + via QT Gui Sink.' + stream_id: fmStation_Hz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [80, 880.0] + rotation: 0 + state: enabled +- name: virtual_source_2_0 + id: virtual_source + parameters: + alias: '' + comment: 'Station chosen + + by clicking gui.' + stream_id: fmStation_MHz + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [960, 1544.0] + rotation: 0 + state: enabled + +connections: +- [analog_agc_xx_0, '0', digital_symbol_sync_xx_0_0, '0'] +- [analog_fm_deemph_0, '0', blocks_multiply_const_vxx_0, '0'] +- [analog_fm_deemph_0_1, '0', blocks_multiply_const_vxx_0_0, '0'] +- [analog_fm_demod_cf_0, '0', blocks_multiply_const_vxx_0_0_0, '0'] +- [analog_fm_demod_cf_0_0, '0', blocks_multiply_const_vxx_0_0_0_0, '0'] +- [analog_pll_refout_cc_0, '0', virtual_sink_0_0_2, '0'] +- [band_pass_filter_0, '0', blocks_float_to_complex_0, '0'] +- [band_pass_filter_0, '0', blocks_float_to_complex_0, '1'] +- [band_pass_filter_0, '0', qtgui_freq_sink_x_0_0_0, '0'] +- [band_pass_filter_0_0, '0', blocks_complex_to_real_0_0, '0'] +- [band_pass_filter_0_0, '0', virtual_sink_0_0_0, '0'] +- [band_pass_filter_0_1, '0', blocks_multiply_xx_0_0, '1'] +- [blocks_add_xx_0, '0', analog_fm_deemph_0, '0'] +- [blocks_complex_to_arg_0, '0', blocks_multiply_const_vxx_1, '0'] +- [blocks_complex_to_real_0, '0', qtgui_freq_sink_x_0_0_1, '0'] +- [blocks_complex_to_real_0, '0', virtual_sink_0_0_1, '0'] +- [blocks_complex_to_real_0_0, '0', qtgui_freq_sink_x_0_0_0_0, '0'] +- [blocks_delay_0_0, '0', blocks_divide_xx_0, '1'] +- [blocks_divide_xx_0, '0', blocks_complex_to_arg_0, '0'] +- [blocks_float_to_complex_0, '0', analog_pll_refout_cc_0, '0'] +- [blocks_multiply_const_vxx_0, '0', qtgui_freq_sink_x_0_0_1_0, '0'] +- [blocks_multiply_const_vxx_0, '0', virtual_sink_0_0_1_0_0, '0'] +- [blocks_multiply_const_vxx_0_0, '0', qtgui_freq_sink_x_0_0_1_0, '1'] +- [blocks_multiply_const_vxx_0_0, '0', virtual_sink_0_0_1_0_0_0, '0'] +- [blocks_multiply_const_vxx_0_0_0, '0', qtgui_freq_sink_x_0_0_1_1, '0'] +- [blocks_multiply_const_vxx_0_0_0, '0', virtual_sink_0_0_1_0, '0'] +- [blocks_multiply_const_vxx_0_0_0_0, '0', qtgui_freq_sink_x_0_0_1_1_0, '0'] +- [blocks_multiply_const_vxx_0_0_0_0, '0', virtual_sink_0_0_1_0_1, '0'] +- [blocks_multiply_const_vxx_1, '0', fir_filter_xxx_0, '0'] +- [blocks_multiply_xx_0, '0', band_pass_filter_0_0, '0'] +- [blocks_multiply_xx_0_0, '0', low_pass_filter_0_0_0, '0'] +- [blocks_mute_xx_0, '0', fosphor_qt_sink_c_0, '0'] +- [blocks_mute_xx_0, '0', low_pass_filter_0, '0'] +- [blocks_mute_xx_0, '0', qtgui_sink_x_0_0, '0'] +- [blocks_selector_0, '0', audio_sink_0_0, '0'] +- [blocks_selector_0_0, '0', audio_sink_0_0, '1'] +- [blocks_sub_xx_0, '0', analog_fm_deemph_0_1, '0'] +- [digital_constellation_receiver_cb_0, '0', digital_diff_decoder_bb_0_0, '0'] +- [digital_constellation_receiver_cb_0, '1', qtgui_time_sink_x_1, '0'] +- [digital_constellation_receiver_cb_0, '2', qtgui_time_sink_x_1, '1'] +- [digital_constellation_receiver_cb_0, '3', qtgui_time_sink_x_1, '2'] +- [digital_constellation_receiver_cb_0, '4', qtgui_const_sink_x_0, '0'] +- [digital_diff_decoder_bb_0_0, '0', rds_decoder_0_0, '0'] +- [digital_symbol_sync_xx_0_0, '0', digital_constellation_receiver_cb_0, '0'] +- [digital_symbol_sync_xx_0_0, '0', qtgui_time_sink_x_0, '0'] +- [epy_block_0, snapped_Hz_out, qtgui_sink_x_0_0, freq] +- [epy_block_0, snapped_MHz_out, blocks_msgpair_to_var_0, inpair] +- [epy_block_0, snapped_MHz_out, virtual_sink_2_0, '0'] +- [epy_block_1, freq_Hz_out, virtual_sink_2, '0'] +- [fir_filter_xxx_0, '0', qtgui_sink_x_0, '0'] +- [fir_filter_xxx_0, '0', virtual_sink_0, '0'] +- [fir_filter_xxx_2, '0', analog_agc_xx_0, '0'] +- [fosphor_qt_sink_c_0, freq, epy_block_0, raw_Hz_in] +- [freq_xlating_fir_filter_xxx_0_0, '0', analog_fm_demod_cf_0, '0'] +- [freq_xlating_fir_filter_xxx_0_0_0, '0', analog_fm_demod_cf_0_0, '0'] +- [freq_xlating_fir_filter_xxx_1_0, '0', rational_resampler_xxx_1, '0'] +- [low_pass_filter_0, '0', blocks_delay_0_0, '0'] +- [low_pass_filter_0, '0', blocks_divide_xx_0, '0'] +- [low_pass_filter_0_0, '0', qtgui_freq_sink_x_0_0, '0'] +- [low_pass_filter_0_0, '0', virtual_sink_0_0, '0'] +- [low_pass_filter_0_0_0, '0', blocks_complex_to_real_0, '0'] +- [qtgui_edit_box_msg_0, msg, blocks_msgpair_to_var_0_0, inpair] +- [qtgui_edit_box_msg_0, msg, epy_block_1, freq_MHz_in] +- [qtgui_sink_x_0_0, freq, epy_block_0, raw_Hz_in] +- [rational_resampler_xxx_1, '0', fir_filter_xxx_2, '0'] +- [rds_decoder_0_0, out, rds_parser_0_0, in] +- [rds_parser_0_0, out, rds_panel_0_0, in] +- [rtlsdr_source_0, '0', blocks_mute_xx_0, '0'] +- [uhd_usrp_source_0, '0', blocks_mute_xx_0, '0'] +- [virtual_source_0, '0', low_pass_filter_0_0, '0'] +- [virtual_source_0_0, '0', band_pass_filter_0, '0'] +- [virtual_source_0_0_0, '0', blocks_multiply_xx_0, '0'] +- [virtual_source_0_0_0, '0', blocks_multiply_xx_0, '1'] +- [virtual_source_0_0_1, '0', band_pass_filter_0_1, '0'] +- [virtual_source_0_0_1_0, '0', freq_xlating_fir_filter_xxx_0_0, '0'] +- [virtual_source_0_0_1_0_0, '0', freq_xlating_fir_filter_xxx_0_0_0, '0'] +- [virtual_source_0_0_1_0_0_0_0_0, '0', freq_xlating_fir_filter_xxx_1_0, '0'] +- [virtual_source_0_1_0, '0', blocks_multiply_xx_0_0, '0'] +- [virtual_source_0_1_1, '0', blocks_add_xx_0, '0'] +- [virtual_source_0_1_1, '0', blocks_sub_xx_0, '0'] +- [virtual_source_0_1_1_0, '0', blocks_add_xx_0, '1'] +- [virtual_source_0_1_1_0, '0', blocks_sub_xx_0, '1'] +- [virtual_source_0_1_2_0_0, '0', blocks_selector_0, '0'] +- [virtual_source_0_1_2_0_0_0, '0', blocks_selector_0_0, '0'] +- [virtual_source_0_1_2_0_0_1, '0', blocks_selector_0, '1'] +- [virtual_source_0_1_2_0_0_1, '0', blocks_selector_0_0, '1'] +- [virtual_source_0_1_2_0_0_1_0, '0', blocks_selector_0, '2'] +- [virtual_source_0_1_2_0_0_1_0, '0', blocks_selector_0_0, '2'] +- [virtual_source_2, '0', rtlsdr_source_0, command] +- [virtual_source_2, '0', uhd_usrp_source_0, command] +- [virtual_source_2_0, '0', qtgui_edit_box_msg_0, val] + +metadata: + file_format: 1 + grc_version: 3.10.7.0