Learn R Programming

IRISMustangMetrics (version 2.4.7)

PSDMetric: Power Spectral Density of a signal

Description

The PSDMetric() function performs spectral analysis on a seismic signal and returns 'PSD' metrics with discretized spectral components as well as other metrics based on PSDs.

Usage

PSDMetric(st,
          linLoPeriod=4/(st@traces[[1]]@stats@sampling_rate),
          linHiPeriod=100,
          evalresp=NULL,
          noCorrection=FALSE)

Value

A list of lists is returned containing:

  • spectrumMetricList = list of SpectrumMetric objects

  • correctedPsdDF = dataframe of starttime, endtime, frequency (Hz), power (dB) values

  • pdfDF = dataframe of frequency (Hz), power (dB), hits (count) values

  • svMetricList = list of SingleValueMetric objects:

    • pct_above_nhnm

    • pct_below_nlnm

    • dead_channel_lin

Arguments

st

a Stream object containing a seismic signal

linLoPeriod

low end of the period band use for calculating the linear dead channel metric

linHiPeriod

high end of the period band use for calculating the linear dead channel metric

evalresp

dataframe of freq, amp, phase information matching output of getEvalresp, optional

noCorrection

boolean (default=FALSE), TRUE=only generate list of PSDs uncorrected for instrument response; FALSE=generate list of uncorrected PSDs, list of corrected PSDs, dataframe of PDF values,and PSD-derived metrics

Author

Jonathan Callahan jonathan@mazamascience.com

Details

This function calculates average power spectra for a seismic signal as described in the McNamara paper. See the McNamaraPSD method of Stream objects in the IRISSeismic package for details.

If optional evalresp dataframe is not supplied, the code will call getEvalresp to obtain response information from webservices.

Uncorrected spectral density values are returned in spectrumMetricList in units of dB.

Instrument response corrected spectral density values are returned in correctedPsdDF in units of dB.

Probability Density Function (PDF) histogram values are returned in pdfDF.

Other metrics calculated from the PSDs are returned in svMetricList. These metrics are:

pct_above_nhnm -- "percent above New High Noise Model"

Percentage of PSD values that are above the New High Noise Model for their frequency. Only frequencies less than the sample_rate/3 are considered to avoid instrument response effects as you approach the nyquist frequency. This value is calculated over the entire time period.

pct_below_nlnm -- "percent below New Low Noise Model"

Percentage of PSD values that are below the New Low Noise Model for their frequency. Only frequencies less than the sample_rate/3 are considered to avoid instrument response effects as you approach the nyquist frequency. This value is calculated over the entire time period.

dead_channel_lin -- "dead channel metric - linear fit"

A "dead channel" metric is calculated from the mean of all the PSDs generated. (Typically 47 for a 24 hour period.) Values of the PSD mean line over the band (linLoPeriod:linHiPeriod) are fit to a line. The dead_channel_lin metric is the standard deviation of the fit residuals. Lower numbers indicate a better fit and a higher likelihood that the mean PSD is linear -- an indication of a "dead channel".

Note: The dead_channel_exp metric has been removed.

References

Seismic Noise Analysis System Using Power Spectral Density Probability Density Functions (McNamara and Boaz 2005)

Observations and Modeling of Seismic Background Noise (Peterson 1993).

See Also

SpectrumMetric SingleValueMetric

Examples

Run this code
  if (FALSE) {
# Open a connection to EarthScope webservices
iris <- new("IrisClient")

# NOTE:  The following trace has 1.728 million points.
# NOTE:  Downloading and calculating PSD may take a few seconds.
starttime <- as.POSIXct("2010-02-27",tz="GMT")
endtime <- as.POSIXct("2010-02-28",tz="GMT")
  
# Get the waveform
st <- getDataselect(iris,"IU","ANMO","00","BHZ",starttime,endtime)

# Calculate the PSD metric and show the SingleValueMetric results
listOfLists <- PSDMetric(st)
svMetricList <- listOfLists[['svMetricList']]

dummy <- lapply(svMetricList, show)
  }

Run the code above in your browser using DataLab