Waveform Double Difference Misfit
Warning
Please refer to the papers [Tromp2005] and [Yuan2016] for mathematical derivations of the waveform misfit function and cross correlation double difference measurement, from which this misfit function is derived.
For two stations, i and j, the waveform double difference misfit is defined as the squared difference of differences of observed and synthetic data. The misfit \(\chi(\mathbf{m})\) for a given Earth model \(\mathbf{m}\) at a given component is:
where \(\Delta{s}(t, \mathbf{m})_{ij}\) is the difference of synthetic waveforms s_i and s_j,
and \(\Delta{d}(t)\) is the difference of observed waveforms d_i and d_j,
The corresponding adjoint sources for the misfit function \(\chi(\mathbf{m})\) are defined as the difference of the differential waveform misfits,
Note
For the sake of simplicity we omit the spatial Kronecker delta and define the adjoint source as acting solely at the receiver’s location. For more details, please see [Tromp2005] and [Yuan2016].
Note
This particular implementation uses Simpson’s rule to evaluate the definite integral.
Usage
adjsrc_type = "waveform_dd"
The following code snippet illustrates the basic usage of the cross correlation traveltime misfit function. See the corresponding Config object for additional configuration parameters.
import pyadjoint
obs, syn = pyadjoint.get_example_data()
obs = obs.select(component="Z")[0]
syn = syn.select(component="Z")[0]
obs_2, syn_2 = pyadjoint.get_example_data()
obs_2 = obs_2.select(component="R")[0]
syn_2 = syn_2.select(component="R")[0]
config = pyadjoint.get_config(adjsrc_type="waveform_dd", min_period=20.,
max_period=100.)
# Calculating double-difference adjoint source returns two adjoint sources
adj_src, adj_src_2 = pyadjoint.calculate_adjoint_source(
config=config, observed=obs, synthetic=syn, windows=[(800., 900.)],
observed_2=obs_2, synthetic_2=syn_2, windows_2=[(800., 900.)]
)