Skip to content

PyPNM / DOCSIS-3.0 / DS-SCQAM-Stats

Source Files

  • HTML/script: visual/PyPNM/DOCSIS-3.0/DS-SCQAM-Stats.html
  • JSON sample: visual/PyPNM/DOCSIS-3.0/DS-SCQAM-Stats.json

Preview

Preview is best-effort. Some templates may rely on Postman-specific APIs that are not yet shimmed.

Visualizer HTML/script source
// Postman Visualizer: DOCSIS-3.0/DS-SCQAM-Stats
// Last Update: 2026-02-25 06:01:33 MST

// Postman Visualizer - Downstream SC-QAM Channel Stats (Dark Mode)
// Useful visuals:
// 1) RxMER (dB) vs Frequency (MHz)  [line]
// 2) Downstream Power (dBmV) vs Frequency (MHz) [line]
// 3) Correcteds / Uncorrectables / Microreflections by Channel [bar]
// 4) Key metadata + highlights (min/max)

const template = `
<style>
  body {
    font-family: Arial, sans-serif;
    padding: 20px;
    background-color: #0f1220;
    color: #eaeaea;
  }
  .header {
    background-color: #151a2e;
    border: 1px solid rgba(255,255,255,0.08);
    padding: 16px 16px 10px 16px;
    border-radius: 10px;
    margin-bottom: 18px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  }
  .title {
    font-size: 18px;
    font-weight: bold;
    margin: 0 0 10px 0;
    color: #ff4d6d;
  }
  .meta {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 10px;
  }
  .pill {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 999px;
    padding: 6px 10px;
    font-size: 12px;
    color: #eaeaea;
  }
  .pill b { color: #9fb4ff; font-weight: 700; }
  .sub {
    margin: 0 0 6px 0;
    font-size: 12px;
    color: rgba(234,234,234,0.85);
  }

  .deviceInfoCard {
    background-color: #151a2e;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px;
    padding: 14px;
    margin-bottom: 16px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  }
  .deviceInfoCard h3 { margin: 0 0 8px 0; font-size: 14px; color: #9fb4ff; }
  .deviceInfoTable { width: 100%; border-collapse: collapse; font-size: 12px; }
  .deviceInfoTable th, .deviceInfoTable td { border-bottom: 1px solid rgba(255,255,255,0.08); padding: 8px 6px; text-align: left; white-space: nowrap; }
  .deviceInfoTable th { color: #9fb4ff; font-weight: 700; }
  .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }

  .grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
  }
  .card {
    background-color: #151a2e;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px;
    padding: 14px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  }
  .card h3 {
    margin: 0 0 6px 0;
    font-size: 14px;
    color: #9fb4ff;
  }
  .divider {
    height: 1px;
    background: rgba(255,255,255,0.08);
    margin: 14px 0;
  }
  .kpi {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
    margin-top: 10px;
  }
  .kpiItem {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px;
    padding: 10px;
  }
  .kpiItem .k {
    font-size: 11px;
    color: rgba(234,234,234,0.8);
    margin-bottom: 4px;
  }
  .kpiItem .v {
    font-size: 16px;
    font-weight: 700;
    color: #eaeaea;
  }
  .kpiItem .h {
    margin-top: 4px;
    font-size: 11px;
    color: rgba(159,180,255,0.95);
  }
  table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 10px;
    font-size: 12px;
  }
  th, td {
    border-bottom: 1px solid rgba(255,255,255,0.08);
    padding: 8px 6px;
    text-align: left;
    white-space: nowrap;
  }
  th { color: #9fb4ff; font-weight: 700; }
  .warn { color: #ffcc66; }
  .bad  { color: #ff6b6b; }
</style>


<div class="deviceInfoCard">
  <h3>Device Info</h3>
  <table class="deviceInfoTable">
    <thead>
      <tr>
        <th>MacAddress</th><th>Model</th><th>Vendor</th><th>SW Version</th><th>HW Version</th><th>Boot ROM</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td class="mono">{{deviceInfo.macAddress}}</td>
        <td>{{deviceInfo.MODEL}}</td>
        <td>{{deviceInfo.VENDOR}}</td>
        <td class="mono">{{deviceInfo.SW_REV}}</td>
        <td class="mono">{{deviceInfo.HW_REV}}</td>
        <td class="mono">{{deviceInfo.BOOTR}}</td>
      </tr>
    </tbody>
  </table>
</div>

<div class="header">
  <div class="title">Downstream SC-QAM Channel Stats</div>
  <div class="meta">
    <div class="pill"><b>MAC</b> {{mac}}</div>
    <div class="pill"><b>Status</b> {{statusText}}</div>
    <div class="pill"><b>Channels</b> {{channelCount}}</div>
    <div class="pill"><b>Freq Span</b> {{freqSpanMHz}} MHz</div>
  </div>
  <div class="sub">{{message}}</div>

  <div class="kpi">
    <div class="kpiItem">
      <div class="k">Min RxMER (dB)</div>
      <div class="v">{{kpi.minRxMerDb}}</div>
      <div class="h">Ch {{kpi.minRxMerCh}} @ {{kpi.minRxMerFreq}} MHz</div>
    </div>
    <div class="kpiItem">
      <div class="k">Avg RxMER (dB)</div>
      <div class="v">{{kpi.avgRxMerDb}}</div>
      <div class="h">Across all channels</div>
    </div>
    <div class="kpiItem">
      <div class="k">Power Range (dBmV)</div>
      <div class="v">{{kpi.pwrRange}}</div>
      <div class="h">Min {{kpi.minPwr}} / Max {{kpi.maxPwr}}</div>
    </div>
  </div>
</div>


<div class="grid">
  <div class="card">
    <h3>RxMER (dB) vs Frequency (MHz)</h3>
    <div class="sub">Quick health view. Lower RxMER typically indicates impairment.</div>
    <canvas id="chart_rxmer" height="90"></canvas>
  </div>

  <div class="card">
    <h3>Downstream Power (dBmV) vs Frequency (MHz)</h3>
    <div class="sub">Helps identify tilt and level issues across the band.</div>
    <canvas id="chart_power" height="90"></canvas>
  </div>

  <div class="card">
    <h3>Impairment Counters By Channel</h3>
    <div class="sub">Grouped by channel (X-axis sorted by frequency low → high).</div>
    <canvas id="chart_counters" height="110"></canvas>
  </div>

  <div class="card">
    <h3>Channel Table (Top Fields)</h3>
    <div class="sub">Sorted by frequency (ascending).</div>
    <table>
      <thead>
        <tr>
          <th>Ch</th>
          <th>Freq (MHz)</th>
          <th>Width (MHz)</th>
          <th>Power (dBmV)</th>
          <th>RxMER (dB)</th>
          <th>Correcteds</th>
          <th>Uncorrectables</th>
          <th>Microref</th>
        </tr>
      </thead>
      <tbody>
        {{#each rows}}
        <tr>
          <td>{{ch}}</td>
          <td>{{freqMHz}}</td>
          <td>{{widthMHz}}</td>
          <td>{{pwr}}</td>
          <td class="{{rxmerClass}}">{{rxmerDb}}</td>
          <td>{{corr}}</td>
          <td class="{{uncClass}}">{{unc}}</td>
          <td>{{micro}}</td>
        </tr>
        {{/each}}
      </tbody>
    </table>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
<script>

    pm.getData(function (err, value) {
  if (err) {
    console.error(err);
    return;
  }

  var gridColor  = 'rgba(255,255,255,0.12)';
  var tickColor  = 'rgba(234,234,234,0.85)';
  var labelColor = '#eaeaea';

  var rgbaFill = function(rgb, a) {
    return rgb.replace('rgb', 'rgba').replace(')', ', ' + a + ')');
  };

  // --- RxMER chart ---
  (function renderRxMer() {
    var canvas = document.getElementById('chart_rxmer');
    if (!canvas) return;

    var c = 'rgb(54, 162, 235)';

    new Chart(canvas.getContext('2d'), {
      type: 'line',
      data: {
        labels: value.freqMHz,
        datasets: [{
          label: 'RxMER (dB)',
          data: value.rxMerDb,
          borderColor: c,
          backgroundColor: rgbaFill(c, 0.08),
          borderWidth: 1.6,
          fill: false,
          pointRadius: 0,
          pointHoverRadius: 0,
          lineTension: 0.12
        }]
      },
      options: {
        responsive: true,
        maintainAspectRatio: true,
        legend: { display: true, labels: { fontColor: labelColor } },
        tooltips: { mode: 'index', intersect: false },
        hover: { mode: 'nearest', intersect: false },
        scales: {
          xAxes: [{
            ticks: { fontColor: tickColor, maxTicksLimit: 12 },
            gridLines: { color: gridColor },
            scaleLabel: { display: true, labelString: 'Frequency (MHz)', fontColor: labelColor }
          }],
          yAxes: [{
            ticks: { fontColor: tickColor },
            gridLines: { color: gridColor },
            scaleLabel: { display: true, labelString: 'RxMER (dB)', fontColor: labelColor }
          }]
        }
      }
    });
  })();

  // --- Power chart ---
  (function renderPower() {
    var canvas = document.getElementById('chart_power');
    if (!canvas) return;

    var c = 'rgb(75, 192, 192)';

    new Chart(canvas.getContext('2d'), {
      type: 'line',
      data: {
        labels: value.freqMHz,
        datasets: [{
          label: 'Power (dBmV)',
          data: value.powerDbmv,
          borderColor: c,
          backgroundColor: rgbaFill(c, 0.08),
          borderWidth: 1.6,
          fill: false,
          pointRadius: 0,
          pointHoverRadius: 0,
          lineTension: 0.12
        }]
      },
      options: {
        responsive: true,
        maintainAspectRatio: true,
        legend: { display: true, labels: { fontColor: labelColor } },
        tooltips: { mode: 'index', intersect: false },
        hover: { mode: 'nearest', intersect: false },
        scales: {
          xAxes: [{
            ticks: { fontColor: tickColor, maxTicksLimit: 12 },
            gridLines: { color: gridColor },
            scaleLabel: { display: true, labelString: 'Frequency (MHz)', fontColor: labelColor }
          }],
          yAxes: [{
            ticks: { fontColor: tickColor },
            gridLines: { color: gridColor },
            scaleLabel: { display: true, labelString: 'Power (dBmV)', fontColor: labelColor }
          }]
        }
      }
    });
  })();

  // --- Counters chart (bar) ---
  (function renderCounters() {
    var canvas = document.getElementById('chart_counters');
    if (!canvas) return;

    // Bars are grouped per label by default in Chart.js 2.x (side-by-side per channel).
    // Labels must already be in frequency-sorted order.
    var c1 = 'rgb(255, 206, 86)';   // correcteds
    var c2 = 'rgb(255, 99, 132)';   // uncorrectables
    var c3 = 'rgb(153, 102, 255)';  // microreflections

    new Chart(canvas.getContext('2d'), {
      type: 'bar',
      data: {
        // Use frequency-sorted labels so counters line up by channel in low->high frequency order.
        labels: value.chFreqLabels,
        datasets: [
          {
            label: 'Correcteds',
            data: value.correcteds,
            backgroundColor: rgbaFill(c1, 0.55),
            borderColor: c1,
            borderWidth: 1
          },
          {
            label: 'Uncorrectables',
            data: value.uncorrectables,
            backgroundColor: rgbaFill(c2, 0.55),
            borderColor: c2,
            borderWidth: 1
          },
          {
            label: 'Microreflections',
            data: value.microreflections,
            backgroundColor: rgbaFill(c3, 0.55),
            borderColor: c3,
            borderWidth: 1
          }
        ]
      },
      options: {
        responsive: true,
        maintainAspectRatio: true,
        legend: { display: true, labels: { fontColor: labelColor } },
        tooltips: { mode: 'index', intersect: false },
        scales: {
          xAxes: [{
            ticks: {
              fontColor: tickColor,
              maxTicksLimit: 18
            },
            gridLines: { color: gridColor },
            scaleLabel: { display: true, labelString: 'Channel (Sorted By Frequency Low → High)', fontColor: labelColor }
          }],
          yAxes: [{
            ticks: { fontColor: tickColor, beginAtZero: true },
            gridLines: { color: gridColor },
            scaleLabel: { display: true, labelString: 'Count', fontColor: labelColor }
          }]
        }
      }
    });
  })();
});
</script>
`;

