generate_variation
generate_variation¶
Location: variations/variations.py
Description¶
generate_variation applies a sequence of transformations to a given waveform based on variant-specific parameters. This function enables systematic signal augmentation by introducing time shifts, time warping, amplitude modifications, and baseline drift, simulating realistic signal variations observed in biomedical signals, environmental measurements, and synthetic datasets.
The function allows for controlled distortions by substituting segments of the signal, modifying timing characteristics, and adjusting amplitude properties.
Notes¶
- The function modifies the waveform incrementally, applying each transformation in sequence.
- Waveform substitution (
wave_with_score) enables partial signal replacement. - Time-warping and time-shifting introduce timing irregularities, mimicking delays and non-uniform temporal distortions.
- Amplitude modifications (gain variation and modulation) adjust signal intensity to reflect sensor inconsistencies or environmental factors.
- Baseline drift transformations simulate slow signal shifts due to sensor degradation or environmental drift.
Parameters¶
-
transformed_wave (
numpy.ndarray):
The waveform to be modified. -
variant_params (
dict):
A dictionary containing transformation parameters. Expected keys:
'time_shift'→ Amount of time shift applied.
'time_warp'→ Factor for non-linear time distortion.
'gain_variation'→ Multiplicative factor for global amplitude scaling.
'amplitude_modulation'→ Strength of sinusoidal amplitude variation.
'modulation_with_region'→ Localized amplitude modulation within a signal segment.
'baseline_drift'→ Global baseline drift factor.
'baseline_drift_region'→ Localized baseline drift applied within a fraction of the signal.
'f_min','f_max'→ Start and end fractions defining localized transformations.
'wave_with_score'→ Probability score for waveform substitution. -
t (
numpy.ndarray):
Time vector for the waveform. -
n_sinusoids (
int):
Number of sinusoids in the replacement signal (used whenwave_with_scoreis applied). -
amplitude_range (
tupleoffloat):
Range for generating new waveform segments when replacing parts of the signal. -
base_frequency_range (
tupleoffloat):
Frequency range for generating replacement signal segments. -
interrupt_params (
listofdict):
List of regions defining interrupt locations in the signal, so wave with score will not substitute it. Example:[{'start_idx': 100, 'duration_idx': 50}]
Returns¶
- transformed_wave (
numpy.ndarray):
The modified waveform after applying all transformations.
Usage Example¶
import numpy as np
import SigVarGen as svg
# Generate a synthetic signal
t = np.linspace(0, 1, 1000)
wave = np.sin(2 * np.pi * 5 * t)
inter_params = [{'start_idx': 0, 'duration_idx': 0}]
# Define variation parameters
variant_params = {
"time_shift": 20,
"time_warp": 0.05,
"gain_variation": 1.2,
"amplitude_modulation": 0.4,
"modulation_with_region": 0.3,
"baseline_drift": 0.2,
"baseline_drift_region": 0.15,
"f_min": 0.1,
"f_max": 0.8,
"wave_with_score": 0.5
}
# Generate a signal variation
modified_wave = svg.generate_variation(
wave, variant_params, t, 5, (0.1, 1.0), (10, 100), inter_params
)
print("Transformed Waveform Shape:", modified_wave.shape)