Fix EME path-loss formula: use radar equation, not FSPL round-trip
This commit is contained in:
parent
25ececdc78
commit
4ed23276a7
2 changed files with 26 additions and 17 deletions
|
|
@ -36,7 +36,7 @@ Serious EME operators watch for perigee nights the way HF operators watch the so
|
|||
|
||||
## The obscene amount of path loss
|
||||
|
||||
Free-space loss at 144 MHz over 384,000 km one way is about 187 dB. Round trip doubles that to 374. The Moon isn't a perfect reflector either: its radar albedo is somewhere around 6 or 7 percent at VHF and UHF, which scoops out another 12 dB. The number you actually put in a link budget lands near 252 dB at 144 MHz, 259 at 432, and 271 at 1296.
|
||||
Free-space loss at 144 MHz one way across 384,000 km is about 187 dB. You do not just double it for the round trip, because the Moon is a target with a finite size, not a lamp at infinity that retransmits everything it catches. Running the [radar equation](https://en.wikipedia.org/wiki/Radar_equation) and collapsing the whole two-way journey plus the Moon's own terrible reflectivity into a single number, the path loss you actually put in a link budget lands near 252 dB at 144 MHz, 259 at 432, and 271 at 1296.
|
||||
|
||||
<div id="scene-pathloss"></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -399,7 +399,7 @@
|
|||
{ key: 'total', label: 'Total loss at cursor' },
|
||||
{ key: 'band', label: 'Band' },
|
||||
],
|
||||
caption: 'Free-space round-trip plus Moon albedo loss, plotted from 50 MHz through 10 GHz. Reference markers sit at the common amateur EME bands. Drag the moon-distance slider to watch the whole curve shift up at apogee and down at perigee.',
|
||||
caption: 'Full EME path loss from the radar equation, plotted from 50 MHz to 10 GHz at the current Moon distance. Reference markers sit at the common amateur EME bands. Drag the moon-distance slider to watch the whole curve shift up at apogee and down at perigee.',
|
||||
});
|
||||
if (!s) return;
|
||||
|
||||
|
|
@ -413,16 +413,20 @@
|
|||
{ f: 10368, label: '3 cm' },
|
||||
];
|
||||
|
||||
function fsplRound(fMHz, dKm) {
|
||||
// one-way FSPL: 20 log10(4 pi d / lambda) = 32.45 + 20 log10(f) + 20 log10(d) with f in MHz, d in km
|
||||
const ow = 32.45 + 20 * Math.log10(fMHz) + 20 * Math.log10(dKm);
|
||||
return 2 * ow;
|
||||
// Full EME path loss from the radar equation:
|
||||
// L = (4π)^3 * R^4 / (λ^2 * σ)
|
||||
// where σ = albedo * π * R_moon^2. This is a single number to subtract from
|
||||
// Pt+Gt+Gr to get Pr, the way amateurs actually use it. The naive "FSPL round
|
||||
// trip" formulation over-counts the receive aperture by ~120 dB.
|
||||
function totalLoss(fMHz, dKm) {
|
||||
const oneWay = 32.45 + 20 * Math.log10(fMHz) + 20 * Math.log10(dKm);
|
||||
const R_m = dKm * 1000;
|
||||
const moonR = 1737000; // meters
|
||||
const albedo = 0.065;
|
||||
const sigma = albedo * Math.PI * moonR * moonR;
|
||||
const radarTerm = 10 * Math.log10(4 * Math.PI * R_m * R_m / sigma);
|
||||
return oneWay + radarTerm;
|
||||
}
|
||||
function albedoLoss(fMHz) {
|
||||
// Radar albedo is roughly 6..7% at VHF/UHF falling to ~5% or so at higher freqs. In dB, ~12 dB.
|
||||
return 12;
|
||||
}
|
||||
function totalLoss(fMHz, dKm) { return fsplRound(fMHz, dKm) + albedoLoss(fMHz); }
|
||||
|
||||
let cursorF = 1296;
|
||||
s.canvas.addEventListener('pointermove', e => {
|
||||
|
|
@ -923,11 +927,16 @@
|
|||
const v = s.values;
|
||||
// Convert power in W to dBm
|
||||
const pTxDbm = 10 * Math.log10(v.pTx * 1000);
|
||||
// FSPL round trip at 384,400 km
|
||||
// EME path loss via radar equation. Break into one-way FSPL term and the
|
||||
// "radar / cross section" term so the stacked graph has two meaningful bars.
|
||||
const dKm = 384400;
|
||||
const fspl = 2 * (32.45 + 20 * Math.log10(v.freq) + 20 * Math.log10(dKm));
|
||||
const albedo = 12;
|
||||
const total = fspl + albedo;
|
||||
const oneWay = 32.45 + 20 * Math.log10(v.freq) + 20 * Math.log10(dKm);
|
||||
const R_m = dKm * 1000;
|
||||
const moonR = 1737000;
|
||||
const albedoLin = 0.065;
|
||||
const sigma = albedoLin * Math.PI * moonR * moonR;
|
||||
const radarTerm = 10 * Math.log10(4 * Math.PI * R_m * R_m / sigma);
|
||||
const total = oneWay + radarTerm;
|
||||
// Received power in dBm
|
||||
const pRx = pTxDbm + v.gTx - total + v.gRx;
|
||||
// Noise floor at T=290K in 2.5 kHz: -174 + 10 log10(2500) + NF
|
||||
|
|
@ -948,8 +957,8 @@
|
|||
const stages = [
|
||||
{ label: 'TX power', value: pTxDbm, color: C.green, signed: false },
|
||||
{ label: 'TX antenna gain', value: v.gTx, color: C.cyan, signed: true },
|
||||
{ label: 'free-space loss round trip', value: -fspl, color: C.red, signed: true },
|
||||
{ label: 'moon albedo loss', value: -albedo, color: C.orange, signed: true },
|
||||
{ label: 'one-way spreading', value: -oneWay, color: C.red, signed: true },
|
||||
{ label: 'moon scatter + return', value: -radarTerm, color: C.orange, signed: true },
|
||||
{ label: 'RX antenna gain', value: v.gRx, color: C.cyan, signed: true },
|
||||
];
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue