Skip to main content

Normalized frequency index (nFI) computation for earthquake source spectra

Project description

py-nfi

PyPI version Python versions License: MIT

Compute the normalized frequency index (nFI) from earthquake spectra. nFI is a data-driven measure of the relative high-frequency content of a seismic source, providing an observation-based alternative to stress-drop estimation for characterizing source behavior at high frequencies.

Installation

pip install py-nfi

or, with conda:

conda install -c conda-forge py-nfi

py-nfi requires the following packages:

  • numpy
  • pandas
  • scipy
  • tqdm

Quick start

import numpy as np
import pandas as pd
from nfi import nFIEstimator

# df_records: one row per event-station record (a single observed spectrum)
# spectra:    N x nf array of signal amplitude spectra, aligned row-for-row
#             with df_records (the signal windows; noise spectra are used
#             upstream for signal-to-noise screening, not passed here). Each
#             record in spectra has already passed signal-to-noise criteria.
# f:          length-nf frequency array (0 to Nyquist)

est = nFIEstimator(df_records, spectra, f, save_dir="results/")
est.compute()

# per-event results, including the 'nfi' column, are written to results/
# and available as est.df_events

df_records structure

df_records must contain the following for each record at minimum:

  • event_name, the recorded event's unique identifier;
  • channel_name, the recording station's unique identifier;
  • emag, elat, elon, and edep (km), the event's magnitude and location ;
  • slat, slon, and selev, the station's location; and
  • deldist, the horizontal event-station distance in kilometers;

This pandas DataFrame should be of length N, with each row corresponding to the nth row in spectra. e* fields describe the event and s* fields describe the recording station.

Method

nFI is computed from spectra in three stages.

1. Frequency index. For every observed spectrum, we take the log ratio of the median amplitude in a high-frequency band to that in a low-frequency band:

logbeta = log10(A_HF) - log10(A_LF)

This quantifies the richness of high frequencies relative to low frequencies for a single recording. The low band should sample the flat portion of the displacement spectrum below the corner frequency, and the high band should sample the decay above it.

2. Path and station correction. Observed spectra carry path and station effects that must be removed to isolate source variability. For each target event, we identify small nearby "calibration" earthquakes recorded at the same stations. Differencing logbeta between a target and a calibration event at a shared station cancels the common station and path terms. Taking the median of these differences across calibration events per station, then the median across stations, yields the corrected source term dlogbeta for each event. Calibration events are selected within a narrow magnitude range and a limited horizontal and vertical distance of the target.

3. Magnitude correction. Larger earthquakes radiate proportionally less high-frequency energy, so dlogbeta retains a magnitude dependence. We estimate this trend by taking the median dlogbeta in magnitude bins, smoothing it, and subtracting the interpolated trend from each event. The result is nFI: by construction it has approximately zero median at any magnitude, with positive values indicating high-frequency enrichment and negative values indicating depletion.

For full detail and validation of the method, see Vandevert et al. (2026) below.

Reproducing the Ridgecrest results

Clone this repository:

git clone https://github.com/ivandevert/py-nfi your/local/save/path/

Download the precomputed, signal-to-noise passing spectra from (15 July 2026: COMING SOON -- email me for link) into the repo's ridgecrest/data/ subdirectory:

coming soon

Launch run_nfi_compute.ipynb and run all cells.

Citation

If you use this software, please cite:

Vandevert, I., Shearer, P. M., & Fan, W. (2026). Using a High-to-Low-Frequency Spectral Ratio to Distinguish Variations in Earthquake Source Properties. Bulletin of the Seismological Society of America. https://doi.org/10.1785/0120250171

License

Released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_nfi-0.1.3.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_nfi-0.1.3-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file py_nfi-0.1.3.tar.gz.

File metadata

  • Download URL: py_nfi-0.1.3.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for py_nfi-0.1.3.tar.gz
Algorithm Hash digest
SHA256 9b175aeb9a9bc4a4daf637d50a12beeac55677abea0ef0fa986b824ef0310475
MD5 e167025c1fb25edf477a34178ca8e7aa
BLAKE2b-256 f43450a0d37e99f0897c97fa70e613db5427c2e027111ece528b3e87dee49d83

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_nfi-0.1.3.tar.gz:

Publisher: publish.yml on ivandevert/py-nfi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file py_nfi-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: py_nfi-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for py_nfi-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0749101d448ecdaf785c983e1d4f82e5fcca05b0bfdc73abe210f4b853615b91
MD5 cfb6095bc314ec4c1aa0f07a4e85c19b
BLAKE2b-256 86b8f4b10b5ad04a30303089a918ec976789a43a8e090095ab5b551ade30434a

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_nfi-0.1.3-py3-none-any.whl:

Publisher: publish.yml on ivandevert/py-nfi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page