GNU Radio World

FM Loopback

Noisy FM transmitter and quadrature-demodulator loopback with live tone and noise controls

Press Load to open this flowgraph in an editor embedded above, then ▶ to run it. Nothing is downloaded until you do.

Open in the full editor ▶ Download the .grc

Blocks used

BlockModuleUsed
QT GUI RangeGNU Radio2
AddGNU Radio1
Frequency ModGNU Radio1
Noise SourceGNU Radio1
QT GUI Frequency SinkGNU Radio1
QT GUI Time SinkGNU Radio1
Quadrature DemodGNU Radio1
Signal SourceGNU Radio1
ThrottleGNU Radio1

Flowgraph source

analog/fm_loopback.grc
options:
    parameters:
        author: Claude
        copyright: ''
        description: Noisy FM transmitter and quadrature-demodulator loopback with live tone and noise controls
        generate_options: qt_gui
        id: FM_Loopback
        title: FM Loopback
    states:
        coordinate: [10, 10]
        rotation: 0
        state: enabled
blocks:
-   name: noise_amplitude
    id: variable_qtgui_range
    parameters:
        comment: ''
        label: Channel noise
        min_len: '240'
        orient: QtCore.Qt.Horizontal
        rangeType: float
        start: '0'
        step: '0.01'
        stop: '0.5'
        value: '0.05'
        widget: counter_slider
    states:
        coordinate: [590, 10]
        rotation: 0
        state: enabled
-   name: tone_frequency
    id: variable_qtgui_range
    parameters:
        comment: ''
        label: Message tone frequency
        min_len: '240'
        orient: QtCore.Qt.Horizontal
        rangeType: float
        start: '200'
        step: '100'
        stop: '3000'
        value: '1000'
        widget: counter_slider
    states:
        coordinate: [840, 10]
        rotation: 0
        state: enabled
-   name: channel_noise
    id: analog_noise_source_x
    parameters:
        affinity: ''
        alias: ''
        amplitude: noise_amplitude
        comment: ''
        maxoutbuf: '0'
        minoutbuf: '0'
        seed: '7'
        type: complex
    states:
        coordinate: [290, 340]
        rotation: 0
        state: enabled
-   name: fm_demodulator
    id: analog_quadrature_demod_cf
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        gain: '1.5278874537'
        maxoutbuf: '0'
        minoutbuf: '0'
    states:
        coordinate: [1220, 250]
        rotation: 0
        state: enabled
-   name: fm_modulator
    id: analog_frequency_modulator_fc
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        maxoutbuf: '0'
        minoutbuf: '0'
        sensitivity: '0.6544984695'
    states:
        coordinate: [290, 240]
        rotation: 0
        state: enabled
-   name: fm_spectrum
    id: qtgui_freq_sink_x
    parameters:
        affinity: ''
        alias: ''
        alpha1: '1'
        autoscale: 'False'
        average: '0.2'
        axislabels: 'True'
        color1: '"blue"'
        comment: ''
        ctrlpanel: 'False'
        fc: '0'
        fftsize: '2048'
        grid: 'True'
        label1: Noisy FM signal
        legend: 'True'
        marker1: '-1'
        maxoutbuf: '0'
        minoutbuf: '0'
        name: FM Channel Spectrum
        samp_rate: '48000'
        style1: '1'
        tr_chan: '0'
        tr_level: '0'
        tr_mode: qtgui.TRIG_MODE_FREE
        tr_tag: ''
        update_time: '0.1'
        width1: '1'
        ymax: '10'
        ymin: '-100'
    states:
        coordinate: [1220, 350]
        rotation: 0
        state: enabled
-   name: message_tone
    id: analog_sig_source_x
    parameters:
        affinity: ''
        alias: ''
        amplitude: '1'
        comment: ''
        frequency: tone_frequency
        maxoutbuf: '0'
        minoutbuf: '0'
        samp_rate: '48000'
        type: float
        waveform: analog.GR_COS_WAVE
    states:
        coordinate: [10, 220]
        rotation: 0
        state: enabled
-   name: noisy_channel
    id: blocks_add_xx
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        maxoutbuf: '0'
        minoutbuf: '0'
        num_inputs: '2'
        type: complex
        vlen: '1'
    states:
        coordinate: [650, 240]
        rotation: 0
        state: enabled
-   name: recovered_message
    id: qtgui_time_sink_x
    parameters:
        affinity: ''
        alias: ''
        alpha1: '1'
        alpha2: '1'
        autoscale: 'False'
        axislabels: 'True'
        color1: blue
        color2: red
        comment: ''
        ctrlpanel: 'False'
        grid: 'True'
        label1: Recovered tone
        label2: Signal 2
        legend: 'True'
        marker1: '-1'
        marker2: '-1'
        name: Recovered FM Message
        samp_rate: '48000'
        size: '1024'
        stemplot: 'False'
        style1: '1'
        style2: '1'
        tr_chan: '0'
        tr_delay: '0'
        tr_level: '0'
        tr_mode: qtgui.TRIG_MODE_FREE
        tr_slope: qtgui.TRIG_SLOPE_POS
        tr_tag: ''
        type: float
        update_time: '0.1'
        width1: '1'
        width2: '1'
        ylabel: Amplitude
        ymax: '1.5'
        ymin: '-1.5'
        yunit: ''
    states:
        coordinate: [80, 530]
        rotation: 0
        state: enabled
-   name: throttle
    id: blocks_throttle2
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        ignoretag: 'True'
        limit: auto
        maximum: '0.1'
        maxoutbuf: '0'
        minoutbuf: '0'
        samples_per_second: '48000'
        type: complex
        vlen: '1'
    states:
        coordinate: [890, 230]
        rotation: 0
        state: enabled
connections:
- [channel_noise, '0', noisy_channel, '1']
- [fm_demodulator, '0', recovered_message, '0']
- [fm_modulator, '0', noisy_channel, '0']
- [message_tone, '0', fm_modulator, '0']
- [noisy_channel, '0', throttle, '0']
- [throttle, '0', fm_demodulator, '0']
- [throttle, '0', fm_spectrum, '0']
metadata:
    file_format: 1
    grc_version: 3.11.0.0