docs(cfar): PR-M.4 — note Doppler-window dependency on CFAR alpha

The CFAR threshold (alpha) lives in a Q4.4 host register and is loaded
from RP_DEF_CFAR_ALPHA / _SOFT at boot (3.0 / 1.5 in Q4.4). With PR-M.2
swapping the Doppler window from a non-canonical "Hamming-ish" LUT
(PSL=-33 dB) to Dolph-Chebyshev 60 dB (PSL=-60 dB), training-cell
contamination from off-Doppler sidelobes drops by 27 dB and the
effective Pfa at the shipped alpha drops accordingly.

This commit is documentation only — defaults are not changed pre-HW.

Two operating-point options for HW bring-up:
  (a) Hold alpha — get higher Pd at lower Pfa as a free win.
  (b) Lower alpha — recover original Pfa, get even higher Pd.

Recommended bring-up procedure recorded in cfar_ca.v header:
  1. Collect noise-only frames (no targets in dwell).
  2. Measure empirical Pfa at shipped alpha=3.0 / 1.5.
  3. If Pfa < 0.5 x design target, lower alpha; otherwise hold.

Opcodes 0x23 (RP_OP_CFAR_ALPHA) and 0x2D (RP_OP_CFAR_ALPHA_SOFT) let
the host adjust at runtime without firmware change.

Files:
  * cfar_ca.v — adds "Doppler-window dependency" block to the header
    after the existing "Threshold computation" block.
  * radar_params.vh — adds a note above RP_DEF_CFAR_ALPHA pointing at
    cfar_ca.v for the rationale.
This commit is contained in:
Jason
2026-05-01 18:53:24 +05:45
parent db6b220f92
commit abde60dd7e
2 changed files with 29 additions and 0 deletions
+23
View File
@@ -42,6 +42,29 @@
* alpha_fpga = alpha_statistical / 16 = 0.305 Q4.4 0x05
* Or host can set alpha per training cell if it accounts for count.
*
* Doppler-window dependency (PR-M, 2026-05-01):
* CFAR slides through RANGE within each Doppler-bin column, so the
* training-cell statistics depend on what "noise" actually looks like
* in a column which includes Doppler-window sidelobe leakage from
* strong returns at OTHER Doppler bins at the same range.
*
* With the new Dolph-Chebyshev 60 dB window (vs the old "Hamming-ish"
* LUT at -33 dB peak sidelobes), sidelobe leakage drops 27 dB. Training
* cells are now closer to true thermal noise; effective Pfa at the
* shipped α defaults (RP_DEF_CFAR_ALPHA=3.0, ALPHA_SOFT=1.5) drops
* accordingly. Two operating-point choices for HW bring-up:
*
* (a) Hold α accept lower Pfa, get higher Pd as a free win.
* (b) Lower α recover original Pfa, get even higher Pd.
*
* Defaults are NOT changed in this PR. Recommended bring-up procedure:
* 1. Collect noise-only frames (no targets in dwell).
* 2. Measure empirical Pfa at shipped α=3.0/1.5.
* 3. If Pfa < 0.5 × design target, lower α to spec; otherwise hold.
*
* The opcodes 0x23 (RP_OP_CFAR_ALPHA) and 0x2D (RP_OP_CFAR_ALPHA_SOFT)
* let the host adjust α at runtime without firmware change.
*
* Edge handling:
* At range boundaries where the full window doesn't fit, only available
* training cells are used. The noise estimate naturally reduces, raising
+6
View File
@@ -229,6 +229,12 @@
// ============================================================================
// CFAR DEFAULTS
// ============================================================================
// alpha defaults below are calibrated for the Dolph-Chebyshev 60 dB Doppler
// window (PR-M, 2026-05-01). With the new -60 dB sidelobes, training cells
// suffer ~27 dB less leakage from strong off-Doppler returns than under the
// previous "Hamming-ish" -33 dB LUT — effective Pfa at fixed alpha drops
// accordingly. Re-measure during HW bring-up; opcode 0x23/0x2D adjusts at
// runtime. See cfar_ca.v "Doppler-window dependency" comment for details.
`define RP_DEF_CFAR_GUARD 2
`define RP_DEF_CFAR_TRAIN 8
`define RP_DEF_CFAR_ALPHA 8'h30 // 3.0 in Q4.4