{
  "version": "1.16.12",
  "date": "2026-10-04",
  "scope": "Original synthetic continuous scalar angles, fixed causal full-window moving mean, no true angle or measured sensor noise",
  "sources": [
    {
      "url": "https://www.dspguide.com/ch15/1.htm",
      "use": "Mean of input sample groups and relative shift of one-sided averaging; original three-point example here"
    },
    {
      "url": "https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.group_delay.html",
      "use": "Group delay definition and undefined delay at transfer zeros; no API execution"
    }
  ],
  "model": {
    "unit": "degree",
    "uniformDtSeconds": "1/100",
    "windowPoints": 3,
    "weights": [
      "1/3",
      "1/3",
      "1/3"
    ],
    "rule": "y[n]=(x[n]+x[n-1]+x[n-2])/3",
    "initialization": "full-window only; first two unknown",
    "clock": "single clock/session",
    "trueAngleDeclared": false,
    "runtimeLatencyKnown": false
  },
  "rows": [
    {
      "sampleMs": 0,
      "inputDeg": "0",
      "meanDeg": null,
      "windowCenterMs": null,
      "earliestAvailabilityMs": null
    },
    {
      "sampleMs": 10,
      "inputDeg": "6/5",
      "meanDeg": null,
      "windowCenterMs": null,
      "earliestAvailabilityMs": null
    },
    {
      "sampleMs": 20,
      "inputDeg": "9/5",
      "meanDeg": "1",
      "windowCenterMs": 10,
      "earliestAvailabilityMs": 20
    },
    {
      "sampleMs": 30,
      "inputDeg": "16/5",
      "meanDeg": "31/15",
      "windowCenterMs": 20,
      "earliestAvailabilityMs": 30
    },
    {
      "sampleMs": 40,
      "inputDeg": "19/5",
      "meanDeg": "44/15",
      "windowCenterMs": 30,
      "earliestAvailabilityMs": 40
    },
    {
      "sampleMs": 50,
      "inputDeg": "26/5",
      "meanDeg": "61/15",
      "windowCenterMs": 40,
      "earliestAvailabilityMs": 50
    }
  ],
  "rates": [
    {
      "fromMs": 0,
      "toMs": 10,
      "rawDegPerSecond": "120",
      "filteredDegPerSecond": null
    },
    {
      "fromMs": 10,
      "toMs": 20,
      "rawDegPerSecond": "60",
      "filteredDegPerSecond": null
    },
    {
      "fromMs": 20,
      "toMs": 30,
      "rawDegPerSecond": "140",
      "filteredDegPerSecond": "320/3"
    },
    {
      "fromMs": 30,
      "toMs": 40,
      "rawDegPerSecond": "60",
      "filteredDegPerSecond": "260/3"
    },
    {
      "fromMs": 40,
      "toMs": 50,
      "rawDegPerSecond": "140",
      "filteredDegPerSecond": "340/3"
    }
  ],
  "delay": {
    "groupDelaySamples": "1",
    "groupDelayMs": 10,
    "scope": "fixed linear uniform-time FIR, away from transfer zeros/phase jumps",
    "meaning": "Not computation/transport latency, not step final-value time"
  },
  "step": {
    "sampleMs": [
      0,
      10,
      20,
      30,
      40,
      50
    ],
    "inputDeg": [
      0,
      0,
      0,
      3,
      3,
      3
    ],
    "fullMeanDeg": [
      null,
      null,
      0,
      1,
      2,
      3
    ],
    "stepMs": 30,
    "finalValueFirstMs": 50,
    "stepToFinalMs": 20
  },
  "hardwareStatus": "not-run"
}
