Appendices
Appendices
Key numbers, code listings, glossary, references, photographs and document history.
AKey numbers
Values calculated in this report, with the chapter where each is derived. They are replaced by measured values as the work proceeds.
Table A.1.Principal calculated values.
| Quantity | Value | Chapter |
|---|---|---|
| Target physics | ||
| Quadrature peak, copper sphere, radius 5 mm | 1.0 kHz | 3 |
| Quadrature peak, aluminium sphere, radius 5 mm | 1.6 kHz | 3 |
| Quadrature peak, stainless steel sphere, radius 5 mm | 41 kHz | 3 |
| In-phase sign change, steel sphere (\(\mu_r = 100\)), radius 5 mm | about 280 kHz | 3 |
| Quadrature peak width, ring / solid sphere | 1.13 / 1.56 decades | 3 |
| Signal change per doubling of depth | ÷ 64 | 3 |
| Induction subsystem | ||
| Tone band at 48 kHz | 188 Hz – 18.75 kHz | 5 |
| Crest factor, zero / optimised phases | 4.90 / 3.06 | 5 |
| SNR penalty, simultaneous vs stepped tones (peak-limited) | 6.7 dB | 5 |
| Receive coil: inductance, resistance, self-resonance | 4.58 mH, 12.8 Ω, 429 kHz | 5 |
| Codec input noise (derived) | about 80 nV/√Hz | 5 |
| Chain noise with ×33 OPA1612 stage | 2.6 nV/√Hz | 5 |
| Echo, 1 cm copper sphere at 20 cm | 20.5 µV | 5 |
| Detection range, coin-sized target (ground-limited) | about 40 cm | 5 |
| Host data rate, 6 channels | 9.2 Mbit/s | 4 |
| Radar subsystem | ||
| Range resolution in soil (\(\varepsilon_r = 9\), 2.5 GHz bandwidth) | 2.0 cm | 6 |
| Unambiguous range in soil, 10 MHz steps | 5 m | 6 |
| Positioning | ||
| Peak width over a small target | 0.90 × depth | 7 |
| Signal change per 1 cm height change at 20 cm | about 30% | 7 |
| IMU position error, 1 mg bias, after 2 / 5 / 10 s | 2 / 12 / 49 cm | 7 |
| Transmit-coil field at 50 cm / 1 m | 1.45 / 0.18 µT | 7 |
| Coil offset per degree of tilt, 1.5 m pole | 2.6 cm | 7 |
| Timing resolution of PPS in audio stream | 20.8 µs | 7 |
BCode listings
Both listings are starting points for tasks T1.6 and T5.3 and have not yet been run on the hardware.
B.1Induction acquisition (48 kHz, codec as sound card)
import numpy as np, sounddevice as sd FS, N = 48_000, 4096 # 11.72 Hz bins, 85.3 ms blocks BINS = np.array([16, 24, 37, 56, 85, 130, 197, 300, 456, 693, 1053, 1600]) PH = np.array([2.589, 5.287, 1.692, 2.610, 3.376, 2.940, 1.805, 1.120, 0.966, 3.592, 5.042, 0.208]) n = np.arange(N) block = np.cos(2 * np.pi * np.outer(n, BINS) / N + PH).sum(axis=1) block *= 0.5 / np.abs(block).max() tx = np.tile(block, 60) # about 5.1 s # OUT 1 -> amplifier -> TX coil; IN 1 = TX current, IN 2-4 = RX coils, IN 5 = PPS # the device name depends on the host driver rec = sd.playrec(tx, FS, device="CS42448", input_mapping=[1, 2, 3, 4, 5], output_mapping=[1]) sd.wait() blocks = rec[N * 4:].reshape(-1, N, 5) # drop start-up spec = np.fft.rfft(blocks[:, :, :4], axis=1)[:, BINS, :] H = (spec[:, :, 1:] / spec[:, :, :1]).mean(axis=0) # 12 tones x 3 receivers pps = np.flatnonzero(np.diff(rec[:, 4]) > 0.2) # PPS edges, sample index
B.2Radar sweep with phase reference
import adi, numpy as np sdr = adi.ad9361("ip:192.168.2.1") # Pluto in two-channel mode sdr.rx_enabled_channels = [0, 1] # RX1 echo, RX2 coupled reference sdr.sample_rate = int(2e6) sdr.rx_buffer_size = 4096 sdr.tx_cyclic_buffer = True fs, f_if, N = sdr.sample_rate, 100e3, sdr.rx_buffer_size tone = np.exp(2j * np.pi * f_if * np.arange(N) / fs) sdr.tx(0.5 * tone * 2**14) def phasor(x): return np.vdot(tone, x) / N S = [] for f in np.arange(500e6, 3000e6 + 1, 10e6): # 251 steps sdr.tx_lo = sdr.rx_lo = int(f) for _ in range(2): sdr.rx() # let the synthesisers settle echo, ref = sdr.rx() S.append(phasor(echo) / phasor(ref)) S = np.array(S) # subtract a background sweep here profile = np.abs(np.fft.ifft(S * np.hanning(len(S)), n=4096))
CGlossary
| Term | Meaning |
|---|---|
| Crest factor | Ratio of peak to RMS value of a waveform |
| EKF | Extended Kalman filter |
| EMI | Electromagnetic induction (as a sensing method) |
| FFT bin | One frequency point of a discrete Fourier transform; spacing = sample rate / block length |
| GPR | Ground-penetrating radar |
| IMU | Inertial measurement unit (accelerometer and gyroscope) |
| Polarizability tensor | 3 × 3 matrix relating the applied field to the induced magnetic dipole of a target |
| PPS | Pulse per second, a timing output of GNSS receivers aligned to GPS time |
| PPK / RTK | Post-processed / real-time kinematic satellite positioning, centimetre level |
| RACI | Responsible, accountable, consulted, informed |
| SDR | Software-defined radio |
| SFCW | Stepped-frequency continuous wave |
| SRF | Self-resonant frequency of a coil |
| TDM | Time-division multiplexed serial audio interface |
| ToF | Time-of-flight distance sensor |
| UXO | Unexploded ordnance |
| VIO | Visual-inertial odometry |
| VLF | Very low frequency; here, continuous-wave induction detectors at 3 to 30 kHz |
DReferences
- [R1] Software defined radio for stepped-frequency, ground-penetrating radar. Thesis, Georgia Institute of Technology. repository.gatech.edu
- [R2] Software defined radio for stepped-frequency, ground-penetrating radar. IEEE conference paper. IEEE Xplore 8128082
- [R3] Software-defined ground penetrating radar using COTS hardware. GNU Radio Conference 2025. events.gnuradio.org
- [R4] Ground-penetrating radar with HackRF software-defined radios. rtl-sdr.com
- [R5] MetalMapper: a multi-sensor TEM system for UXO detection and classification. ResearchGate 235186078
- [R6] Dipole models for UXO discrimination at live sites. SERDP/ESTCP project. serdp-estcp.mil
- [R7] The spectral properties of the magnetic polarizability tensor for metallic object characterisation. arXiv:1906.00382
- [R8] Characterisation of multiple conducting permeable objects in metal detection by polarizability tensors. arXiv:1809.08916
- [R9] Detecting landmines for a safer world. Ingenia. ingenia.org.uk
- [R10] MDS-10 dual sensor detector. Minelab. minelab.com
- [R11] MDS-20 dual-sensor detector. EPE. epequip.com
- [R12] Combining electromagnetic spectroscopy and ground-penetrating radar for the detection of anti-personnel landmines. Sensors 19(15):3390, 2019. mdpi.com
- [R13] Deep learning-based classification of anti-personnel mines and sub-gram metal content in mineralized soil (DL-MMD). Scientific Reports, 2024. nature.com
- [R14] Detection and classification of landmines using machine learning applied to metal detector data. ResearchGate 339640290
- [R15] Landmine identification from pulse induction metal detector data using machine learning. ResearchGate 373286697
- [R16] J. R. Wait, A conducting sphere in a time varying magnetic field. Geophysics 16(4), 666–672, 1951.
- [R17] Cirrus Logic, CS42448 108 dB, 192 kHz 6-in, 8-out TDM CODEC, datasheet.
- [R18] Analog Devices, ADALM-Pluto SDR active learning module and AD9363 documentation.
- [R19] NATO Science for Peace and Security Programme: overview and Multi-Year Projects. nato.int; programme size and partner rules: Science|Business
- [R20] Higher Education and Science Committee of Armenia, research grants. hesc.am
- [R21] Foundation for Armenian Science and Technology, Advance Research Grants. fast.foundation
- [R22] European Commission, list of participating countries in Horizon Europe. ec.europa.eu
EPhotographs
Photographs of the hardware are added as it is built. To add one, copy a file with the name shown into the images/ folder of the web server; it appears here without any other change.
CS42448 codec board
images/6in8out.jpgRadar bench set-up
images/pluto-setup.jpgLoopback test
images/codec-loopback.jpgReceive coil
images/rx-coil.jpgCoil head
images/coil-head.jpgSensor pole
images/pole-rig.jpgTest bed
images/sandbox.jpgFirst measured spectrum
images/first-spectrum.pngFirst radar profile
images/first-profile.pngFDocument history
| Revision | Date | Changes |
|---|---|---|
| 1 | September 2026 | Design notes published as seven separate web pages. |
| 2 | 26 September 2026 | Consolidated into this report. Detailed work plan, team structure and budget added. Tone plan and noise budget revised for the CS42448 codec at 48 kHz. Radar sweep set to 0.5–3 GHz to match the antenna size. |
| 3 | 7 October 2026 | Project planned for grant funding only; self-funded option removed. Funding programmes and strategy added (Chapter 11), funding risk added. Summary figures added to the cover page. |