forked from pyrocko/grond
1
0
Fork 0

docs method/index.rst: work in progress

whitelist
Henriette Sudhaus 5 years ago committed by Sebastian Heimann
parent ac455f8e83
commit 6a849f5dee

@ -1,9 +1,9 @@
Analysers
=========
Analysers do their work before the actual optimisations. They analyse the data with respect to the
problem-dependent expected signal strength for each target and with respect to the
pre-event noise power.
Analysers do their work before the actual optimisations. They analyse the data
with respect to the problem-dependent expected signal strength for each target
and with respect to the pre-event noise power.
The analyser results are used to weight the data in the following optimisation.
TODO: review, link to the reference, link to papers?
@ -11,35 +11,44 @@ TODO: review, link to the reference, link to papers?
There are two analysers implemented so far, which work on waveform targets:
``TargetBalancingAnalyser``:
This analyser estimates the average, to be expected signal strength. This is done with
synthetic waveforms from random source models drawn from the model space defined in the
problem configuration. Waveforms form stations that are far away from the source will on
average have small signal strength, while stations close to the sources will have larger
signal amplitudes. To balance the importance of waveforms by removing such effects of
simple geometrical spreading the inverse of the mean signal strength is used as a ``balancing_weight``.
This analyser balances, based on estimated signal amplitudes, the waveform
target contributions to the misfit.
This is done with synthetic waveforms from random source models drawn from
the model space defined in the problem configuration. Waveforms from
stations that are far away from the source will on average have small
signal strengths, while targets of stations close to the sources will have
larger signal amplitudes. To balance the importance of waveforms the
inverse of the mean signal strength is used as a ``balancing_weight``.
Like this the effect of simple geometrical spreading or through the
radiation pattern is lessened in the misfit evaluation.
``NoiseAnalyser``:
This analyser evaluates the pre-event noise for the waveform targets to form empirical target weights.
High pre-event noise variance leads to a small target weight for the corresponding target
in the misfit calculation. It is assumed that the pre-event noise is random
background noise and stationary in the time from the first pre-event sample to the last analysed
phase sample. A check for significant earthquakes in the critical time frame can be enabled.
This analyser evaluates the pre-event noise for the waveform targets to
form empirical target weights. High pre-event noise variance leads to a
small target weight for the corresponding target in the misfit calculation.
It is assumed that the pre-event noise is random background noise and
stationary in the time from the first pre-event sample to the last analysed
phase sample. A check for significant earthquakes in the critical time
frame can be enabled.
``TargetBalancingAnalyser`` configuration
-----------------------------------------
The balancing of target is problem-dependent. This means the configuration of the problem also configures the
``target_balancing``. The only extra parameter needed is
The balancing of target is problem-dependent. This means the configuration of
the problem also configures the ``target_balancing``. The only extra parameter
needed is
``niterations``: an integer number that defines how many random waveform predictions
the target-balancing weights are based.
A meaningful number will depepend on the problem. Large model spaces (loose model parameter bounds)
may require a larger number of predicitons for more stable average values.
For more tightly constrained problems the signal strength at the targets for
the not-so-different source models, which are drawn from a small model space,
may not vary much. A smaller number may suffice.
Of course, the computional effort increases linearly with the number of ``niterations``.
``niterations``: an integer number that defines how many random waveform
predictions the target-balancing weights are based.
A meaningful number will depepend on the problem. Large model spaces
(loose model parameter bounds) may require a larger number of predicitons
for more stable average values. For more tightly constrained problems the
signal strength at the targets for the not-so-different source models,
which are drawn from a small model space, may not vary much. A smaller
number may suffice. Of course, the computional effort increases linearly
with the number of ``niterations``.
.. code-block :: sh
@ -51,19 +60,24 @@ The balancing of target is problem-dependent. This means the configuration of th
``NoiseAnalyser`` configuration
-------------------------------
This analyser is not strongly model-independent. Only the reference time given in 'event.txt' is used
to estimate the phase arrivals. These phase arrivals define what `pre-event` is.
This analyser is not strongly model-independent. Only the reference time given
in 'event.txt' is used to estimate the phase arrivals. These phase arrivals
define what `pre-event` is.
``nwindows``: is an integer number. It gives the number of sub-windows in which the noise trace of
duration ``pre_event_noise_duration`` is split. If larger than ``1``, the
noise variance is in each sub-window and the average noise variance is returned.
``nwindows``: is an integer number. It gives the number of sub-windows in which
the noise trace of duration ``pre_event_noise_duration`` is split. If
larger than ``1``, the noise variance is in each sub-window and the average
noise variance is returned.
``pre_event_noise_duration``: defines how long (in seconds) the pre-event noise trace is.
``pre_event_noise_duration``: defines how long (in seconds) the pre-event noise
trace is.
``check_events``: is a boolean value. If ``True`` the iris global earthquake catalog is looked up
to find if phase arrivals of other events may disturb the statistics of the noise.
``check_events``: is a boolean value. If ``True`` the iris global earthquake
catalog is looked up to find if phase arrivals of other events may disturb
the statistics of the noise.
``phase_def``: is a string that defines the reference phase for the pre-event time window.
``phase_def``: is a string that defines the reference phase for the pre-event
time window.
.. code-block :: sh

