Learn R Programming

eseis (version 0.8.0)

model_amplitude: Model source amplitude by amplitude-distance model fitting

Description

The function fits one of several models of signal amplitude attenuation and returns a set of model parameters, including the source amplitude (a_0).

Usage

model_amplitude(
  data,
  model = "SurfSpreadAtten",
  distance,
  source,
  d_map,
  coupling,
  v,
  q,
  f,
  k,
  a_0
)

Value

List with model results, including a_0 (source amplitude), residuals (model residuals), coefficients

model coefficients.

Arguments

data

Numeric matrix or eseis object, seismic signals to work with. Since the function will calculate the maxima of the data it is usually the envolopes of the data that should be used here. In an extreme case, a vector with just the maximum amplitudes recorded at each station can be provided, as well.

model

Character value, model to fit the data. One out of the list in the details section. Default is "SurfSpreadAtten".

distance

Numeric vector with distance of station locations to source. Alternatively, the distance can be calculated by providing the source coordinates (xy) and distance maps (d_map)

source

Numeric vector of length two, location of the seismic source to model (x and y coordinates).

d_map

List object, distance maps for each station (i.e., SpatialGridDataFrame objects). Output of distance_map.

coupling

Numeric vector, coupling efficiency factors for each seismic station. The best coupled station (or the one with the highest amplification) must receive 1, the others must be scaled relatively to this one.

v

Numeric value, mean velocity of seismic waves (m/s). Only relevant for models accounting for unelastic attenuation (see details).

q

Numeric value, quality factor of the ground. Only relevant for models accounting for unelastic attenuation (see details).

f

Numeric value, frequency for which to model the attenuation. Only relevant for models accounting for unelastic attenuation (see details).

k

Numeric value, fraction of surface wave contribution to signals. Only relevant for models that include mixture of surface and body waves (see details).

a_0

Logical value, start parameter of the source amplitude, if not provided, a best guess is made as 100 times the maximum amplitude value of the data set.

Author

Michael Dietze

Details

Depending on the choice of the model to fit, several parameters can (or should) be provided, e.g. f,q, v, k, and most importantly, a_0. If more signals than free parameters are available, the missing parameters may be estimated during the fit, but without any checks of quality and meaningfulness. The parameter a_0 will be defined as 100 times the maximum input amplitude, by default. The parameters f will be set to 10 Hz, q to 50, v to 1000 m/s and k to 0.5.

ISSUES: account for non-fixed parameters, especially k

The following amplitude-distance models are available:

  • "SurfSpreadAtten", Surface waves including geometric spreading and unelastic attenuation

  • "BodySpreadAtten", Body waves including geometric spreading and unelastic attenuation

  • "SurfBodySpreadAtten", Surface and body waves including geometric spreading and unelastic attenuation

  • "SurfSpread", Surface waves including geometric spreading, only

  • "BodySpread", Body waves including geometric spreading, only

  • "SurfBodySpread", Surface and body waves including geometric spreading, only

**SurfSpreadAtten** The model is based on Eq. 17 from Burtin et al. (2016):

$$a_d = a_0 / sqrt(d) * exp(-(pi * f * d) / (q * v))$$

where a_0 is the source amplitude, a_d the amplitude as recorded by a sensor at distance d, f is the center frequency of the signal, q the ground quality factor and v the seismic wave velocity.

**BodySpreadAtten** The model is based on Eq. 16 from Burtin et al. (2016):

$$a_d = a_0 / d * exp(-(pi * f * d) / (q * v))$$

where a_0 is the source amplitude, a_d the amplitude as recorded by a sensor at distance d, f is the center frequency of the signal, q the ground quality factor and v the seismic wave velocity.

**SurfBodySpreadAtten** The model based on Eqs. 16 and 17 from Burtin et al. (2016):

$$a_d = k * a_0 / sqrt(d) * exp(-(pi * f * d) / (q * v)) + (1 - k) * a_0 / d * exp(-(pi * f * d) / (q * v))$$

where a_0 is the source amplitude, a_d the amplitude as recorded by a sensor at distance d, f is the center frequency of the signal, q the ground quality factor, v the seismic wave velocity, and n and m two factors determining the relative contributions of the two wave types, thus summing to 1.

**BodySpread** The model is simply accounting for geometric spreading

$$a_d = a_0 / d$$

where a_0 is the source amplitude, a_d the amplitude as recorded by a sensor at distance d.

**SurfSpread** The model is simply accounting for geometric spreading

$$a_d = a_0 / sqrt(d)$$

where a_0 is the source amplitude, a_d the amplitude as recorded by a sensor at distance d.

**SurfBodySpread** The model is simply accounting for geometric spreading

$$a_d = k * (a_0 / d) + (1 - k) * a_d / sqrt(d)$$

where a_0 is the source amplitude, a_d the amplitude as recorded by a sensor at distance d, and n and m two factors determining the relative contributions of the two wave types, thus summing to 1.

**References** - Burtin, A., Hovius, N., and Turowski, J. M.: Seismic monitoring of torrential and fluvial processes, Earth Surf. Dynam., 4, 285–307, https://doi.org/10.5194/esurf-4-285-2016, 2016.

Examples

Run this code

if (FALSE) {

 ## create synthetic DEM
dem <- terra::rast(nrows = 20, ncols = 20, 
                   xmin = 0, xmax = 10000, 
                   ymin= 0, ymax = 10000, 
                   vals = rep(0, 400))

## define station coordinates
sta <- data.frame(x = c(1000, 9000, 5000, 9000),
                  y = c(1000, 1000, 9000, 9000),
                  ID = c("A", "B", "C", "D"))
 
## create synthetic signal (source in towards lower left corner of the DEM)
s <- rbind(dnorm(x = 1:1000, mean = 500, sd = 50) * 50,
           dnorm(x = 1:1000, mean = 500, sd = 50) * 2,
           dnorm(x = 1:1000, mean = 500, sd = 50) * 1,
           dnorm(x = 1:1000, mean = 500, sd = 50) * 0.5)

## calculate spatial distance maps and inter-station distances
D <- eseis::spatial_distance(stations = sta[,1:2],
                             dem = dem)

model_amplitude(data = s, 
                source = c(500, 600), 
                d_map = D$maps, 
                v = 500, 
                q = 50, 
                f = 10)

model_amplitude(data = s, 
                distance = c(254, 8254, 9280, 11667),
                model = "SurfBodySpreadAtten", 
                v = 500, 
                q = 50, 
                f = 10, 
                k = 0.5)

}

Run the code above in your browser using DataLab