Skip to content

Commit 0f04c99

Browse files
committed
Align CMTS OFDMA PreEqualization results visual with standards and frequency-based group delay
- update visual header to include required Visual Constraints line for canonical rule traceability - remove vendor-specific runtime fallbacks by defaulting missing system model and software values to N/A - map group delay points to carrier frequency in MHz and switch group delay chart x-axis from Index to MHz - align base dark palette tokens to canonical dark-blue values for consistent visual shell styling - sync updated visualizer script into PyPNM-CMTS Results request and regenerate visual docs preview outputs - 2026-03-08 18:33:41
1 parent 7d6561e commit 0f04c99

4 files changed

Lines changed: 460 additions & 479 deletions

File tree

  • docs
    • visual-previews/PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization/Results
    • visual/PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization/Results
  • postman/collections/PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization
  • visual/PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization/Results

docs/visual-previews/PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization/Results/basic.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/visual/PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization/Results/basic.md

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Preview is best-effort. Some templates may rely on Postman-specific APIs that ar
1717
````html
1818
// Postman Visualizer: PyPNM-CMTS/ServingGroup/Upstream/OFDMA/PreEqualization/Results/basic
1919
// Last Update: 2026-02-28 14:02:00 MST
20+
// Visual Constraints: Follow canonical visual rules in CODING_AGENTS.md.
2021

2122
const response = pm.response.json();
2223

@@ -168,6 +169,16 @@ function buildPayload(r) {
168169
const rawStats = analysis.signal_statistics || {};
169170
const gd = normalizeGroupDelay(cv.group_delay);
170171
const gdStats = gd.length ? computeStats(gd) : null;
172+
const gdPoints = [];
173+
if (gd.length && freqHzList.length) {
174+
const limGd = Math.min(gd.length, freqHzList.length);
175+
for (let i = 0; i < limGd; i += 1) {
176+
const fHz = n(freqHzList[i]);
177+
const y = n(gd[i]);
178+
if (fHz == null || y == null) continue;
179+
gdPoints.push({ x: fHz / 1e6, y });
180+
}
181+
}
171182
const spacingHz = n(analysis.subcarrier_spacing) || 0;
172183
const windowKey = [Math.round(startMHz*1000)/1000, Math.round(endMHz*1000)/1000, Math.round(spacingHz), points.length].join('|');
173184
const echo = (analysis.echo && analysis.echo.report) || {};
@@ -184,8 +195,8 @@ function buildPayload(r) {
184195
channel_id: chanId,
185196
service_group_id: sgId,
186197
mac_address: mac,
187-
system_model: sys && sys.MODEL ? sys.MODEL : 'LCPET-3',
188-
system_sw: sys && sys.SW_REV ? sys.SW_REV : '1.0.0',
198+
system_model: sys && sys.MODEL ? sys.MODEL : 'N/A',
199+
system_sw: sys && sys.SW_REV ? sys.SW_REV : 'N/A',
189200
sysdescr_hover: sysDescrSummary(sys) || 'No system_description available',
190201
status,
191202
message: modem.message || ((pre.stage_messages || {}).precheck) || '',
@@ -206,7 +217,7 @@ function buildPayload(r) {
206217
est_chart_id: 'ce-est-' + chIndex + '-' + mIndex,
207218
chan_est_points: chanEstPoints,
208219
gd_chart_id: 'ce-gd-' + chIndex + '-' + mIndex,
209-
gd_points: gd.length ? gd.map((v, i) => ({ x: i, y: v })) : [],
220+
gd_points: gdPoints,
210221
gd_avg: gdStats ? fmtn(gdStats.avg, 4) : 'N/A',
211222
gd_p2p: gdStats && gdStats.min != null && gdStats.max != null ? fmtn(gdStats.max - gdStats.min, 4) : 'N/A',
212223
echo_count: echoes.length,
@@ -287,8 +298,8 @@ const template = `
287298
<style>
288299
:root {
289300
color-scheme: light dark;
290-
--bg: #0b1222; --panel: rgba(255,255,255,0.04); --panel2: rgba(255,255,255,0.05);
291-
--line: rgba(148,163,184,0.25); --text: #e5e7eb; --muted: #94a3b8;
301+
--bg: #141821; --panel: #1b2332; --panel2: #202938;
302+
--line: rgba(255,255,255,0.09); --text: #e7edf8; --muted: #dbe3ff;
292303
--green: #16a34a; --red: #ef4444;
293304
}
294305
@media (prefers-color-scheme: light) {
@@ -444,7 +455,7 @@ const template = `
444455
}
445456
if (row && row.gd_points && row.gd_points.length) {
446457
const gd=document.getElementById(row.gd_chart_id);
447-
createLineChart(gd,[{label:'GD',data:row.gd_points,parsing:false,pointRadius:0,borderWidth:1.4,tension:0,borderColor:palette[i%palette.length]}],null,'Index','Group Delay');
458+
createLineChart(gd,[{label:'GD',data:row.gd_points,parsing:false,pointRadius:0,borderWidth:1.4,tension:0,borderColor:palette[i%palette.length]}],null,'MHz','Group Delay');
448459
}
449460
});
450461
});

0 commit comments

Comments
 (0)