feat: add physically explicit narrowband MUSIC

This commit is contained in:
2026-08-29 12:40:48 +09:00
parent 044be3cf92
commit 11fee76280
40 changed files with 6473 additions and 275 deletions
+4 -2
View File
@@ -43,13 +43,15 @@
"type": "object", "additionalProperties": false,
"required": ["algorithm", "backend", "minimumDistance", "normalization", "dynamicRangeDb"],
"properties": {
"algorithm": { "enum": ["das", "das-phat", "gcc-phat"] },
"algorithm": { "enum": ["das", "das-phat", "gcc-phat", "music"] },
"backend": { "enum": ["auto", "cpu", "webgpu"] },
"minimumDistance": { "type": "number", "exclusiveMinimum": 0, "maximum": 10 },
"normalization": { "enum": ["peak", "none"] },
"dynamicRangeDb": { "type": "number", "minimum": 6, "maximum": 120 },
"compensateFrequencyResponse": { "type": "boolean" },
"maxCompensationDb": { "type": "number", "minimum": 0, "maximum": 120 }
"maxCompensationDb": { "type": "number", "minimum": 0, "maximum": 120 },
"musicSourceCountMethod": { "enum": ["fixed", "mdl", "aic"] },
"musicSourceCount": { "type": "integer", "minimum": 1, "maximum": 1023 }
}
},
"evaluation": {
+303 -5
View File
@@ -15,7 +15,7 @@
"arrayId": { "type": "string", "minLength": 1 },
"sceneId": { "type": "string", "minLength": 1 },
"createdAt": { "type": "string", "format": "date-time" },
"algorithm": { "enum": ["das", "das-phat", "gcc-phat"] },
"algorithm": { "enum": ["das", "das-phat", "gcc-phat", "music"] },
"backend": { "enum": ["cpu", "webgpu"] },
"inputHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
"signalStats": {
@@ -51,6 +51,7 @@
}
},
"environment": { "type": "object", "additionalProperties": { "type": ["string", "number", "boolean"] } },
"musicModel": { "$ref": "#/$defs/musicModel" },
"bands": {
"type": "array", "minItems": 1, "maxItems": 8,
"items": { "$ref": "#/$defs/bandResult" }
@@ -123,11 +124,27 @@
"localizationModel": {
"enum": [
"spherical-steering-at-positive-adc-bin-frequency",
"band-limited-gcc-phat-geometric-lag"
"band-limited-gcc-phat-geometric-lag",
"near-field-music-at-configured-analog-frequency"
]
},
"originalCarrierUsed": { "const": false },
"aliasOrderResolution": { "enum": ["not-applicable", "not-attempted"] },
"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" },
@@ -185,7 +202,8 @@
"properties": {
"rows": { "type": "integer", "minimum": 1, "maximum": 512 },
"columns": { "type": "integer", "minimum": 1, "maximum": 512 },
"scale": { "enum": ["power", "score", "normalized", "db"] },
"scale": { "enum": ["power", "score", "noise-projection", "normalized", "db"] },
"objectiveDirection": { "enum": ["maximum", "minimum"] },
"values": {
"type": "array", "minItems": 1, "maxItems": 262144,
"items": { "type": "number" }
@@ -246,6 +264,281 @@
}
}
},
"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": [
@@ -259,6 +552,10 @@
"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"]
},
@@ -289,6 +586,7 @@
"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": {