function constructVisualizerPayload() {
  const r = pm.response.json();
  const device = (r.device && typeof r.device === "object") ? r.device : {};
  const sys = (device.system_description && typeof device.system_description === "object") ? device.system_description : {};

  const mac = ((r.device || {}).mac_address) || 'N/A';
  const status = (r.status !== undefined && r.status !== null) ? r.status : 'N/A';
  const statusText = status === 0 ? 'Success' : String(status);
  const message = r.message || '';

  const results = Array.isArray(r.results) ? r.results : [];

  // normalize rows and sort by frequency ascending
  const rowsNorm = results.map((item, idx) => {
    const entry = item && item.entry ? item.entry : {};
    const ch = (item && item.channel_id !== undefined && item.channel_id !== null)
      ? item.channel_id
      : (entry.docsIfDownChannelId !== undefined ? entry.docsIfDownChannelId : idx + 1);

    const freqHz = entry.docsIfDownChannelFrequency;
    const widthHz = entry.docsIfDownChannelWidth;

    const freqMHz = (typeof freqHz === 'number') ? (freqHz / 1e6) : null;
    const widthMHz = (typeof widthHz === 'number') ? (widthHz / 1e6) : null;

    const pwr = (entry.docsIfDownChannelPower !== undefined && entry.docsIfDownChannelPower !== null) ? entry.docsIfDownChannelPower : null;

    // RxMER may arrive either as dB (e.g. 43.3) or tenths of dB (e.g. 433).
    const rxMerRaw = entry.docsIf3SignalQualityExtRxMER;
    let rxmerDb = null;
    if (typeof rxMerRaw === 'number' && isFinite(rxMerRaw)) {
      rxmerDb = rxMerRaw > 100 ? (rxMerRaw / 10.0) : rxMerRaw;
    }

    const corr = (entry.docsIfSigQExtCorrecteds !== undefined && entry.docsIfSigQExtCorrecteds !== null)
      ? entry.docsIfSigQExtCorrecteds
      : (entry.docsIfSigQCorrecteds !== undefined ? entry.docsIfSigQCorrecteds : 0);

    const unc = (entry.docsIfSigQExtUncorrectables !== undefined && entry.docsIfSigQExtUncorrectables !== null)
      ? entry.docsIfSigQExtUncorrectables
      : (entry.docsIfSigQUncorrectables !== undefined ? entry.docsIfSigQUncorrectables : 0);

    const micro = (entry.docsIfSigQMicroreflections !== undefined && entry.docsIfSigQMicroreflections !== null)
      ? entry.docsIfSigQMicroreflections
      : 0;

    return {
      ch,
      freqMHz,
      widthMHz,
      pwr,
      rxmerDb,
      corr,
      unc,
      micro
    };
  }).filter(rw => rw.freqMHz !== null);

  // This sort drives ALL visuals (table + RxMER line + power line + counters bar)
  rowsNorm.sort((a, b) => a.freqMHz - b.freqMHz);

  const freqs = rowsNorm.map(rw => Number(rw.freqMHz.toFixed(3)));
  const rxmer = rowsNorm.map(rw => rw.rxmerDb);
  const pwr = rowsNorm.map(rw => rw.pwr);

  // Labels aligned with sorted order:
  // - chLabels: just channel id
  // - chFreqLabels: channel id + freq so the counters chart ordering is unambiguous
  const chLabels = rowsNorm.map(rw => String(rw.ch));
  const chFreqLabels = rowsNorm.map(rw => `Ch ${rw.ch} @ ${rw.freqMHz.toFixed(3)} MHz`);

  const correcteds = rowsNorm.map(rw => rw.corr);
  const uncorrectables = rowsNorm.map(rw => rw.unc);
  const microreflections = rowsNorm.map(rw => rw.micro);

  // KPIs
  const finiteRx = rowsNorm.filter(rw => typeof rw.rxmerDb === 'number' && isFinite(rw.rxmerDb));
  const finitePwr = rowsNorm.filter(rw => typeof rw.pwr === 'number' && isFinite(rw.pwr));

  let minRx = null;
  let maxRx = null;
  let avgRx = null;

  if (finiteRx.length) {
    minRx = finiteRx.reduce((m, rr) => (m === null || rr.rxmerDb < m.rxmerDb) ? rr : m, null);
    maxRx = finiteRx.reduce((m, rr) => (m === null || rr.rxmerDb > m.rxmerDb) ? rr : m, null);
    avgRx = finiteRx.reduce((s, rr) => s + rr.rxmerDb, 0) / finiteRx.length;
  }

  let minP = null;
  let maxP = null;
  if (finitePwr.length) {
    minP = finitePwr.reduce((m, rr) => (m === null || rr.pwr < m.pwr) ? rr : m, null);
    maxP = finitePwr.reduce((m, rr) => (m === null || rr.pwr > m.pwr) ? rr : m, null);
  }

  const freqSpan = freqs.length ? (Math.max(...freqs) - Math.min(...freqs)) : 0;

  // table rows with simple highlighting heuristics
  const rows = rowsNorm.map(rw => {
    const rxmerClass = (typeof rw.rxmerDb === 'number')
      ? (rw.rxmerDb < 35 ? 'bad' : (rw.rxmerDb < 38 ? 'warn' : ''))
      : '';
    const uncClass = (rw.unc && rw.unc > 0) ? 'bad' : '';
    return {
      ch: rw.ch,
      freqMHz: rw.freqMHz.toFixed(3),
      widthMHz: (rw.widthMHz !== null && rw.widthMHz !== undefined) ? rw.widthMHz.toFixed(3) : 'N/A',
      pwr: (rw.pwr !== null && rw.pwr !== undefined) ? rw.pwr.toFixed(2) : 'N/A',
      rxmerDb: (rw.rxmerDb !== null && rw.rxmerDb !== undefined) ? rw.rxmerDb.toFixed(1) : 'N/A',
      rxmerClass,
      corr: rw.corr,
      unc: rw.unc,
      uncClass,
      micro: rw.micro
    };
  });

  const kpi = {
    minRxMerDb: minRx ? minRx.rxmerDb.toFixed(1) : 'N/A',
    minRxMerCh: minRx ? String(minRx.ch) : 'N/A',
    minRxMerFreq: minRx ? minRx.freqMHz.toFixed(3) : 'N/A',
    avgRxMerDb: (avgRx !== null && avgRx !== undefined) ? avgRx.toFixed(1) : 'N/A',
    pwrRange: (minP && maxP) ? (maxP.pwr - minP.pwr).toFixed(2) : 'N/A',
    minPwr: minP ? minP.pwr.toFixed(2) : 'N/A',
    maxPwr: maxP ? maxP.pwr.toFixed(2) : 'N/A'
  };

  return {
    deviceInfo: {
      macAddress: device.mac_address || "N/A",
      MODEL: sys.MODEL || "N/A",
      VENDOR: sys.VENDOR || "N/A",
      SW_REV: sys.SW_REV || "N/A",
      HW_REV: sys.HW_REV || "N/A",
      BOOTR: sys.BOOTR || "N/A"
    },
    mac,
    statusText,
    channelCount: rowsNorm.length,
    freqSpanMHz: freqSpan.toFixed(3),
    message,
    // chart series
    freqMHz: freqs,
    rxMerDb: rxmer,
    powerDbmv: pwr,
    // counters chart labels/series (aligned to frequency-sorted order)
    chLabels,
    chFreqLabels,
    correcteds,
    uncorrectables,
    microreflections,
    // KPI + table
    kpi,
    rows
  };
}

