The shipped RF contract surface. Construct a subclass that supplies the
abstract primitives —
CommsPlugin (WASM) in shipped code, or the
test tree's `RfCommsReferenceCore` in a conformance scenario. A bare
`RfCommsContracts` answers configuration questions and refuses physics.
| Name | Type | Description |
|---|---|---|
config |
object |
optional
Configuration, normalised by normalizeRfCommsConfig. |
Methods
ITU-R P.526-15 diffraction loss over an irregular terrain profile — the
excess loss the RF terrain solver adds on top of free space.
This is the model the whole coverage raster is meant to run on, and its one
defining property is CONTINUITY. `KNIFE_EDGE` / `MULTI_KNIFE_EDGE` /
`BULLINGTON` are constructions you select once you already know the path is
obstructed; a coverage grid does not get to know that per cell without
producing a discontinuity at the shadow boundary. P.526's diffraction
parameter is defined for clearance of EITHER sign, so one evaluation covers
the whole field:
v = h * sqrt( 2(d1 + d2) / (lambda * d1 * d2) ) P.526-15 eq. (29)
h is the obstacle height ABOVE the tx-rx line and is NEGATIVE when
the edge sits below the line, which is the case this method exists
for.
J(v) = 6.9 + 20*log10( sqrt((v - 0.1)^2 + 1) + v - 0.1 ) eq. (31)
valid for v > -0.78; J(v) = 0 below that, which is the recommendation's
own cut-off, not a fudge.
Consequences that matter to the solver, all of them physics rather than
rendering choices:
v <= -0.78 the first Fresnel zone is essentially clear -> 0 dB, so the
model degenerates EXACTLY to free space on open paths and
nothing has to special-case them.
-0.78 < v < 0 the path is geometrically clear but the terrain intrudes on
the first Fresnel zone and it costs real loss. This is the term
that was missing: without it a grazing path and a wide-open
path score identically, and the raster then falls off a cliff
the instant the ray finally clips the ridge.
v = 0 grazing, J = 6.0 dB — the classic half-power edge.
v > 0 obstructed; J grows ~20*log10(v) and the shadow softens with
distance behind the edge instead of switching off.
`maximumEdges` defaults to 1: the single dominant edge, P.526-15 section
4.5.2. That default is a correctness choice, not a performance one. The
Deygout construction (section 4.5.3) assumes DISTINCT terrain obstacles, and
a solver hands this method a densely sampled profile in which neighbouring
candidates are samples of ONE surface. Summing J(v) across them double-counts
the same obstruction: a dead-flat plateau with a 60 m antenna at 20 km
measured 3.5 dB from its dominant edge (correct — that is first-Fresnel-zone
intrusion, ITU-R P.530) and 11.3 dB once ten more samples of the same flat
ground were summed in (not correct — the ground is one obstacle, not eleven).
Raise `maximumEdges` to 3 when the caller has CURATED the obstacle list into
genuinely separate edges; that is the recommendation's own limit for the
construction. Deygout over-predicts when several edges have comparable v, and
`BULLINGTON` (section 4.5.1) is the alternative construction already exposed
here for exactly that case.
| Name | Type | Description | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
|
Returns:
Excess diffraction loss in dB, >= 0, continuous in the
terrain geometry.
The P.526-15 eq. (29) diffraction parameter of the dominant edge on a
profile, exposed because it is the quantity a coverage renderer needs to tell
a diffraction-softened shadow from an open path: v <= -0.78 is open,
-0.78 < v <= 0 is Fresnel-intruded, v > 0 is geometrically obstructed.
| Name | Type | Description |
|---|---|---|
options |
object |
Same shape as RfCommsContracts#ituTerrainDiffractionLoss. |
Returns:
Dominant v, or -Infinity when the profile carries no edge.