Skip to content

Distributed Sensing: A Project Lab Manual

From Parking Lot to Tornado Alley to Building Safety to Structural Monitoring

mlehaptics Project — Educational Guide — January 2026

Authors: Claude (Anthropic), Gemini (Google), with direction from Steve (mlehaptics)


Overview

This manual provides a practical path for students, hobbyists, and researchers to explore distributed sensing using synchronized wireless nodes. The techniques scale from a weekend science project to publishable research to operational weather, building safety, and structural monitoring systems.

What you'll build: A network of synchronized sensors that can: - Locate sound sources via beamforming (acoustic) - Map wind fields via acoustic time-of-flight - Detect atmospheric phenomena via infrasound - Detect and locate building occupants via mmWave radar - Enable safer emergency response (fire, active threat) - Monitor structural health (bridges, buildings, slopes) - Image seismic wavefronts in real-time - Demonstrate the same architecture used (at larger scale) for tornado detection

Prerequisites: - Basic programming (Arduino or ESP-IDF) - Comfortable with soldering and outdoor installation - High school physics (waves, sound speed, radar basics) - Curiosity about how far simple ideas can scale

Core Insight: Devices that share a time reference and know their relative positions can do things together that no single device can do alone.


Part 1: The Physics

1.1 Sound Speed and the Atmosphere

Sound travels through air at a speed that depends on temperature:

c ≈ 331.3 × √(1 + T/273.15) m/s

At 20°C: c ≈ 343 m/s
At 0°C:  c ≈ 331 m/s
At 30°C: c ≈ 349 m/s

A 10°C temperature change = ~1.7% sound speed change = measurable.

Wind adds or subtracts from effective sound speed: - Downwind: sound arrives faster - Upwind: sound arrives slower - Crosswind: sound path bends

If you measure sound travel time between two points with known positions, you can extract temperature and wind.

1.2 Infrasound

Sound below 20 Hz (below human hearing) is called infrasound. It propagates much farther than audible sound because low frequencies have low atmospheric absorption.

Frequency Wavelength Typical Range
1000 Hz (audible) 0.34 m ~1 km
100 Hz (low bass) 3.4 m ~10 km
10 Hz (infrasound) 34 m ~100 km
1 Hz (deep infrasound) 340 m ~1000 km

Sources of infrasound: - Severe weather (tornadoes, microbursts) - Aircraft and vehicles - Explosions and industrial activity - Ocean waves and earthquakes - Wind turbines

The CTBTO (nuclear test monitoring) network routinely detects aircraft, volcanoes, and meteors at continental scale using infrasound.

1.3 Beamforming

When multiple sensors receive the same signal at slightly different times (due to different distances from the source), you can combine them to determine direction.

Basic principle: If a sound arrives at sensor A before sensor B, the source is closer to A.

With 3+ sensors at known positions, you can triangulate direction and (with enough baseline) distance.

Angular resolution scales with array size divided by wavelength:

θ_resolution ≈ λ / D

Where:
  λ = wavelength
  D = array diameter (distance between furthest sensors)

For 1 Hz infrasound (λ = 340m), you need D > 1 km for useful direction finding.


Part 2: The Architecture

2.1 Three Protocols

This project uses three foundational protocols documented in the parent prior art publication:

UTLP (Universal Time Lord Protocol): Establishes synchronized time across all nodes. When nodes agree on "what time is it" to within ~1 millisecond, they can correlate measurements and perform coherent signal processing. (ESP-NOW can achieve tighter sync under ideal conditions, but ~1ms is a realistic expectation for student builds and is sufficient for all experiments in this manual.)

RFIP (Reference-Frame Independent Positioning): Establishes relative positions between nodes. Nodes don't need to know where they are on Earth—they need to know where they are relative to each other.

SMSP (Synchronized Multimodal Score Protocol): Defines what actions nodes should take at what times. For acoustic sensing, this coordinates when to sample, how to timestamp, and when to transmit.

2.2 The Insight

Traditional approach: Each sensor reports its data to a central server. The server correlates everything. Requires continuous high-bandwidth connectivity.

This approach: Sensors synchronize clocks once. Then each sensor timestamps its own data locally. Correlation can happen later (at the sensor, at a gateway, or in the cloud). Network can be intermittent. Processing is distributed.

For acoustic sensing, this means: - Sample at precisely known times (UTLP) - Know exactly where each sample was taken (RFIP) - Combine samples coherently even if they arrive at different times


Part 3: Hardware

3.1 Minimum Viable Node

Component Example Part Cost Notes
MCU ESP32-C6-DevKitC-1 $8 Has WiFi, BLE, ESP-NOW
Microphone SPH0645LM4H breakout $7 I2S digital output
Power USB power bank $10 For initial testing
Total ~$25 Bare minimum

This gets you started. For permanent outdoor deployment, you'll want weatherproof enclosures, conformal coating on electronics, and strain relief on all connections.

3.2 Weather-Ready Node

Component Example Part Cost Notes
MCU ESP32-C6-DevKitC-1 $8
Microphone ICS-40720 + preamp $15 Low-noise, good for infrasound
Wind screen 10m soaker hose, stakes $30 Critical for infrasound
Enclosure NEMA 4X box $25 Weatherproof
Solar panel 6W panel $15 For continuous operation
Battery 6Ah LiFePO4 $25 Safe, long-life chemistry
Charge controller CN3065 board $3 Solar charging
Connectivity RFM95 LoRa module $15 Long-range, low-power
Antenna External 915MHz $8 For LoRa range
Mounting PVC pipe, hardware $15 Site-specific
Total ~$160 Multi-year outdoor deployment

Deployment cost reality: The $160 BOM is hardware cost only. For permanent installations, deployment logistics often exceed hardware cost: site access, pole/mast mounting, solar panel positioning, backhaul connectivity (cellular data plan or LoRa gateway), and ongoing maintenance. A $160 node might cost $300-500 fully installed. Even so, this remains 10-100x cheaper than professional infrasound stations and 1000x cheaper than WSR-88D radar. The economic argument holds even if installation doubles the hardware cost.

3.3 Wind Screening

This is the most important and most overlooked component for infrasound sensing. If you're in an engineering department that's never worked with infrasound, this section explains why you need it and how to build it.

The problem: Wind creates turbulent pressure fluctuations that look like acoustic signals. A 5 m/s breeze creates ~10 Pa fluctuations—orders of magnitude larger than infrasound signals of interest (~0.1 Pa or less). Your microphone can't tell wind turbulence from sound waves; both are just pressure changes.

Why spatial averaging works: Here's the key insight that makes infrasound sensing possible with cheap hardware:

  • Wind turbulence is spatially incoherent—pressure fluctuations at two points even 1 meter apart are mostly uncorrelated. The eddies are localized.
  • Acoustic waves are spatially coherent—a 1 Hz sound wave has a 340m wavelength, so pressure is nearly identical across a 10m array.

If you average pressure measurements across multiple points spread over several meters, the uncorrelated wind noise tends toward zero while the correlated acoustic signal adds up. This is spatial filtering, not frequency filtering.

The porous hose rosette: Professional infrasound stations use a simple but effective design: porous garden hose (soaker hose) arranged in arms radiating outward from a central sensor, laying flat on the ground.

    Top-down view (4-arm rosette, ~2m diameter):

              arm
               |
               |
               |
    arm -------●------- arm
               |
               |
               |
              arm

    ● = sensor (microphone) at center
    Each arm = porous hose, laying flat on ground
    All arms connect to central manifold

    Wind pressure: different at each point along hoses → averages out
    Acoustic pressure: same everywhere (λ >> array) → passes through

Scaling the rosette: Larger arrays filter lower frequencies better. Professional stations use 6m radius (12m diameter) arrays. For student projects, you can scale to fit your space:

Configuration Diameter Hose needed Fits in... Effective above
Small (4 arms × 1m) ~2m 4-5m Parking space ~5 Hz
Medium (4 arms × 3m) ~6m 12-15m Corner of practice field ~2 Hz
Large (4 arms × 6m) ~12m 25-30m Significant field space ~0.5 Hz

For the experiments in this manual (sound localization, wind mapping), the small or medium configuration is sufficient. You don't need tornado-detection scale.

Limitation note: Professional CTBTO infrasound stations use 50-100m pipe arrays with many inlet points, optimized for frequencies down to 0.01 Hz. A student-scale rosette effectively filters wind noise above ~1-2 Hz but struggles with deep infrasound (<0.5 Hz) where some geophysical signals live. However, research shows that dense networks of smaller sensors can achieve similar effective SNR through spatial correlation—the architecture compensates for individual sensor limitations through node count.

Alternative approaches:

  1. Foam windscreen ($5): Standard microphone foam. Helps above ~100 Hz. Useless for infrasound—don't bother.

  2. Buried microphone ($0 extra): Put the microphone in a sealed container with a tube to the surface. Ground shields from wind. Simple and effective for permanent installations.

  3. Multi-sensor correlation (algorithmic): Use multiple nearby installations (~10-50m apart) and correlate in software. Wind noise decorrelates quickly with distance; acoustic signals stay correlated. Requires more nodes but no physical wind screening per node.

  4. Porous fabric dome (research alternative): Recent studies show that large fabric domes can match rosette performance without the amplitude/phase artifacts that rosettes introduce. More complex to build but worth knowing about.

Recommended for this project: Soaker hose rosette. It's cheap, effective, the construction process is educational, and it makes the physics tangible—students can see the spatial averaging concept.

