introduction


  • Use .md files for episodes when you want static content
  • Use .Rmd files for episodes when you need to generate output
  • Run sandpaper::check_lesson() to identify any issues with your lesson
  • Run sandpaper::build_lesson() to preview your lesson locally

Intro and Theory Refresher


  • GPR uses EM waves to detect subsurface features.
  • A trace is a time series of reflections from a point.
  • SEG-Y files can be visualized using ObsPy.
  • GPR emits broadband electromagnetic pulses; reflections arise at contrasts in relative permittivity, conductivity, or magnetic permeability.
  • A GPR trace is amplitude versus two-way travel time at a single surface position; a radargram is a collection of traces along a profile.
  • SEG-Y is a common container for GPR; ObsPy can read variable-length traces and expose headers needed for plotting and basic QC.
  • Antenna frequency controls depth–resolution trade-off: lower frequency penetrates deeper with coarser resolution; higher frequency resolves finer targets at shallower depths.

AGC


  • GPR amplitudes decay with travel time due to geometric spreading, absorption, and scattering.

  • Automatic Gain Control (AGC) rescales amplitudes within a moving window to balance early and late signals.

  • Window length controls the behavior: short windows emphasize local contrasts but may boost noise, long windows smooth variations but may underrepresent weak reflections.

  • AGC does not recover true amplitudes; it enhances relative visibility for interpretation.

  • In Python, AGC can be implemented by normalizing each trace sample by the RMS of its surrounding window.

Background Removal


  • Background in GPR sections often comes from consistent system responses, coupling effects, or horizontal banding.

  • Removing the background enhances true reflections and reduces horizontal noise.

  • A simple method is subtracting the mean trace across all traces.

Time-Zero Correction


  • Time-zero is the instant when the transmitted pulse enters the ground.
  • System delays and geometry shift the apparent time-zero away from zero samples.
  • Automatic methods detect first breaks using the signal envelope and amplitude thresholds.
  • Aligning traces to a common first break ensures consistent interpretation.
  • Time-zero correction is essential for reliable time-to-depth conversion and structural imaging.

Bandpass Filtering


  • GPR data often contain low-frequency drift and high-frequency noise; a bandpass suppresses both.
  • Cutoffs must lie within (0, Nyquist); selecting them near the antenna’s effective bandwidth improves SNR.
  • Zero-phase forward-backward filtering (filtfilt) preserves arrival timing and polarity.
  • Overly narrow passbands may distort wavelets or remove useful signal.
  • Frequency spectra of representative traces help justify passband choices quantitatively.

Deconvolution


  • GPR records are a convolution of the source wavelet and subsurface reflectivity.
  • Deconvolution aims to remove the source wavelet, recovering a spike-like reflectivity.
  • Spectral deconvolution divides the spectrum by its amplitude, with stabilization to avoid noise blow-up.
  • Spiking deconvolution sharpens arrivals but requires careful parameter tuning.
  • Stabilization controls the trade-off between resolution gain and noise amplification.

Wrap-up and Discussion


  • GPR traces are raw recordings that must be processed for reliable interpretation.
  • Each processing step—AGC, background removal, time-zero correction, filtering, deconvolution—has a clear physical motivation.
  • Parameters (e.g., filter cutoffs, stabilization constants) control the trade-off between resolution and noise.
  • No single workflow is universal; effective GPR interpretation requires testing, visual inspection, and critical judgment.
  • Python offers a transparent environment for experimenting with and combining different methods.