ELF · VLF · Earth-Ionosphere Cavity

Schumann Resonance Receiver

Build a highly sensitive 7.83 Hz induction coil receiver to detect the Earth's natural electromagnetic heartbeat. No radio license required — pure analog physics.

7.83 Hz · fundamental mode

01 Overview

The Schumann resonances are global electromagnetic resonances excited by lightning in the cavity between Earth's surface and ionosphere. The fundamental is ~7.83 Hz, with harmonics at ~14.3, 20.8, 27.3, and 33.8 Hz.

This receiver uses a massive induction coil (antenna) and an ultra-low-noise amplifier with ~10,000× gain. The signal is then digitized by a 24-bit ADC or USB sound card and processed with FFT to reveal the peaks.

Key Challenges

  • Signal is ~1 picoTesla — 50 million times weaker than Earth's DC field
  • Must reject 50/60 Hz mains hum by >80 dB
  • Requires remote, quiet location away from power lines
  • Needs long integration (5-30 minutes) for clean spectrum

Live Simulation

What 7.83 Hz looks like after amplification.

TIMEBASE: 500ms/div 7.83 Hz

02 Parts List

QtyComponentSpecNotes
1Coil FormPVC 200mm Ø × 500mmOr 8" sonotube. Larger = better
~7 kmMagnet WireAWG 28 (0.32mm) enamelled~18,000-25,000 turns. ~1.5kΩ DC
1Instrumentation AmpINA128P / AD620Ultra-low noise, critical
2Op-AmpOPA2188, LT1028, or NE5532Low 1/f noise essential
1ADCADS1256 24-bit or USB sound cardSound card = easiest (192kHz)
1Raspberry Pi 4or laptopFor logging
2Met Poly Cap220nF 1%Coil tuning to 7.83Hz
4Resistors27k 1% metal filmTwin-T notch
4Capacitors100nF C0GTwin-T notch (50/60Hz)
4Resistors53.6k 1%LPF 30Hz
4Capacitors100nFLPF 30Hz
1Battery Pack2× 9V Li-IonNO switch-mode supply!
1Shielded BoxDie-cast aluminumPreamp enclosure
Avoid switch-mode power supplies. Use batteries only. A single phone charger 20m away will swamp the signal.

03 Coil Winding Specs

Target Inductance80 - 300 H
Target Resistance800Ω - 2kΩ
Turns18,000 - 25,000
WireAWG 28 (0.32mm) or AWG 30
Form200mm diameter, 400-600mm long
WindingLayer-wound, ~80 turns/layer
Tuning CapC = 1/((2πf)²L) ≈ 150-330nF

For 7.83 Hz, with L=150H: C ≈ 2.76 nF. Wait — that's wrong for parallel? Actually use series resonance: Most builders use a large ferrite core or add parallel capacitor of 100-470nF to PEAK at 7-10Hz. Experimentally tune: sweep with signal generator, find peak.

Pro Tips

  • Wind with a drill + counter. 20k turns = ~6 hours.
  • Apply thin epoxy every 5 layers to prevent microphonics.
  • Use bifilar winding for humbucking: wind two wires, connect end-to-start to double turns and reject E-field.
  • Orient coil HORIZONTALLY, N-S alignment for max signal.
  • Bury 30cm deep or place in forest 100m+ from buildings.
  • Mu-metal shield around preamp only, NOT coil.

04 Amplifier Circuit Critical

Total gain ~10,000 (80dB). Three stages: Instrumentation amp → 50/60Hz Twin-T notch → 4th-order 30Hz low-pass.

ASCII Schematic
COIL (L ~150H, R ~1.5k)          INA128 (G=1000)
      ┌───/\/\/\/\───┐              ┌─────────────┐
      │   ~~~~~~~~   │              │             │
      └─┬─────────┬──┘              │ +IN     OUT ├─────> to Stage 2
        │    C1   │    ┌────────────┤ -IN         │
        │  220nF  │    │            │      RG     │
        │    │    │   10k           └──────┬──────┘
       GND  GND   │  to GND                │
                  └─ 10k to GND         51Ω (G=1+50k/Rg)
                       (bias)

STAGE 2: Twin-T Notch (60Hz, use 50Hz values in parens)
IN ──[10k]──┬──[10k]──┬──> to LPF
            │         │
           100nF     100nF
            │         │
           GND  ┌──[27k(33k)]──┐
                │    200nF     │
                └───[27k(33k)]─┘

STAGE 3: 2x Sallen-Key LPF, fc=30Hz
OPA2188, R=53.6k, C=100nF (per stage), Gain=1.6 each
Final OUT ─[1k]─> ADC (protects input)

Component Values (per channel)

05 Wiring Diagram

INDUCTION COIL 20k turns ~150H PREAMP INA128 + OPA2188 Gain 10k, Notch, LPF ±9V Battery ADC ADS1256 24-bit or USB soundcard RASPBERRY PI 4 Python + FFT logging 200 SPS, 24h files SSD storage twisted pair shielded coax SPI / USB Earth Rod

06 Assembly Steps

  1. Wind the coil: Mount PVC on lathe/drill. Wind 18-22k turns in neat layers. Measure DC resistance every 5k turns. Target 1.2-1.8kΩ. Finish with kapton tape.
  2. Tune coil: Connect LCR meter or signal generator. Add 220nF parallel cap. Sweep 5-15Hz, adjust cap for peak near 8Hz.
  3. Build preamp: Use perfboard or PCB. Keep INA128 input traces <2cm, guarded. Solder Rg (51Ω) directly across pins 1-8.
  4. Test gain: Inject 7.83 Hz, 100µVpp via 1MΩ resistor. Output should be ~1Vpp. Verify notch: 60Hz input should be <-40dB.
  5. Enclose: Mount preamp in die-cast box. Coil connects via shielded twisted pair (shield = GND only at preamp). Battery inside box.
  6. Deploy: Place coil horizontal, align to North-South. Minimum 100m from houses, power lines, fences. Bury cable 10cm.
  7. Grounding: Drive 50cm copper rod near preamp. Connect enclosure to earth. Do NOT ground coil (floating differential).
  8. Connect ADC: Output via 1kΩ to soundcard line-in (96kHz) or ADS1256 AIN0. Use USB isolator if laptop powered.
  9. First light: Run Python script below for 10 minutes. You should see mains hum initially, then after notch, noise floor ~10µV.
  10. Long run: Log overnight. Schumann peaks appear clearest 02:00-06:00 local time.

07 Python Data Logging & FFT

Records at 200 Hz, applies 30Hz LPF, computes Welch PSD over 10-minute windows. Saves PNG and CSV.

schumann_logger.py
#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt, welch
import time, datetime, csv

# --- CONFIG ---
FS = 200              # Sample rate (Hz)
DURATION = 600        # seconds per file (10 min)
F_LOW = 0.5
F_HIGH = 30.0
GAIN = 10000          # your preamp gain
ADC_VREF = 2.5        # for ADS1256, or 1.0 for soundcard

def acquire(fs, seconds):
    """Replace with your ADC read. Example for USB soundcard:"""
    try:
        import sounddevice as sd
        print(f"[REC] {seconds}s @ {fs}Hz...")
        data = sd.rec(int(seconds*fs), samplerate=fs, channels=1,
                     dtype='float32', blocking=True)
        return data.flatten()
    except:
        # synthetic test signal
        t = np.arange(0, seconds, 1/fs)
        sig = 0.7*np.sin(2*np.pi*7.83*t) + 0.3*np.sin(2*np.pi*14.3*t)
        noise = np.random.normal(0, 0.5, len(t))
        return sig + noise

def butter_bandpass(low, high, fs, order=4):
    nyq = fs/2
    b, a = butter(order, [low/nyq, high/nyq], btype='band')
    return b, a

def process(data, fs):
    b, a = butter_bandpass(F_LOW, F_HIGH, fs)
    filt = filtfilt(b, a, data)
    # Welch: 60s segments for 0.016 Hz resolution
    f, Pxx = welch(filt, fs, nperseg=fs*60, noverlap=fs*30)
    asd = np.sqrt(Pxx) / GAIN  # V/rtHz at coil
    return f, asd, filt

def main():
    while True:
        ts = datetime.datetime.utcnow().strftime("%Y%m%d_%H%M%S")
        raw = acquire(FS, DURATION)
        f, asd, filt = process(raw, FS)

        # Save CSV
        with open(f'schumann_{ts}.csv','w', newline='') as cf:
            w = csv.writer(cf)
            w.writerow(['freq_hz','asd_V_per_rtHz'])
            w.writerows(zip(f, asd))

        # Plot
        plt.figure(figsize=(10,5))
        plt.semilogy(f, asd)
        for hz in [7.83, 14.3, 20.8, 27.3, 33.8]:
            plt.axvline(hz, color='cyan', ls='--', alpha=0.5, lw=1)
        plt.xlim(1, 40)
        plt.ylim(1e-9, 1e-6)
        plt.xlabel('Frequency (Hz)')
        plt.ylabel('ASD (V/√Hz at coil)')
        plt.title(f'Schumann Resonance - {ts} UTC')
        plt.grid(True, alpha=0.3, which='both')
        plt.tight_layout()
        plt.savefig(f'schumann_{ts}.png', dpi=150)
        plt.close()
        print(f"[OK] Saved {ts}")
        time.sleep(2)

if __name__ == "__main__":
    main()

Install: pip install numpy scipy matplotlib sounddevice. For ADS1256 use pip install adafruit-circuitpython-ads1x15 and replace acquire().

08 Calibration Tips

09 Expected Results

After 30 minutes integration in a quiet rural location, you should see:

  • Clear peak at 7.83 ±0.15 Hz, Q ~4-6
  • Second harmonic ~14.3 Hz (often stronger in daytime)
  • Third ~20.8 Hz, fourth ~27.3 Hz visible on good nights
  • Amplitude at coil: ~0.3-1.0 pT/√Hz → after 10k gain = 10-30 µV/√Hz at ADC
  • No 50/60 Hz spike >10× noise floor (if notch works)

If you see only mains hum: move farther, check battery, verify twin-T values, add common-mode choke on cable.

Typical Spectrum

7.83 14.3 20.8

Log frequency (1-40 Hz) vs amplitude. Real data is noisier; averaging reveals peaks.