# Core Functions¶

msnoise.move2obspy.myCorr(data, maxlag, plot=False, nfft=None)

This function takes ndimensional data array, computes the cross-correlation in the frequency domain and returns the cross-correlation function between [-maxlag:maxlag].

Parameters
• data (numpy.ndarray) – This array contains the fft of each timeseries to be cross-correlated.

• maxlag (int) – This number defines the number of samples (N=2*maxlag + 1) of the CCF that will be returned.

Return type

numpy.ndarray

Returns

The cross-correlation function between [-maxlag:maxlag]

msnoise.move2obspy.myCorr2(data, maxlag, energy, index, plot=False, nfft=None, normalized=False)

This function takes ndimensional data array, computes the cross-correlation in the frequency domain and returns the cross-correlation function between [-maxlag:maxlag].

Parameters
• data (numpy.ndarray) – This array contains the fft of each timeseries to be cross-correlated.

• maxlag (int) – This number defines the number of samples (N=2*maxlag + 1) of the CCF that will be returned.

Return type

numpy.ndarray

Returns

The cross-correlation function between [-maxlag:maxlag]

msnoise.move2obspy.pcc_xcorr(data, maxlag, energy, index, plot=False, nfft=None, normalized=False)
Parameters
• data

• maxlag

• energy

• index

• plot

• nfft

• normalized

Returns

msnoise.move2obspy.whiten(data, Nfft, delta, freqmin, freqmax, plot=False)

This function takes 1-dimensional data timeseries array, goes to frequency domain using fft, whitens the amplitude of the spectrum in frequency domain between freqmin and freqmax and returns the whitened fft.

Parameters
• data (numpy.ndarray) – Contains the 1D time series to whiten

• Nfft (int) – The number of points to compute the FFT

• delta (float) – The sampling frequency of the data

• freqmin (float) – The lower frequency bound

• freqmax (float) – The upper frequency bound

• plot (bool) – Whether to show a raw plot of the action (default: False)

Return type

numpy.ndarray

Returns

The FFT of the input trace, whitened between the frequency bounds

msnoise.move2obspy.whiten2(fft, Nfft, low, high, porte1, porte2, psds, whiten_type)

This function takes 1-dimensional data timeseries array, goes to frequency domain using fft, whitens the amplitude of the spectrum in frequency domain between freqmin and freqmax and returns the whitened fft.

Parameters
• data (numpy.ndarray) – Contains the 1D time series to whiten

• Nfft (int) – The number of points to compute the FFT

• delta (float) – The sampling frequency of the data

• freqmin (float) – The lower frequency bound

• freqmax (float) – The upper frequency bound

• plot (bool) – Whether to show a raw plot of the action (default: False)

Return type

numpy.ndarray

Returns

The FFT of the input trace, whitened between the frequency bounds

msnoise.move2obspy.smooth(x, window='boxcar', half_win=3)

some window smoothing

msnoise.move2obspy.getCoherence(dcs, ds1, ds2)
msnoise.move2obspy.mwcs(current, reference, freqmin, freqmax, df, tmin, window_length, step, smoothing_half_win=5)

The current time series is compared to the reference. Both time series are sliced in several overlapping windows. Each slice is mean-adjusted and cosine-tapered (85% taper) before being Fourier- transformed to the frequency domain. $$F_{cur}(\nu)$$ and $$F_{ref}(\nu)$$ are the first halves of the Hermitian symmetric Fourier-transformed segments. The cross-spectrum $$X(\nu)$$ is defined as $$X(\nu) = F_{ref}(\nu) F_{cur}^*(\nu)$$

in which $${}^*$$ denotes the complex conjugation. $$X(\nu)$$ is then smoothed by convolution with a Hanning window. The similarity of the two time-series is assessed using the cross-coherency between energy densities in the frequency domain:

$$C(\nu) = \frac{|\overline{X(\nu))}|}{\sqrt{|\overline{F_{ref}(\nu)|^2} |\overline{F_{cur}(\nu)|^2}}}$$

in which the over-line here represents the smoothing of the energy spectra for $$F_{ref}$$ and $$F_{cur}$$ and of the spectrum of $$X$$. The mean coherence for the segment is defined as the mean of $$C(\nu)$$ in the frequency range of interest. The time-delay between the two cross correlations is found in the unwrapped phase, $$\phi( u)$$, of the cross spectrum and is linearly proportional to frequency:

$$\phi_j = m. u_j, m = 2 \pi \delta t$$

The time shift for each window between two signals is the slope $$m$$ of a weighted linear regression of the samples within the frequency band of interest. The weights are those introduced by [Clarke2011], which incorporate both the cross-spectral amplitude and cross-coherence, unlike [Poupinet1984]. The errors are estimated using the weights (thus the coherence) and the squared misfit to the modelled slope:

$$e_m = \sqrt{\sum_j{(\frac{w_j \nu_j}{\sum_i{w_i \nu_i^2}})^2}\sigma_{\phi}^2}$$

where $$w$$ are weights, $$\nu$$ are cross-coherences and $$\sigma_{\phi}^2$$ is the squared misfit of the data to the modelled slope and is calculated as $$\sigma_{\phi}^2 = \frac{\sum_j(\phi_j - m \nu_j)^2}{N-1}$$

The output of this process is a table containing, for each moving window: the central time lag, the measured delay, its error and the mean coherence of the segment.

Warning

The time series will not be filtered before computing the cross-spectrum! They should be band-pass filtered around the freqmin-freqmax band of interest beforehand.

Parameters
• current (numpy.ndarray) – The “Current” timeseries

• reference (numpy.ndarray) – The “Reference” timeseries

• freqmin (float) – The lower frequency bound to compute the dephasing (in Hz)

• freqmax (float) – The higher frequency bound to compute the dephasing (in Hz)

• df (float) – The sampling rate of the input timeseries (in Hz)

• tmin (float) – The leftmost time lag (used to compute the “time lags array”)

• window_length (float) – The moving window length (in seconds)

• step (float) – The step to jump for the moving window (in seconds)

• smoothing_half_win (int) – If different from 0, defines the half length of the smoothing hanning window.

Return type

numpy.ndarray

Returns

[time_axis,delta_t,delta_err,delta_mcoh]. time_axis contains the central times of the windows. The three other columns contain dt, error and mean coherence for each window.