diff --git a/apps/fm_receiver.grc b/apps/fm_receiver.grc
new file mode 100644
index 0000000000000000000000000000000000000000..4659712237b686d368c67abc987f0a7640831b54
--- /dev/null
+++ b/apps/fm_receiver.grc
@@ -0,0 +1,256 @@
+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: fm_receiver
+ max_nouts: '0'
+ output_language: python
+ placement: (0,0)
+ qt_qss_theme: ''
+ realtime_scheduling: ''
+ run: 'True'
+ run_command: '{python} -u {filename}'
+ run_options: prompt
+ sizing_mode: fixed
+ thread_safe_setters: ''
+ title: Not titled yet
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 8]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: cutoff
+ id: variable
+ parameters:
+ comment: ''
+ value: 100e3
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [312, 4.0]
+ rotation: 0
+ state: true
+- name: freq
+ id: variable
+ parameters:
+ comment: ''
+ value: 102.2e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [592, 12.0]
+ rotation: 0
+ state: true
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: 2e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [184, 12]
+ rotation: 0
+ state: enabled
+- name: transition
+ id: variable
+ parameters:
+ comment: ''
+ value: 1e6
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [464, 12.0]
+ rotation: 0
+ state: true
+- name: volume
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: ''
+ label: ''
+ min_len: '200'
+ orient: QtCore.Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '1'
+ stop: '100'
+ value: '1'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [776, 84.0]
+ rotation: 0
+ state: true
+- name: analog_wfm_rcv_0
+ id: analog_wfm_rcv
+ parameters:
+ affinity: ''
+ alias: ''
+ audio_decimation: '1'
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ quad_rate: 500e3
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [568, 196.0]
+ rotation: 0
+ state: true
+- 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: [1264, 268.0]
+ rotation: 0
+ state: true
+- name: bladeRF_source_0
+ id: bladeRF_source
+ parameters:
+ affinity: ''
+ alias: ''
+ args: '""'
+ bb_gain0: '20'
+ bb_gain1: '20'
+ bias_tee0: 'False'
+ bias_tee1: 'False'
+ bw0: '200000'
+ bw1: '200000'
+ comment: ''
+ corr0: '0'
+ corr1: '0'
+ dac: '10000'
+ dc_offset_mode0: '0'
+ dc_offset_mode1: '0'
+ fpga_image: ''
+ freq0: freq
+ freq1: 1e8
+ gain0: '10'
+ gain1: '10'
+ gain_mode0: 'False'
+ gain_mode1: 'False'
+ if_gain0: '20'
+ if_gain1: '20'
+ in_clk: ONBOARD
+ iq_balance_mode0: '0'
+ iq_balance_mode1: '0'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ nchan: '1'
+ out_clk: 'False'
+ power_monitoring: 'False'
+ ref_clk: ''
+ sample_rate: samp_rate
+ type: fc32
+ xb_2000: 222M
+ xb_2001: auto
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [56, 116.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: [1056, 268.0]
+ rotation: 0
+ state: true
+- name: low_pass_filter_0
+ id: low_pass_filter
+ parameters:
+ affinity: ''
+ alias: ''
+ beta: '6.76'
+ comment: ''
+ cutoff_freq: cutoff
+ decim: '1'
+ gain: '1'
+ interp: '1'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samp_rate: samp_rate
+ type: fir_filter_ccf
+ width: transition
+ win: window.WIN_HAMMING
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [352, 148.0]
+ rotation: 0
+ state: true
+- name: rational_resampler_xxx_0
+ id: rational_resampler_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ decim: '500'
+ fbw: '0'
+ interp: '48'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ taps: '[]'
+ type: fff
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [800, 276.0]
+ rotation: 0
+ state: true
+
+connections:
+- [analog_wfm_rcv_0, '0', rational_resampler_xxx_0, '0']
+- [bladeRF_source_0, '0', low_pass_filter_0, '0']
+- [blocks_multiply_const_vxx_0, '0', audio_sink_0, '0']
+- [low_pass_filter_0, '0', analog_wfm_rcv_0, '0']
+- [rational_resampler_xxx_0, '0', blocks_multiply_const_vxx_0, '0']
+
+metadata:
+ file_format: 1
diff --git a/grc/gen_bladerf_blocks.py b/grc/gen_bladerf_blocks.py
index f33813c24b3546163d368f474ed0ccdd87eeaf9d..8ade7432e1071256a389b90f5f0704d5feef3dc0 100644
--- a/grc/gen_bladerf_blocks.py
+++ b/grc/gen_bladerf_blocks.py
@@ -105,7 +105,7 @@ outputs:
templates:
imports: |-
- import bladerf
+ import bladeRF
import time
make: |
bladerf.${sourk}(