Construction: 1. Get 10-20m of soaker hose (porous irrigation hose, available at garden stores) 2. Cut into 4 equal lengths (arms) 3. Connect all arms at center to a manifold (PVC cross fitting or 3D-printed hub) 4. Mount microphone at manifold, sealed from direct air but pneumatically connected to averaged hose pressure 5. Lay arms outward in X pattern, flat on ground 6. Stake hose to ground to prevent movement in wind 7. Keep hose inlets open at the ends (that's where air enters)

Common mistakes: - Sealing the hose ends (air needs to enter through the porous walls AND the open ends) - Lifting hose off ground (it should lay flat, touching the surface) - Using non-porous hose (must be soaker/irrigation hose with porous walls) - Making arms too short for target frequency (see scaling table above)

3.4 Alternative: Porous Fabric Dome

Research has shown that porous fabric domes can match or exceed soaker hose rosette performance, with a significant advantage: better waveform fidelity.

Why consider a dome instead of a rosette?

Property Rosette Dome
Where averaging happens At sensor after tube travel At fabric boundary
Phase distortion Yes (path-length dependent) Minimal
Waveform fidelity Compromised Preserved
Weather protection None (sensor exposed) Built-in (sensor inside)
Setup complexity Laying out hose arms Erecting structure

The rosette works by collecting pressure at many inlet points and averaging them through tube travel. But tube travel introduces frequency-dependent phase shifts and amplitude filtering—pressure pulses get "smeared" as different path lengths contribute at different times.

The dome works differently: wind turbulence is disrupted at the porous boundary, creating a calmed region inside where the sensor sits. Acoustic waves (with wavelengths much larger than the dome) pass through nearly transparently. The sensor measures actual waveforms, not tube-filtered versions.

Can I just use a tent?

No—standard tent fabric is waterproof (~0% porosity). Infrasound can't pass through. You'd be measuring pressure inside an isolated chamber.

Can I use a tent as a starting point?

Yes. A pop-up tent frame with the waterproof fabric replaced by appropriately porous material could work well:

  1. Remove or cut away waterproof panels
  2. Replace with fabric having 35-55% porosity (the research-validated range)
  3. Sensor goes inside the dome, protected from direct wind
  4. Small waterproof "hat" at apex protects electronics from rain

Materials that work: - Phifertex vinyl-coated polyester mesh (~35% open) - Sunbrella Sling acrylic/PVC blend (similar porosity) - Landscape fabric / weed barrier (varies—test porosity) - Window screen material may be too open (60-80%)—could double-layer

Size considerations:

Research used 2.9m height × 5.0m diameter domes. A 1-person pop-up tent (~1m × 2m) is smaller, which limits low-frequency performance. Rule of thumb: dome should be larger than the turbulence scales you're trying to filter. For student experiments targeting >2 Hz, smaller domes work fine.

This is a research opportunity:

Nobody has published results on "pop-up tent frame + porous fabric as student-budget infrasound windscreen." If you try it: - Compare dome performance to rosette (same sensor, same conditions) - Measure insertion loss in a quiet environment (does the fabric attenuate signal?) - Test at different wind speeds - Document what porosity fabric you used

This could be a legitimate conference paper or thesis chapter.


Part 4: Software

4.1 Core Components

Time synchronization: ESP-NOW provides sub-millisecond synchronization between ESP32 devices. One node acts as time master; others synchronize to it.

// Simplified time sync concept
void on_espnow_receive(uint8_t *mac, uint8_t *data, int len) {
    uint64_t rx_time = esp_timer_get_time();
    uint64_t tx_time = *(uint64_t*)data;
    int64_t offset = rx_time - tx_time - expected_latency;
    apply_clock_correction(offset);
}

Position knowledge: For initial experiments, manually measure and configure node positions. Advanced: use ESP32's WiFi FTM (Fine Time Measurement) for automatic ranging.

Data timestamping: Every acoustic sample gets a timestamp in synchronized time, not local time.

typedef struct {
    uint64_t timestamp_us;  // Synchronized time
    int32_t pressure;       // ADC reading
    uint8_t node_id;        // Which node
} acoustic_sample_t;

4.2 Beamforming Math

Given samples from N nodes at known positions, compute the likely source direction:

// For each candidate direction (θ, φ):
//   1. Calculate expected arrival time at each node
//   2. Time-shift samples to align
//   3. Sum aligned samples
//   4. Measure coherence (how well they add up)
// Direction with highest coherence = source direction

float beamform(float theta, float phi, acoustic_sample_t samples[], 
               vec3 positions[], int n_nodes) {
    vec3 direction = {cos(theta)*cos(phi), sin(theta)*cos(phi), sin(phi)};
    float sum = 0;

    for (int i = 0; i < n_nodes; i++) {
        // Expected delay relative to origin
        float delay = dot(positions[i], direction) / SOUND_SPEED;

        // Time-shifted sample
        float shifted = interpolate_sample(samples, i, delay);
        sum += shifted;
    }

    return sum * sum;  // Power in this direction
}

4.3 Sample Code Repository

Reference implementations are available at: github.com/mlehaptics

Key examples: - examples/basic_sync/ — ESP-NOW time synchronization - examples/acoustic_capture/ — I2S microphone sampling with timestamps - examples/beamform_demo/ — Direction finding with 4 nodes


Part 5: Experiments

Experiment 1: Time Synchronization Validation

Objective: Verify that nodes achieve sub-millisecond time agreement.

Setup: - 2 ESP32-C6 nodes - Shared audio source (phone speaker playing tone) - Serial connection to both nodes

Procedure: 1. Flash time sync firmware to both nodes 2. Let sync converge (~30 seconds) 3. Play test tone 4. Both nodes detect tone onset 5. Compare timestamps—should differ by <1ms

Success criteria: Timestamp difference consistently <1ms across multiple trials.

Extensions: - Add more nodes - Increase distance between nodes - Measure sync drift over time (hours)


Experiment 2: Sound Source Localization

Objective: Locate a sound source using 4 synchronized nodes.

Setup: - 4 ESP32-C6 nodes with microphones - Square arrangement, 10-50m on a side (outdoor) - Known sound source (speaker, hand clap, starter pistol)

Procedure: 1. Measure and record node positions (tape measure, GPS, or RFIP) 2. Synchronize nodes 3. Generate impulsive sound at known location 4. Record arrival times at each node 5. Compute source direction via beamforming or TDOA

Success criteria: Computed direction within 10° of actual.

Analysis: - How does accuracy change with array size? - How does accuracy change with source distance? - What's the minimum detectable sound level?


Experiment 3: Wind Field Mapping

Objective: Extract wind direction and speed from acoustic time-of-flight.

Setup: - 4+ nodes in a pattern with multiple baselines - Each node can emit a test tone (add small speaker) - Or use ambient noise correlation

Procedure (active): 1. Node A emits chirp, others record arrival time 2. Node B emits chirp, others record arrival time 3. Repeat for all nodes 4. Compute sound speed along each path 5. Decompose into temperature + wind components

Procedure (passive): 1. Record ambient noise at all nodes 2. Cross-correlate between node pairs 3. Peak correlation lag = travel time 4. Bidirectional: A→B and B→A give wind component

Success criteria: Extracted wind direction matches weather station or handheld anemometer.


Experiment 4: Acoustic Tomography

Objective: Map temperature field across the array.

Setup: - 6+ nodes around perimeter of area - Sunny day with expected temperature gradients (sun vs shade, pavement vs grass)

Procedure: 1. Measure travel times between all node pairs 2. Convert travel times to sound speeds 3. Invert to get sound speed at points within array 4. Convert sound speed to temperature

Math:

Travel time T_ij between nodes i and j:
T_ij = ∫ ds / c(s)

Where c(s) is sound speed along path s.

This is a tomographic inversion problem—same math as medical CT scans.

Success criteria: Reconstructed temperature map shows expected gradients (warmer over asphalt, cooler in shade).


Experiment 5: Infrasound Detection

Objective: Detect and locate infrasound sources.

Setup: - 4+ nodes with proper wind screening (soaker hose rosettes) - Spacing: 500m to 2km (larger = better for infrasound) - Near an infrasound source: highway, airport flight path, industrial facility

Procedure: 1. Record continuously for extended period (hours) 2. Filter to infrasound band (<20 Hz) 3. Cross-correlate between nodes 4. Beamform to identify source directions 5. Track sources over time

Expected sources: - Aircraft (especially jets on approach) - Traffic on highways - Industrial machinery - Distant thunder - Possibly: wind turbines if nearby

Success criteria: Detected source directions match known locations (airport bearing, highway bearing).


Part 6: Scaling Up

6.1 From Demo to Research

You Have What's Missing Next Step
Working 4-node demo Statistical rigor Run many trials, quantify accuracy
Localization results Comparison to ground truth Co-locate with reference instruments
Cool data Publication Write up methods, share code, submit

6.2 Partnership Opportunities

University: - Atmospheric science department (boundary layer research) - Physics department (senior lab project) - Engineering (embedded systems capstone) - Geography (microclimate mapping)

Local government: - Emergency management (severe weather interest) - Airport authority (wind shear detection) - City planning (noise mapping)

Agriculture: - Extension service (frost prediction) - Farms (microclimate for irrigation, spraying) - Orchards/vineyards (cold air drainage)

6.3 Grant Angles

NSF: "Distributed Infrasound Sensing for Mesoscale Atmospheric Tomography" - Intellectual merit: Novel application of commodity hardware to atmospheric science - Broader impacts: Open-source, educational, pathway to improved severe weather warning

NOAA: "Low-Cost Infrasound Augmentation for Tornado Warning" - Problem: Warning lead time limited by radar scan rate - Solution: Continuous infrasound monitoring capable of detecting precursor signatures that have been observed 15-30 minutes prior to tornadogenesis in research settings (Bedard, Elbing). Detection depends on storm type—supercells produce strong, early signatures; HP storms and QLCS tornadoes are acoustically messier. The architecture provides the capability to hear these warnings; individual detection depends on SNR achieved through network density. - Cost: 100x cheaper than additional radar

State Emergency Management: "Acoustic Severe Weather Detection Pilot" - Partner with NWS local office - Piggyback on existing mesonet infrastructure - Demonstrate value before wider deployment

6.4 Special Environment: Wind Farm Deployment

A question you might ask: "Can we deploy infrasound sensors near wind turbines, or will they drown out everything?"

The short answer: wind turbines produce strong infrasound, but it's predictable infrasound—which makes it potentially subtractable rather than fatal.

Wind turbine infrasound characteristics:

Wind turbines produce infrasound at the blade passing frequency (BPF) and its harmonics:

BPF = (RPM × number_of_blades) / 60

Example: 3-blade turbine at 14 RPM
BPF = (14 × 3) / 60 = 0.7 Hz

Harmonics: 1.4, 2.1, 2.8, 3.5, 4.2, 4.9 Hz...

This is the same frequency range as tornado precursors (0.5-5 Hz). At first glance, this seems like a showstopper.

Why it might actually work:

Wind noise (normal) Wind turbine noise
Random, broadband Periodic, harmonic
Unpredictable Calculable from RPM
Can't subtract Can model and subtract
Varies with weather Varies with known operational state

The turbine signature is mathematically predictable. If you know: - Turbine location (fixed, surveyed) - Number of blades (fixed, typically 3) - RPM (logged by operator, often available)

...you can calculate the expected infrasound signature and subtract it:

Measured = Target_signal + Turbine_harmonics + Random_noise
         Calculate from RPM data (known)
Cleaned = Target_signal + Random_noise (handle normally with rosette)

Land access is not the problem you might expect:

Research shows that 98% of land within wind farm boundaries remains usable for agriculture. Farmers actively work around turbines. You'd need permission from the landowner and possibly the wind farm operator, but the land isn't restricted.

Potential advantages of wind farm sites:

Factor Benefit
Existing roads Easier access for deployment/maintenance
Rural location Low cultural noise (traffic, industry)
Known operators Potential research partners (good PR for them)
Turbine as calibration Known signal source for array validation
Power infrastructure nearby Might tap into existing power

Research angles:

This is genuinely unexplored territory. Possible contributions:

  1. "Adaptive noise cancellation for infrasound arrays in wind farm environments"
  2. "Exploiting blade passing frequency harmonics for array calibration"
  3. "Dual-use infrastructure: atmospheric sensing co-located with wind generation"

What you'd need to validate:

  • Can you actually get RPM data from operators? (Varies by company/relationship)
  • How well does the harmonic model match reality? (Atmospheric effects, turbine wake)
  • What's the residual noise floor after subtraction?
  • Does turbine wake turbulence create additional broadband noise?

Honest assessment: This is a research question, not a solved problem. But it's a tractable research question—the physics suggests it should work, and the infrastructure access is better than you'd assume. If you're near a wind farm and looking for a thesis project, this is wide open.

6.5 Common Interference Sources (And Why They're Features, Not Bugs)

When you deploy an infrasound array, you'll detect things you weren't looking for. This isn't contamination—it's your array working. Here are sources you're likely to encounter and what to do with them:

Trains

Rail traffic produces strong, distinctive infrasound: - Low-frequency rumble (5-30 Hz) from wheel-rail interaction - Infrasonic pulses from locomotives - Doppler shift as trains approach and recede - Duration: minutes (depends on train length and speed)

Why trains are useful: - Known trajectory: Rail lines are fixed, published geometry - Predictable timing: Freight schedules vary, but commuter trains are clockwork - Strong signal: Easy to detect, good for validating your array works - Ranging exercise: Track the train's position from infrasound alone, compare to known track location

Detection signature:

Approaching: Rising amplitude, slight frequency upshift (Doppler)
Passing: Peak amplitude, rapid frequency transition
Receding: Falling amplitude, slight frequency downshift

If you have 3+ nodes: triangulate position over time
Compare to rail map: validation of your localization algorithm

Most campuses have rail within detection range. Your first "real" signal will probably be a train.

Seismic Activity

Your infrasound array detects earthquakes. This isn't a bug—it's ground-atmosphere coupling, and it's genuinely useful.

The physics: When the ground shakes, it pushes air. Seismic waves create atmospheric pressure waves detectable by infrasound sensors, even sensors with no ground contact. Professional networks (CTBTO) use both seismic and infrasound arrays because they're complementary.

What you might detect: - Regional earthquakes (M3+ within a few hundred km) - Induced seismicity from injection wells (common in Oklahoma, Texas, Kansas, and growing elsewhere) - Quarry blasts and mining activity - Distant large earthquakes (M6+ can be detected globally)

Distinguishing features: | Source | Onset | Duration | Frequency content | |--------|-------|----------|-------------------| | Local earthquake | Sharp | Seconds | Broadband, higher frequency first (P-wave then S-wave) | | Distant earthquake | Gradual | Minutes | Lower frequency, surface waves dominate | | Quarry blast | Very sharp | Brief | Impulsive, often on schedule (lunch hour, shift end) | | Injection-induced | Sharp | Seconds | Similar to natural, but check USGS for correlation |

Cross-reference opportunity: USGS publishes earthquake detections in near-real-time. If your array sees something seismic-looking, check https://earthquake.usgs.gov/earthquakes/map/. Correlation = validation.

Research angle: If you're in an area with induced seismicity (Oklahoma, Kansas, Texas, Ohio, etc.), you have a continuous natural experiment. Can your cheap infrasound array detect the same events as the USGS seismic network? At what magnitude threshold? This is publishable work.

Aircraft

You'll see lots of aircraft, especially near airports: - Jet aircraft: Strong 10-50 Hz from engines - Propeller aircraft: Blade passing frequency and harmonics (similar to wind turbines) - Helicopters: Very distinctive BPF signature, often 5-20 Hz - Military jets: Extremely loud, can saturate sensors

Flight tracking integration: ADS-B data (free via FlightAware, ADSBexchange) gives you aircraft positions. Correlate your detections with known flights for validation, or use aircraft as calibration sources with known position.

Severe Weather (The Actual Target)

Once you've characterized trains, aircraft, and seismic sources, what remains?

  • Thunder: Sharp impulses, 1-100 Hz, triangulation gives storm cell position
  • Tornadic storms: The research target. Precursor signatures in 0.5-5 Hz range, continuous rather than impulsive
  • Microbursts/downbursts: Rapid pressure changes
  • Gravity waves: Very low frequency (< 0.1 Hz), atmospheric oscillations

The progression: learn to identify the common stuff → recognize when something doesn't fit the usual patterns → that's where discoveries happen.

The General Principle

Every "interference source" is actually: 1. Validation that your array works 2. Calibration data from known sources 3. A potential research project in its own right 4. Practice for signal identification

Don't filter out trains and aircraft—log them, characterize them, learn what they look like. When something anomalous appears, you'll recognize it because you know what normal looks like.

6.6 Speculative: Intentional Multipath via Spiral Delay Arms

The core idea:

Traditional rosettes use straight arms radiating outward. The purpose is spatial averaging—sample different locations to cancel incoherent wind noise. But this design choice has a hidden assumption: all path lengths should be similar so signals arrive at the sensor simultaneously.

What if we invert this? Instead of minimizing delay differences, use intentional delay differences for signal validation. All arms originate from a central sensor, spiral outward together, but terminate at different radii. The sensor receives multiple time-delayed copies of the same acoustic event.

Why this matters:

Real acoustic signals are spatially coherent—the pressure wave crosses the entire spiral, exciting all four hoses. Each hose delivers that signal to the sensor at a different delay based on its length.

Wind turbulence is spatially and temporally incoherent—pressure fluctuations at one point on the spiral don't correlate with fluctuations elsewhere. The four delayed signals don't match.

Autocorrelation separates them: - Acoustic event → peaks at known delay intervals τ₁, τ₂, τ₃, τ₄ - Turbulent noise → no consistent peaks

This is signal validation built into the physical hardware.

Note: We searched for prior work and found none on this exact concept for infrasound. However, the underlying physics is validated in adjacent domains:

  • Spiral acoustic delay lines: A 2020 medical imaging paper (Kuo et al., Sensors) uses silicon spiral delay lines with different path lengths feeding a single transducer—exactly our concept, but for ultrasound photoacoustic tomography.
  • Autocorrelation in infrasound: A 2022 Mars study (Ortiz et al., Geophysical Research Letters) uses "autocorrelation infrasound interferometry" to extract atmospheric information from coherent phases.

The gap: Nobody has applied intentional delay-line techniques to infrasound rosettes. All published rosette work assumes you want simultaneous arrival. We're proposing you might not.


A deeper insight: Rosettes are resonant structures (and the field knows it)

The standard explanation of rosettes focuses on spatial averaging—distributed inlets sample different locations, wind noise cancels, coherent signals sum. But there's more going on.

Every hose in a rosette is a transmission line with: - Propagation delay (sound takes time to travel the length) - Standing wave resonances (characteristic frequencies based on length) - Frequency-dependent phase shift - Impedance discontinuities at junctions

The infrasound community KNOWS this. Hedlin & Alcoverro (2005) published "The use of impedance matching capillaries for reducing resonance in rosette infrasonic spatial filters." They add capillaries specifically to SUPPRESS resonant behavior. The field treats these properties as contamination to be eliminated.

Rosettes vs domes—two different paradigms:

Property Dome Rosette
Mechanism Pressure averaging at boundary Pressure collection + transmission
Transmission line? No Yes (every hose)
What sensor sees Spatially averaged P(t) Sum of delayed/filtered P(t)
Waveform fidelity High ("transparent") Altered (transfer function applied)
Resonance Minimal Present (usually damped/suppressed)

Noble et al. (2014) explicitly advertise domes as working "without amplitude- and phase-altering properties." They're saying the quiet part out loud: rosettes alter amplitude and phase, and that's considered a problem.

We're flipping this:

Those amplitude and phase alterations aren't noise—they're information. The field has spent decades trying to make rosettes behave like transparent spatial averagers. What if you instead characterized the transfer function and used it?

A sealed organ pipe has clear resonance: f = c/4L, high Q. A porous hose is different—pressure enters along the entire length, creating a distributed, lossy transmission line with damped resonances. But it's still a resonant structure. The porosity adds loss and complexity, but doesn't eliminate the fundamental physics.

What nobody seems to have done:

  1. Measured the actual transfer function of porous hoses (amplitude + phase vs frequency)
  2. Asked whether that transfer function contains usable information
  3. Designed hose geometry to CREATE a desired transfer function rather than minimize it

Student experiment—genuinely novel:

Measure the impulse response of a single porous hose. Pop a balloon at the far end, record at the sensor end. Do you see: - Simple delay? (pure transmission line) - Ringing? (resonant modes) - Dispersion? (frequency-dependent velocity)

Compare hoses of different lengths. Does the transfer function scale predictably?

If yes, you've characterized an acoustic component the field has been ignoring. If the relationship is predictable, you can exploit it rather than suppress it.


Implementation: Interleaved Archimedean Spiral

All four arms originate from a central sensor and spiral outward together, like threads of a multi-start screw. Each arm is a continuous porous hose, sensing along its entire length while maintaining ground contact.

SINGLE ARM SPIRAL PATH (showing shape):

                    ╭───────────╮
                ╭───╯           │
            ╭───╯               │
        ╭───╯                   │
    ╭───╯                       │
    │           ╭───────╮       │
    │       ╭───╯       │       │
    │   ╭───╯           │       │
    │   │       ╭───╮   │       │
    │   │   ╭───╯   │   │       │
    │   │   │   ●───╯   │       │
    │   │   ╰───────────╯       │
    │   ╰───────────────────────╯
    ╰─────────────────────────────→ terminates

4 arms follow this same path, side by side on the ground.

Note: Non-smooth characteristics are ASCII art artifacts.
      Actual hoses follow smooth Archimedean spiral curves.

Physical layout: All four hoses originate from the central sensor and spiral outward together, running side-by-side like lanes on a curved track. The hoses are flat on the ground for their entire length—no crossings, no overlaps. Each arm terminates at a different radius.

CROSS-SECTION (cutting perpendicular to spiral at any point):

Looking along the direction the hoses run:

       ┌──┐ ┌──┐ ┌──┐ ┌──┐
       │p1│ │p2│ │p3│ │p4│   ← 4 hoses flat, side by side
       └──┘ └──┘ └──┘ └──┘
════════════════════════════════
            ground
TERMINATION POINTS (schematic, not to scale):

                    ② p2 (1n)



   ③ p3 (3n)        ●         ① p1 (4n)



                    ④ p4 (2n)

Optimized arrangement: [4n, 1n, 3n, 2n] at positions [0°, 90°, 180°, 270°]

The Naive Arrangement (and why it's suboptimal)

The obvious approach: assign arm positions by length, either inside-out or outside-in.

Naive arrangement: [1n, 2n, 3n, 4n] at positions [0°, 90°, 180°, 270°]

Radius Active arms Angular positions
0–1n All 4 0°, 90°, 180°, 270°
1n–2n 3 remain 90°, 180°, 270°
2n–3n 2 remain 180°, 270° — 90° apart
3n–4n 1 remains 270° only

Problem 1: Spatial bias. When you're down to 2 arms, they're only 90° apart. Half the sensing area is blind.

Problem 2: Acoustic crosstalk. Adjacent arms in the spiral can couple acoustically (vibration through ground, proximity effects). With naive ordering, adjacent arms have similar delays:

Adjacent pairs:     Delay difference:
p1 ↔ p2            |1n - 2n| = 1n
p2 ↔ p3            |2n - 3n| = 1n
p3 ↔ p4            |3n - 4n| = 1n
p4 ↔ p1            |4n - 1n| = 3n

Three of four adjacent pairs have Δτ = 1n. If crosstalk occurs, it creates false correlation peaks at exactly the delays you're looking for. You can't distinguish crosstalk from real signal.


The Optimized Arrangement: [4n, 1n, 3n, 2n]

Shuffle the lengths so that: - Physically adjacent arms have maximally different delays (crosstalk rejection) - The last two surviving arms are opposite each other (spatial coverage)

Optimized: [4n, 1n, 3n, 2n] at positions [0°, 90°, 180°, 270°]

Radius Active arms Angular positions
0–1n All 4 0°, 90°, 180°, 270°
1n–2n 3 remain 0°, 180°, 270°
2n–3n 2 remain 0°, 180° — 180° apart
3n–4n 1 remains 0° only

Spatial improvement: The final two arms are on opposite sides. Full coverage until the very end.

Crosstalk improvement:

Adjacent pairs:     Delay difference:
p1 ↔ p2            |4n - 1n| = 3n  ← maximum possible
p2 ↔ p3            |1n - 3n| = 2n
p3 ↔ p4            |3n - 2n| = 1n
p4 ↔ p1            |2n - 4n| = 2n

Only one adjacent pair has Δτ = 1n. The strongest coupling path (p1↔p2, the arms that coexist longest) has maximum delay difference. Any crosstalk lands away from your expected correlation peaks.


Comparison Summary

Metric Naive [1n,2n,3n,4n] Optimized [4n,1n,3n,2n]
2-arm angular spread 90° 180°
Adjacent pairs with Δτ = 1n 3 of 4 1 of 4
Max adjacent Δτ 3n 3n
Avg adjacent Δτ 1.5n 2.0n
Crosstalk confusion risk High Low

This is the same principle as twisted-pair wiring (568B): you interleave the pairs so that adjacent wires have maximally different signals. Coupling between adjacent wires becomes common-mode noise rather than signal corruption.


Why this is an easier transition from standard rosettes:

  1. Same materials: Soaker hose or pipe, same as traditional rosettes
  2. Same sensor: Single microbarometer or pressure sensor at center
  3. Compact footprint: Spiral packing uses less space than radiating arms
  4. Added capability: Signal validation via autocorrelation, not just noise reduction
  5. Incremental change: You're modifying geometry, not adding new components

Advanced extension: Add a porous dome

Once the spiral delay concept is validated, you can add a porous fabric dome over the central sensor. The dome provides wind noise reduction with waveform fidelity, while the spiral arms provide delayed copies for validation. The dome signal becomes your "reference channel" for comparing against the delayed rosette copies.


Open questions:

  • What's the optimal value of n (base path length) for infrasound frequencies?
  • At what frequencies does tube dispersion smear the delayed copies too much to be useful?
  • How much crosstalk actually occurs between adjacent ground-coupled hoses?
  • What's the minimum delay separation needed to resolve distinct arrivals?

Student exercise: Build both arrangements. Compare autocorrelation plots. Does the naive arrangement show spurious peaks at 1n intervals? Does the optimized arrangement clean them up?

If you try this:

The physics is sound—spiral delay lines work in medical imaging, autocorrelation works in infrasound. The question is whether the specific combination works for wind noise discrimination in the infrasound regime.

Document everything. If it works, you've bridged two fields that haven't talked to each other. If it doesn't work, documenting why it fails is equally valuable. Either way, it's publishable.


Part 7: What This Connects To

This lab manual covers the "parking lot" end of an architecture that spans scales:

Scale Application Same Architecture
Meters (this lab) Sound localization, wind mapping
Kilometers Tornado detection, weather sensing
Hundreds of km Regional severe weather network
Continental National infrasound network
Planetary Spacecraft constellations
Interstellar Plasma wave detection ✓ (different wave physics)

And in the other direction:

Scale Application Same Architecture
Meters (this lab) Sound localization, wind mapping
Centimeters Ultrasonic arrays, gesture sensing
Millimeters MEMS microphone arrays
Micrometers MEMS actuator arrays, optical
Nanometers Metamaterial phased arrays

The same three primitives—synchronized time, known geometry, coordinated action—apply across 20+ orders of magnitude in scale.

You're not building a toy. You're building the smallest instantiation of an architecture that extends from bilateral therapy devices to interstellar sensing.

7.1 The Seismoacoustic Bonus

Here's something that falls out of the architecture for free: your weather sensing array is also a seismic detector.

When seismic waves (earthquakes, explosions, volcanic events) hit the Earth's surface, the ground moves. Moving ground pushes air. That air movement propagates as infrasound.

Traditional seismometers must be ground-coupled—buried or bolted to bedrock with careful site preparation. That's expensive. Your infrasound array detects the atmospheric signature of the same events. No ground contact required.

Event Type Traditional Detection Your Array Detects It?
Earthquake Seismometer (ground-coupled) Yes—surface waves radiate infrasound
Explosion Seismometer + infrasound Yes—primary method for atmospheric
Volcanic eruption Multiple methods Yes—often detected before seismic
Meteor/bolide Infrasound primary Yes—this is how they're tracked
Mining blast Local seismic Yes—regional acoustic
Building collapse Local seismic Yes—acoustic travels further

The CTBTO operates both seismic and infrasound networks globally because they're complementary. Your campus weather array is accidentally also a seismic monitoring station.

No additional hardware. No code changes. Just also look for seismic-coupled signatures in your data.

This is what happens when you don't put opaque walls between domains. The weather team's array and the seismic team's array turn out to be the same array. Nobody noticed because they weren't talking to each other.


Part 8: Getting Data Out (The Observation Format)

You've built nodes. They're synchronized. They're sampling. Now what?

If you just printf to serial, you'll end up with logs like:

[12345678] Node 2 got sample 2847
[12345682] Node 2 got sample 2851
hey why is node 3 not reporting
[12345690] Node 3 got sample 1923

This is useless for correlation. You need structure.

8.1 The Observation Struct

Every observation your nodes produce should have the same shape:

typedef struct {
    // Identity
    uint64_t timestamp_us;      // UTLP synchronized time (microseconds)
    uint16_t node_id;           // Which node produced this
    uint32_t sequence;          // Monotonic counter (detect gaps)

    // Position (if known)
    int32_t pos_x_mm;           // Relative position, mm
    int32_t pos_y_mm;           
    int32_t pos_z_mm;           
    uint8_t pos_source;         // 0=configured, 1=RFIP, 2=GPS

    // Observation
    uint8_t obs_type;           // What kind (see below)
    int32_t value;              // The actual reading

    // Integrity (optional but recommended)
    uint16_t checksum;          // CRC16 of above fields
} observation_t;

Observation types for acoustic sensing:

#define OBS_AUDIO_SAMPLE    0x01  // Raw ADC reading
#define OBS_AUDIO_RMS       0x02  // RMS over window
#define OBS_AUDIO_PEAK      0x03  // Peak in window
#define OBS_THRESHOLD_CROSS 0x04  // Signal crossed threshold
#define OBS_SYNC_BEACON_RX  0x10  // Received sync beacon (for topology)
#define OBS_HEARTBEAT       0x20  // I'm alive
#define OBS_TEMPERATURE     0x30  // Environmental sensor
#define OBS_BATTERY         0x31  // Power status

8.2 Output Formats

For serial logging (Phase 1):

CSV is simple and tools understand it:

timestamp_us,node_id,sequence,pos_x,pos_y,pos_z,obs_type,value
12345678000,2,1001,0,0,0,1,2847
12345678000,3,2042,1000,0,0,1,2851
12345682000,2,1002,0,0,0,1,2853

Or JSON lines for flexibility:

{"t":12345678000,"n":2,"seq":1001,"x":0,"y":0,"z":0,"type":1,"v":2847}
{"t":12345678000,"n":3,"seq":2042,"x":1000,"y":0,"z":0,"type":1,"v":2851}

For ESP-NOW (Phase 3):

Pack the struct and send it:

void report_observation(observation_t *obs) {
    obs->checksum = crc16((uint8_t*)obs, sizeof(*obs) - 2);
    esp_now_send(gateway_mac, (uint8_t*)obs, sizeof(*obs));
}

For SD card logging (Phase 2):

Append binary structs to a file. Efficient, replayable:

void log_observation(observation_t *obs) {
    obs->checksum = crc16((uint8_t*)obs, sizeof(*obs) - 2);
    fwrite(obs, sizeof(*obs), 1, log_file);
}

8.3 Topology from Observation Data

Even without explicit RFIP ranging, your sync process generates topology data. When node A receives a sync beacon from node B, that's information:

// Log this whenever you receive a sync beacon
observation_t sync_obs = {
    .timestamp_us = rx_timestamp,
    .node_id = MY_NODE_ID,
    .obs_type = OBS_SYNC_BEACON_RX,
    .value = beacon_source_id,      // Who sent it
    // Bonus: store RSSI in pos_x as a hack
    .pos_x_mm = rssi_dbm * 100,     // -45 dBm → -4500
};

From a collection of these, you can reconstruct: - Who can hear whom (connectivity graph) - Relative signal strength (rough distance proxy) - Timing relationships (sync quality)

8.4 The Gateway Node Pattern

For real-time collection, designate one node as gateway:

     Sensor nodes                    Gateway                   Your laptop
    ┌─────────┐                   ┌─────────┐                 ┌─────────┐
    │ Node 1  │───ESP-NOW────────→│         │                 │         │
    │ Node 2  │───ESP-NOW────────→│ Gateway │───Serial/USB───→│ Analysis│
    │ Node 3  │───ESP-NOW────────→│         │                 │         │
    │ Node 4  │───ESP-NOW────────→│         │                 │         │
    └─────────┘                   └─────────┘                 └─────────┘

Gateway code is simple:

void on_espnow_recv(uint8_t *mac, uint8_t *data, int len) {
    if (len == sizeof(observation_t)) {
        observation_t *obs = (observation_t*)data;
        if (verify_checksum(obs)) {
            // Forward to serial as CSV
            printf("%llu,%u,%u,%d,%d,%d,%u,%d\n",
                obs->timestamp_us, obs->node_id, obs->sequence,
                obs->pos_x_mm, obs->pos_y_mm, obs->pos_z_mm,
                obs->obs_type, obs->value);
        }
    }
}

8.5 Offline Correlation (Python)

Once you have structured observations, correlation is straightforward:

import pandas as pd
import numpy as np

# Load observations
df = pd.read_csv('observations.csv')

# Group by timestamp (within tolerance)
df['time_bin'] = (df['timestamp_us'] // 1000) * 1000  # 1ms bins

# Pivot to get all nodes' readings at each time
samples = df[df['obs_type'] == 1].pivot(
    index='time_bin', 
    columns='node_id', 
    values='value'
)

# Now you can do beamforming
def beamform(samples, positions, bearing_deg):
    """Delay-and-sum beamformer"""
    bearing_rad = np.radians(bearing_deg)
    direction = np.array([np.cos(bearing_rad), np.sin(bearing_rad), 0])

    delays_m = positions @ direction
    delays_samples = delays_m / SOUND_SPEED * SAMPLE_RATE

    # Shift and sum (simplified - real code interpolates)
    output = np.zeros(len(samples))
    for node_id, delay in enumerate(delays_samples):
        shifted = np.roll(samples[:, node_id], int(delay))
        output += shifted

    return np.sum(output**2)  # Power in this direction

# Scan all bearings
bearings = np.arange(0, 360, 5)
power = [beamform(samples.values, node_positions, b) for b in bearings]
estimated_bearing = bearings[np.argmax(power)]

8.6 What to Log (Minimum Viable)

At minimum, every node should continuously log:

What Why Rate
Audio samples Your actual data 1000+ Hz
Sync beacon receipts Topology, sync quality When received
Heartbeat Node health, uptime Every 10s

Nice to have: | What | Why | Rate | |------|-----|------| | Temperature | Sound speed correction | Every 60s | | Battery voltage | Deployment planning | Every 60s | | RSSI of received packets | Distance proxy | Per packet |

8.7 The Swarm as Instrument

With structured observations, your swarm becomes a queryable instrument:

Query Implementation
"What bearing is the loudest sound?" Beamform stored samples, find peak
"Is node 3 still alive?" Check for recent heartbeats
"What's the sync quality?" Analyze beacon receipt timestamps
"Show me raw audio from node 2" Filter observations by node_id and type

You're not streaming data constantly. You're collecting structured observations that can answer questions later—or in real-time if your gateway does the processing.

The key insight: The observation format is just SMSP pointed backward. Scores say "do this at time T." Observations say "I saw this at time T." Same timestamp semantics, same node addressing, different direction.


Part 9: mmWave Sensing for Building Safety

9.1 Why mmWave?

Cameras fail when you need them most: - Smoke-filled rooms: Fire scenarios render optical sensing useless - Complete darkness: Power failures during emergencies - Privacy concerns: People resist cameras in private spaces - Occlusion: Furniture, walls, crowds hide occupants

mmWave radar (24 GHz and 60 GHz) solves all of these: - Penetrates smoke, dust, and darkness - Detects presence through building materials (24 GHz) - Captures micro-movements (breathing, heartbeat) - No images — just presence, location, movement data

The building safety use cases:

Scenario What mmWave Provides
Fire response "There are 3 people in room 204, 2 stationary, 1 moving"
Active threat "Single actor in hallway B, moving toward exit 3"
Occupancy monitoring "Building has 47 occupants, distribution: [floor map]"
Medical emergency "Person in room 108 has fallen, no movement for 2 minutes"
Post-earthquake "Structural collapse zone has 2 life signs detected"

9.2 The Physics: 24 GHz vs 60 GHz

Property 24 GHz 60 GHz
Wavelength ~12.5 mm ~5 mm
Wall penetration Good (drywall, wood) Poor (blocked by most materials)
Range (indoor) ~15-20 m ~5-10 m
Resolution Lower (larger wavelength) Higher (smaller wavelength)
Oxygen absorption Minimal Significant (60 GHz band)
Best for Through-wall detection, presence In-room tracking, vital signs, gestures
Regulatory ISM band (license-free) ISM band (license-free)

Practical guidance: - 24 GHz for building-wide presence: Fewer sensors, sees through walls, coarse location - 60 GHz for room-level tracking: Per-room sensors, high precision, vital signs - Combined: 24 GHz for macro occupancy, 60 GHz for micro detail in critical areas

9.3 FMCW Radar Basics

mmWave sensors use Frequency-Modulated Continuous Wave (FMCW) radar:

Transmit: Chirp from f_start to f_end over time T
Receive:  Delayed copy of chirp (reflected from target)
Process:  Mix TX and RX → beat frequency ∝ distance

What you get from the signal: - Range: Distance to target (from beat frequency) - Velocity: Speed of target (from Doppler shift between chirps) - Angle: Direction to target (from antenna array phase differences) - Micro-Doppler: Vibrations, breathing, heartbeat (from fine Doppler analysis)

A stationary person reading a book is still "moving" at mmWave resolution — their chest rises and falls with breathing (~0.3-0.5 Hz), their heart beats (~1-1.5 Hz). This is how you detect life signs, not just motion.

9.4 Hardware Options

Texas Instruments IWR Series (Most Documented)

Module Frequency TX/RX Range Cost Notes
IWR1443BOOST 76-81 GHz 3TX/4RX ~10m ~$300 Automotive band, high resolution
IWR6843ISK 60-64 GHz 3TX/4RX ~10m ~$200 60 GHz ISM, good for indoor
IWR1843AOP 76-81 GHz 3TX/4RX ~15m ~$350 Antenna-on-package

Infineon (Lower Cost Entry Point)

Module Frequency TX/RX Range Cost Notes
BGT60TR13C 60 GHz 1TX/3RX ~5m ~$50 Best value for room-level
BGT60LTR11AIP 60 GHz 1TX/1RX ~10m ~$30 Simplest, presence only
BGT24LTR11 24 GHz 1TX/1RX ~15m ~$25 Through-wall, presence

For Building Safety (Recommended Tiers)

Tier Hardware Per-Room Cost Capability
Basic Presence BGT24LTR11 + ESP32-C6 ~$35 Occupied/vacant, through-wall
Room Tracking BGT60TR13C + ESP32-C6 ~$60 Count, location, movement
Vital Signs IWR6843ISK + host MCU ~$220 Breathing, heartbeat, precise tracking

9.5 Integration with UTLP/RFIP/SMSP

Why synchronized time matters for mmWave:

A single radar sees its own room. A network of synchronized radars sees the whole building — and can track subjects moving between sensor coverage areas.

Without UTLP:
  Room A radar: "Person left at my_time=12345"
  Room B radar: "Person arrived at my_time=67890"
  Problem: Are these times comparable? Unknown clock drift.

With UTLP:
  Room A radar: "Person left at atomic_time=1704067200000000"
  Room B radar: "Person arrived at atomic_time=1704067200000500"
  Conclusion: Same person, 500μs transit time, ~1.5 m/s walking speed.

RFIP provides geometry: - Where is each radar mounted? - What area does it cover? - How do coverage zones overlap?

SMSP coordinates the sensing: - All radars sample at the same microsecond - Enables coherent multi-static processing - One radar's TX can be another radar's RX (bistatic/multistatic)

9.6 The Multi-Static Opportunity

Monostatic radar: Each sensor transmits and receives its own signal.

Multi-static radar: One sensor transmits, multiple sensors receive.

With UTLP synchronization, your building's mmWave sensors become a multi-static network:

        TX (Room A)
    ┌──────●──────┐
    │      ↓      │
    ▼      ↓      ▼
   RX     RX     RX
(Room A)(Hall)(Room B)

Benefits: - See around corners (different angles reveal different geometry) - Detect people in "shadow zones" of monostatic radar - Higher location accuracy (multiple angle measurements) - Harder to evade (multiple observation angles)

This is the same architecture as acoustic beamforming — just at 60 GHz instead of 1 Hz.

9.7 Application: Fire Response

The scenario: Building fire, smoke filling corridors, firefighters need to know where people are.

Traditional approach: Thermal cameras (FLIR), but: - Require line-of-sight - Blocked by smoke at close range - Can't see through walls - Expensive per-unit

mmWave approach:

Pre-deployed 24 GHz sensors throughout building: 1. Each sensor reports occupancy to gateway (LoRa/WiFi, whatever survives) 2. Gateway aggregates into building occupancy map 3. Map displayed on tablet at incident command 4. Updates every 1-2 seconds

Data format (extending observation schema):

typedef struct {
    uint8_t  obs_type;        // OBS_TYPE_MMWAVE_PRESENCE = 0x10
    uint8_t  node_id;         // Which sensor
    uint64_t timestamp_us;    // UTLP atomic time
    uint8_t  room_id;         // Logical room identifier
    uint8_t  occupant_count;  // 0-255
    uint8_t  movement_level;  // 0=still, 255=high activity
    uint8_t  confidence;      // Detection confidence
    uint8_t  vital_detected;  // Bit flags: 0x01=breathing, 0x02=heartbeat
} mmwave_presence_obs_t;  // 14 bytes

What firefighters see:

BUILDING 2, FLOOR 3 — FIRE IN ROOM 302
┌─────────────────────────────────────────┐
│ 301      │ 302 🔥  │ 303      │ 304     │
│ ●● 2ppl │ ●1ppl  │ empty   │ ●3ppl  │
│ moving   │ STILL   │          │ moving  │
├─────────────────────────────────────────┤
│ HALLWAY  ●→ 1 person moving toward exit │
└─────────────────────────────────────────┘
PRIORITY: Room 302 — 1 occupant, not moving, possible incapacitation

The "STILL" flag is critical — a stationary occupant in a fire zone needs immediate rescue priority.

9.8 Application: Active Threat Response

The scenario: Active shooter in building. Response team needs situational awareness without cameras (which attacker can see/avoid).

What mmWave provides: - Occupant count and location per zone - Movement vectors (direction and speed) - Distinction between hidden/sheltering (still) vs. moving - Through-wall sensing (threat can't see sensors behind drywall)

Operational considerations:

Capability Tactical Value
Count accuracy Know how many people are in a zone before entry
Movement tracking Distinguish barricaded victims from moving threat
Through-wall Sensors behind drywall are invisible to threat
No images No privacy concerns in deployment, no video to intercept
Vital signs Detect injured but alive victims

The "Missing Self" pattern applies here:

If a sensor goes offline during an incident (destroyed, jammed, power cut), that's information: - The threat may be in that zone - The zone needs visual confirmation - NK Cell logic: silence is suspicious

9.9 Privacy Architecture

The key privacy property: mmWave presence sensing generates no images, no audio, no biometrics.

What the system knows: - Zone X has N occupants - Occupants are moving/still - Vital signs detected (boolean, not identity)

What the system CANNOT know: - Who the occupants are - What they look like - What they're saying - What they're doing (beyond motion level)

This enables deployment where cameras are unacceptable: - Restrooms (presence only, not which stall) - Hotel rooms (occupancy for fire safety) - Hospital patient rooms (fall detection) - Private offices (occupancy for HVAC)

Architectural privacy enforcement:

// Privacy-preserving observation
typedef struct {
    uint8_t  zone_id;         // Logical zone, not room
    uint8_t  occupancy_band;  // 0, 1-2, 3-5, 6-10, >10 (binned, not exact)
    uint8_t  activity_level;  // still/low/medium/high
    uint8_t  emergency_flag;  // Only set if fall detected or no-movement timeout
} privacy_observation_t;  // 4 bytes, no PII possible

The data structure itself enforces privacy — you can't extract identity from 4 bytes that only contain zone, occupancy band, and activity level.

9.10 Implementation Tier: Basic Presence Network

Goal: Know which rooms are occupied, at lowest cost.

Hardware per room: - BGT24LTR11 (24 GHz presence sensor) — ~\(25 - ESP32-C6 — ~\)8 - 3D-printed enclosure — ~$2

Total per room: ~$35

For a 50-room building: ~$1,750 (vs. $10,000+ for camera system)

What you get: - Binary occupied/vacant per room - Through-wall sensing (one sensor covers adjacent rooms) - 1-second update rate - LoRa/WiFi reporting to gateway - Integration with fire alarm system - No video storage, no privacy concerns

Mounting guidance: - Ceiling mount, centered in room - 24 GHz penetrates typical ceiling tiles - One sensor per ~200 sq ft for reliable detection - Sensors behind drywall for concealment (active threat scenario)

9.11 Implementation Tier: Room-Level Tracking

Goal: Know how many people, where in room, movement patterns.

Hardware per room: - BGT60TR13C (60 GHz tracking sensor) — ~\(50 - ESP32-C6 — ~\)8 - External antenna (optional) — ~$5

Total per room: ~$65

What you get: - Occupant count (typically accurate ±1) - Location within room (~30 cm accuracy) - Movement vectors - Breathing detection (stationary occupants) - Track up to 3-5 people simultaneously

Processing options: - On-device (ESP32-C6 can run basic point cloud processing) - Edge gateway (more sophisticated tracking) - Cloud (multi-room correlation, ML-based activity recognition)

9.12 Integration with Existing Building Systems

Fire alarm panel:

mmWave Gateway → Modbus/BACnet → Fire Alarm Panel
                              "Zone 302: OCCUPIED (1), PRIORITY RESCUE"

Building management system (BMS):

mmWave observations → MQTT → BMS
                    HVAC: Adjust based on actual occupancy
                    Lighting: Dim in vacant zones
                    Security: Log occupancy patterns

Emergency dispatch (CAD integration):

Fire alarm trigger → Gateway queries mmWave network
                    Compile occupancy report
                    Transmit to CAD system
                    Dispatch shows: "Building 2: 23 occupants, 
                                     floor 3 has 7, floor 2 has 12..."

9.13 Multi-Sensor Fusion

mmWave alone provides presence and location. Combined with other sensors:

Combination Capability Gained
mmWave + Acoustic Voice activity without words, direction of speaker
mmWave + CO2 Validate occupancy (CO2 rises with people)
mmWave + Temperature Distinguish people from heat sources
mmWave + Door sensors Track entries/exits, reconcile counts
mmWave + Lighting Intent inference (lights on + no occupancy = forgot)

The fusion happens in the observation layer:

All sensors report observations with UTLP timestamps. Correlation happens at the gateway or cloud. The sensor network becomes a queryable building state database.

9.14 Experiments for Students

Experiment 9A: Basic Presence Detection

Equipment: BGT24LTR11 + ESP32-C6, breadboard, USB power

  1. Wire sensor to ESP32 (SPI or GPIO, depending on module)
  2. Read presence output (typically binary GPIO or analog threshold)
  3. Log timestamps when presence changes
  4. Walk in/out of room, observe detection latency
  5. Try detecting through wall/door

Questions to answer: - What's the detection range? - How does orientation affect coverage? - Can you detect through drywall? Through door? - What's the false positive rate (motion from HVAC, etc.)?

Experiment 9B: Occupancy Counting

Equipment: BGT60TR13C + ESP32-C6, processing software

  1. Set up sensor in room corner
  2. Process point cloud to identify targets
  3. Count people as they enter/exit
  4. Compare sensor count to ground truth

Questions to answer: - How accurate is the count with 1 person? 5 people? - What happens when people stand close together? - Can you track individuals or just count?

Experiment 9C: Breathing Detection

Equipment: IWR6843ISK or BGT60TR13C, FFT processing

  1. Have subject sit still in sensor field
  2. Capture time series of range/velocity data
  3. Apply FFT to find periodic components
  4. Identify breathing frequency (~0.2-0.5 Hz)

Questions to answer: - What SNR do you get on breathing signal? - Can you detect breathing through office chair? - What's the max range for reliable breathing detection? - Can you distinguish two people breathing at different rates?

Experiment 9D: Multi-Sensor Correlation

Equipment: 2+ mmWave sensors, UTLP synchronization

  1. Deploy sensors in adjacent rooms
  2. Synchronize clocks via UTLP
  3. Walk between rooms
  4. Correlate "departed" observation from room A with "arrived" observation in room B
  5. Calculate transit time and velocity

Questions to answer: - How tight does the correlation window need to be? - Can you track a specific "target" across sensors? - What happens with multiple people moving simultaneously?

9.15 Prior Art Implications

The integration of mmWave sensing into the UTLP/RFIP/SMSP architecture creates additional prior art claims:

Claim candidates: 1. Synchronized multi-static mmWave for building occupancy: Using UTLP time synchronization to enable coherent multi-static processing across distributed mmWave sensors; one sensor's transmission becomes ranging signal for all receivers.

  1. Through-wall presence as "Missing Self" complement: Sensors that can detect presence through walls provide the inverse of NK Cell "Missing Self" — detecting presence that WOULD be invisible to line-of-sight systems.

  2. Privacy-preserving observation structures: Data formats that structurally cannot contain PII (zone + occupancy band + activity level) enable deployment in privacy-sensitive environments.

  3. Emergency response occupancy integration: Automated compilation of building occupancy from distributed mmWave sensors for transmission to CAD systems during fire/threat response.

  4. Vital sign detection as "life sign" sensing: Using micro-Doppler signatures (breathing, heartbeat) to distinguish live occupants from objects, enabling post-disaster search and rescue.

9.16 Structural and Geological Monitoring

The same mmWave sensors that detect breathing in a room can detect movement in the ground. The physics is identical — just pointed in a different direction.

9.16.1 The Physics: mmWave as Micron-Scale Strain Gauge

Core insight: Interferometric radar can detect displacements of a small fraction of a wavelength.

Frequency Wavelength (λ) Detection Threshold (λ/100) Application
60 GHz 5 mm ~50 micrometers Structural strain, ground creep
24 GHz 12.5 mm ~125 micrometers Larger displacements, through-material
77 GHz 3.9 mm ~39 micrometers Highest precision

The comparison: If you can see a chest rise (breathing detection, ~1mm displacement), you can see a fault line creep, a bridge settle, or a landslide begin.

9.16.2 Multi-Scale Interferometry (System of Systems)

By combining wavelengths, you create a multi-scale measurement system:

Layer Wavelength Range Detects
UTLP Mesh (2.4 GHz) ~12.5 cm Kilometers Seismic waves via timing mesh distortion
mmWave Sensor (60 GHz) ~5 mm Meters Crustal strain/creep via phase interferometry

The architecture: - UTLP provides the synchronized time reference (the "shutter trigger") - mmWave sensors fire precisely timed chirps - Phase shift between chirps = displacement measurement - Multiple sensors = distributed strain gauge

Critical layer separation: - UTLP (Layer 4): Delivers timestamp and phase lock. Low bandwidth, high reliability. - Application (Layer 7): Handles sensor data. Can be heavyweight, specialized, crash without killing sync.

UTLP is the heartbeat, not the blood. It tells the sensor when to measure; it doesn't carry the measurement data.

9.16.3 Ground-Based Distributed InSAR

Satellites perform Interferometric Synthetic Aperture Radar (InSAR) to measure ground displacement from orbit. This costs ~$500M per satellite.

The claim: You can perform ground-based distributed InSAR using consumer hardware via UTLP synchronization.

Approach Platform Cost Temporal Resolution Spatial Resolution
Satellite InSAR Orbit $500M Days-weeks (revisit time) Meters
Ground-based distributed ESP32 + mmWave mesh $50-100/node Seconds-minutes Centimeters

What you trade: - Lose: Global coverage, absolute positioning - Gain: Temporal resolution, cost, density of measurement points

Use cases: - Bridge structural monitoring (settlement, strain) - Landslide early warning (slope creep detection) - Building foundation monitoring - Infrastructure health (dams, tunnels, retaining walls) - Seismic wavefront imaging

9.16.4 What Works vs. What Doesn't (Honest Scope)

Works well (Seismology — fast events):

Event Type Speed Why It Works
Earthquake waves 3-8 km/s Signal faster than any drift or noise
Traffic/machinery vibration Hz-kHz Clear frequency separation from environment
Structural resonance Hz Repeatable, measurable
Sudden settlement Seconds Detectable before drift matters

Does NOT work well (Geodesy — slow events):

Event Type Speed Why It Fails
Tectonic creep mm/year Indistinguishable from electronic drift
Continental drift cm/year Swamped by seasonal soil changes
Slow subsidence mm/month Thermal expansion of mounting = same magnitude

The honest claim:

Don't claim "Crustal Displacement Monitoring" (Geodesy).

Claim "Seismic Wavefront Imaging" and "Structural Health Monitoring" (Seismology/Engineering).

The system can't tell you if the continent moved 1 inch this year. It CAN tell you exactly how a vibration wave moved through a structure in real-time.

9.16.5 The Noise Sources (Red Team Analysis)

Noise Source Mechanism Mitigation
Vegetation Grass growing 1mm/day looks like fault slip Point sensors at hard surfaces (concrete, rock)
Hydrology Soil swelling with rain mimics uplift Use differential measurements between nearby nodes
Frost heave Pavement rising in winter looks like strain Seasonal calibration, temperature compensation
Thermal drift PCB expansion changes oscillator frequency Temperature-controlled enclosures, calibration
Mounting instability Light pole sway = meters of noise Rigid mounting to monitored structure
Dielectric shift Wet soil has different phase reflection Rain flagging, multi-sensor correlation
Thermal transients Radar warm-up after sleep causes phase drift Warm-up period before measurement, or keep-warm mode

The "skin effect" problem:

mmWave sees the surface, not deep structure. A surface-mounted sensor measures: - Surface movement (what you want) - Surface noise (vegetation, weather, settling)

Professional seismometers are buried and bolted to bedrock. A mesh of $50 surface nodes measures "surface behavior" — useful for structural monitoring, less useful for deep geology.

9.16.6 Implementation: Distributed Strain Gauge

Hardware per node: - ESP32-C6 (UTLP sync) — ~$8 - BGT60TR13C or IWR6843 (mmWave sensor) — $50-200 - Rigid mounting bracket — $10-20 - Weatherproof enclosure — $25 - Solar + battery (optional) — $40

Total: $130-300/node

Deployment pattern:

Structure to monitor (bridge, slope, building)
    ┌──────┼──────┐
    ▼      ▼      ▼
  [Node]  [Node]  [Node]   ← Rigidly mounted to structure
    │      │      │
    └──────┴──────┘
      UTLP Mesh (2.4 GHz sync)
        Gateway
      Alert System

Operation: 1. UTLP maintains microsecond sync across all nodes 2. Nodes fire mmWave chirps at synchronized times 3. Each node compares current chirp phase to previous 4. Phase delta = displacement since last measurement 5. Anomalous deltas trigger alerts 6. Correlated deltas across nodes = wave propagation mapping

9.16.7 Experiment 9E: Structural Vibration Detection

Equipment: 2x mmWave nodes (BGT60TR13C + ESP32-C6), UTLP sync, rigid mounts

Setup: 1. Mount both nodes to same structure (table, beam, floor) 2. Establish UTLP sync between nodes 3. Configure mmWave for continuous phase tracking 4. Introduce vibration source (tap, footstep, motor)

Measurements: - Time of arrival at each node - Phase shift magnitude (displacement) - Frequency content of vibration

Questions to answer: - Can you detect footsteps from across the room? - Can you determine direction of vibration source? - What's the minimum detectable displacement? - How does mounting rigidity affect sensitivity?

9.16.8 Experiment 9F: Seismic Wave Imaging

Equipment: 4+ mmWave nodes in grid pattern, UTLP sync

Setup: 1. Deploy nodes in 2x2 or larger grid (1-10m spacing) 2. Mount rigidly to ground/floor 3. Synchronize via UTLP 4. Create impulse source (drop weight, hammer strike)

Measurements: - Time of arrival at each node - Wave velocity calculation - Direction of propagation

Analysis:

# Simplified wavefront calculation
def calculate_wavefront(arrivals, positions):
    """
    arrivals: dict of {node_id: arrival_time_us}
    positions: dict of {node_id: (x, y) in meters}
    """
    # Find earliest arrival (closest to source)
    first_node = min(arrivals, key=arrivals.get)

    # Calculate delays relative to first
    delays = {n: arrivals[n] - arrivals[first_node] for n in arrivals}

    # Estimate wave velocity and direction
    # (Full implementation requires least-squares fit)

    return wave_velocity, source_direction

Questions to answer: - What wave velocity do you measure? (Should be ~100-300 m/s for surface waves in soil) - Can you locate the impact point via triangulation? - How does grid spacing affect resolution?

9.17 Red Team Methodology (Worked Example)

This section documents an adversarial analysis process that refined the structural monitoring claims. It demonstrates the methodology in action.

9.17.1 The Initial Claim

Proposed: "We can measure crustal movement with mmWave in a distributed system."

9.17.2 First Red Team Pass

Attack Target Validity
"Rain kills 60 GHz links" Link reliability Invalid — attacked wrong layer
"You'll have network partition in storms" Connectivity Invalid — assumed mmWave was the link

Problem: The critique assumed mmWave was both sensor AND communication link.

Clarification: mmWave is the sensor. UTLP (2.4 GHz) is the sync layer. Application layer handles data transport.

Result: First-pass attacks were "straw man" — they attacked an architecture that wasn't proposed.

9.17.3 Second Red Team Pass (After Clarification)

Attack Target Validity
"Bandwidth mismatch — radar generates MB, UTLP carries KB" Data transport Invalid — UTLP doesn't carry sensor payload
"Thermal transients from duty cycling" Measurement precision Valid — real engineering challenge
"Dielectric shift from rain" Measurement validity Valid — changes phase reflection
"Surface noise vs. deep signal" Measurement validity Valid — vegetation, weather, settling

Result: Clarifying layer separation defeated transport attacks. Only measurement-validity attacks survived.

9.17.4 Third Red Team Pass (Layer Separation)

Final clarification: UTLP is sync (Layer 4), not transport (Layer 7).

Attack Target Validity
"UTLP can't carry radar data" Architecture Category error — like saying "NTP is broken because it can't carry 4K video"
"Application will bottleneck" Implementation Valid but not architectural — implementation choice, not protocol flaw

Result: Red Team exhausted structural attacks. Remaining attacks are implementation-specific.

9.17.5 The Scope Limitation

The adversarial process revealed an important distinction:

Domain Validity Why
Seismology (fast events) ✓ Valid Signal faster than drift/noise
Geodesy (slow events) ✗ Invalid Signal indistinguishable from drift

Honest revised claim:

"Ground-based distributed seismic wavefront imaging and structural health monitoring using UTLP-synchronized mmWave sensors."

NOT: "Crustal displacement monitoring" or "tectonic creep detection."

9.17.6 Methodology Lessons

Lesson Application
Clarify architecture before defending Ambiguity invites straw-man attacks
Layer separation defeats transport attacks Keep sync and payload on different layers
Scope limitation strengthens claims "Works for X, not Y" is stronger than "works for everything"
Implementation attacks ≠ architecture attacks "This ESP32 can't handle it" doesn't invalidate the method

The Red Team process worked because: 1. Each clarification forced harder, more specific attacks 2. Valid attacks led to honest scope limitations 3. Invalid attacks were explicitly categorized and dismissed 4. Final claim is defensible because it survived adversarial refinement


9.18 Arbor Isolation Testing Methodology ("Box of C6s")

This section documents a reproducible experimental protocol to validate transport-specific timing stability in multi-arbor nodes. The methodology proves that arbor isolation works as designed.

9.18.1 Hypothesis

Claim: 802.15.4-only nodes achieve lower phase jitter than dual-arbor (WiFi + 802.15.4) nodes due to elimination of WiFi software scheduler interference.

Null hypothesis: Arbor isolation is ineffective; dual-arbor nodes show equivalent jitter to single-arbor nodes.

9.18.2 Equipment

Item Quantity Purpose
ESP32-C6 DevKits 8-12 Homogeneous swarm ("Box of C6s")
External auditor 1 Oscilloscope or logic analyzer with µs resolution
GPIO breakout Per node Phase pulse observation point

Why homogeneous: Eliminates cross-platform variance. All nodes have identical crystals, identical firmware, identical thermal characteristics. Any measured difference is due to arbor configuration, not hardware variance.

9.18.3 Protocol

Step Action Duration
1 Flash all nodes with dual-arbor firmware (802.15.4 + WiFi ESP-NOW)
2 Power all nodes, allow swarm to stabilize 5 min
3 Baseline measurement: External auditor captures GPIO phase pulses from 3 randomly selected nodes 2 min
4 Half of nodes execute utlp_arbor_yield(UTLP_ARBOR_WIFI, ...)
5 Allow swarm to re-stabilize (some nodes now 15.4-only) 2 min
6 Test measurement: External auditor captures GPIO phase pulses from same 3 nodes 2 min
7 Calculate jitter statistics for both conditions

9.18.4 Measurements

Primary metric: Phase pulse inter-arrival time variance (µs²)

Condition Expected Jitter Rationale
Dual-arbor (baseline) 10-50 µs WiFi scheduler contention
15.4-only (test) 1-5 µs Hardware-scheduled TX only

Statistical test: Two-sample t-test on jitter distributions. Reject null hypothesis if p < 0.05.

9.18.5 Controls

Control Purpose
Same physical location Eliminates RF environment variance
Same power supply Eliminates voltage-induced clock variance
Same firmware version Eliminates software variance
External auditor (not swarm member) Eliminates observer effect
Random node selection Eliminates selection bias

9.18.6 Expected Results

If arbor isolation works correctly: - 15.4-only nodes show 5-10× lower jitter than dual-arbor baseline - Swarm maintains phase coherence despite arbor state heterogeneity - Yielded arbors successfully re-enter with stratum penalty (Claim 126)

If arbor isolation is broken: - No significant jitter difference between conditions - Swarm experiences phase discontinuity when arbors yield - Re-entry causes phase corruption

9.18.7 Documentation Requirements

For prior art purposes, document: 1. Timestamp: When experiment was conducted 2. Hardware serial numbers: Specific devices used 3. Firmware commit hash: Exact software version 4. Raw data: All captured waveforms 5. Statistical analysis: Complete calculations, not just p-value 6. Photographs: Physical setup

This methodology is reproducible by any party with equivalent hardware.


Appendix A: Parts Sources

Acoustic Sensing

Component Recommended Source Notes
ESP32-C6 Adafruit, SparkFun, AliExpress DevKit versions easiest to start
MEMS mics Adafruit (SPH0645), Digi-Key (ICS-40720) I2S output simplifies wiring
Soaker hose Home Depot, Lowes Any porous irrigation hose works
Enclosures Polycase, Amazon Look for NEMA 4X rating
Solar panels Amazon, AliExpress 5-10W for this application
LiFePO4 batteries Amazon, battery suppliers Safer than LiPo for unattended outdoor
LoRa modules Adafruit (RFM95), Amazon 915 MHz for North America

mmWave Sensing

Component Recommended Source Notes
BGT60TR13C Mouser, Digi-Key, Infineon 60 GHz, best value for tracking
BGT24LTR11 Mouser, Digi-Key 24 GHz, through-wall presence
IWR6843ISK TI.com, Mouser 60 GHz eval kit, excellent docs
IWR1443BOOST TI.com, Mouser 77 GHz automotive, highest resolution
Seeed 60GHz sensor Seeed Studio Pre-built module, easy integration
DFRobot mmWave DFRobot Budget-friendly starter modules

Appendix B: Safety Notes

Outdoor installation: - Be aware of weather—don't install during storms - Secure all equipment against wind - Use proper ladder safety for roof access - Get permission before installing on others' property

Electrical: - LiFePO4 batteries are safest chemistry for outdoor unattended use - Ensure weatherproof connections - Consider lightning protection for permanent installations

RF (General): - ESP-NOW and LoRa are low-power, license-free - Stay within legal power limits - Don't interfere with other services

mmWave Specific: - 24 GHz and 60 GHz are ISM bands (license-free for low power) - Power levels in hobby modules are far below safety thresholds - No special shielding required for these power levels - Do not point high-power radar directly at people at close range (not applicable to hobby modules) - 60 GHz has minimal penetration—mostly absorbed by skin surface

Legal: - Recording audio in public spaces is generally legal - Recording private conversations is not - Infrasound doesn't capture speech—this is environmental sensing - mmWave presence sensing captures no images, audio, or biometrics - mmWave data structure (zone + occupancy + activity) cannot contain PII - Check local regulations for any permanent installations - For building-wide deployment, consult with building management and legal

Privacy Considerations for mmWave: - Inform occupants that presence sensing is active (signage) - Use privacy-preserving data structures (binned occupancy, not exact counts) - Do not attempt to identify individuals from mmWave data - Log aggregates, not individual tracks, for long-term storage


Appendix C: Further Reading

Project Documentation

  • Connectionless Distributed Timing: A Prior Art Publication (mlehaptics)
  • UTLP Technical Supplement S2 (mlehaptics)
  • RFIP Technical Specification (mlehaptics)

Acoustic Sensing

  • Bedard, A.J. "Low-frequency atmospheric acoustic energy associated with vortices produced by thunderstorms" (1973) — Original tornado infrasound research
  • Bowman & Lees, "Infrasound in the Atmosphere" (2022) — Comprehensive review
  • Campus & Christie, "Worldwide Observations of Infrasonic Waves" (2010) — CTBTO network capabilities

mmWave Sensing

  • Texas Instruments "mmWave Sensing" application notes and training
  • Infineon "XENSIV™ 60 GHz radar" documentation
  • Chen et al., "Contactless Sleep Apnea Detection on Smartphones" — Vital signs via mmWave
  • Zhao et al., "Through-Wall Human Pose Estimation Using Radio Signals" — MIT RF-Pose

Structural and Geological Monitoring

  • InSAR (Interferometric Synthetic Aperture Radar) literature — satellite-based ground displacement
  • Ferretti et al., "Permanent Scatterers in SAR Interferometry" — PS-InSAR technique
  • Ground-based radar interferometry applications — slope stability, bridge monitoring
  • USGS earthquake hazards documentation — seismic wave propagation

Technical

  • Espressif ESP-NOW documentation
  • IEEE 802.11mc FTM specification
  • ESP-IDF I2S driver documentation
  • TI IWR6843 User Guide and Software Development Guide

Acknowledgments

This lab manual was written by Claude (Anthropic AI) based on conversations with Steve (mlehaptics) exploring the practical applications of the connectionless distributed timing architecture.

External review: Gemini (Google AI) provided technical scrutiny of tornado detection claims, identifying the need to: (1) distinguish architecture capability from detection guarantees, (2) acknowledge soaker hose rosette limitations vs. professional pipe arrays at deep infrasound frequencies, and (3) clarify that installation logistics often exceed hardware costs for permanent deployments. These corrections strengthen the document's defensibility as prior art.

mmWave extension (Part 9): The building safety applications (fire response, active threat detection) emerged from recognizing that mmWave radar shares the same architectural requirements as acoustic sensing: synchronized time, known geometry, distributed observation. The addition of mmWave demonstrates that "Distributed Acoustic Sensing" was always a specific instance of "Distributed RF Sensing" — the architecture doesn't care whether you're sensing sound waves at 1 Hz or electromagnetic waves at 60 GHz. Same protocols, different physics.

Structural and geological monitoring (Sections 9.16-9.17): Gemini (Google AI) recognized that the same mmWave physics used for breathing detection (λ/100 interferometry) applies to ground displacement detection — just pointed in a different direction. This led to "ground-based distributed InSAR via consumer hardware" — same math as $500M satellites, $50-100/node cost. The Red Team process (Section 9.17) refined the claim through adversarial analysis: attacks on link reliability failed (mmWave is sensor, not link); attacks on bandwidth failed (UTLP doesn't carry payload); valid attacks on drift/noise led to honest scope limitation — valid for seismology (fast events), NOT valid for geodesy (slow events). The phrase "UTLP is the heartbeat, not the blood" emerged from clarifying layer separation.

On AI-generated educational materials: This document exists because Steve saw how existing pieces fit together, but creating a well-structured lab manual is a different skill than recognizing architectural connections. AI made it practical to translate working knowledge into teachable form. The physics is real, the code examples work, the deployment tiers are honest—the AI just did the organizing and explaining.

The underlying architecture emerged from therapeutic device development (bilateral stimulation for EMDR) and generalized through collaborative human-AI exploration to span applications from handheld medical devices to atmospheric sensing to building safety to interstellar detection. That exploration is documented in the parent prior art publication.

On the nature of the work: Steve describes his contribution not as invention but as discovery—recognizing how existing pieces should already fit together. The timing protocols existed. The hardware existed. The physics was understood. The work was seeing the connections that were always there but somehow missing, like replacing lost pages in a book that had already been written. If someone builds a fancy tornado detection system or building safety system from this, that's invention. The foundation documented here is restoration.

On why the architecture is scale-invariant: Long before knowing the term, Steve's mental model for distributed sensing was shaped by VLBI (Very Long Baseline Interferometry)—the technique of using multiple radio telescopes as a single virtual aperture. Telescopes don't physically connect; they timestamp observations precisely; correlation happens later; the aperture exists in the math, not in physical structure. That's this architecture: UTLP provides the timestamps, RFIP provides the geometry, SMSP coordinates the observation. The scale invariance—from nanometers to light-years—isn't an accident. It reflects a cognitive style that thinks in concepts and relationships rather than mental images. When you don't picture a telescope array and try to shrink it, but instead hold the abstract structure of "distributed observers, synchronized time, virtual aperture," the structure has no inherent size. The architecture works at every scale because the mind that produced it doesn't think in scale-bound images.

The core insight—that synchronized time plus known geometry enables coordination without continuous communication—applies unchanged across all these scales. This manual teaches you the small end so you can see how it extends.

Repository: github.com/mlehaptics

License: This document is released under Creative Commons CC0 (public domain dedication). Build on it, modify it, use it commercially, no attribution required.


"You're not building a toy. You're building the smallest instantiation of an architecture that extends from bilateral therapy devices to building safety to structural monitoring to atmospheric sensing to interstellar detection."


— End of Lab Manual —