{
  "schemaVersion": 1,
  "project": "PToB",
  "protocol": "Precision Time over BLE",
  "asOf": "2026-10-02",
  "url": "https://ptob.dev/research/",
  "summary": "PToB applies PTP principles to public BLE time broadcasts. Documented T096 configurations measured 70.197 and 76.359 ns uncentered PPS-shadow RMS; ESP32-S3 measured 319.5 ns internal published-prediction RMS in a normal 600-second run.",
  "author": "Jonathan Yantis",
  "aiContribution": {
    "name": "GPT 6.1",
    "roles": [
      "implementation",
      "analysis",
      "documentation"
    ]
  },
  "status": "Public protocol proposal and research preprint; not an adopted Bluetooth SIG or IEEE standard",
  "results": [
    {
      "id": "t096-forward",
      "platform": "Heltec T096",
      "mcu": "Nordic nRF52840",
      "profile": "Warm forward validation",
      "statistic": "Uncentered RMS",
      "value": 70.197,
      "unit": "ns",
      "durationSeconds": 600,
      "scoreableObservations": 600,
      "physicalOpportunities": 600,
      "measurementReference": "PPS-shadow query of the already-published BLE clock at a separately captured reference edge on the same local hardware counter",
      "calibration": "Common 10,516 ns edge correction trained separately and frozen before validation; no receiver-GPS training, validation refit, centering, or outlier deletion",
      "maeNs": 57.263,
      "p99AbsoluteNs": 158,
      "maximumAbsoluteNs": 192
    },
    {
      "id": "t096-reverse",
      "platform": "Heltec T096",
      "mcu": "Nordic nRF52840",
      "profile": "Warm reverse validation",
      "statistic": "Uncentered RMS",
      "value": 76.359,
      "unit": "ns",
      "durationSeconds": 600,
      "scoreableObservations": 598,
      "physicalOpportunities": 599,
      "measurementReference": "PPS-shadow query of the already-published BLE clock at a separately captured reference edge on the same local hardware counter",
      "calibration": "The same separately trained, frozen 10,516 ns edge correction; one unscoreable causal query retained in the denominator",
      "maeNs": 60.376,
      "p99AbsoluteNs": 219,
      "maximumAbsoluteNs": 257
    },
    {
      "id": "esp32-normal",
      "platform": "W12",
      "mcu": "Espressif ESP32-S3",
      "profile": "Normal 600-second run",
      "statistic": "Internal published-prediction RMS",
      "value": 319.5,
      "unit": "ns",
      "durationSeconds": 600,
      "scoreableObservations": 359,
      "physicalOpportunities": 359,
      "measurementReference": "Internal causal prediction evaluated at physical target events using the previously published clock model",
      "calibration": "Controller-to-timer mapping",
      "maeNs": 244.5,
      "p99AbsoluteNs": 930,
      "maximumAbsoluteNs": 1010,
      "sampledPublication": {
        "fine": 1123,
        "coarse": 18,
        "unavailable": 57,
        "total": 1198
      }
    }
  ],
  "limitations": [
    "RMS describes the stated population; it is not a worst-case bound.",
    "These measurements do not establish independently calibrated absolute UTC accuracy or independent electrical GPIO output accuracy.",
    "The ESP32-S3 run has fine-clock publication gaps; internal prediction accuracy is distinct from continuous service availability.",
    "Results apply to the named tested configurations and profiles, not every BLE MCU or multi-hop mesh path.",
    "Cross-study RMS, MAE, standard deviation, and GPIO means use different references and conditions; they are not a matched output-accuracy or energy benchmark."
  ],
  "sources": [
    {
      "title": "Research paper",
      "url": "https://ptob.dev/papers/ptob-preprint.pdf"
    },
    {
      "title": "Protocol proposal",
      "url": "https://ptob.dev/papers/ptob-proposal.pdf"
    }
  ]
}