@ -1,33 +1,164 @@
Method
======
TODO: this section should be as self-contained as possible, describe the method
in general - give references to other sections how things are implemented in
Grond.
TODO: (general) this section should be as self-contained as possible, describe
the method in general - give references to other sections how things are
implemented in Grond.
The very core of the optimisation is the data-point-wise calculation of the
difference between observed and predicted data:
:math:`{\bf d}_{obs} - {\bf d}_{synth}`.
Here described is the method how Grond handles this difference to define
misfit and objective functions and how the optimisation is set up to find the
optimum models and to estimate model uncertainties.
`Observed data` here means full waveforms that are tapered to the defined
phases, restituted and filtered. `Synthetic waveforms` are the forward-
modelled waveforms that are tapered and filtered in the same way as the
observed waveforms.
From the difference :math:`{\bf d}_{obs} - {\bf d}_{synth}` the
`misfit` is defined based
on a certain L-norm and by the use of certain data weights. Then there are
the objective functions defined in Grond that determine the ...
Forward modelling with precalculated Green's functions
------------------------------------------------------
The forward modelling of synthetic data for earthquake source models requires
the calculation of the Green's functions between all source points and
receiver positions. In the general source problem, the positions of the sources
change during the optimisation because the misfit is calculated for many
different source receiver configurations. The calculation of the Green's
functions for each specific source-receiver pair would be a significant part
of the computational effort in the optimisation and make is rather slow.
Therefore, in Grond pre-calculated Green's functions used that have been
created with the `Pyrocko fomosto module`_.
...
Objective function design
-------------------------
multiple objective functions bootstrapping
....
Tapering
........
Tapering is done on the waveform targets and means that parts of the waveforms
containing the to-be-modelled, specific seismic phases are cut out. Only these
parts are then compared to forward modelled phases.
The taper window duration is configured ( target config link) as well as the
time.
TODO: set link (line above)
However, the tapering time is given with respect to the theoretic phase arrival
time. This arrival time depends on the source location, which is often part of
the optimisation itself and therefore may change continuously. Therefore,
restitution, tapering and filtering are done for each misfit calculation anew.
Grond uses the pyrocko `CosTaper`_ taper, which is a taper-function with
Cosine-shaped fade-outs. The `fade-out` time can be configured or it is
calculated as the inverse of the minimum frequency of the chosen bandbass
filter.
Filtering
.........
filtering to the desired fraquency band is part of the restitution.
TODO: Explain the ffactor
filter factor fmin/ffactor fmax *ffactor
Misfit calculation
..................
The core of the optimisation is the data-point-wise calculation of the
difference between observed and predicted data:
:math:`|{\bf d}_{obs} - {\bf d}_{synth}|`.
The misfit is based on the configurable :math:`L_x`-norm with
:math:`x \quad \epsilon \quad [1, 2, 3, ...]`. For the often used norms
:math:`L_1` and :math:`L_1`
.. math::
:nowrap:
\begin{align*}
\mathrm{misfit}& &= \lVert {\bf{d}}_{obs} - {{\bf d}}_{synth} \rVert_x &= \
[\sum{({ d}_{i, obs} - {d}_{i, synth})^x}]^{\frac{1}{x}}\\
\mathrm{misfit}&_{norm} &= \lVert {\bf{d}}_{obs} \rVert_x &= \
[\sum{{ d}_{i, obs}^x}]^{\frac{1}{x}}
\end{align*}
In case data weights are applied to the data points, the misfit calculation
changes in the general case of uncorrelated data errors to:
.. math::
\mathrm{misfit} = (\sum{ ({\bf W}^{\frac{1}{x}}({\bf{d}}_{obs} - \
{{\bf d}}_{synth}))^{x}})^{\frac{1}{x}}
\mathrm{misfit_{norm}} = (\sum{ ({\bf W}^{\frac{1}{x}}{\bf{d}}_{obs} )^{x}})^{\frac{1}{x}}
TODO: weights as factors (balancing manual bootstrap),
Normalization fa(obs - synth) / obs),
balancing_weight 1/misfit misfit is the synthetic waveform
normalization families
Weighting
.........
Grond implements several different kinds of weights. There are data weight
factors or weight matrices based on empirical data error estimates - sometimes
including data error correlation (``station_noise_weight``,
``variance_covariance_matrix``). There are data weight factors to balance the
signal amplitudes of waveforms (``target_balancing_weight``). And there are
arbitrary, user-defined data weights (``manual_weight``).
The different types of weights often apply to certain target groups.
**data weights**
**Weights for waveform targets**:
``balancing weights``: from ``TargetBalancingAnalyser``
``station_noise_weight``: from ``Noise_Analyser``
**satellite targets**
**GNSS targets**
The bootstrap method
--------------------
``bootstrap_weights``
Optimisation
------------
The BABO optimiser
..................
.. _Pyrocko fomosto module: https://pyrocko.org/docs/current/apps/fomosto/index.html
.. _CosTaper: https://pyrocko.org/docs/current/library/reference/trace.html#module-pyrocko.trace
Loading…
Cancel
Save