pm.visualizer.set(template, constructVisualizerPayload());
Sample JSON payload
{
    "system_description": {
        "HW_REV": "1.0",
        "VENDOR": "LANCity",
        "BOOTR": "NONE",
        "SW_REV": "1.0.0",
        "MODEL": "LCPET-3"
    },
    "status": 0,
    "message": "Successfully retrieved downstream SC-QAM channel stats",
    "device": {
        "mac_address": "aa:bb:cc:dd:ee:ff",
        "system_description": {
            "HW_REV": "1.0",
            "VENDOR": "LANCity",
            "BOOTR": "NONE",
            "SW_REV": "1.0.0",
            "MODEL": "LCPET-3"
        }
    },
    "results": [
        {
            "index": 3,
            "channel_id": 3,
            "entry": {
                "docsIfDownChannelId": 3,
                "docsIfDownChannelFrequency": 621000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.2,
                "docsIfSigQUnerroreds": 361176685,
                "docsIfSigQCorrecteds": 5,
                "docsIfSigQUncorrectables": 33,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 361180048,
                "docsIfSigQExtCorrecteds": 5,
                "docsIfSigQExtUncorrectables": 33,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 50,
            "channel_id": 32,
            "entry": {
                "docsIfDownChannelId": 32,
                "docsIfDownChannelFrequency": 795000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -3.0,
                "docsIfSigQUnerroreds": 360435561,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 36,
                "docsIfSigQExtUnerroreds": 360438743,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 51,
            "channel_id": 31,
            "entry": {
                "docsIfDownChannelId": 31,
                "docsIfDownChannelFrequency": 789000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -3.2,
                "docsIfSigQUnerroreds": 360442221,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 36,
                "docsIfSigQExtUnerroreds": 360446821,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 52,
            "channel_id": 30,
            "entry": {
                "docsIfDownChannelId": 30,
                "docsIfDownChannelFrequency": 783000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.5,
                "docsIfSigQUnerroreds": 360461573,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 32,
                "docsIfSigQExtUnerroreds": 360465165,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 53,
            "channel_id": 29,
            "entry": {
                "docsIfDownChannelId": 29,
                "docsIfDownChannelFrequency": 777000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.0,
                "docsIfSigQUnerroreds": 360463850,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360466347,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 54,
            "channel_id": 28,
            "entry": {
                "docsIfDownChannelId": 28,
                "docsIfDownChannelFrequency": 771000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.4,
                "docsIfSigQUnerroreds": 360469374,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 34,
                "docsIfSigQExtUnerroreds": 360472617,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 55,
            "channel_id": 27,
            "entry": {
                "docsIfDownChannelId": 27,
                "docsIfDownChannelFrequency": 765000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.7,
                "docsIfSigQUnerroreds": 360476442,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360480395,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 56,
            "channel_id": 26,
            "entry": {
                "docsIfDownChannelId": 26,
                "docsIfDownChannelFrequency": 759000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.7,
                "docsIfSigQUnerroreds": 360534231,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 38,
                "docsIfSigQExtUnerroreds": 360550838,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 57,
            "channel_id": 25,
            "entry": {
                "docsIfDownChannelId": 25,
                "docsIfDownChannelFrequency": 753000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.2,
                "docsIfSigQUnerroreds": 360627000,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 38,
                "docsIfSigQExtUnerroreds": 360630589,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 58,
            "channel_id": 24,
            "entry": {
                "docsIfDownChannelId": 24,
                "docsIfDownChannelFrequency": 747000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -2.2,
                "docsIfSigQUnerroreds": 360634609,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 38,
                "docsIfSigQExtUnerroreds": 360638287,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 59,
            "channel_id": 23,
            "entry": {
                "docsIfDownChannelId": 23,
                "docsIfDownChannelFrequency": 741000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -1.7,
                "docsIfSigQUnerroreds": 360650853,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 36,
                "docsIfSigQExtUnerroreds": 360654944,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 60,
            "channel_id": 22,
            "entry": {
                "docsIfDownChannelId": 22,
                "docsIfDownChannelFrequency": 735000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -1.2,
                "docsIfSigQUnerroreds": 360641541,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 35,
                "docsIfSigQExtUnerroreds": 360646799,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 61,
            "channel_id": 21,
            "entry": {
                "docsIfDownChannelId": 21,
                "docsIfDownChannelFrequency": 729000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -1.2,
                "docsIfSigQUnerroreds": 360668519,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360670926,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 62,
            "channel_id": 20,
            "entry": {
                "docsIfDownChannelId": 20,
                "docsIfDownChannelFrequency": 723000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -1.7,
                "docsIfSigQUnerroreds": 360606404,
                "docsIfSigQCorrecteds": 7,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 34,
                "docsIfSigQExtUnerroreds": 360609819,
                "docsIfSigQExtCorrecteds": 7,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 63,
            "channel_id": 19,
            "entry": {
                "docsIfDownChannelId": 19,
                "docsIfDownChannelFrequency": 717000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -1.9,
                "docsIfSigQUnerroreds": 360682861,
                "docsIfSigQCorrecteds": 3,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 35,
                "docsIfSigQExtUnerroreds": 360686823,
                "docsIfSigQExtCorrecteds": 3,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 64,
            "channel_id": 18,
            "entry": {
                "docsIfDownChannelId": 18,
                "docsIfDownChannelFrequency": 711000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.7,
                "docsIfSigQUnerroreds": 360704058,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 30,
                "docsIfSigQExtUnerroreds": 360707420,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 40.9
            }
        },
        {
            "index": 65,
            "channel_id": 17,
            "entry": {
                "docsIfDownChannelId": 17,
                "docsIfDownChannelFrequency": 705000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.0,
                "docsIfSigQUnerroreds": 360711653,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 36,
                "docsIfSigQExtUnerroreds": 360715222,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 66,
            "channel_id": 16,
            "entry": {
                "docsIfDownChannelId": 16,
                "docsIfDownChannelFrequency": 699000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.5,
                "docsIfSigQUnerroreds": 360712871,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 36,
                "docsIfSigQExtUnerroreds": 360717002,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 67,
            "channel_id": 15,
            "entry": {
                "docsIfDownChannelId": 15,
                "docsIfDownChannelFrequency": 693000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.7,
                "docsIfSigQUnerroreds": 360712842,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 38,
                "docsIfSigQExtUnerroreds": 360716752,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 68,
            "channel_id": 14,
            "entry": {
                "docsIfDownChannelId": 14,
                "docsIfDownChannelFrequency": 687000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.5,
                "docsIfSigQUnerroreds": 360739764,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 38,
                "docsIfSigQExtUnerroreds": 360745837,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 69,
            "channel_id": 13,
            "entry": {
                "docsIfDownChannelId": 13,
                "docsIfDownChannelFrequency": 681000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.5,
                "docsIfSigQUnerroreds": 360690924,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360694202,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 70,
            "channel_id": 12,
            "entry": {
                "docsIfDownChannelId": 12,
                "docsIfDownChannelFrequency": 675000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.5,
                "docsIfSigQUnerroreds": 360763497,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360767563,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 71,
            "channel_id": 11,
            "entry": {
                "docsIfDownChannelId": 11,
                "docsIfDownChannelFrequency": 669000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.0,
                "docsIfSigQUnerroreds": 360767616,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 35,
                "docsIfSigQExtUnerroreds": 360771134,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 72,
            "channel_id": 10,
            "entry": {
                "docsIfDownChannelId": 10,
                "docsIfDownChannelFrequency": 663000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.4,
                "docsIfSigQUnerroreds": 360755707,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360759548,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 73,
            "channel_id": 9,
            "entry": {
                "docsIfDownChannelId": 9,
                "docsIfDownChannelFrequency": 657000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.5,
                "docsIfSigQUnerroreds": 360786800,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 36,
                "docsIfSigQExtUnerroreds": 360790844,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 74,
            "channel_id": 8,
            "entry": {
                "docsIfDownChannelId": 8,
                "docsIfDownChannelFrequency": 651000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.0,
                "docsIfSigQUnerroreds": 360795015,
                "docsIfSigQCorrecteds": 9,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360798559,
                "docsIfSigQExtCorrecteds": 9,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 75,
            "channel_id": 7,
            "entry": {
                "docsIfDownChannelId": 7,
                "docsIfDownChannelFrequency": 645000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.0,
                "docsIfSigQUnerroreds": 360802345,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 33,
                "docsIfSigQExtUnerroreds": 360806078,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 76,
            "channel_id": 6,
            "entry": {
                "docsIfDownChannelId": 6,
                "docsIfDownChannelFrequency": 639000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.7,
                "docsIfSigQUnerroreds": 360783250,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 33,
                "docsIfSigQExtUnerroreds": 360787028,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 77,
            "channel_id": 5,
            "entry": {
                "docsIfDownChannelId": 5,
                "docsIfDownChannelFrequency": 633000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.7,
                "docsIfSigQUnerroreds": 360828995,
                "docsIfSigQCorrecteds": 8,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 37,
                "docsIfSigQExtUnerroreds": 360833051,
                "docsIfSigQExtCorrecteds": 8,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 44.6
            }
        },
        {
            "index": 78,
            "channel_id": 4,
            "entry": {
                "docsIfDownChannelId": 4,
                "docsIfDownChannelFrequency": 627000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.2,
                "docsIfSigQUnerroreds": 360833055,
                "docsIfSigQCorrecteds": 11,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 38,
                "docsIfSigQExtUnerroreds": 360836487,
                "docsIfSigQExtCorrecteds": 11,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 79,
            "channel_id": 2,
            "entry": {
                "docsIfDownChannelId": 2,
                "docsIfDownChannelFrequency": 615000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": 0.2,
                "docsIfSigQUnerroreds": 360835947,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 33,
                "docsIfSigQExtUnerroreds": 360839264,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        },
        {
            "index": 112,
            "channel_id": 1,
            "entry": {
                "docsIfDownChannelId": 1,
                "docsIfDownChannelFrequency": 609000000,
                "docsIfDownChannelWidth": 6000000,
                "docsIfDownChannelModulation": "qam256",
                "docsIfDownChannelInterleave": "taps32Increment4",
                "docsIfDownChannelPower": -0.7,
                "docsIfSigQUnerroreds": 360852291,
                "docsIfSigQCorrecteds": 0,
                "docsIfSigQUncorrectables": 0,
                "docsIfSigQMicroreflections": 35,
                "docsIfSigQExtUnerroreds": 360895145,
                "docsIfSigQExtCorrecteds": 0,
                "docsIfSigQExtUncorrectables": 0,
                "docsIf3SignalQualityExtRxMER": 43.3
            }
        }
    ]
}