GNU Radio World

ADS-B from a Recording

Decodes aircraft near Washington, DC from a hosted 1090 MHz ADS-B recording made at 49 dB gain, no radio needed.

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
ADS-B Decodergr-adsb1
ADS-B Demodgr-adsb1
ADS-B Framergr-adsb1
ADS-B MapGNU Radio1
Complex to Mag^2GNU Radio1
GR World RecordingGNU Radio1
GUI LayoutGNU Radio1
IShort To ComplexGNU Radio1
Message DebugGNU Radio1
QT GUI RangeGNU Radio1
QT GUI Time SinkGNU Radio1
ThrottleGNU Radio1
VariableGNU Radio1

Flowgraph source

gr-adsb/adsb_recording.grc
options:
    parameters:
        author: Marc
        comment: ''
        copyright: ''
        description: Decodes aircraft near Washington, DC from a hosted 1090 MHz ADS-B recording made at 49 dB gain, no radio needed.
        generate_options: qt_gui
        id: ADS_B_from_a_Recording
        title: ADS-B from a Recording
    states:
        coordinate: [10, 10]
        rotation: 0
        state: enabled
blocks:
-   name: samp_rate
    id: variable
    parameters:
        comment: ''
        value: '2000000'
    states:
        coordinate: [310, 20]
        rotation: 0
        state: enabled
-   name: threshold
    id: variable_qtgui_range
    parameters:
        comment: Raise it until only real bursts trigger
        label: Detection Threshold
        min_len: '200'
        orient: QtCore.Qt.Horizontal
        rangeType: float
        start: '0.001'
        step: '0.001'
        stop: '0.2'
        value: '0.01'
        widget: counter_slider
    states:
        coordinate: [500, 20]
        rotation: 0
        state: enabled
-   name: aircraft_map
    id: wasm_adsb_map_sink
    parameters:
        affinity: ''
        alias: ''
        basemap: light
        comment: "Live aircraft state from the decoder;\nselect a row or marker for details"
        expire_seconds: '60'
        name: '"Aircraft near the recording site"'
        receiver_latitude: '0'
        receiver_longitude: '0'
        show_labels: 'True'
        show_receiver: 'False'
        stale_seconds: '15'
        trail_seconds: '300'
        units: aviation
        update_time: '0.25'
    states:
        coordinate: [960, 620]
        rotation: 0
        state: enabled
-   name: bursts
    id: qtgui_time_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: 'True'
        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'
        label1: Burst power
        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: ADS-B bursts
        nconnections: '1'
        size: '2048'
        srate: samp_rate
        stemplot: 'False'
        style1: '1'
        style10: '1'
        style2: '1'
        style3: '1'
        style4: '1'
        style5: '1'
        style6: '1'
        style7: '1'
        style8: '1'
        style9: '1'
        tr_chan: '0'
        tr_delay: '0'
        tr_level: '0'
        tr_mode: qtgui.TRIG_MODE_FREE
        tr_slope: qtgui.TRIG_SLOPE_POS
        tr_tag: ''
        type: float
        update_time: '0.1'
        width1: '1'
        width10: '1'
        width2: '1'
        width3: '1'
        width4: '1'
        width5: '1'
        width6: '1'
        width7: '1'
        width8: '1'
        width9: '1'
        ylabel: Power
        ymax: '1'
        ymin: '0'
        yunit: ''
    states:
        coordinate: [510, 550]
        rotation: 0
        state: enabled
-   name: decoded_planes
    id: blocks_message_debug
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        en_uvec: 'False'
        log_level: info
    states:
        coordinate: [1020, 420]
        rotation: 0
        state: enabled
-   name: decoder
    id: adsb_decoder
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        error_corr: '"Conservative"'
        maxoutbuf: '0'
        minoutbuf: '0'
        msg_filter: '"Extended Squitter Only"'
        print_level: '"Brief"'
    states:
        coordinate: [510, 410]
        rotation: 0
        state: enabled
-   name: demod
    id: adsb_demod
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        fs: samp_rate
        maxoutbuf: '0'
        minoutbuf: '0'
    states:
        coordinate: [80, 420]
        rotation: 0
        state: enabled
-   name: framer
    id: adsb_framer
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        fs: samp_rate
        maxoutbuf: '0'
        minoutbuf: '0'
        threshold: threshold
    states:
        coordinate: [1380, 250]
        rotation: 0
        state: enabled
-   name: mag_squared
    id: blocks_complex_to_mag_squared
    parameters:
        affinity: ''
        alias: ''
        comment: The framer works on power, not complex samples
        maxoutbuf: '0'
        minoutbuf: '0'
        vlen: '1'
    states:
        coordinate: [1050, 260]
        rotation: 0
        state: enabled
-   name: rec
    id: wasm_gr_world_recording
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        length: '0'
        maxoutbuf: '0'
        minoutbuf: '0'
        offset: '0'
        progress: 'True'
        recording: adsb_dc_area_49dBgain
        repeat: 'True'
        type: short
    states:
        coordinate: [10, 250]
        rotation: 0
        state: enabled
-   name: throttle
    id: blocks_throttle2
    parameters:
        affinity: ''
        alias: ''
        comment: Plays the repeating recording at its original sample rate
        ignoretag: 'True'
        limit: time
        maximum: '0.1'
        maxoutbuf: '0'
        minoutbuf: '0'
        samples_per_second: samp_rate
        type: complex
        vlen: '1'
    states:
        coordinate: [710, 240]
        rotation: 0
        state: enabled
-   name: to_complex
    id: blocks_interleaved_short_to_complex
    parameters:
        affinity: ''
        alias: ''
        comment: ''
        maxoutbuf: '0'
        minoutbuf: '0'
        scale_factor: '32768'
        swap: 'False'
        vector_input: 'False'
    states:
        coordinate: [390, 260]
        rotation: 0
        state: enabled
-   name: wasm_gui_layout_0
    id: wasm_gui_layout
    parameters:
        affinity: ''
        alias: ''
        columns: '12'
        comment: ''
        layout: '{"aircraft_map":[0,0,6,5],"bursts":[6,1,6,3],"rec":[6,4,6,1],"threshold":[6,0,6,1]}'
        row_height: '60'
    states:
        coordinate: [790, 20]
        rotation: 0
        state: enabled
connections:
-   src_blk_id: decoder
    src_port_id: decoded
    snk_blk_id: aircraft_map
    snk_port_id: decoded
-   src_blk_id: decoder
    src_port_id: decoded
    snk_blk_id: decoded_planes
    snk_port_id: print
- [demod, '0', bursts, '0']
-   src_blk_id: demod
    src_port_id: demodulated
    snk_blk_id: decoder
    snk_port_id: demodulated
- [framer, '0', demod, '0']
- [mag_squared, '0', framer, '0']
- [rec, '0', to_complex, '0']
- [throttle, '0', mag_squared, '0']
- [to_complex, '0', throttle, '0']
metadata:
    file_format: 2
    grc_version: 3.11.0.0