606 lines
26 KiB
JSON
606 lines
26 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://micarrsim.local/schemas/result.schema.json",
|
|
"title": "micarrsim simulation result",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schemaVersion", "kind", "experimentId", "arrayId", "sceneId", "createdAt", "algorithm", "backend",
|
|
"inputHash", "signalStats", "timingMs", "bands"
|
|
],
|
|
"properties": {
|
|
"schemaVersion": { "const": "1.1.0" },
|
|
"kind": { "const": "micarrsim.result" },
|
|
"experimentId": { "type": "string", "minLength": 1 },
|
|
"arrayId": { "type": "string", "minLength": 1 },
|
|
"sceneId": { "type": "string", "minLength": 1 },
|
|
"createdAt": { "type": "string", "format": "date-time" },
|
|
"algorithm": { "enum": ["das", "das-phat", "gcc-phat", "music"] },
|
|
"backend": { "enum": ["cpu", "webgpu"] },
|
|
"inputHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
"signalStats": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["preNormalizationPeak", "appliedScale", "clippedSampleCount", "sampling"],
|
|
"properties": {
|
|
"preNormalizationPeak": { "type": "number", "minimum": 0 },
|
|
"appliedScale": { "type": "number", "minimum": 0 },
|
|
"clippedSampleCount": { "type": "integer", "minimum": 0 },
|
|
"acousticModel": { "enum": ["free-field", "shoebox"] },
|
|
"acousticPathCount": { "type": "integer", "minimum": 0 },
|
|
"acousticPathCounts": {
|
|
"type": "object", "additionalProperties": false,
|
|
"properties": {
|
|
"direct": { "type": "integer", "minimum": 0 },
|
|
"reflection": { "type": "integer", "minimum": 0 },
|
|
"scattering": { "type": "integer", "minimum": 0 },
|
|
"diffraction": { "type": "integer", "minimum": 0 },
|
|
"diffuse": { "type": "integer", "minimum": 0 }
|
|
}
|
|
},
|
|
"sampling": { "$ref": "#/$defs/sampling" }
|
|
}
|
|
},
|
|
"timingMs": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["total", "localization", "beamforming"],
|
|
"properties": {
|
|
"total": { "type": "number", "minimum": 0 },
|
|
"signalGeneration": { "type": "number", "minimum": 0 },
|
|
"localization": { "type": "number", "minimum": 0 },
|
|
"beamforming": { "type": "number", "minimum": 0 }
|
|
}
|
|
},
|
|
"environment": { "type": "object", "additionalProperties": { "type": ["string", "number", "boolean"] } },
|
|
"musicModel": { "$ref": "#/$defs/musicModel" },
|
|
"bands": {
|
|
"type": "array", "minItems": 1, "maxItems": 8,
|
|
"items": { "$ref": "#/$defs/bandResult" }
|
|
}
|
|
},
|
|
"$defs": {
|
|
"position": {
|
|
"type": "array",
|
|
"prefixItems": [{ "type": "number" }, { "type": "number" }, { "type": "number" }],
|
|
"items": false, "minItems": 3, "maxItems": 3
|
|
},
|
|
"sampling": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["model", "sampleRate", "nyquistHz", "toneObservations"],
|
|
"properties": {
|
|
"model": { "const": "ideal-real-sampler-no-antialias-filter" },
|
|
"sampleRate": { "type": "integer", "minimum": 8000, "maximum": 192000 },
|
|
"nyquistHz": { "type": "number", "exclusiveMinimum": 0 },
|
|
"toneObservations": {
|
|
"type": "array", "maxItems": 64,
|
|
"items": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"scope", "id", "analogFrequencyHz", "adcFrequencyHz",
|
|
"signedAdcFrequencyHz", "aliased", "spectralInversion", "dcEdge",
|
|
"nyquistEdge", "phaseDegenerate"
|
|
],
|
|
"properties": {
|
|
"scope": { "enum": ["source", "ambient"] },
|
|
"id": { "type": "string", "minLength": 1 },
|
|
"analogFrequencyHz": {
|
|
"type": "number", "exclusiveMinimum": 0, "maximum": 1000000
|
|
},
|
|
"adcFrequencyHz": { "type": "number", "minimum": 0 },
|
|
"signedAdcFrequencyHz": { "type": "number" },
|
|
"aliased": { "type": "boolean" },
|
|
"spectralInversion": { "type": "boolean" },
|
|
"dcEdge": { "type": "boolean" },
|
|
"nyquistEdge": { "type": "boolean" },
|
|
"phaseDegenerate": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"frequencyObservation": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"model", "sampleRate", "nyquistHz", "fftSize", "binWidthHz",
|
|
"requestedMinHz", "requestedMaxHz", "aliased", "crossesFirstNyquist",
|
|
"localizationInputModel", "selectionModel", "localizationModel", "originalCarrierUsed",
|
|
"aliasOrderResolution", "foldBoundaryCount", "continuousManyToOne",
|
|
"gridManyToOne", "foldSegments", "adcBins",
|
|
"adcBinCenterRanges", "adcBinSetKey", "equivalentBandIds"
|
|
],
|
|
"properties": {
|
|
"model": { "const": "ideal-real-sampler-no-antialias-filter" },
|
|
"sampleRate": { "type": "integer", "minimum": 8000, "maximum": 192000 },
|
|
"nyquistHz": { "type": "number", "exclusiveMinimum": 0 },
|
|
"fftSize": { "enum": [128, 256, 512, 1024, 2048, 4096] },
|
|
"binWidthHz": { "type": "number", "exclusiveMinimum": 0 },
|
|
"requestedMinHz": { "type": "number", "minimum": 0, "maximum": 1000000 },
|
|
"requestedMaxHz": {
|
|
"type": "number", "exclusiveMinimum": 0, "maximum": 1000000
|
|
},
|
|
"aliased": { "type": "boolean" },
|
|
"crossesFirstNyquist": { "type": "boolean" },
|
|
"localizationInputModel": { "const": "observed-one-sided-real-fft-bins" },
|
|
"selectionModel": { "const": "fft-bin-center-membership" },
|
|
"localizationModel": {
|
|
"enum": [
|
|
"spherical-steering-at-positive-adc-bin-frequency",
|
|
"band-limited-gcc-phat-geometric-lag",
|
|
"near-field-music-at-configured-analog-frequency"
|
|
]
|
|
},
|
|
"originalCarrierUsed": { "type": "boolean" },
|
|
"aliasOrderResolution": {
|
|
"enum": [
|
|
"not-applicable",
|
|
"not-attempted",
|
|
"configured-single-hypothesis"
|
|
]
|
|
},
|
|
"configuredAnalogFrequencyHz": {
|
|
"type": "number", "exclusiveMinimum": 0, "maximum": 1000000
|
|
},
|
|
"signedAdcFrequencyHz": { "type": "number" },
|
|
"spectralInversion": { "type": "boolean" },
|
|
"frequencyHypothesisCount": { "const": 1 },
|
|
"frequencyHypothesisSource": {
|
|
"const": "experiment-band-not-scene-truth"
|
|
},
|
|
"foldBoundaryCount": { "type": "integer", "minimum": 0, "maximum": 512 },
|
|
"continuousManyToOne": { "type": "boolean" },
|
|
"gridManyToOne": { "type": "boolean" },
|
|
"foldSegments": {
|
|
"type": "array", "minItems": 1, "maxItems": 513,
|
|
"items": { "$ref": "#/$defs/foldSegment" }
|
|
},
|
|
"adcBins": {
|
|
"type": "array", "minItems": 1, "maxItems": 2049, "uniqueItems": true,
|
|
"items": { "type": "integer", "minimum": 0, "maximum": 2048 }
|
|
},
|
|
"adcBinCenterRanges": {
|
|
"type": "array", "minItems": 1, "maxItems": 2049,
|
|
"items": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"firstBin", "lastBin", "firstBinCenterHz", "lastBinCenterHz"
|
|
],
|
|
"properties": {
|
|
"firstBin": { "type": "integer", "minimum": 0, "maximum": 2048 },
|
|
"lastBin": { "type": "integer", "minimum": 0, "maximum": 2048 },
|
|
"firstBinCenterHz": { "type": "number", "minimum": 0 },
|
|
"lastBinCenterHz": { "type": "number", "minimum": 0 }
|
|
}
|
|
}
|
|
},
|
|
"adcBinSetKey": { "type": "string", "minLength": 1, "maxLength": 16384 },
|
|
"equivalentBandIds": {
|
|
"type": "array", "maxItems": 7, "uniqueItems": true,
|
|
"items": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
},
|
|
"foldSegment": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"analogMinHz", "analogMaxHz", "signedAdcStartHz", "signedAdcEndHz",
|
|
"inverted", "aliasOrder", "nyquistZone"
|
|
],
|
|
"properties": {
|
|
"analogMinHz": { "type": "number", "minimum": 0, "maximum": 1000000 },
|
|
"analogMaxHz": {
|
|
"type": "number", "exclusiveMinimum": 0, "maximum": 1000000
|
|
},
|
|
"signedAdcStartHz": { "type": "number" },
|
|
"signedAdcEndHz": { "type": "number" },
|
|
"inverted": { "type": "boolean" },
|
|
"aliasOrder": { "type": "integer", "minimum": 0 },
|
|
"nyquistZone": { "type": "integer", "minimum": 1 }
|
|
}
|
|
},
|
|
"map": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["rows", "columns", "scale", "values"],
|
|
"properties": {
|
|
"rows": { "type": "integer", "minimum": 1, "maximum": 512 },
|
|
"columns": { "type": "integer", "minimum": 1, "maximum": 512 },
|
|
"scale": { "enum": ["power", "score", "noise-projection", "normalized", "db"] },
|
|
"objectiveDirection": { "enum": ["maximum", "minimum"] },
|
|
"values": {
|
|
"type": "array", "minItems": 1, "maxItems": 262144,
|
|
"items": { "type": "number" }
|
|
}
|
|
}
|
|
},
|
|
"peak": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["position", "value"],
|
|
"properties": {
|
|
"sourceId": { "type": "string", "minLength": 1 },
|
|
"position": { "$ref": "#/$defs/position" },
|
|
"value": { "type": "number", "minimum": 0 },
|
|
"beamSpread": { "$ref": "#/$defs/beamSpread" },
|
|
"localizationErrorM": { "type": "number", "minimum": 0 },
|
|
"localizationErrorPixels": { "type": "number", "minimum": 0 }
|
|
}
|
|
},
|
|
"beamSpread": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"calibrated", "method", "halfPowerRatio", "thresholdValue", "pixelCount",
|
|
"centroid", "covarianceM2", "ellipse"
|
|
],
|
|
"properties": {
|
|
"calibrated": { "const": false },
|
|
"method": {
|
|
"enum": [
|
|
"connected-half-power-power-weighted-covariance",
|
|
"connected-half-maximum-score-weighted-covariance"
|
|
]
|
|
},
|
|
"halfPowerRatio": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 },
|
|
"thresholdValue": { "type": "number", "minimum": 0 },
|
|
"pixelCount": { "type": "integer", "minimum": 0, "maximum": 262144 },
|
|
"centroid": { "$ref": "#/$defs/position" },
|
|
"covarianceM2": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["xx", "xy", "yy"],
|
|
"properties": {
|
|
"xx": { "type": "number", "minimum": 0 },
|
|
"xy": { "type": "number" },
|
|
"yy": { "type": "number", "minimum": 0 }
|
|
}
|
|
},
|
|
"ellipse": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"axisScale", "angleReference", "majorRmsRadiusM", "minorRmsRadiusM", "angleDeg"
|
|
],
|
|
"properties": {
|
|
"axisScale": { "const": "rms" },
|
|
"angleReference": { "const": "counterclockwise-from-positive-x" },
|
|
"majorRmsRadiusM": { "type": "number", "minimum": 0 },
|
|
"minorRmsRadiusM": { "type": "number", "minimum": 0 },
|
|
"angleDeg": { "type": "number", "minimum": -180, "maximum": 180 }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"musicModel": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"publicationFamily", "covariance", "manifold", "propagationPaths",
|
|
"localizationFrequency", "hypothesisSource",
|
|
"originalCarrierUsed", "aliasOrderResolution",
|
|
"multibandFusion",
|
|
"spatialSmoothing", "diagonalLoading", "eigenvalueFloor",
|
|
"normalizationApplied", "requestedNormalization", "distanceAmplitude",
|
|
"minimumDistance", "microphoneCalibration"
|
|
],
|
|
"properties": {
|
|
"publicationFamily": { "const": "Schmidt narrowband MUSIC" },
|
|
"covariance": { "const": "sample-xxh-no-mean" },
|
|
"manifold": {
|
|
"const": "near-field-spherical-direct-path-configured-analog-hypothesis"
|
|
},
|
|
"propagationPaths": { "const": "direct-only" },
|
|
"localizationFrequency": {
|
|
"const": "configured-single-analog-fft-grid-hypothesis-with-adc-inversion"
|
|
},
|
|
"hypothesisSource": {
|
|
"const": "experiment-band-not-scene-truth"
|
|
},
|
|
"originalCarrierUsed": { "const": true },
|
|
"aliasOrderResolution": {
|
|
"const": "configured-single-hypothesis-no-selection"
|
|
},
|
|
"multibandFusion": {
|
|
"const": "none-each-band-is-separate-single-analog-hypothesis"
|
|
},
|
|
"spatialSmoothing": { "const": "none" },
|
|
"diagonalLoading": { "const": "none" },
|
|
"eigenvalueFloor": { "const": "none" },
|
|
"normalizationApplied": {
|
|
"const": "none-raw-noise-projection-preserved"
|
|
},
|
|
"requestedNormalization": { "const": "none" },
|
|
"distanceAmplitude": {
|
|
"const": "inverse-distance-with-explicit-minimum-distance"
|
|
},
|
|
"minimumDistance": { "type": "number", "exclusiveMinimum": 0 },
|
|
"microphoneCalibration": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"sensitivity", "phaseOffset", "frequencyResponse",
|
|
"frequencyResponseEvaluation", "spectralInversion",
|
|
"compensateFrequencyResponse",
|
|
"maxCompensationDb"
|
|
],
|
|
"properties": {
|
|
"sensitivity": { "const": "exact-inverse" },
|
|
"phaseOffset": { "const": "exact-inverse" },
|
|
"frequencyResponse": {
|
|
"enum": [
|
|
"analog-hypothesis-inverse-phase-capped-inverse-gain-residual-in-manifold",
|
|
"uncompensated-retained-in-manifold"
|
|
]
|
|
},
|
|
"frequencyResponseEvaluation": {
|
|
"const": "configured-analog-fft-grid-hypothesis"
|
|
},
|
|
"spectralInversion": {
|
|
"const": "positive-bin-full-complex-conjugation"
|
|
},
|
|
"compensateFrequencyResponse": { "type": "boolean" },
|
|
"maxCompensationDb": { "type": "number", "minimum": 0, "maximum": 120 }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"musicDiagnostics": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"frequencyHypothesis", "snapshotCount", "covariance",
|
|
"eigenvalues", "auditedEigenvalues",
|
|
"covarianceAudit", "eigensolver", "partition", "sourceCount",
|
|
"projectionComplexMacs"
|
|
],
|
|
"properties": {
|
|
"frequencyHypothesis": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"model", "hypothesisCount", "analogFrequencyHz",
|
|
"observedFrequencyHz", "signedAdcFrequencyHz",
|
|
"spectralInversion", "aliasOrder",
|
|
"sharedObservationKey"
|
|
],
|
|
"properties": {
|
|
"model": {
|
|
"const": "configured-single-analog-fft-grid-hypothesis"
|
|
},
|
|
"hypothesisCount": { "const": 1 },
|
|
"analogFrequencyHz": {
|
|
"type": "number", "exclusiveMinimum": 0, "maximum": 1000000
|
|
},
|
|
"observedFrequencyHz": {
|
|
"type": "number", "exclusiveMinimum": 0
|
|
},
|
|
"signedAdcFrequencyHz": { "type": "number" },
|
|
"spectralInversion": { "type": "boolean" },
|
|
"aliasOrder": { "type": "integer", "minimum": 0 },
|
|
"sharedObservationKey": {
|
|
"type": "string", "minLength": 1
|
|
}
|
|
}
|
|
},
|
|
"snapshotCount": { "type": "integer", "minimum": 1 },
|
|
"covariance": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"model", "normalization", "centered", "inputLayout", "matrixScale",
|
|
"trace", "covarianceRoundoffBound"
|
|
],
|
|
"properties": {
|
|
"model": { "const": "sample-xxh-no-mean" },
|
|
"normalization": { "const": "1/T" },
|
|
"centered": { "const": false },
|
|
"inputLayout": { "const": "snapshot-major" },
|
|
"matrixScale": { "type": "number", "minimum": 0 },
|
|
"trace": { "type": "number", "minimum": 0 },
|
|
"covarianceRoundoffBound": { "type": "number", "minimum": 0 }
|
|
}
|
|
},
|
|
"eigenvalues": {
|
|
"type": "array", "minItems": 2, "maxItems": 1024,
|
|
"items": { "type": "number" }
|
|
},
|
|
"auditedEigenvalues": {
|
|
"type": "array", "minItems": 2, "maxItems": 1024,
|
|
"items": { "type": "number", "minimum": 0 }
|
|
},
|
|
"covarianceAudit": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"roundoffTolerance", "roundoffFactor", "eigenvalueScale",
|
|
"minimumEigenvalue", "isPositiveSemidefinite",
|
|
"clampedNegativeCount", "roundoffDerivation",
|
|
"covarianceRoundoffBound", "eigensolverResidualFrobeniusNorm"
|
|
],
|
|
"properties": {
|
|
"roundoffTolerance": { "type": "number", "minimum": 0 },
|
|
"roundoffFactor": { "type": "number", "exclusiveMinimum": 0 },
|
|
"eigenvalueScale": { "type": "number", "minimum": 0 },
|
|
"minimumEigenvalue": { "type": "number" },
|
|
"isPositiveSemidefinite": { "const": true },
|
|
"clampedNegativeCount": { "type": "integer", "minimum": 0 },
|
|
"roundoffDerivation": {
|
|
"enum": [
|
|
"explicit", "eigenvalue-scale",
|
|
"covariance-accumulation-plus-eigensolver-residual"
|
|
]
|
|
},
|
|
"covarianceRoundoffBound": {
|
|
"type": ["number", "null"], "minimum": 0
|
|
},
|
|
"eigensolverResidualFrobeniusNorm": {
|
|
"type": "number", "minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"eigensolver": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"solver", "converged", "sweeps", "rotations", "scale",
|
|
"inputHermitianError", "inputHermitianTolerance",
|
|
"relativeTolerance", "offDiagonalFrobeniusNorm",
|
|
"relativeOffDiagonal", "residualFrobeniusNorm",
|
|
"relativeResidual", "residualTolerance", "orthogonalityError",
|
|
"orthogonalityTolerance", "numericallyVerified"
|
|
],
|
|
"properties": {
|
|
"solver": { "const": "full-cyclic-complex-hermitian-jacobi" },
|
|
"converged": { "const": true },
|
|
"sweeps": { "type": "integer", "minimum": 0, "maximum": 32 },
|
|
"rotations": { "type": "integer", "minimum": 0 },
|
|
"scale": { "type": "number", "minimum": 0 },
|
|
"inputHermitianError": { "type": "number", "minimum": 0 },
|
|
"inputHermitianTolerance": { "type": "number", "minimum": 0 },
|
|
"relativeTolerance": { "type": "number", "minimum": 0 },
|
|
"offDiagonalFrobeniusNorm": { "type": "number", "minimum": 0 },
|
|
"relativeOffDiagonal": { "type": "number", "minimum": 0 },
|
|
"residualFrobeniusNorm": { "type": "number", "minimum": 0 },
|
|
"relativeResidual": { "type": "number", "minimum": 0 },
|
|
"residualTolerance": { "type": "number", "minimum": 0 },
|
|
"orthogonalityError": { "type": "number", "minimum": 0 },
|
|
"orthogonalityTolerance": { "type": "number", "minimum": 0 },
|
|
"numericallyVerified": { "const": true }
|
|
}
|
|
},
|
|
"partition": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"signalEdge", "noiseEdge", "eigenvalueGap", "partitionTolerance"
|
|
],
|
|
"properties": {
|
|
"signalEdge": { "type": "number", "minimum": 0 },
|
|
"noiseEdge": { "type": "number", "minimum": 0 },
|
|
"eigenvalueGap": { "type": "number", "exclusiveMinimum": 0 },
|
|
"partitionTolerance": { "type": "number", "minimum": 0 }
|
|
}
|
|
},
|
|
"sourceCount": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"method", "status", "value", "criterion", "score", "scores",
|
|
"assumptions"
|
|
],
|
|
"properties": {
|
|
"method": { "enum": ["fixed", "mdl", "aic"] },
|
|
"status": { "const": "available" },
|
|
"value": { "type": "integer", "minimum": 1, "maximum": 1023 },
|
|
"criterion": { "type": ["string", "null"], "enum": ["mdl", "aic", null] },
|
|
"score": { "type": ["number", "null"] },
|
|
"scores": {
|
|
"oneOf": [
|
|
{ "type": "null" },
|
|
{
|
|
"type": "array", "minItems": 1, "maxItems": 1024,
|
|
"items": { "type": "number" }
|
|
}
|
|
]
|
|
},
|
|
"assumptions": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["userSpecified", "independentSnapshotsRequired"],
|
|
"properties": {
|
|
"userSpecified": { "type": "boolean" },
|
|
"independentSnapshotsRequired": { "type": "boolean" },
|
|
"nonOverlappingSnapshots": { "type": "boolean" },
|
|
"partialFrames": { "const": "excluded" },
|
|
"statisticalSnapshotIndependence": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["assumed", "evidence", "modelSelectedByUser"],
|
|
"properties": {
|
|
"assumed": { "const": true },
|
|
"evidence": {
|
|
"const": "non-overlapping-frames-only-not-statistical-proof"
|
|
},
|
|
"modelSelectedByUser": { "const": true }
|
|
}
|
|
},
|
|
"statisticalDataModel": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"assumed", "verified", "assumptions", "interpretation"
|
|
],
|
|
"properties": {
|
|
"assumed": { "const": true },
|
|
"verified": { "const": false },
|
|
"assumptions": {
|
|
"type": "array", "minItems": 3, "maxItems": 3,
|
|
"prefixItems": [
|
|
{ "const": "iid-complex-gaussian-snapshots" },
|
|
{ "const": "spatially-white-noise" },
|
|
{ "const": "stationary-source-count-over-snapshots" }
|
|
],
|
|
"items": false
|
|
},
|
|
"interpretation": {
|
|
"const": "wax-kailath-model-order-criterion-not-probability-or-confidence"
|
|
}
|
|
}
|
|
},
|
|
"snapshotCount": { "type": "integer", "minimum": 1 },
|
|
"sensorCount": { "type": "integer", "minimum": 2, "maximum": 1024 },
|
|
"roundoffTolerance": { "type": "number", "minimum": 0 },
|
|
"logRatioRoundoffClampCount": { "type": "integer", "minimum": 0 }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"projectionComplexMacs": { "type": "integer", "minimum": 0 }
|
|
}
|
|
},
|
|
"evaluation": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": [
|
|
"version", "truthRadiusM", "matchToleranceM", "detectionThresholdRatio",
|
|
"detectionThresholdValue", "minimumPeakDistanceM", "sidelobeExclusionRadiusM",
|
|
"halfPowerRatio", "dynamicRangeDb", "maximumDetections", "truthSelection"
|
|
],
|
|
"properties": {
|
|
"version": { "const": "1.0.0" },
|
|
"truthRadiusM": { "type": "number", "minimum": 0 },
|
|
"matchToleranceM": { "type": "number", "minimum": 0 },
|
|
"detectionThresholdRatio": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
"detectionThresholdValue": { "type": "number", "minimum": 0 },
|
|
"objectiveDirection": { "enum": ["maximum", "minimum"] },
|
|
"detectionThresholdDomain": {
|
|
"enum": ["raw-map-value", "normalized-music-pseudospectrum"]
|
|
},
|
|
"detectionMethod": {
|
|
"enum": ["local-max", "connected-components", "watershed"]
|
|
},
|
|
"minimumPeakDistanceM": { "type": "number", "minimum": 0 },
|
|
"sidelobeExclusionRadiusM": { "type": "number", "minimum": 0 },
|
|
"halfPowerRatio": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 },
|
|
"dynamicRangeDb": { "type": "number", "minimum": 0 },
|
|
"maximumDetections": { "type": "integer", "minimum": 1, "maximum": 128 },
|
|
"truthSelection": {
|
|
"const": "tone-analog-interval-or-nearest-adc-bin-and-all-nontone-sources"
|
|
}
|
|
}
|
|
},
|
|
"processedMap": {
|
|
"type": "object", "additionalProperties": false, "required": ["algorithm", "map"],
|
|
"properties": {
|
|
"algorithm": { "enum": ["damas", "clean-sc", "custom"] },
|
|
"map": { "$ref": "#/$defs/map" }
|
|
}
|
|
},
|
|
"bandResult": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["id", "color", "rawMap", "frequencyObservation", "peaks", "metrics"],
|
|
"properties": {
|
|
"id": { "type": "string", "minLength": 1 },
|
|
"color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
|
|
"rawMap": { "$ref": "#/$defs/map" },
|
|
"displayMap": { "$ref": "#/$defs/map" },
|
|
"frequencyObservation": { "$ref": "#/$defs/frequencyObservation" },
|
|
"evaluation": { "$ref": "#/$defs/evaluation" },
|
|
"musicDiagnostics": { "$ref": "#/$defs/musicDiagnostics" },
|
|
"processedMaps": { "type": "array", "maxItems": 8, "items": { "$ref": "#/$defs/processedMap" } },
|
|
"peaks": { "type": "array", "maxItems": 128, "items": { "$ref": "#/$defs/peak" } },
|
|
"metrics": {
|
|
"type": "object", "additionalProperties": false,
|
|
"properties": {
|
|
"peakToSidelobeDb": { "type": "number" },
|
|
"energyInsideTruthRatio": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
"precision": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
"recall": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
"mainLobeWidthM": { "type": "number", "minimum": 0 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|