# Demo — RCS Aspect Explorer

RCS is a pattern, not a number, and the whole of Block 3's signature reasoning turns on one gap: a handful of narrow specular spikes drag the linear *mean* far above the *median*, while a search radar sweeping past sees the floor most of the time. This demo puts a real 360° aspect pattern on a polar plot and lets you sweep a sector across it, watching the three summary numbers — max, median, and linear-mean — disagree in exactly the way that matters for detection range.

## What the numbers mean

The pattern is a low, noisy floor (roughly −15 to −27 dBsm) punctuated by four specular spikes at the facet normals 45°, 135°, 225°, and 315°, each reaching +15 dBsm across only a couple of degrees. To summarize a sector honestly, average in the **linear** domain, then convert back:

$$
\bar{\sigma}_\text{dBsm} = 10\log_{10}\!\left(\frac{1}{N}\sum_i 10^{\,\sigma_i/10}\right).
$$

The median tracks the floor; the linear mean is pulled up by whatever spikes fall inside the sector. Detection range keys off the floor, because $R_\text{max} \propto \sigma^{1/4}$ — so the median is the number a mission planner feeds in.

## Interactive demo

<a class="demo-fullscreen" href="../_static/demos/RCSAspectExplorer.html" target="_blank" rel="noopener">Open in full screen</a>

<div class="demo-wrap">
<iframe src="../_static/demos/RCSAspectExplorer.html"
        title="Interactive RCS aspect-pattern sector explorer"
        width="100%"
        loading="lazy">
</iframe>
</div>

<p class="demo-dataset"><a class="matlab-link" href="../_static/downloads/L25_RCSPattern.csv" download><svg viewBox="0 0 22 22" width="14" height="14" aria-hidden="true" style="vertical-align:-2px;margin-right:6px;"><rect width="22" height="22" rx="3" fill="#1f6098"/><text x="11" y="15.5" text-anchor="middle" font-family="'Inter',sans-serif" font-size="8" font-weight="800" fill="#fff" letter-spacing="-0.04em">CSV</text></svg><span class="ml-text">Dataset · L25_RCSPattern.csv (360 aspect samples)</span><span class="ml-arrow">↓</span></a></p>

## Walkthrough

1. **Read the polar plot.** Aspect runs clockwise with 0° nose-on. The deep, noisy ring is the floor; the four sharp petals at 45°, 135°, 225°, and 315° are the specular spikes where a facet normal faces the radar.
2. **Sweep the nose sector (±30°).** With no spike in view, median and linear-mean agree near −19 dBsm and the max is only −13.5 dBsm of speckle, not a flash. This is the quiet the shaped nose bought.
3. **Sweep the quartering sector (30°–60°).** One narrow spike now sits inside a narrow 31-sample window. The max jumps to +15 dBsm and the linear-mean climbs to ~+8 dBsm, while the median resists — it rises only to ~−7 dBsm, still far below the mean, leaving ~15 dB of mean-vs-median gap.
4. **Select the full 360°.** All four spikes are in view. Max +15, median ~−19, linear-mean ~+3 dBsm: a ~22 dB gap, manufactured entirely by four narrow petals over a wide quiet floor.
5. **Watch the readouts fight.** The demo highlights the median-vs-mean gap as you drag. The question to keep asking: which number would you hand a mission planner, and why?
6. **Open the "IADS exposure" tab.** The same 360-point pattern feeds a top-down plan view: each of four notional radars sees the aspect (bearing − heading), and its ring scales as $R_\text{det} = k\,(\sigma/\sigma_\text{ref})^{1/4}$ with $\sigma_\text{ref}$ the pattern's full-360° linear median. Rotate the heading and watch spikes bloom rings over you.

## Key observations

- **The companion script's table.** Nose ±30°: max −13.5, median −19.1, linear-mean −18.9. Quartering 30°–60°: max +15.0, median −7.2, linear-mean +8.1. Full 360°: max +15.0, median ~−19, linear-mean ~+3. The demo reproduces these live.
- **A few spikes distort the mean.** Because averaging is linear, a couple of degrees of +15 dBsm outweigh hundreds of degrees of floor. The median ignores them by construction.
- **The median prices detection range.** A search radar spends its dwell on the floor, so via $R_\text{max} \propto \sigma^{1/4}$ the median sets the practical detection ring. The spikes are brief real flashes — hard to detect on, harder to track on.
- **Neither number is wrong.** They answer different questions: total-energy (builder), worst-case flash (buyer), and usual-case detection (mission planner). The lesson is to say which one you mean.

## Source

<a class="matlab-link" href="../_static/downloads/ECE%20495%20EW%20%E2%80%93%20Code.zip#code/L25_RCSAspectPattern.m" download title="Downloads the full course code bundle (.zip). This lesson&#39;s file: code/L25_RCSAspectPattern.m"><svg viewBox="0 0 22 22" width="14" height="14" aria-hidden="true" style="vertical-align:-2px;margin-right:6px;"><rect width="22" height="22" rx="3" fill="#e87722"/><text x="11" y="15.5" text-anchor="middle" font-family="'Inter',sans-serif" font-size="9" font-weight="800" fill="#fff" letter-spacing="-0.04em">MAT</text></svg><span class="ml-text">MATLAB bundle · L25_RCSAspectPattern.m</span><span class="ml-arrow">↓</span></a>

The companion script reads `L25_RCSPattern.csv`, plots the pattern on a polar axis (with a +30 dB radial offset so `polarplot` accepts the negative radii), then masks three sectors — nose (±30°), quartering (30°–60°), and full 360° — and prints max, median, and the linear-domain mean for each. That linear-then-dB conversion for the mean is the load-bearing step: it is what makes the mean-vs-median gap appear.
