introduction
- Use
.mdfiles for episodes when you want static content - Use
.Rmdfiles 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.