Build a wireless link budget
Print every path-loss, receive-power, margin and Fresnel calculation before making a bounded radio-placement decision.

Radio Rosa: I want you to inspect every gain and loss before trusting the final margin.
Predict the reading, then compare it with the measurement.
Python 3 in your browser (JupyterLite)
Python · no installPrint every path-loss, receive-power, margin and Fresnel calculation before making a bounded radio-placement decision.
Open the notebook in your browser and run each Python cell; no install or account is needed.
Three ways to run: use JupyterLite here with no install; run main.py locally from the downloadable lab folder; or open the same notebook in Google Colab.
Steps
Step 1
- Do
- Freeze the fictional 868 MHz radio assumptions.
- You will see
- Transmit power, gains, losses, sensitivity and reserve are printed with units.
- Why it matters
- A link-budget result is only meaningful with its input contract.

Step 1 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 2
- Do
- Calculate free-space loss at four distances.
- You will see
- The FSPL table shows distance and loss through one kilometre.
- Why it matters
- Printing intermediate loss prevents a final margin from hiding a unit error.

Step 2 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 3
- Do
- Compare free-space and log-distance models.
- You will see
- Three rows show both losses and their difference under exponent 2.7.
- Why it matters
- Environmental assumptions can dominate the ideal free-space estimate.

Step 3 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 4
- Do
- Build the receive-power and margin ledger.
- You will see
- Each distance shows path loss, received dBm and margin above sensitivity.
- Why it matters
- The ledger connects every gain and loss to the receiver decision.

Step 4 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 5
- Do
- Calculate midpoint Fresnel clearance.
- You will see
- The table gives the first-zone radius and 60-percent clearance target.
- Why it matters
- A strong arithmetic margin does not remove obstruction risk.

Step 5 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 6
- Do
- Compare three sensitivity and data-rate modes.
- You will see
- The one-kilometre table shows how lower-rate sensitivity changes margin.
- Why it matters
- Range, receiver threshold and airtime must be reviewed together.

Step 6 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 7
- Do
- Make a bounded placement decision.
- You will see
- The notebook marks the one-kilometre plan for revision and lists missing field evidence.
- Why it matters
- A spreadsheet hypothesis needs a measured site survey before release.

Step 7 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
Chapter checks
These questions refer to the chapter’s examples. Use the return links to review their answers.
A node has good average signal strength but intermittent packet loss. What should the learner consider?
Return to the chapter’s knowledge checkA sensor reports strong RSSI, but packet retries increase whenever nearby equipment is active. What should you review first?
Return to the chapter’s knowledge check
Return to Wireless Propagation: Fading and Interference · Browse Labs