Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added schema for radiohound spectrum data files #4348

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/api/json/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -4359,6 +4359,15 @@
"fileMatch": ["pyrseas-0.8.json"],
"url": "https://json.schemastore.org/pyrseas-0.8.json"
},
{
"name": "RadioHound",
"description": "RadioHound data format for spectrum monitoring",
"fileMatch": ["*.rh.json"],
"url": "https://json.schemastore.org/radiohound-v0.json",
"versions": {
"v0": "https://json.schemastore.org/radiohound-v0.json"
}
},
{
"name": "Rancher Fleet",
"description": "Rancher Fleet fleet.yaml configuration file",
Expand Down
315 changes: 315 additions & 0 deletions src/schemas/json/radiohound-v0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,315 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://json.schemastore.org/radiohound-v0.json",
"$defs": {
"DataType": {
"description": "Data types supported by RadioHound.",
"enum": ["periodogram"],
"title": "DataType",
"type": "string"
},
"_RHMetadataV0": {
"additionalProperties": false,
"description": "Metadata for a RadioHound capture.",
"properties": {
"data_type": {
"$ref": "#/$defs/DataType",
"description": "The category of this capture"
},
"fmax": {
"description": "The maximum frequency in the sample",
"exclusiveMaximum": 9223372036854775807,
"exclusiveMinimum": 0,
"title": "Fmax",
"type": "integer"
},
"fmin": {
"description": "The minimum frequency in the sample",
"exclusiveMaximum": 9223372036854775807,
"exclusiveMinimum": 0,
"title": "Fmin",
"type": "integer"
},
"gps_lock": {
"description": "Whether a GPS satellite lock is obtained, otherwise the last known coordinates",
"title": "Gps Lock",
"type": "boolean"
},
"nfft": {
"description": "Number of FFT bins, recommended to be a power of 2",
"exclusiveMinimum": 0,
"title": "Nfft",
"type": "integer"
},
"scan_time": {
"description": "The time taken to scan this sample, in seconds",
"exclusiveMinimum": 0.0,
"title": "Scan Time",
"type": "number"
},
"xcount": {
"deprecated": true,
"description": "The number of points in the periodogram",
"exclusiveMaximum": 9223372036854775807,
"exclusiveMinimum": 0,
"title": "Xcount",
"type": "integer"
},
"xstart": {
"deprecated": true,
"description": "The start frequency of the periodogram",
"exclusiveMaximum": 9223372036854775807,
"exclusiveMinimum": 0,
"title": "Xstart",
"type": "integer"
},
"xstop": {
"deprecated": true,
"description": "The stop frequency of the periodogram",
"exclusiveMaximum": 9223372036854775807,
"exclusiveMinimum": 0,
"title": "Xstop",
"type": "integer"
},
"archiveResult": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether the data was archived",
"title": "Archiveresult"
}
},
"required": [
"data_type",
"fmax",
"fmin",
"gps_lock",
"nfft",
"scan_time",
"xcount",
"xstart",
"xstop"
],
"title": "_RHMetadataV0",
"type": "object"
}
},
"additionalProperties": false,
"description": "Describes a RadioHound capture.",
"properties": {
"data": {
"format": "binary",
"title": "Data",
"type": "string"
},
"gain": {
"title": "Gain",
"type": "number"
},
"latitude": {
"description": "The latitude where the data was captured, in decimal degrees",
"exclusiveMaximum": 90.0,
"exclusiveMinimum": -90.0,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "The longitude where the data was captured, in decimal degrees",
"exclusiveMaximum": 180.0,
"exclusiveMinimum": -180.0,
"title": "Longitude",
"type": "number"
},
"mac_address": {
"description": "MAC address of the device, without separators",
"maxLength": 12,
"minLength": 12,
"title": "Mac Address",
"type": "string"
},
"metadata": {
"$ref": "#/$defs/_RHMetadataV0",
"description": "Metadata for this capture"
},
"sample_rate": {
"description": "Sample rate of the capture, in Hz",
"exclusiveMaximum": 9223372036854775807,
"exclusiveMinimum": 0,
"title": "Sample Rate",
"type": "integer"
},
"short_name": {
"description": "The short name of the device",
"maxLength": 255,
"title": "Short Name",
"type": "string"
},
"timestamp": {
"description": "Timestamp of the capture start, as ISO 8601 with timezone information",
"format": "date-time",
"title": "Timestamp",
"type": "string"
},
"type": {
"description": "Numpy-compatible dtype of `data` elements",
"title": "Type",
"type": "string"
},
"version": {
"default": "v0",
"description": "Version of the RadioHound data format",
"maxLength": 255,
"title": "Version",
"type": "string"
},
"altitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The altitude where the data was captured, in meters",
"title": "Altitude"
},
"batch": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Can be used to group scans together",
"title": "Batch"
},
"center_frequency": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The center frequency of the capture, calculated as the mean of the start and end frequencies",
"title": "Center Frequency"
},
"custom_fields": {
"description": "Custom fields that are not part of the standard schema",
"title": "Custom Fields",
"type": "object"
},
"hardware_board_id": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The hardware board ID of the device capturing the data",
"title": "Hardware Board Id"
},
"hardware_version": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The hardware version of the device capturing the data",
"title": "Hardware Version"
},
"software_version": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The software version of the device capturing the data",
"title": "Software Version"
},
"suggested_gain": {
"anyOf": [
{
"exclusiveMinimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"deprecated": true,
"description": "Suggested gain for the device",
"title": "Suggested Gain"
},
"uncertainty": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"deprecated": true,
"description": "Uncertainty of the measurement",
"title": "Uncertainty"
},
"requested": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Attributes set by requestor",
"title": "Requested"
}
},
"required": [
"data",
"gain",
"latitude",
"longitude",
"mac_address",
"metadata",
"sample_rate",
"short_name",
"timestamp",
"type"
],
"title": "_RadioHoundDataV0",
"type": "object"
}
36 changes: 36 additions & 0 deletions src/test/radiohound-v0/radiohound-v0.rh.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"altitude": 2,
"batch": 0,
"center_frequency": 2000000000,
"data": "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",
"gain": 1,
"hardware_board_id": "025",
"hardware_version": "3.4",
"latitude": 41.699584,
"longitude": -86.237237,
"mac_address": "f4e11ea46780",
"metadata": {
"archiveResult": true,
"data_type": "periodogram",
"fmax": 2012000000,
"fmin": 1988000000,
"gps_lock": false,
"nfft": 1024,
"scan_time": 0.07766938209533691,
"xcount": 1024,
"xstart": 1988000000,
"xstop": 2012000000
},
"requested": {
"fmax": 2010000000,
"fmin": 1990000000,
"gain": 1,
"samples": 1024,
"span": 20000000
},
"sample_rate": 24000000,
"short_name": "WI-Lab V3.4-025 #6",
"software_version": "v0.10b30",
"timestamp": "2025-01-10T15:48:07.100486+00:00",
"type": "float32"
}
Loading