All Projects → gnuradio → Sigmf

gnuradio / Sigmf

The Signal Metadata Format Specification

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Sigmf

scif
scientific filesystem: a filesystem organization for scientific software and metadata
Stars: ✭ 30 (-75%)
Mutual labels:  metadata, standard
security-policy-specification-standard
This document proposes a way of standardising the structure, language, and grammar used in security policies.
Stars: ✭ 24 (-80%)
Mutual labels:  specification, standard
standard-components
A specification for functional UI components
Stars: ✭ 52 (-56.67%)
Mutual labels:  specification, standard
publiccode.yml
A metadata description standard for public software and policy repositories
Stars: ✭ 18 (-85%)
Mutual labels:  metadata, standard
Conventionalcommits.org
The conventional commits specification
Stars: ✭ 3,552 (+2860%)
Mutual labels:  standard, specification
shared-row
This is an open data specification for describing the right-of-way (ROW) for street centerline networks. It is intended to establish a common set of attributes (schema) to describe how space is allocated along a streets right of way from sidewalk edge to sidewalk edge.
Stars: ✭ 16 (-86.67%)
Mutual labels:  specification, standard
BrAPI
Repository for version control of the BrAPI specifications
Stars: ✭ 50 (-58.33%)
Mutual labels:  specification, standard
Opencypher
Specification of the Cypher property graph query language
Stars: ✭ 534 (+345%)
Mutual labels:  standard, specification
specification
Software Bill of Material (SBOM) standard designed for use in application security contexts and supply chain component analysis
Stars: ✭ 129 (+7.5%)
Mutual labels:  specification, standard
biolink-model
Schema and generated objects for biolink data model and upper ontology
Stars: ✭ 83 (-30.83%)
Mutual labels:  specification, standard
Datahub
The Metadata Platform for the Modern Data Stack
Stars: ✭ 4,232 (+3426.67%)
Mutual labels:  big-data, metadata
Sdmx Rest
This repository is used for maintaining the SDMX RESTful web services specification.
Stars: ✭ 50 (-58.33%)
Mutual labels:  standard, specification
Ambari
Mirror of Apache Ambari
Stars: ✭ 1,576 (+1213.33%)
Mutual labels:  big-data
Crumb
An annotation processor for breadcrumbing metadata across compilation boundaries.
Stars: ✭ 115 (-4.17%)
Mutual labels:  metadata
Genie
Distributed Big Data Orchestration Service
Stars: ✭ 1,544 (+1186.67%)
Mutual labels:  big-data
Bigdataclass
Two-day workshop that covers how to use R to interact databases and Spark
Stars: ✭ 110 (-8.33%)
Mutual labels:  big-data
Itunes store transporter
Upload and manage your assets in the iTunes Store using the iTunes Store’s Transporter (iTMSTransporter).
Stars: ✭ 117 (-2.5%)
Mutual labels:  metadata
Pytaglib
Python audio tagging library
Stars: ✭ 115 (-4.17%)
Mutual labels:  metadata
Spark R Notebooks
R on Apache Spark (SparkR) tutorials for Big Data analysis and Machine Learning as IPython / Jupyter notebooks
Stars: ✭ 109 (-9.17%)
Mutual labels:  big-data
Mqtt v5
MQTT v5.0 specification draft Chinese translation. MQTT v5.0协议(草案)中文翻译。
Stars: ✭ 108 (-10%)
Mutual labels:  specification

Signal Metadata Format (SigMF)

Welcome to the SigMF project! The SigMF specification document is the sigmf-spec.md file in this repository:

SigMF: Signal Metadata Format Specification

Introduction

Sharing sets of recorded signal data is an important part of science and engineering. It enables multiple parties to collaborate, is often a necessary part of reproducing scientific results (a requirement of scientific rigor), and enables sharing data with those who do not have direct access to the equipment required to capture it.

Unfortunately, these datasets have historically not been very portable, and there is not an agreed upon method of sharing metadata descriptions of the recorded data itself. This is the problem that SigMF solves.

By providing a standard way to describe data recordings, SigMF facilitates the sharing of data, prevents the "bitrot" of datasets wherein details of the capture are lost over time, and makes it possible for different tools to operate on the same dataset, thus enabling data portability between tools and workflows.

