Multi‑RxMER Capture & Analysis API¶
A concise, implementation‑ready reference for orchestrating downstream OFDM RxMER captures, status polling, result retrieval, early termination, and post‑capture analysis.
Contents¶
- At a Glance
- Workflow
- Endpoints
- 1) Start Capture
- 2) Status Check
- 3) Download Results
- 4) Stop Capture Early
- 5) Analysis
- Timing & Polling
- Plot Examples
- Min‑Avg‑Max Line Plot
- RxMER Heat Map
- OFDM Profile Performance 1 Overlay
- Response Field Reference
- Start / Status / Stop
- Download ZIP
- Analysis (JSON)
- Compatibility Matrix
At a Glance¶
| Step | HTTP | Path | Purpose |
|---|---|---|---|
| 1 | POST | /advance/multi/ds/rxMer/start |
Begin a background capture |
| 2 | GET | /advance/multi/ds/rxMer/status/{operation_id} |
Poll capture progress |
| 3 | GET | /advance/multi/ds/rxMer/results/{operation_id} |
Download a ZIP of captured PNM files |
| 4 | DELETE | /advance/multi/ds/rxMer/stop/{operation_id} |
Stop the capture after current iteration |
| 5 | POST | /advance/multi/ds/rxMer/analysis |
Run post-capture analytics |
Identifiers¶
group_id: Logical grouping for related operations.operation_id: Unique handle for one capture session. Use it for status, stop, results, and analysis.
Workflow¶
- Start Capture → receive
group_idandoperation_id. - Poll Status until
state ∈ ["completed","stopped"]. - Download Results once finished or stopped.
- (Optional) Stop Early to end after the current iteration.
- Run Analysis on the finished capture using
operation_id+ analysis type.
Endpoints¶
1) Start Capture¶
Starts a background RxMER capture with a fixed duration and sample interval.
Request POST /advance/multi/ds/rxMer/start
Body (MultiRxMerRequest):
{
"cable_modem": {
"mac_address": "aa:bb:cc:dd:ee:ff",
"ip_address": "192.168.0.100",
"pnm_parameters": {
"tftp": {
"ipv4": "192.168.0.10",
"ipv6": "2001:db8::10"
},
"capture": {
"channel_ids": [193, 194]
}
},
"snmp": {
"snmpV2C": { "community": "public" }
}
},
"capture": {
"parameters": {
"measurement_duration": 60,
"sample_interval": 10
}
},
"measure": { "mode": 1 }
}
When pnm_parameters.capture.channel_ids is omitted or empty, the capture includes all downstream OFDM channels.
Channel Scoping¶
| JSON path | Type | Default | Description |
|---|---|---|---|
pnm_parameters.capture.channel_ids |
array(int) | omitted | Optional OFDM channel IDs to capture; empty or missing means all. |
Compatibility Matrix¶
| Measure Mode | Suited Analyses | Processes |
|---|---|---|
0 |
min-avg-max, rxmer-heat-map |
RxMER |
1 |
ofdm-profile-performance-1, min-avg-max, rxmer-heat-map |
RxMER + Modulation Profile + FEC Summary |
Use
mode=1when you specifically want OFDM performance context; otherwisemode=0is recommended for continuous monitoring.
Response (MultiRxMerStartResponse)¶
{
"mac_address": "aa:bb:cc:dd:ee:ff",
"status": "running",
"message": "Starting Multi-RxMER capture for MAC=aa:bb:cc:dd:ee:ff",
"group_id": "3bd6f7c107ad465b",
"operation_id": "4aca137c1e9d4eb6"
}
2) Status Check¶
Request GET /advance/multi/ds/rxMer/status/{operation_id}
Response (MultiRxMerStatusResponse)¶
{
"mac_address": "aa:bb:cc:dd:ee:ff",
"status": "success",
"message": null,
"operation": {
"operation_id": "4aca137c1e9d4eb6",
"state": "running",
"collected": 2,
"time_remaining": 50,
"message": null
}
}
3) Download Results¶
Request GET /advance/multi/ds/rxMer/results/{operation_id}
Response¶
Content-Type: application/zip- ZIP name:
<mac>_<model>_<ephoc>.zip - Contains files like:
ds_ofdm_rxmer_per_subcar_aabbccddeeff_160_1751762613.bin
ds_ofdm_modulation_profile_aabbccddeeff_160_1762980708
ds_ofdm_codeword_error_rate_aabbccddeeff_160_1762980674.bin
aabbccddeeff_lpet3_1762980743_rxmer_min_avg_max_160.csv
aabbccddeeff_lpet3_1762981896_ofdm_profile_perf_1_ch160_pid0.csv
aabbccddeeff_lpet3_1762981556_rxmer_ofdm_heat_map_160.csv
aabbccddeeff_lpet3_1763007607_160_profile_0_ofdm_profile_perf_1.png
aabbccddeeff_lpet3_1763007680_160_rxmer_min_avg_max.png
aabbccddeeff_lpet3_1763007737_160_rxmer_heat_map.png
4) Stop Capture Early¶
Request DELETE /advance/multi/ds/rxMer/stop/{operation_id}
Stop Response (MultiRxMerStatusResponse)¶
{
"mac_address": "aa:bb:cc:dd:ee:ff",
"status": "stopped",
"message": null,
"operation": {
"operation_id": "4aca137c1e9d4eb6",
"state": "stopped",
"collected": 4,
"time_remaining": 42,
"message": null
}
}
5) Analysis¶
Request POST /advance/multi/ds/rxMer/analysis
Body (MultiRxMerAnalysisRequest - preferred string enums):
{
"analysis": {
"type": "min-avg-max",
"output": { "type": "json" }
},
"operation_id": "4aca137c1e9d4eb6"
}
Analysis Types (analysis.type)
| Type | Description | measure.mode |
|---|---|---|
min-avg-max |
Min/Avg/Max RxMER across samples | 0 or 1 |
rxmer-heat-map |
Time × Frequency heatmap grid | 0 or 1 |
ofdm-profile-performance-1 |
Per‑subcarrier performance metrics | 1 |
Output Types (analysis.output.type)
| Value | Name | Description | Media Type |
|---|---|---|---|
"json" |
JSON |
Structured JSON body | application/json |
"archive" |
ARCHIVE |
ZIP containing multiple artifacts | application/zip |
Timing & Polling¶
Capture Timing¶
measurement_duration(s) → total run length. Example:60means one minute.sample_interval(s) → period between samples. Example:10over60seconds → 6 samples.
Polling Strategy¶
- Poll no more than once per
sample_interval. - Stop polling when
time_remaining == 0andstate == "completed".
Results Availability¶
- When
state ∈ ["completed","stopped"], the ZIP is immediately available. - Files are produced at sampling time; the archive is just a bundle step.
Stop Semantics¶
- Current iteration finishes.
- Final PNM for that iteration is written.
state → "stopped"(remaining time may be > 0 if mid‑interval).
Plot Examples¶
Min-Avg-Max Line Plot¶
| Plot | Description | Note |
|---|---|---|
| Min‑Avg‑Max | Min/Avg/Max RxMER across samples. | Constant line indicates low RxMER @ 750MHz |
RxMER Heat Map¶
| Plot | Description | Note |
|---|---|---|
| Heat-Map | Time × Frequency heatmap grid. | Constant dark Line indicating low RxMER |
OFDM Profile Performance 1 Overlay¶
| Plot | Profile | Description |
|---|---|---|
| 256‑QAM | 0 |
Avg‑RxMER with modulation profile overlay and FEC summary across sample time. |
| 1K‑QAM | 1 |
Avg‑RxMER with modulation profile overlay and FEC summary across sample time. |
| 2K‑QAM | 2 |
Avg‑RxMER with modulation profile overlay and FEC summary across sample time. |
| 4K‑QAM | 3 |
Avg‑RxMER with modulation profile overlay and FEC summary across sample time. |
Response Field Reference¶
Start / Status / Stop¶
| Field | Type | Description |
|---|---|---|
mac_address |
string | Cable modem MAC address. |
status |
string | Start: "running"; Status/Stop: high‑level status string. |
message |
string | Optional detail text. |
group_id |
string | Logical grouping for related operations (Start only). |
operation_id |
string | Unique capture handle used with status/results/stop/analysis. |
operation.state |
string | Current state: running, completed, or stopped. |
operation.collected |
integer | Number of captured samples. |
operation.time_remaining |
integer | Estimated seconds left. |
Download ZIP¶
| Aspect | Value / Format |
|---|---|
Content-Type |
application/zip |
| ZIP name | multiRxMer_<mac>_<operation_id>.zip |
| PNM file name format | ds_ofdm_rxmer_per_subcar_<mac>_<channel_id>_<epoch>.bin |
Analysis (JSON)¶
These keys appear under the data object of MultiRxMerAnalysisResponse. Per‑type models differ, but common fields include:
| Field/Path | Type/Example | Meaning |
|---|---|---|
<channel_id> |
string/int key | Map key representing a single OFDM channel’s results. |
channel_id |
int | Channel identifier repeated in the model. |
frequency |
array[int] (Hz) | Per‑subcarrier center frequency. |
min / avg / max |
array[float] (dB) | Min/avg/max RxMER per subcarrier (MIN_AVG_MAX). |
timestamps |
array[int] (epoch sec) | Capture timestamps for heat map rows (RXMER_HEAT_MAP). |
values |
array[array[float]] (dB) | Heat map matrix rows aligned to timestamps (RXMER_HEAT_MAP). |
avg_mer |
array[float] (dB) | Average MER across captures per subcarrier (OFDM_PROFILE_PERFORMANCE_1). |
mer_shannon_limits |
array[float] (dB) | Derived MER (min SNR) per subcarrier (OFDM_PROFILE_PERFORMANCE_1). |
profiles[].profile_id |
int | Modulation profile index. |
profiles[].profile_min_mer |
array[float] (dB) | Minimum MER allowed by the profile per subcarrier. |
profiles[].capacity_delta |
array[float] (dB) | avg_mer - profile_min_mer per subcarrier. |
profiles[].fec_summary.start/end |
int (epoch sec) | FEC observation window boundaries. |
profiles[].fec_summary.summary[].summary.total_codewords |
int | Total FEC codewords counted. |
profiles[].fec_summary.summary[].summary.corrected |
int | FEC corrected codewords. |
profiles[].fec_summary.summary[].summary.uncorrectable |
int | Uncorrectable codewords. |