GNU Radio World

Iridium PRBS15 Decoder Test

Deterministic gr-iridium decoder sanity check using the upstream synthetic PRBS15 golden fixture. A successful run prints one 179-bit RAW frame at 100% confidence; the expected prefix is shown on the canvas and the full reference frame is pinned by gr-iridium's CI.

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
VariableGNU Radio6
burst_downmixgr-iridium1
fft_burst_taggergr-iridium1
frame_sortergr-iridium1
GR World RecordingGNU Radio1
GUI LayoutGNU Radio1
iridium_frame_printergr-iridium1
iridium_qpsk_demodgr-iridium1
NoteGNU Radio1
tagged_burst_to_pdugr-iridium1

Notes in this flowgraph

Flowgraph source

gr-iridium/iridium_prbs15_decoder_test.grc
options:
    parameters:
        author: GNU Radio World
        comment: ''
        copyright: ''
        description: Deterministic gr-iridium decoder sanity check using the upstream synthetic PRBS15 golden fixture. A successful run prints one 179-bit RAW frame at 100% confidence; the expected prefix is shown on the canvas and the full reference frame is pinned by gr-iridium's CI.
        generate_options: qt_gui
        id: Iridium_PRBS15_Decoder_Test
        title: Iridium PRBS15 Decoder Test
    states:
        coordinate: [10, 10]
        rotation: 0
        state: enabled
blocks:
-   name: burst_sample_rate
    id: variable
    parameters:
        comment: Iridium demodulator input rate (10 samples per symbol)
        value: '250000'
    states:
        coordinate: [590, 10]
        rotation: 0
        state: enabled
-   name: burst_width
    id: variable
    parameters:
        comment: Occupied width used by the detector and input filter
        value: '40000'
    states:
        coordinate: [820, 10]
        rotation: 0
        state: enabled
-   name: center_freq
    id: variable
    parameters:
        comment: Recording center frequency
        value: '1622000000'
    states:
        coordinate: [1000, 10]
        rotation: 0
        state: enabled
-   name: fft_size
    id: variable
    parameters:
        comment: Approximately one millisecond at the recording rate
        value: '2048'
    states:
        coordinate: [1170, 10]
        rotation: 0
        state: enabled
-   name: max_burst_len
    id: variable
    parameters:
        comment: 90 ms at the recording rate
        value: '180000'
    states:
        coordinate: [1340, 10]
        rotation: 0
        state: enabled
-   name: sample_rate
    id: variable
    parameters:
        comment: Recording sample rate
        value: '2000000'
    states:
        coordinate: [1540, 10]
        rotation: 0
        state: enabled
-   name: burst_downmix
    id: iridium_burst_downmix
    parameters:
        affinity: ''
        alias: ''
        comment: Filters, centers, and decimates the detected burst
        handle_multiple_frames_per_burst: 'False'
        hard_max_queue_len: '0'
        input_taps: firdes.low_pass_2(1, sample_rate, burst_width/2, burst_width, 40)
        maxoutbuf: '0'
        minoutbuf: '0'
        output_sample_rate: burst_sample_rate
        search_depth: '1750'
        start_finder_taps: firdes.low_pass_2(1, burst_sample_rate, 2500, 5000, 60)
    states:
        coordinate: [70, 540]
        rotation: 0
        state: enabled
-   name: burst_tagger
    id: iridium_fft_burst_tagger
    parameters:
        affinity: ''
        alias: ''
        burst_post_len: '32000'
        burst_pre_len: '4096'
        burst_width: burst_width
        center_frequency: center_freq
        comment: Matches the upstream extractor's 18 dB golden-test threshold
        debug: 'False'
        fft_size: fft_size
        history_size: '512'
        max_burst_len: max_burst_len
        max_bursts: '0'
        maxoutbuf: '0'
        minoutbuf: '0'
        sample_rate: sample_rate
        threshold: '18'
    states:
        coordinate: [670, 330]
        rotation: 0
        state: enabled
-   name: bursts_to_pdus
    id: iridium_tagged_burst_to_pdu
    parameters:
        affinity: ''
        alias: ''
        comment: Copies the tagged stream burst into a message PDU
        drop_overflow: 'False'
        max_burst_size: max_burst_len
        max_outstanding: '500'
        maxoutbuf: '0'
        minoutbuf: '0'
        relative_center_frequency: '0'
        relative_sample_rate: '1'
        relative_span: '1'
        sample_offset: '0'
    states:
        coordinate: [1120, 380]
        rotation: 0
        state: enabled
-   name: frame_printer
    id: iridium_iridium_frame_printer
    parameters:
        affinity: ''
        alias: ''
        comment: Prints the golden RAW frame to the console
    states:
        coordinate: [100, 760]
        rotation: 0
        state: enabled
-   name: frame_sorter
    id: iridium_frame_sorter
    parameters:
        affinity: ''
        alias: ''
        comment: Orders recovered frames by timestamp
        maxoutbuf: '0'
        minoutbuf: '0'
    states:
        coordinate: [1120, 630]
        rotation: 0
        state: enabled
-   name: qpsk_demod
    id: iridium_iridium_qpsk_demod
    parameters:
        affinity: ''
        alias: ''
        channels: '1'
        comment: Demodulates the Iridium QPSK burst into raw bits
        maxoutbuf: '0'
        minoutbuf: '0'
    states:
        coordinate: [670, 630]
        rotation: 0
        state: enabled
-   name: recording
    id: wasm_gr_world_recording
    parameters:
        affinity: ''
        alias: ''
        comment: 0.7-second synthetic PRBS15 golden fixture from upstream gr-iridium
        length: '0'
        maxoutbuf: '0'
        minoutbuf: '0'
        offset: '0'
        progress: 'True'
        recording: gr-iridium/prbs15-2M-20dB
        repeat: 'False'
        type: complex
    states:
        coordinate: [70, 420]
        rotation: 0
        state: enabled
-   name: result_note
    id: note
    parameters:
        affinity: ''
        alias: ''
        bgcolor: '#4dff6a'
        comment: ''
        note: 'Sanity check: run the graph and open the console. Expect exactly one RAW frame with 100% confidence, length 179, and bits beginning 0011000000110000111100111. The recording tab shows the source spectrogram.'
    states:
        coordinate: [10, 170]
        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
connections:
-   src_blk_id: burst_downmix
    src_port_id: burst_handled
    snk_blk_id: bursts_to_pdus
    snk_port_id: burst_handled
-   src_blk_id: burst_downmix
    src_port_id: cpdus
    snk_blk_id: qpsk_demod
    snk_port_id: cpdus
- [burst_tagger, '0', bursts_to_pdus, '0']
-   src_blk_id: bursts_to_pdus
    src_port_id: cpdus
    snk_blk_id: burst_downmix
    snk_port_id: cpdus
-   src_blk_id: frame_sorter
    src_port_id: pdus
    snk_blk_id: frame_printer
    snk_port_id: pdus
-   src_blk_id: qpsk_demod
    src_port_id: pdus
    snk_blk_id: frame_sorter
    snk_port_id: pdus
- [recording, '0', burst_tagger, '0']
metadata:
    file_format: 2
    grc_version: 3.11.0.0