GNU Radio World

A Tone Through a Dynamic Channel

A pure tone through gr-channels' Dynamic Channel Model, a frequency-selective fading channel plus random-walk carrier and sample-rate offsets and AWGN, with the Doppler, CFO step and noise as live controls. Watch the tone wander in the waterfall.

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 Radio3
Dynamic Channel ModelGNU Radio1
GUI LayoutGNU Radio1
QT GUI Frequency SinkGNU Radio1
QT GUI Waterfall SinkGNU Radio1
Signal SourceGNU Radio1
ThrottleGNU Radio1
VariableGNU Radio1

Flowgraph source

channels/dynamic_channel_model.grc
options:
    parameters:
        author: Marc
        comment: ''
        copyright: ''
        description: A pure tone through gr-channels' Dynamic Channel Model, a frequency-selective fading channel plus random-walk carrier and sample-rate offsets and AWGN, with the Doppler, CFO step and noise as live controls. Watch the tone wander in the waterfall.
        generate_options: qt_gui
        id: A_Tone_Through_a_Dynamic_Channel
        title: A Tone Through a Dynamic Channel
    states:
        coordinate: [10, 10]
        rotation: 0
        state: enabled
blocks:
-   name: cfo_dev
    id: variable_qtgui_range
    parameters:
        comment: ''
        label: CFO random-walk step (Hz)
        min_len: '240'
        orient: QtCore.Qt.Horizontal
        rangeType: float
        start: '0'
        step: '0.5'
        stop: '20'
        value: '1'
        widget: counter_slider
    states:
        coordinate: [1050, 10]
        rotation: 0
        state: enabled
-   name: doppler
    id: variable_qtgui_range
    parameters:
        comment: ''
        label: Max Doppler (Hz)
        min_len: '240'
        orient: QtCore.Qt.Horizontal
        rangeType: float
        start: '0'
        step: '0.5'
        stop: '20'
        value: '2'
        widget: counter_slider
    states:
        coordinate: [760, 10]
        rotation: 0
        state: enabled
-   name: noise_amp
    id: variable_qtgui_range
    parameters:
        comment: ''
        label: Noise amplitude
        min_len: '240'
        orient: QtCore.Qt.Horizontal
        rangeType: float
        start: '0'
        step: '0.005'
        stop: '0.2'
        value: '0.02'
        widget: counter_slider
    states:
        coordinate: [1340, 10]
        rotation: 0
        state: enabled
-   name: samp_rate
    id: variable
    parameters:
        comment: ''
        value: '32000'
    states:
        coordinate: [590, 10]
        rotation: 0
        state: enabled
-   name: channel
    id: channels_dynamic_channel_model
    parameters:
        K: '4'
        LOS: 'True'
        N: '8'
        affinity: ''
        alias: ''
        cfo_maxdev: '2000'
        cfo_stdev: cfo_dev
        comment: ''
        delays: '[0.0, 0.1, 1.3]'
        fD: doppler
        mags: '[1, 0.99, 0.97]'
        maxoutbuf: '0'
        minoutbuf: '0'
        noise_amp: noise_amp
        ntaps: '8'
        samp_rate: samp_rate
        seed: '0'
        sro_maxdev: '100'
        sro_stdev: '0.01'
    states:
        coordinate: [690, 240]
        rotation: 0
        state: enabled
