Compute MWCS (Moving Window Cross-Spectrum)

Warning

if using only mov_stack = 1, no MWCS jobs is inserted in the database and consequently, no MWCS calculation will be done! FIX!

Following Clarke et al (2011), we apply the MWCS to study the relative dephasing between Moving-Window stacks (“Current”) and a Reference using Moving-Window Cross-Spectral analysis. The jobs “T”o do have been inserted in the datavase during the stack procedure.

Configuration Parameters

  • mwcs.freqmin : The lower frequency bound to apply MWCS (default=0.1)

  • mwcs.freqmax : The upper frequency bound to apply MWCS (default=1.0)

  • mwcs.mwcs_wlen : Window length to perform MWCS (default=10.0)

  • mwcs.mwcs_step : Step of the windowing procedure in MWCS (default=2.0)

  • stack.mov_stack : A list of two parameters: the time to “roll” over (default 1 day) and the granularity (step) of the resulting stacked CCFs (default 1 day) to stack for the Moving-window stacks. This can be a list of tuples, e.g. ((‘1d’,’1d’),(‘2d’,’1d’)) corresponds to the MSNoise 1.6 “1,2” before. Time deltas can be anything pandas can interpret (“d”, “min”, “sec”, etc). (default=((‘1D’,’1D’)))

  • refstack.ref_begin : Start of REF period. Absolute date (YYYY-MM-DD) OR negative integer for rolling-index mode (e.g. -5 means 5 windows before current) (default=1970-01-01)

  • refstack.ref_end : End of REF period. Absolute date (YYYY-MM-DD) OR negative integer (e.g. -1 means exclude self). Must be > ref_begin when both are negative. (default=2100-01-01)

  • cc.cc_sampling_rate : Sampling Rate for the CrossCorrelation (in Hz) (default=20.0)

  • cc.maxlag : Maximum lag (in seconds) (default=120.0)

  • cc.components_to_compute : List (comma separated) of components to compute between two different stations (default=ZZ)

  • cc.components_to_compute_single_station : List (comma separated) of components within a single station. ZZ would be the autocorrelation of Z component, while ZE or ZN are the cross-components. Defaults to [], no single-station computations are done. (default=)

  • global.hpc : Is MSNoise going to run on an HPC? (default=N)

In short, both time series are sliced in several overlapping windows and preprocessed. The similarity of the two time-series is assessed using the cross-coherence between energy densities in the frequency domain. The time delay between the two cross correlations is found in the unwrapped phase of the cross spectrum and is linearly proportional to frequency. This “Delay” for each window between two signals is the slope of a weighted linear regression (WLS) of the samples within the frequency band of interest.

For each filter, the linear regression done in MWCS is performed between freqmin and freqmax and the window and overlap lengths configured using mwcs_wlen and mwcs_step.

The output of this process is a table of delays measured at each window in the functions. The following is an example for lag times between -115 and -90. In this case, the window length was 10 seconds with an overlap of 5 seconds.

      LAG_TIME          DELAY           ERROR         MEAN COHERENCE
-1.1500000000e+02 -1.4781146383e-01 5.3727119135e-02 2.7585243911e-01
-1.1000000000e+02 -6.8207526992e-02 2.0546644311e-02 3.1620999352e-01
-1.0500000000e+02 -1.0337029577e-01 8.6645155402e-03 4.2439269880e-01
-1.0000000000e+02 -2.8668775696e-02 6.2522215988e-03 5.7159849528e-01
-9.5000000000e+01  4.1803941008e-02 1.5102285789e-02 4.1238557789e-01
-9.0000000000e+01  4.8139400233e-02 3.2700657018e-02 3.0586187792e-01

This process is job-based, so it is possible to run several instances in parallel.

Once done, each job is marked “D”one in the database and, unless hpc is Y, DTT jobs are inserted/updated in the database.

To run this step:

$ msnoise cc dtt compute_mwcs

This step also supports parallel processing/threading:

$ msnoise -t 4 cc dtt compute_mwcs

will start 4 instances of the code (after 1 second delay to avoid database conflicts). This works both with SQLite and MySQL but be aware problems could occur with SQLite.

Parallel Processing

See also

Reading these results in Python — use MSNoiseResult:

from msnoise.results import MSNoiseResult
from msnoise.core.db import connect
db = connect()
r = MSNoiseResult.from_ids(db, ...)  # include the steps you need
# then call r.get_mwcs(...)

See Reading outputs with MSNoiseResult for the full guide and all available methods.