5D Library › The Sacred Cubit and Resonant Geometry · 中文

Chapter 5. An Open-Hardware Replication Guide: A Home RF Bench with NanoVNA and RTL-SDR

The measurement plans in Chapters 3 and 4 are only worth publishing if others can repeat them. Twenty years ago the instruments they need cost as much as a car. Today an open-source vector network analyser and a software-defined radio receiver together cost less than a family dinner. This chapter explains how to set up a home radio-frequency (RF) bench with them, calibrate it, make the measurements in this book, and publish the results so that they can be checked.

What you need

Item What it does Notes
NanoVNA-H or NanoVNA-H4 Measures reflection (S11) and transmission (S21) from about 10–50 kHz to 1.5 GHz Comes with an open, short and 50 Ω load for calibration
RTL-SDR receiver (e.g. RTL-SDR Blog V4) Receives radio signals from about 0.5 MHz to 1.77 GHz; used here to check frequencies Works with free software on Windows, macOS and Linux
Two short SMA cables (20–30 cm) Connect the analyser to the test objects Calibrate at the end of the cables, not at the analyser
Aluminium plate, about 50 × 50 cm, with an SMA socket at its centre Ground plane for the quarter-wave monopole A baking tray works if it is flat and bare metal
Two probe loops, 20 mm diameter Couple to the rings without touching them Make from thin coaxial cable: one turn, shield split at the top
Non-conducting fixture (wood, acrylic or 3D-printed PLA) Holds rings and probes at fixed distances Metal clamps near the ring will change the result
Multimeter, calipers or tape, thermometer Check continuity, length and room temperature The multimeter test in Chapter 3 decides the ring’s topology

Evidence

The NanoVNA began as an open-source design by the Japanese engineer known as edy555, covering 50 kHz to 300 MHz; later hardware revisions (NanoVNA-H rev3.4 and the NanoVNA-H4) reach 1.5 GHz with about 40 dB of dynamic range at the top of the range. The project’s own site warns that units advertised as “NanoVNA plus” at 2.7 GHz are usually counterfeit (NanoVNA project 2026). One European shop lists the NanoVNA-H4 as covering 10 kHz to 1.5 GHz with a dynamic range of 70 dB up to 300 MHz, 60 dB to 900 MHz and 40 dB to 1.5 GHz (Eleshop 2026). The RTL-SDR Blog V4 receiver uses the R828D tuner with the RTL2832U chip and an 8-bit converter, covers 0.5 MHz to 1.766 GHz with a built-in upconverter for frequencies below 28.8 MHz, and runs stably at bandwidths up to about 2.56 MHz (WiMo 2026).

Note

Prices change and counterfeits are common. Buy from a seller who names the hardware revision, and check the frequency range and dynamic range against the project’s own documentation before relying on the instrument.

Step 1: calibrate

A VNA measures what it sees at its reference plane, the point at which it was calibrated. Calibrate at the far end of the cable that will connect to the test object, so that the cable’s own length and loss are removed from the measurement.

  1. Set the sweep: for the monopole, 100–170 MHz; for rings, 1–900 MHz. Use at least 201 points.
  2. Connect the open, then the short, then the 50 Ω load to the end of the port-1 cable, saving each step. For S21, connect the two cables together for the “through” step.
  3. Check the calibration: with the load connected, the SWR should read close to 1.00 across the sweep. If it does not, repeat.
  4. Save the calibration and note the date, sweep range and room temperature in the log.

Step 2: the reference monopole

Mount a 523.5 mm straight wire vertically in the SMA socket at the centre of the ground plane, away from walls and metal furniture. Connect it to port 1, sweep 100–170 MHz, and record the frequency and value of the SWR minimum. Export the sweep as a Touchstone file (.s1p). Remove and remount the wire, and repeat twice more.

Calculation

A Touchstone file is plain text: a header line beginning with #, then one line per frequency with the real and imaginary parts of S11. The program below makes a synthetic sweep for a model monopole (36.5 Ω at resonance near 136 MHz) in place of a real file, reads it, finds the SWR minimum and the band where SWR is below 2, and computes a SHA-256 fingerprint of the file for publication.

import hashlib
import io
import numpy as np

# 1) Make a synthetic sweep: a series RLC model of a quarter-wave monopole,
#    36.5 ohm at resonance near 136 MHz (stand-in for a real NanoVNA export).
f = np.linspace(100e6, 170e6, 141)
R, f0, Q = 36.5, 136e6, 8.0
X = R * Q * (f / f0 - f0 / f)
z = R + 1j * X
s11 = (z - 50) / (z + 50)
buf = io.StringIO()
buf.write("# Hz S RI R 50\n")
for fi, s in zip(f, s11):
    buf.write(f"{fi:.0f} {s.real:.6f} {s.imag:.6f}\n")
text = buf.getvalue()             # for a real file: text = open("monopole.s1p").read()

# 2) Read a Touchstone .s1p file (Hz, S-parameters, real/imaginary format)
def read_s1p(text):
    rows = [l.split() for l in text.splitlines() if l.strip() and l[0] not in "!#"]
    data = np.array(rows, float)
    return data[:, 0], data[:, 1] + 1j * data[:, 2]

freq, s = read_s1p(text)
swr = (1 + abs(s)) / (1 - abs(s))
i = np.argmin(swr)
band = freq[swr < 2]
print(f"minimum SWR {swr[i]:.2f} at {freq[i]/1e6:.1f} MHz; "
      f"SWR < 2 from {band[0]/1e6:.1f} to {band[-1]/1e6:.1f} MHz")