-   name: spectrum
    id: qtgui_freq_sink_x
    parameters:
        affinity: ''
        alias: ''
        alpha1: '1'
        alpha10: '1'
        alpha2: '1'
        alpha3: '1'
        alpha4: '1'
        alpha5: '1'
        alpha6: '1'
        alpha7: '1'
        alpha8: '1'
        alpha9: '1'
        autoscale: 'False'
        average: '0.2'
        axislabels: 'True'
        bw: samp_rate
        color1: '"blue"'
        color10: '"dark blue"'
        color2: '"red"'
        color3: '"green"'
        color4: '"black"'
        color5: '"cyan"'
        color6: '"magenta"'
        color7: '"yellow"'
        color8: '"dark red"'
        color9: '"dark green"'
        comment: ''
        ctrlpanel: 'False'
        fc: '0'
        fftsize: '2048'
        freqhalf: 'True'
        grid: 'True'
        label: Relative Gain
        label1: ''
        label10: ''
        label2: ''
        label3: ''
        label4: ''
        label5: ''
        label6: ''
        label7: ''
        label8: ''
        label9: ''
        legend: 'True'
        marker1: '-1'
        marker10: '-1'
        marker2: '-1'
        marker3: '-1'
        marker4: '-1'
        marker5: '-1'
        marker6: '-1'
        marker7: '-1'
        marker8: '-1'
        marker9: '-1'
        maxoutbuf: '0'
        minoutbuf: '0'
        name: After the channel
        nconnections: '1'
        norm_window: '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_level: '0'
        tr_mode: qtgui.TRIG_MODE_FREE
        tr_tag: ''
        type: complex
        units: dB
        update_time: '0.1'
        width1: '1'
        width10: '1'
        width2: '1'
        width3: '1'
        width4: '1'
        width5: '1'
        width6: '1'
        width7: '1'
        width8: '1'
        width9: '1'
        wintype: window.WIN_RECTANGULAR
        ymax: '10'
        ymin: '-100'
    states:
        coordinate: [1210, 320]
        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: samp_rate
        type: complex
        vlen: '1'
    states:
        coordinate: [360, 340]
        rotation: 0
        state: enabled
-   name: tone
    id: analog_sig_source_x
    parameters:
        affinity: ''
        alias: ''
        amp: '1'
        comment: ''
        freq: '2000'
        maxoutbuf: '0'
        minoutbuf: '0'
        offset: '0'
        phase: '0'
        samp_rate: samp_rate
        type: complex
        waveform: analog.GR_COS_WAVE
    states:
        coordinate: [10, 320]
        rotation: 0
        state: enabled
-   name: wasm_gui_layout_0
    id: wasm_gui_layout
    parameters:
        affinity: ''
        alias: ''
        columns: '12'
        comment: ''
        layout: '{}'
        row_height: '60'
    states:
        coordinate: [300, 10]
        rotation: 0
        state: enabled
-   name: waterfall
    id: qtgui_waterfall_sink_x
    parameters:
        affinity: ''
        alias: ''
        alpha1: '1'
        alpha10: '1'
        alpha2: '1'
        alpha3: '1'
        alpha4: '1'
        alpha5: '1'
        alpha6: '1'
        alpha7: '1'
        alpha8: '1'
        alpha9: '1'
        average: '1.0'
        axislabels: 'True'
        bw: samp_rate
        color1: '0'
        color10: '0'
        color2: '0'
        color3: '0'
        color4: '0'
        color5: '0'
        color6: '0'
        color7: '0'
        color8: '0'
        color9: '0'
        comment: ''
        fc: '0'
        fftsize: '1024'
        freqhalf: 'True'
        grid: 'False'
        int_max: '0'
        int_min: '-100'
        label1: ''
        label10: ''
        label2: ''
        label3: ''
        label4: ''
        label5: ''
        label6: ''
        label7: ''
        label8: ''
        label9: ''
        legend: 'True'
        maxoutbuf: '0'
        minoutbuf: '0'
        name: Drifting tone
        nconnections: '1'
        type: complex
        update_time: '0.1'
        wintype: window.WIN_RECTANGULAR
    states:
        coordinate: [1210, 500]
        rotation: 0
        state: enabled
connections:
- [channel, '0', spectrum, '0']
- [channel, '0', waterfall, '0']
- [throttle, '0', channel, '0']
- [tone, '0', throttle, '0']
metadata:
    file_format: 1
    grc_version: 3.11.0.0