watex.methods.em.Processing.zrestore#

Processing.zrestore(*, tensor=None, component=None, buffer=None, method='pd', **kws)[source]#

Fix the weak and missing signal at the ‘dead-band`- and recover the missing impedance tensor values.

The function uses the complete frequency (frequency with clean data) collected thoughout the survey to recover by inter/extrapolating the missing or weak frequencies thereby restoring the impedance tensors at that ‘dead-band’. Note that the ‘dead- band’ also known as ‘attenuation -band’ is where the AMT signal is weak or generally abscent.

One main problem in collecting Natural Source Audio-Magnetotellurics data is the signal level in the ‘attenuation band’. Compared to the Controlled Source Audio-Magnetotellurics method (Wang and Tan, 2017; Zonge and Hughes, 1991),the natural signals are not under our control and suffer from frequency ranges with little or no signal. Most notably, the Natural Source Audio-Magnetotellurics ‘dead-band’ between approximately 1 kHz and 4 kHz, but also a signal low in the vicinityof 1 Hz where the transition to magnetospheric energy sources occurs (Goldak and Olson, 2015). In this band, natural source signals are generally absent. The EM energy is dissipated and often cultural electromagnetic noise fills the gap (Zonge, 2000). The response is extrapolated from results observed top frequencies( For instance at 20, 40, 250, and 500 Hz).Experience indicates that the natural source signal level at 2000 Hz can be expected to approach 10-6 γ/√Hz (Zheng, 2010; Zonge, 2000).

Parameters:
  • tensor (str, optional) – Name of the tensor. It can be [ resistivity|phase|z|frequency]. If the name of tensor is given, function returns the tensor value in two-dimensionals composed of (n_freq , n_sites) where n_freq=number of frequency and n_sations number of sites. Note that if the tensor is passed as boolean values True, the resistivity tensor is exported by default and the component should be the component passed to Processing at initialization.

  • buffer (list [max, min] frequency in Hz) – list of maximum and minimum frequencies. It must contain only two values. If None, the max and min of the clean frequencies are selected. Moreover the [min, max] frequency should not compulsory to fit the frequency range in the data. The given frequency can be interpolated to match the best closest frequencies in the data.

  • method (str, optional) – Method of interpolation. Can be base for scipy.interpolate.interp1d mean or bff for scaling methods and pd for pandas interpolation methods. Note that the first method is fast and efficient when the number of NaN in the array if relatively few. It is less accurate to use the base interpolation when the data is composed of many missing values. Alternatively, the scaled method(the second one) is proposed to be the alternative way more efficient. Indeed, when mean argument is set, function replaces the NaN values by the nonzeros in the raw array and then uses the mean to fit the data. The result of fitting creates a smooth curve where the index of each NaN in the raw array is replaced by its corresponding values in the fit results. The same approach is used for bff method. Conversely, rather than averaging the nonzeros values, it uses the backward and forward strategy to fill the NaN before scaling. mean and bff are more efficient when the data are composed of a lot of missing values. When the interpolation method is set to pd, function uses the pandas interpolation but ended the interpolation with forward/backward NaN filling since the interpolation with pandas does not deal with all NaN at the begining or at the end of the array. Default is pd.

  • fill_value (array-like or extrapolate, optional) – If a ndarray (or float), this value will be used to fill in for requested points outside of the data range. If not provided, then the default is NaN. The array-like must broadcast properly to the dimensions of the non-interpolation axes. If a two-element tuple, then the first element is used as a fill value for x_new < x[0] and the second element is used for x_new > x[-1]. Anything that is not a 2-element tuple (e.g., list or ndarray, regardless of shape) is taken to be a single array-like argument meant to be used for both bounds as below, above = fill_value, fill_value. Using a two-element tuple or ndarray requires bounds_error=False. Default is extrapolate.

  • kws (dict) – Additional keyword arguments from interpolate1d().

Returns:

  • Array-like of watex.external.z.Z objects

  • Array collection of new Z impedances objects with dead-band tensor

  • recovered. watex.externals.z..Z are ndarray (nfreq, 2, 2).

  • 2x2 matrices for components xx, xy and yx, yy.

References

Goldak, D.K., Olson, R.W., 2015. New developments in Audio-Magnetotellurics exploration :

Case study from Darnley Bay. CSEG Rec. 22–27.

Wang, K., Tan, H., 2017. Research on the forward modeling of Controlled Source Audio-Magnetotellurics in

three-dimensional axial anisotropic media. J. Appl. Geophys. 146, 27–36. https://doi.org/10.1016/j.jappgeo.2017.08.007

Zonge, I., 2000. Natural Source Audio-Magnetotellurics Imaging. 3322 East Fort Lowell Road, Tucson, AZ 85716 USA. Zonge, L., Hughes, L.J., 1991. Controlled Source Audio-Magnetotellurics. Soc. Explor. Geophys. 2, 713–809.

Examples

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from watex.methods.em import Processing
>>> path2edi = 'data/edis'
>>> pObjs= Processing().fit(path2edi)
>>> # One can specify the frequency buffer like the example below, However
>>> # it is not necessaray at least there is a a specific reason to fix the frequencies
>>> buffer = [1.45000e+04,1.11500e+01]
>>> zobjs_b =  pObjs.zrestore(buffer = buffer
                                    ) # with buffer