print("sha256", hashlib.sha256(text.encode()).hexdigest()[:16], "...")
# minimum SWR 1.37 at 136.0 MHz; SWR < 2 from 130.0 to 142.0 MHz
# sha256 88dee9347b65844b ...

For the model, the minimum SWR of 1.37 at 136.0 MHz, with SWR below 2 from 130 to 142 MHz, matches the prediction for object 1 in Chapter 3. A real wire on a real plate will differ a little; the point of the measurement is to find out by how much.

Step 3: rings and probes

Fix the two probe loops in the fixture 20 mm from where the ring will sit, on opposite sides, with their planes parallel to the ring’s plane. Connect one to port 1 and one to port 2, and calibrate S21 with the probes in place but no ring (“through” is then simply the empty fixture). Sweep 1–900 MHz and save the result as the baseline. Then place each ring in the fixture in turn, sweep, and save. The quantity of interest is the change in S21, in decibels, between the baseline and each ring.

Note

Keep everything fixed between sweeps: the cables, their routing, your hands and your body. At hundreds of megahertz a hand 20 cm from the probes changes the result. Step back from the bench during each sweep, and repeat every measurement three times with the ring removed and replaced.

Step 4: check the frequency scale with the RTL-SDR

A VNA’s frequency scale comes from its internal crystal oscillator, which may be off by tens of parts per million. An RTL-SDR receiver gives an independent check. Tune it to a signal whose frequency is fixed by regulation, such as aircraft transponder replies at 1090 MHz or a local broadcast station’s published carrier, note the frequency at which the receiver shows the signal, and compute the receiver’s error in parts per million. Then set the NanoVNA to output a single frequency (CW mode) near the monopole’s resonance, receive it with the corrected RTL-SDR, and compare.

Calculation

f_true = 1090.000e6               # Hz, aircraft transponder reply frequency
f_seen = 1090.025e6               # Hz, where the receiver shows it
ppm = (f_seen - f_true) / f_true * 1e6
print(f"receiver error {ppm:+.1f} ppm")
f_vna_set = 136.000e6             # NanoVNA CW output setting
f_vna_seen = 136.0061e6           # as shown by the receiver
f_vna_true = f_vna_seen / (1 + ppm / 1e6)
print(f"VNA output {f_vna_true/1e6:.4f} MHz, error {(f_vna_true - f_vna_set)/f_vna_set*1e6:+.1f} ppm")
# receiver error +22.9 ppm
# VNA output 136.0030 MHz, error +21.9 ppm

The numbers above are an example of the arithmetic, not a measurement. An error of 20 ppm moves a 136 MHz resonance by less than 3 kHz, far less than the width of the resonance, so for this book’s purposes the check confirms the instrument rather than changing the result.

Step 5: keep a log and publish

Every sweep is worth keeping. A measurement log with one row per sweep makes the data usable by others:

Column Example
date and time 2026-11-02 14:05
object 3 (twisted ring, 7 twists per cubit, bare 1.6 mm)
repetition 2 of 3
sweep 1–900 MHz, 401 points
calibration file cal_2026-11-02_s21.cal
room temperature 26.5 °C
data file obj3_rep2.s2p
SHA-256 first 16 characters of the file’s hash
notes ring remounted; fixture unchanged

Hypothesis · not established

The author invites readers to repeat the measurement plans in Chapters 3 and 4 with their own rings and instruments, to publish their raw files and logs (for example on Zenodo, which gives each data set its own DOI), and to send the DOI to 5D Library. Results that contradict the predictions are as welcome as results that confirm them; both will be listed, with credit, in later versions of this book.

Safety and the law

Note

  • A VNA’s output is very weak, and the RTL-SDR only receives. Neither is hazardous in normal use.
  • A resonant monopole connected to a VNA does radiate a little of the test signal. Keep sweeps short, and follow your country’s rules on radio emissions; transmitting deliberately on most frequencies requires a licence.
  • Receiving radio signals is legal in most countries, but some places restrict decoding or using the content of certain transmissions. Use the receiver here only to measure frequency.
  • Never connect the instruments to mains wiring, to aerials during thunderstorms, or to any equipment that carries a transmitter’s output.
  • As throughout this book: these measurements concern circuits, not bodies. They make no health claim and cannot support one.

Summary

  • A NanoVNA (to about 1.5 GHz) and an RTL-SDR receiver (to about 1.77 GHz), with cables, a ground plate, probe loops and a non-conducting fixture, are enough for every measurement in this book.
  • Calibrate at the end of the cables, verify with the 50 Ω load, and repeat every measurement three times.
  • Export sweeps as Touchstone files; a few lines of Python find the SWR minimum and fingerprint the file.
  • Use the RTL-SDR to check the frequency scale against signals of known frequency.
  • Keep a log, publish raw files with their hashes and DOIs, and report results whichever way they come out.

References

Eleshop. 2026. NanoVNA-H4 Vector Network Analyser: Specifications. https://eleshop.eu/nanovna-h4.html.
NanoVNA project. 2026. About NanoVNA. https://nanovna.com/.
WiMo. 2026. RTL-SDR V4 Receiver: Technical Data. https://www.wimo.com/en/rtl-sdr-v4.

Fan, Y. (2026). The Sacred Cubit and Resonant Geometry: Measuring the Egyptian Royal Cubit, the Quarter Wave and the Bifilar Ring [神圣肘尺与谐振几何] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23666560 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).