(Taken from the Introduction of the specification document.)

Contributing

The SigMF standards effort is organized entirely within this Github repository. Questions, suggestions, bug reports, etc., are discussed in the issue tracker. Changes to the specification only occur through Pull Requests.

This ensures that the history and background of all discussions and changes are maintained for posterity.

Anyone is welcome to get involved - indeed, the more people involved in the discussions, the more useful the standard is likely to be.

Getting Started

This module can be installed the typical way:

pip install .

Use Cases

Load a SigMF dataset; read its annotation, metadata, and samples

from sigmf import SigMFFile, sigmffile

# Load a dataset
filename = 'example.sigmf-meta' # extension is optional
signal = sigmffile.fromfile(filename)

# Get some metadata and all annotations
sample_rate = signal.get_global_field(SigMFFile.SAMPLE_RATE_KEY)
sample_count = signal.sample_count
signal_duration = sample_count / sample_rate
annotations = signal.get_annotations()

# Iterate over annotations
for adx, annotation in enumerate(annotations):
    annotation_start_idx = annotation[SigMFFile.START_INDEX_KEY]
    annotation_length = annotation[SigMFFile.LENGTH_INDEX_KEY]
    annotation_comment = annotation.get(SigMFFile.COMMENT_KEY, "[annotation {}]".format(adx))

    # Get capture info associated with the start of annotation
    capture = signal.get_capture_info(annotation_start_idx)
    freq_center = capture.get(SigMFFile.FREQUENCY_KEY, 0)
    freq_min = freq_center - 0.5*sample_rate
    freq_max = freq_center + 0.5*sample_rate

    # Get frequency edges of annotation (default to edges of capture)
    freq_start = annotation.get(SigMFFile.FLO_KEY)
    freq_stop = annotation.get(SigMFFile.FHI_KEY)

    # Get the samples corresponding to annotation
    samples = signal.read_samples(annotation_start_idx, annotation_length)

Write a SigMF file from a numpy array

import datetime as dt
from sigmf import SigMFFile

# suppose we have an complex timeseries signal
data = np.zeros(1024, dtype=np.complex64)

# write those samples to file in cf32_le
data.tofile('example.sigmf-data')

# create the metadata
meta = SigMFFile(
    data_file='example.sigmf-data', # extension is optional
    global_info = {
        SigMFFile.DATATYPE_KEY: 'cf32_le',
        SigMFFile.SAMPLE_RATE_KEY: 48000,
        SigMFFile.AUTHOR_KEY: '[email protected]',
        SigMFFile.DESCRIPTION_KEY: 'All zero example file.',
        SigMFFile.VERSION_KEY: sigmf.__version__,
    }
)

# create a capture key at time index 0
meta.add_capture(0, metadata={
    SigMFFile.FREQUENCY_KEY: 915000000,
    SigMFFile.DATETIME_KEY: dt.datetime.utcnow().isoformat()+'Z',
})

# add an annotation at sample 100 with length 200 & 10 KHz width
meta.add_annotation(100, 200, metadata = {
    SigMFFile.FLO_KEY: 914995000.0,
    SigMFFile.FHI_KEY: 915005000.0,
    SigMFFile.COMMENT_KEY: 'example annotation',
})

# check for mistakes & write to disk
assert meta.validate()
meta.tofile('example.sigmf-meta') # extension is optional

Frequently Asked Questions

Is this a GNU Radio effort?

No, this is not a GNU Radio-specific effort. It is hosted under the GNU Radio Github account because this effort first emerged from a group of GNU Radio core developers, but the goal of the project to provide a standard that will be useful to anyone and everyone, regardless of tool or workflow.

Is this specific to wireless communications?

No, similar to the response, above, the goal is to create something that is generally applicable to signal processing, regardless of whether or not the application is communications related.

It seems like some issues take a long time to resolve?

Yes, and in most cases this is by design. Since the goal of this project is create a broadly useful standards document, it is in our best interest to make sure we gather and consider as many opinions as possible, and produce the clearest and most exact language possible. This necessarily requires extreme attention to detail and diligence.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].