pycsamt.tdem.waveform#

Transmitter waveform models for TEM systems.

Classes

CustomWaveform(t_waveform, i_waveform, *[, ...])

User-defined waveform supplied as paired time/current arrays.

HalfSineWaveform([base_frequency, verbose, ...])

Half-sine transmitter current (used by some CSEM / airborne systems).

RampWaveform([base_frequency, ramp_off, ...])

Transmitter current with a finite linear ramp on switch-off.

SquareWaveform([base_frequency, duty_cycle, ...])

Ideal square-wave transmitter current (zero ramp time).

class pycsamt.tdem.waveform.SquareWaveform(base_frequency=25.0, duty_cycle=0.5, verbose=0, logger=None)[source]#

Bases: _WaveformBase

Ideal square-wave transmitter current (zero ramp time).

The waveform alternates between +I and −I at base_frequency Hz. For late-time TEM processing the waveform is treated as an ideal step turn-off, so this is the appropriate choice when ramp effects are negligible.

Parameters:
  • base_frequency (float) – Fundamental repetition rate in Hz (e.g. 25 Hz for ZongeGDP).

  • duty_cycle (float, optional) – Fraction of the half-period spent at full current. Default 0.5 (50 % duty cycle → symmetric square wave).

  • verbose (int)

  • logger (object | None)

Examples

>>> from pycsamt.tdem.waveform import SquareWaveform
>>> wf = SquareWaveform(base_frequency=25.0)
>>> wf.half_period
0.02
base_frequency: float = 25.0#
duty_cycle: float = 0.5#
verbose: int = 0#
logger: object | None = None#
current_at(t)[source]#

Return the normalised transmitter current (0–1) at times t.

Parameters:

t (array-like) – Times in seconds relative to the switch-off event at t = 0. Negative values are on-time; positive values are off-time.

Returns:

Current envelope (dimensionless, in [0, 1]).

Return type:

np.ndarray

class pycsamt.tdem.waveform.RampWaveform(base_frequency=25.0, ramp_off=0.0001, ramp_on=0.0, duty_cycle=0.5, verbose=0, logger=None)[source]#

Bases: _WaveformBase

Transmitter current with a finite linear ramp on switch-off.

The current decays linearly from 1 to 0 over ramp_off seconds starting at t = 0 (the nominal switch-off instant). This is the waveform required for accurate early-time TEM processing where the ramp duration is comparable to the first measurement gates.

Parameters:
  • base_frequency (float) – Fundamental repetition rate in Hz.

  • ramp_off (float) – Duration of the current turn-off ramp in seconds.

  • ramp_on (float, optional) – Duration of the current turn-on ramp in seconds. Rarely needed; default 0.0 (ideal step turn-on).

  • duty_cycle (float, optional) – Fraction of the half-period at full current (before ramp). Default 0.5.

  • verbose (int)

  • logger (object | None)

Examples

>>> from pycsamt.tdem.waveform import RampWaveform
>>> wf = RampWaveform(base_frequency=25.0, ramp_off=1e-4)
>>> wf.ramp_off
0.0001
base_frequency: float = 25.0#
ramp_off: float = 0.0001#
ramp_on: float = 0.0#
duty_cycle: float = 0.5#
verbose: int = 0#
logger: object | None = None#
current_at(t)[source]#

Return the normalised transmitter current (0–1) at times t.

Parameters:

t (array-like) – Times in seconds relative to the switch-off event at t = 0. Negative values are on-time; positive values are off-time.

Returns:

Current envelope (dimensionless, in [0, 1]).

Return type:

np.ndarray

class pycsamt.tdem.waveform.HalfSineWaveform(base_frequency=30.0, verbose=0, logger=None)[source]#

Bases: _WaveformBase

Half-sine transmitter current (used by some CSEM / airborne systems).

Parameters:
  • base_frequency (float) – Fundamental repetition rate in Hz.

  • verbose (int)

  • logger (object | None)

Examples

>>> from pycsamt.tdem.waveform import HalfSineWaveform
>>> wf = HalfSineWaveform(base_frequency=30.0)
>>> round(wf.half_period, 6)
0.016667
base_frequency: float = 30.0#
verbose: int = 0#
logger: object | None = None#
current_at(t)[source]#

Return the normalised transmitter current (0–1) at times t.

Parameters:

t (array-like) – Times in seconds relative to the switch-off event at t = 0. Negative values are on-time; positive values are off-time.

Returns:

Current envelope (dimensionless, in [0, 1]).

Return type:

np.ndarray

class pycsamt.tdem.waveform.CustomWaveform(t_waveform, i_waveform, *, base_frequency=25.0, verbose=0, logger=None)[source]#

Bases: _WaveformBase

User-defined waveform supplied as paired time/current arrays.

Parameters:
  • t_waveform (array-like of float) – Time samples in seconds (relative to switch-off at t = 0).

  • i_waveform (array-like of float) – Normalised current values (0–1) at each t_waveform sample.

  • base_frequency (float) – Fundamental repetition rate in Hz.

  • verbose (int)

  • logger (object | None)

Examples

>>> import numpy as np
>>> from pycsamt.tdem.waveform import CustomWaveform
>>> t = np.linspace(-0.02, 0.02, 200)
>>> I = np.where(t < 0, 1.0, 0.0)
>>> wf = CustomWaveform(t, I, base_frequency=25.0)
property base_frequency: float[source]#
current_at(t)[source]#

Return the normalised transmitter current (0–1) at times t.

Parameters:

t (array-like) – Times in seconds relative to the switch-off event at t = 0. Negative values are on-time; positive values are off-time.

Returns:

Current envelope (dimensionless, in [0, 1]).

Return type:

np.ndarray