Mimir/src/Mimir.Runtime/Synchronization/MimirChirpletStreamDecode.cs
2026-05-23 19:48:07 +01:00

45 lines
1.4 KiB
C#

namespace Mimir.Runtime.Synchronization;
public sealed record MimirChirpletSymbolCandidate(
int SymbolId,
double SampleOffset,
double Energy,
IReadOnlyList<MimirChirpletBandResponse>? BandResponses = null);
public sealed record MimirChirpletTransformFrame(
double SampleOffset,
IReadOnlyList<MimirChirpletSymbolCandidate> Candidates)
{
public MimirChirpletSymbolCandidate BestCandidate =>
Candidates.OrderByDescending(candidate => candidate.Energy).First();
}
public sealed record MimirChirpletSymbolObservation(
int SymbolId,
double SampleOffset,
double Energy);
public sealed record MimirChirpletTimelineAnchor(
ulong EventIndex,
double TimelineSeconds,
double SampleOffset,
double Confidence,
IReadOnlyList<MimirChirpletSymbolObservation> Symbols);
public sealed record MimirChirpletClockFit(
double SourceOffsetSamples,
double EffectiveSampleRate,
double Confidence,
int AnchorCount,
double MeanAbsoluteErrorSamples)
{
public double SampleForTimelineSeconds(double timelineSeconds) =>
SourceOffsetSamples + timelineSeconds * EffectiveSampleRate;
}
public sealed record MimirChirpletStreamDecode(
IReadOnlyList<MimirChirpletTransformFrame> Frames,
IReadOnlyList<MimirChirpletSymbolObservation> Symbols,
IReadOnlyList<MimirChirpletTimelineAnchor> Anchors,
MimirChirpletClockFit? ClockFit,
IReadOnlyList<MimirChirpletBandResponse> BandResponses);