コード例 #1
0
def instantaneous_phase2(syn, obs, nt, dt, eps=0., *args, **kwargs):
    """
    Alterative instantaneous phase function

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    esyn = abs(analytic(syn))
    eobs = abs(analytic(obs))

    esyn1 = esyn + eps * max(esyn)
    eobs1 = eobs + eps * max(eobs)
    esyn3 = esyn**3 + eps * max(esyn**3)

    diff1 = (syn / esyn1) - (obs / eobs1)
    diff2 = (hilbert(syn) / esyn1) - (hilbert(obs) / eobs1)

    part1 = diff1 * hilbert(syn)**2 / esyn3
    part2 = diff2 * syn * hilbert(syn) / esyn3
    part3 = diff1 * syn * hilbert(syn) / esyn3 - diff2 * syn**2 / esyn3

    wadj = part1 - part2 + hilbert(part3)

    return wadj
コード例 #2
0
ファイル: misfit.py プロジェクト: bch0w/seisflows
def envelope3(syn, obs, nt, dt, eps=0., *args, **kwargs):
    """
    Envelope cross-correlation lag from Yuan et al. 2015, Eq. B-4

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    env_syn = abs(analytic(syn))
    env_obs = abs(analytic(obs))

    return Traveltime(env_syn, env_obs, nt, dt)
コード例 #3
0
ファイル: misfit.py プロジェクト: bch0w/seisflows
def envelope2(syn, obs, nt, dt, *args, **kwargs):
    """
    Envelope amplitude ratio from Yuan et al. 2015 Eq. B-1

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    env_syn = abs(analytic(syn))
    env_obs = abs(analytic(obs))

    raise NotImplementedError
コード例 #4
0
def instantaneous_phase(syn, obs, nt, dt, eps=0.05, *args, **kwargs):
    """
    Instantaneous phase difference from Bozdag et al. 2011 Eq. 27

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    r = np.real(analytic(syn))
    i = np.imag(analytic(syn))
    phi_syn = np.arctan2(i, r)

    r = np.real(analytic(obs))
    i = np.imag(analytic(obs))
    phi_obs = np.arctan2(i, r)

    phi_rsd = phi_syn - phi_obs
    env_syn = abs(analytic(syn))
    env_max = max(env_syn**2.)

    wadj_1 = phi_rsd * np.imag(analytic(syn)) / (env_syn**2. + eps * env_max)
    wadj_2 = np.imag(analytic(phi_rsd * syn / (env_syn**2. + eps * env_max)))

    wadj = wadj_1 + wadj_2

    return wadj
コード例 #5
0
ファイル: misfit.py プロジェクト: bch0w/seisflows
def envelope(syn, obs, nt, dt, *args, **kwargs):
    """
    Waveform envelope difference from Yuan et al. 2015 Eq. 9

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    env_syn = abs(analytic(syn))
    env_obs = abs(analytic(obs))

    # Residual of envelopes
    env_rsd = env_syn - env_obs

    return np.sqrt(np.sum(env_rsd * env_rsd * dt))
コード例 #6
0
def envelope(syn, obs, nt, dt, eps=0.05, *args, **kwargs):
    """
    Waveform envelope difference from Yuan et al. 2015 Eq. 16

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    env_syn = abs(analytic(syn))
    env_obs = abs(analytic(obs))

    env_tmp = (env_syn - env_obs) / (env_syn + eps * env_syn.max())

    wadj = env_tmp * syn - np.imag(analytic(env_tmp * np.imag(analytic(syn))))

    return wadj
コード例 #7
0
ファイル: math.py プロジェクト: bch0w/seisflows
def hilbert(w):
    """
    Take the Hilbert transform of some function to get the analytic signal

    TODO Change the naming here, it seems confusing to rename a scipy function
    TODO and then overwrite its name with this function.

    :type w: np.array
    :param w: signal data, must be real
    :rtype: float
    :return: imaginary part of the analytic signal
    """
    return np.imag(analytic(w))
コード例 #8
0
ファイル: misfit.py プロジェクト: bch0w/seisflows
def instantaneous_phase2(syn, obs, nt, dt, eps=0., *args, **kwargs):
    """
    Alterative instantaneous phase function

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    env_syn = abs(analytic(syn))
    env_obs = abs(analytic(obs))

    env_syn1 = env_syn + eps * max(env_syn)
    env_obs1 = env_obs + eps * max(env_obs)

    diff = (syn / env_syn1) - (obs / env_obs1)

    return np.sqrt(np.sum(diff * diff * dt))
コード例 #9
0
def envelope3(syn, obs, nt, dt, eps=0., *args, **kwargs):
    """
    Envelope lag from Yuan et al. 2015 Eq. B-2, B-5

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    env_syn = abs(analytic(syn))
    env_obs = abs(analytic(obs))

    env_rat = np.zeros(nt)
    env_rat[1:-1] = (env_syn[2:] - env_syn[0:-2]) / (2. * dt)
    env_rat[1:-1] /= env_syn[1:-1]
    env_rat *= misfit.envelope3(syn, obs, nt, dt)

    wadj = -env_rat * syn + hilbert(env_rat * hilbert(env_syn))

    return wadj
コード例 #10
0
ファイル: misfit.py プロジェクト: bch0w/seisflows
def instantaneous_phase(syn, obs, nt, dt, *args, **kwargs):
    """
    Instantaneous phase difference from Bozdag et al. 2011

    :type syn: np.array
    :param syn: synthetic data array
    :type obs: np.array
    :param obs: observed data array
    :type nt: int
    :param nt: number of time steps in the data array
    :type dt: float
    :param dt: time step in sec
    """
    r = np.real(analytic(syn))
    i = np.imag(analytic(syn))
    phi_syn = np.arctan2(i, r)

    r = np.real(analytic(obs))
    i = np.imag(analytic(obs))
    phi_obs = np.arctan2(i, r)

    phi_rsd = phi_syn - phi_obs

    return np.sqrt(np.sum(phi_rsd * phi_rsd * dt))
コード例 #11
0
ファイル: math.py プロジェクト: HongjianFang/seisflows
def hilbert(w):
    return np.imag(analytic(w))
コード例 #12
0
def hilbert(w):
    return np.imag(analytic(w))