{"id":13418444,"url":"https://github.com/muccc/gr-iridium","last_synced_at":"2025-10-21T20:02:09.969Z","repository":{"id":7432510,"uuid":"56373673","full_name":"muccc/gr-iridium","owner":"muccc","description":"Iridium burst detector and demodulator.","archived":false,"fork":false,"pushed_at":"2024-03-16T20:05:11.000Z","size":10827,"stargazers_count":336,"open_issues_count":24,"forks_count":75,"subscribers_count":44,"default_branch":"master","last_synced_at":"2024-03-17T03:19:12.016Z","etag":null,"topics":["gnuradio","gr-iridium","iridium-satellites","sdr"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muccc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null}},"created_at":"2016-04-16T08:30:58.000Z","updated_at":"2024-04-15T01:56:25.573Z","dependencies_parsed_at":"2023-01-14T11:45:54.672Z","dependency_job_id":"79a68683-31b4-4292-a75a-8e302f7c6288","html_url":"https://github.com/muccc/gr-iridium","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muccc%2Fgr-iridium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muccc%2Fgr-iridium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muccc%2Fgr-iridium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muccc%2Fgr-iridium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muccc","download_url":"https://codeload.github.com/muccc/gr-iridium/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243681024,"owners_count":20330152,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gnuradio","gr-iridium","iridium-satellites","sdr"],"created_at":"2024-07-30T22:01:02.399Z","updated_at":"2025-10-21T20:02:09.956Z","avatar_url":"https://github.com/muccc.png","language":"C++","funding_links":[],"categories":["C++","GnuRadio Software"],"sub_categories":[],"readme":"# GNU Radio Iridium Out Of Tree Module\n\n[![CI](https://github.com/muccc/gr-iridium/actions/workflows/ci.yml/badge.svg)](https://github.com/muccc/gr-iridium/actions/workflows/ci.yml)\n\nThis module provides blocks to build an Iridium burst detector and demodulator.\n\nIt provides a sample application which can be used to detect and demodulate data from the Iridium satellite network.\n\nYou should also have a look at the [iridium-toolkit](https://github.com/muccc/iridium-toolkit).\n\n\u003e :warning: **If you want to build for GNU Radio 3.8**: Make sure to use the `maint-3.8` branch of this repository (i.e. run `git checkout maint-3.8` before installation). Also make sure to check the README.md from that branch for correct build instructions.\n\nA working [GNU Radio 3.10](https://gnuradio.org) installation is necessary to use gr-iridium.\n\n## Build \u0026 Installation\n\nInstallation instructions for:\n\n - [Ubuntu 22.04 (from source)](docs/install-ubuntu-22.04.md)\n - [Ubuntu 22.04 on Rasperry Pi 4 (from source)](docs/install-ubuntu-22.04-rpi-source.md)\n - [DragonOS Pi64 Beta](docs/install-dragon-os-pi64-beta.md)\n\nIf your operating system is not listed above, first install the following dependencies:\n - gnuradio-dev\n - libvolk-dev\n - pybind11-dev\n - libsndfile1-dev\n\nAfterwards try these generic build instructions:\n```\ncmake -B build\ncmake --build build\nsudo cmake --install build\nsudo ldconfig\n```\n\n### GNU Radio on Ubuntu 20.04 or Debian stable (bullseye) or Raspberry Pi OS (64-bit)\nThe recommended GNU Radio versions to use gr-iridium with is GNU Radio 3.10. If you use a Ubuntu version older than Ubuntu 22.04 or Debian stable (bullseye) our recommended way to install GNU Radio is to use PyBOMBS as described here: https://github.com/Sec42/sec-gr/. Please expect trouble if you install GNU Radio any other way on these systems.\n\n## Usage examples\nThe following commands are examples how to use the `iridium-extractor` tool. To further parse the demodulated frames have a look at the [iridium-toolkit](https://github.com/muccc/iridium-toolkit). It provides scripts to extract meaningful information.\n\n### SDR Sample Rates and Iridium\n\n![channels](docs/channels.svg)\n\nTo our knowledge Iridium is currently using the spectrum between 1.618 GHz and 1.6265 GHz which is a bandwidth of 8.5 MHz.\nMany modern SDRs support such a bandwidth with sample rates \u003e= 10 MSPS. RTL-SDR devices do not though and you need to make\na choice which section of the band you want to listen to. The configurations in the `example/` folder for RTL-SDRs\ninclude the \"Time and Location\", \"Ring Alert\" and \"Pager / Global Burst\" channels. If you are more interested in\nuser payloads (like ACARS) you might want to move the center frequency of the RTL-SDR configurations to a lower\nfrequency (e.g. 1622 MHz) to capture more of the duplex band. You can also experiment with the sample rate and\nfor example raise it to 2.5 MSPS or 3.0 MSPS.\n\nIf your SDR supports at maximum 8 MSPS you will have to decide if the simplex band is of interest to you or if you\nwant to capture the first 500 kHz of the duplex band.\n\nSDRs which support more than 10 MSPS capture the whole used band.\n\n### Online (with an SDR)\n`iridium-extractor -D 4 examples/hackrf.conf \u003e output.bits`\n\nThis will capture the complete Iridium band using a connected HackRF and demodulate detected bursts into frames. It uses decimation to keep up if there are many bursts at the same time.\n\n### Online (with external tool)\n`hackrf_transfer -f 1626000000 -s 10000000 -r - | iridium-extractor -c 1626000000 -r 10000000 -f hackrf -`\n\nYou can also pipe a raw sample stream into `iridium-extractor`. This may be useful if your SDR is not supported or if you stream samples from another computer via TCP (e.g. with `rtl_tcp`).\n\n### Offline (raw capture)\n`iridium-extractor -c 1626000000 -r 2000000 -f float name-f1.626000e+09-s2.000000e+06-t20160401000000.cfile \u003e output.bits`\n\nThis processes the file in offline mode and supplies the needed options via the command line.\n\n### Offline (wav file)\n`iridium-extractor -c 1622000000 baseband.wav \u003e output.bits`\n\nA 2-channel 16bit wav file is also accepted as input.  Command line option `-r` can be used to override the sample rate.\n\n###  Offline (SigMF)\n `iridium-extractor recording-test.sigmf-data \u003e output.bits`\n\n`iridium-extractor`  supports both [SigMF](https://github.com/gnuradio/SigMF/blob/sigmf-v1.x/sigmf-spec.md) files (`.sigmf-meta` / `.sigmf-data`) as well as [SigMF archives](https://github.com/gnuradio/SigMF/blob/sigmf-v1.x/sigmf-spec.md#sigmf-archives) (`.sigmf`).\n\nCommand line options `-c`, `-r` and `-f` can be used to override the SigMF information.\n\n## Extracting Iridium Frames From Raw Data\nTo capture and demodulate Iridium frames use `iridium-extractor`. You can either process a file offline or stream data into the tool.\n\nThe extractor can talk directly to an SDR with the help of [SoapySDR](https://github.com/pothosware/SoapySDR) or [OsmoSDR](https://osmocom.org/projects/gr-osmosdr/wiki). This is enabled via a configuration file.\n\nThe `examples/` directory contains example configuration files for common use cases.\n\nIf no configuration file is used, a file name can be provided to read samples from a file. If no file is specified, samples are read from `stdin`.\n\n### Configuration File\nConfiguration files need to have a `.conf` file extension.\nThe configuration file must contain exactly one source section and start with a\ncorresponding `[section-name]` line.\n\n### `osmosdr-source` Section\nIf the `[osmosdr-source]` section is present, an OsmoSDR source is instantiated.\n\nThe following options are available in this section:\n\n| Option Name      | Required | Description                                |\n|------------------|----------|--------------------------------------------|\n| `device_args`    | No       | Device arguments passed onto osomosdr\u003csup\u003e[1](#dev)\u003c/sup\u003e|\n| `sample_rate`    | Yes      | Sample rate at which the source should run. Must be divisible by 100000. |\n| `center_freq`    | Yes      | Center frequency for the source in Hz      |\n| `gain`           | No       | (RF)-Gain in dB                            |\n| `*_gain`         | No       | set specific Gain in dB (e.g. IF, BB, VGA1) |\n| `bandwidth`      | No       | Base band filter bandwidth in Hz           |\n| `antenna`        | No       | Antenna port to use                        |\n\n\u003ca name=\"dev\"\u003e1\u003c/a\u003e: Mostly used to enable bias tee - check files under `examples/`\n\n### `soapy-source` Section\nIf the `[soapy-source]` section is present, a SoapySDR source is instantiated.\n\nThe following options are available in this section:\n\n| Option Name      | Required | Description                                |\n|------------------|----------|--------------------------------------------|\n| `driver`         | Yes      | Soapy driver to be used\u003csup\u003e[1](#factories)\u003c/sup\u003e        |\n| `dev_args`       | No       | Device arguments passed onto SoapySDR\u003csup\u003e[2](#dev)\u003c/sup\u003e|\n| `stream_args`    | No       | Stream arguments passed onto SoapySDR via gr-soapy\u003csup\u003e[3](#args)\u003c/sup\u003e      |\n| `tune_args`      | No       | Tune arguments passed onto SoapySDR via gr-soapy\u003csup\u003e[3](#args)\u003c/sup\u003e        |\n| `other_settings` | No       | \"Other settings\" parameter passed onto SoapySDR via gr-soapy\u003csup\u003e[3](#args)\u003c/sup\u003e        |\n| `sample_rate`    | Yes      | Sample rate at which the source should run. Must be divisible by 100000. |\n| `center_freq`    | Yes      | Center frequency for the source in Hz      |\n| `bandwidth`      | No       | Base band filter bandwidth in Hz           |\n| `antenna`        | No       | Which antenna port should be used          |\n| `gain`           | No       | (RF)-Gain in dB                            |\n| `*_gain`         | No       | set specific Gain in dB\u003csup\u003e[4](#gain)\u003c/sup\u003e |\n\n\u003csmall\u003e\u003ca name=\"factories\"\u003e1\u003c/a\u003e: Run `SoapySDRUtil --info |grep factories` to see available drivers on your system.\u003c/small\u003e\n\u003csmall\u003e\u003ca name=\"dev\"\u003e2\u003c/a\u003e: Mostly used to enable an integrated bias tee - check files under `examples/`.\u003c/small\u003e\n\u003csmall\u003e\u003ca name=\"args\"\u003e3\u003c/a\u003e: These arguments are highly device specific. You might find hints in `examples/` or your SDR's SoapySDR driver. \u003c/small\u003e\n\u003csmall\u003e\u003ca name=\"gain\"\u003e4\u003c/a\u003e: Check the output of `SoapySDRUtil --probe` to find valid gain names for your SDR. Gain names are usually different between OsmoSDR and SoapySDR.\u003c/small\u003e\n\n### `zeromq-sub-source` Section\nIf the `[zeromq-sub-source]` section is present, ZeroMQ is used to receive data from a `ZMQ PUB Sink` running in another flow graph.\n\nThe following options are available in this section:\n\n| Option Name      | Required | Description                                |\n|------------------|----------|--------------------------------------------|\n| `address`        | Yes      | Address of the source. Something like `tcp://127.0.0.1:5000`. |\n| `sample_rate`    | Yes      | Sample rate at which the source is running. Must be divisible by 100000. |\n| `center_freq`    | Yes      | Center frequency of the source in Hz.      |\n| `pass_tags`      | No       | Must be equal to the `Pass Tags` setting of the `ZMQ PUB Sink` block. Default is `False`. Valid options are `True` and `False`. Relevant if you want to receive `rx_time` tags from your source.|\n| `high_water_mark`| No       | ZMQ's \"High Water Mark\" option. Default is `-1`. |\n\nSee `examples/zeromq-sub.conf` and `experimental/zmq-publisher.grc` for examples how to use this source.\nAlso have a look at https://wiki.gnuradio.org/index.php/ZMQ_SUB_Source and https://wiki.gnuradio.org/index.php/ZMQ_PUB_Sink .\n\nAlso consider https://github.com/muaddib1984/stillsuit as a solution to create a compatible source.\n\nWarning: If you set `pass_tags` to `True` make sure that your source is not supplying bogus `rx_time` tags.\nThis is by default the case when using a USRP without a properly configured external time source. In this case\nthe timestamps reported by gr-iridium will follow what ever the `rx_time` tags of the source tell it. Sometimes\nthis might be based on the uptime of some system part or something similar.\n\n### `uhd-source` Section\nIf the `[uhd-source]` section is present, UHD is used to connect to a USRP.\n\nThis is mainly of interest when working with an internal GPSDO as gr-iridium will wait for\nit to lock if `clock_source` or `time_source` specifies an internal GPSDO. This source will always\nuse channel 0 of the chosen USRP.\n\n| Option Name      | Required | Description                                |\n|------------------|----------|--------------------------------------------|\n| `device_addr`    | No       | Device address. Default lets UHD pick a device.|\n| `device_args`    | Yes      | Device arguments passed onto UHD. Must be supplied to configure buffer sizes.|\n| `sample_rate`    | Yes      | Sample rate at which the source is running. Must be divisible by 100000. |\n| `center_freq`    | Yes      | Center frequency of the source in Hz.      |\n| `gain`           | No       | Gain in dB.                                |\n| `bandwidth`      | No       | Base band filter bandwidth in Hz.          |\n| `antenna`        | No       | Antenna port to be used.                   |\n| `clock_source`   | No       | Can be used to specify an external reference clock.                   |\n| `time_source`    | No       | Can be used to specify the time source.                   |\n\nPlease refer to the UHD documentation for your device to understand the options for `antenna`, `clock_source` and\n`time_source`. Tested options so far are `external`, `gpsdo` and `jacksonlabs` (see below).\n\ngr-iridium implements a special `clock_source` and `time_source` for USRP B2x0 devices `jacksonlabs`. It\nimproves waiting for proper GPS lock before starting a capture. Use this if you have an internal Jacksonlabs\nGPSDO.\n\nSee `examples/usrp-b2x0-uhd.conf` for an example how to use this with a B2x0 device.\n\n### `demodulator` Section\nThe optional `[demodulator]` section can be used to influence the demodulator behavior.\n\n| Option Name          | Required | Description                                |\n|----------------------|----------|--------------------------------------------|\n| `samples_per_symbol` | No       | Modifies the number of samples per symbol after down-mixing. Default is 10. Lower values decrease CPU/memory requirements and offer more flexibility for SDR sample rates. Higher values might demodulate a few more burst. |\n| `decimation`         | No       | See `--decimation` in the section below.   |\n\nThe `samples_per_symbol` option is useful if you are running on a constrained system like a single\nboard ARM computer (e.g. a Raspberry Pi). It also allows you to use sample rates which are not a\nmultiple of 250000 samples per second. E.g. a setting of 5 samples per symbol allows your SDRs sample\nrate to be a multiple of 25000 * 5 = 125000 samples per second. A setting of 8 allows the sample rate\nto be a multiple of 200000 samples per second which for example works out well with 3.2 MSPS RTL-SDRs.\n\n### Command Line Options\nCommand line options can be used instead of a configuration file. If a configuration file is also specified, command line options take precedence.\n\n#### `-o`, `--offline`: Offline Processing\nIn live/SDR mode, the extractor will drop samples or bursts if the computing power available is not enough to keep up. (See `-q` option).\n\nIn offline/file mode, the extractor will pause reading the file (or stream) until it can process more samples again.\n\nWhen reading samples from a pipe / stdin `iridium-extractor` does not know which mode is correct and defaults to live mode. You can use this option to override this choice and avoid dropping bursts.\n\nThis option is only necessary to use if you pipe samples from stdin.\n\n#### `-D`, `--decimation`: Decimation\nThis option enables decimation and channelization of the input stream before it gets handled by the burst based components. This helps to reduce the needed memory bandwidth when many bursts appear at the same time. Use this option if you get dropped bursts during online operation.\n\nThe decimation has to be even. Internally a poly phase filter bank will be used to channelize the input spectrum. Each channel will be decimated by the chosen decimation. To account for Doppler shift, the channels overlap each other. To provide the needed additional sample rate, one more channel than needed is created and oversampling activated. This results in a total output bandwidth of input bandwidth * (1 + 1/decimation).\n\nIt is not recommended to use a decimation smaller than 4, as there is only little benefit otherwise.\n\nDecimating the input signal can improve real time performance but is not recommended for offline processing. During offline processing it tends to become a major bottleneck.\n\nThis value is limited to even values and the sample rate divided by decimation must be a multiple of 250000.\n\n#### `-c`: Center Frequency\nThe center frequency for the source or the file in Hz.\n\n#### `-r`: Sample Rate\nThe sample rate of the source or the file. Must be divisible by 100000.\n\n#### `-f`: Input File Format\nThe following 4 formats are supported for sample input. For ease of use the names in the alias column can also be used.\n| Format    | File Format                                        | Alias            |\n|-----------|----------------------------------------------------|------------------|\n| `cu8`     | complex uint8 (RTL-SDR)                            | `rtl`            |\n| `ci8`     | complex int8 (hackrf, rad1o with hackrf-transfer)  | `hackrf`         |\n| `ci16_le` | complex int16 (USRP with specrec from gr-analysis) | `sc16`           |\n| `cf32_le` | complex float (GNU Radio, `uhd_rx_cfile`)           | `float` , `fc32`, `cfile` |\n\nIf not specified otherwise, `iridium-extractor` tries to use the file extension to identify the format.\n\nThis option has no effect while directly reading from an SDR.\n\n#### `-q`: Queue Length\nFor each channel (by default there is one channel, unless specified with `-D` ), a queue is filled with samples where the detector has detected activity. By default each queue is 500 frames long. You can tweak the length of the queue(s) with this option.\n\n#### `--debug-id`: Output debug information for a specific burst\nEach burst which is detected gets assigned an id. It appears in the output data as `I:xxxxxxxxxxx` for bursts which were decoded into frames.\n\nFor example `--debug-id=230` to output debug information for the burst containing frames `230` up to `239`.\n\n Debug information includes:\n\n - Debug prints on `stdout`.\n - Raw sample files written to `/tmp/signals`.\n\n**Note:** Last digit needs to always be `0`\n\n#### `--file-info`: File Info\nManually set the file info field (second field) in the output data. If this option is not used, the default will be:\n* basename of the sample source file if available\n* current time otherwise (i.e.  when reading from an SDR or stdin)\n\n#### `-v`: Verbose\nwill output some additional info when starting up.\n\n#### `--db`: Signal detection threshold\nhow much stronger a signal needs to be over the noise floor to attempt to extract it.\n\nDefault value is `18`. Values lower than `16` are rarely useful, as the QPSK decoder will produce too many bit errors.\n\n#### `--raw-capture`: Copy raw samples to file\nwrite a copy of the samples to a SigMF recording.\n\nThe parameter specifies the path \u0026 basename of the SigMF files.\n\nThis is mostly useful for debugging when using SDR mode to process live data.\n\nThe samples will be written in `ci16_le` format.\n\n#### `--generate-sigmf-meta`: Create a sigm-meta file based on the input format\nadditionally write a file in sigmf-meta format describing the processed input.\n\nTo convert a standard recording to a sigmf dataset, specify \"--generate-sigmf-meta NEWNAME.sigmf-meta\" and then after the extractor ends, manually rename your recording to \"NEWNAME.sigmf-data\"\n\n### Interactive Output\nDuring normal operation `iridium-extractor` will output a status line once per second on `stderr`.\n#### SDR / live mode\n\n`1577922120 | i:   0/s | i_avg:   0/s | q_max:    0 | i_ok:   0% | o:    0/s | ok:   0% | ok:   0/s | ok_avg:   0% | ok:          0 | ok_avg:   0/s | d: 0`\n\n|Column|Mnemonic|Explanation|\n|-|-|-|\n|  1|time         |Current time in seconds (unix time)|\n|  2|input        |number of \"bursts\" detected in the last second|\n|  3|input average|average of `2` since program start|\n|  4|queue max    |High-water mark of the sum of the queue size(s) in the last second (see `-q`)|\n|  5|in ok%       |Percentage of bursts with at least one ok frame relative to `2`|\n|  6|out          |Number of \"frames\" after splitting bursts into frames|\n|  7|ok%          |Percentage of \"ok\" frames(`8`) relative to `2` |\n|  8|ok           |Number of frames in the last second that could be extracted \u0026 demodulated|\n|  9|ok% average  |average of `7` since program start|\n| 10|ok total     |Total number of ok frames since program start|\n| 11|ok avg       |average of `8` since program start|\n| 12|drops        |Total number of candidate bursts that had to be dropped due to queue full (i.e. CPU being too slow)|\n\nDuring normal operation `drops` should remain `0`, while `queue max` should be in the lower double digits \"most\" of the time.\nThe `input` number is largely dependent on your antenna and will also vary depending on satellite location.\n\n#### File / offline mode\n`1577922120 | srr: 0.0% | i_avg:   0/s | q_max:    0 | i_ok:   0% | o:    0/s | ok:   0% | ok:   0/s | ok_avg:   0% | ok:          0 | ok_avg:   0/s | d: 0`\n\nAll columns here have the same content as in SDR/live mode, except\n\n|Column|Mnemonic|Explanation|\n|-|-|-|\n|  2|sample rate rate|Processing speed relative to recorded sample rate in the last second|\n\nIf this value is consistently lower than 100% it is likely that you would loose/drop bursts in SDR/live mode.\n\n### Bits Output\nDuring normal operation `iridium-extractor` will output one line of bits per \"ok\" frame on `stdout`. Usually `stdout` should be redirected to a file. By convention this file should have the extension `.bits`.\n\n`RAW: prbs15-2M-20dB 0000599.9996 1622000000 N:32.12-80.05 I:00000000000 100% 0.13551 179 0011000000110000111100111000000000000011000000000000101000000000001111000000000010001000000000110011000000001010101000000011111111000000100000001000001100000011000010100000101000111100001111001000100010001011001100110011101010101010100111111111111101000000000000111000000000001001000000000011011000000000101101000000001110111000000010011001000000110101011000001011111101000011100000`\n\n|Column|Example|Explanation|\n|-|-|-|\n|  1|RAW:          |Indicates that this is an unprocessed output from `iridium-extractor` |\n|  2|prbs15-2M-20dB|File info - see `--file-info` command line option[^fileinfo]|\n|  3|0000599.9996  |Time in ms since start of recording/extraction[^time]. This is derived from sample counting and will drift depending on your SDR clock accuracy (and also when dropping samples)|\n|  4|1622000000    |Frequency in Hz at which this \"frame\" was detected|\n|  5|N:32.12-80.05 |Relative Magnitude of the detected \"burst\" (≥ `--db`) and average Noise/Hz at that time/frequency in dBFS|\n|  6|I:00000000000 |Frame ID (unique identifier for each frame)[^id]. Referenced by `--debug-id`|\n|  7|100%          |Confidence the QPSK demodulator has in the demodulated bits|\n|  8|0.13551       |Signal level of the demodulated signal[^signal]|\n|  9|179           |Length of the signal in symbols (i.e. `len(bits)/2`)|\n| 10|...           |Raw bits[^bits]|\n\n[^fileinfo]: In live mode: `i-\u003ctimestamp\u003e-t1` whereas `timestamp` is a unix `time_t` representing the start of the recording.\n[^time]: Time in `3` is defined as the middle of the first symbol of the 12-symbol BPSK Iridium sync word.\n[^id]: Last digit identifies the sub-frame of a burst.\n[^signal]: Due to historic reasons column `8` is not in dB. Convert to dBFS via `20*log10(_value_)`.\n[^bits]: Due to historic reasons the bits in column `10` are symbol-wise reversed to how they would normally be presented.\n\n## Citations\n\n - Accessing the RF Spectrum with GNU Radio: https://www.osti.gov/servlets/purl/1639511\n - PAST-AI: Physical-layer Authentication of Satellite Transmitters via Deep Learning: https://arxiv.org/pdf/2010.05470.pdf\n - Hacker-Attacks Against Satellites - An Evaluation of Space Law in Regard to the Nature of Hacker-Attacks: https://www.researchgate.net/publication/353846410_Hacker-Attacks_Against_Satellites_An_Evaluation_of_Space_Law_in_Regard_to_the_Nature_of_Hacker-Attacks\n - GNSS Spoofing Detection via Opportunistic IRIDIUM Signals - https://arxiv.org/pdf/2006.10284.pdf\n - The GR PDU Utilities: https://www.osti.gov/servlets/purl/1641974\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuccc%2Fgr-iridium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuccc%2Fgr-iridium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuccc%2Fgr-iridium/lists"}