SeisNoise.jl is designed for fast and easy ambient noise cross-correlation on the CPU and GPU in Julia.
| Documentation | Build Status | Coverage | Chat |
|---|---|---|---|
You can install the latest version of SeisNoise using the Julia package manager (Press ] to enter pkg).
From the Julia command prompt:
julia>]
(@v1.9) pkg> add SeisNoiseOr, equivalently, via the Pkg API:
julia> import Pkg; Pkg.add("SeisNoise")We recommend using the latest version of SeisNoise by updating with the Julia package manager:
(@v1.9) pkg> update SeisNoise- Built upon SeisBase for easy and fast I/O.
- Custom structures for storing Raw Data, Fourier Transforms of data, and cross-correlations
- CPU/GPU compatible functions for cross-correlation.
- Methods for dv/v measurements.
- Coming soon: Dispersion analysis.
Check out the SeisNoise GPU tutorial on NextJournal!
Once you have installed the package you can type using SeisNoise to start
cross-correlating. SeisNoise uses a functional syntax to implement cross-correlation. For example
using SeisNoise, SeisIO, Plots
fs = 40. # sampling frequency in Hz
freqmin,freqmax = 0.1,0.2 # min and max frequencies
cc_step, cc_len = 450, 1800 # corrleation step and length in S
maxlag = 60. # maximum lag time in correlation
s = "2019-02-03"
t = "2019-02-04"
S1 = get_data("FDSN","CI.SDD..BHZ",src="SCEDC",s=s,t=t)
S2 = get_data("FDSN","CI.PER..BHZ",src="SCEDC",s=s,t=t)
process_raw!(S1,fs)
process_raw!(S2,fs)
R = RawData.([S1,S2],cc_len,cc_step)
detrend!.(R)
taper!.(R)
bandpass!.(R,freqmin,freqmax,zerophase=true)
FFT = rfft.(R)
whiten!.(FFT,freqmin,freqmax)
C = correlate(FFT[1],FFT[2],maxlag)
clean_up!(C,freqmin,freqmax)
abs_max!(C)
plot(C)will produce this figure:
SeisNoise can process data and compute cross-correlations on the GPU with CUDA. The JuliaGPU suite provides a high-level interface for CUDA programming through the CUDA.jl package. CUDA.jl provides an the CuArray type for storing data on the GPU. Data in SeisNoise structures (R.x, F.fft, and C.corr fields, for RawData, FFTData, and CorrData, respectively) can move between an Array on the CPU to a CuArray on the GPU using the gpu and cpu functions, as shown below.
⚠️ Only Nvidia GPUs are suported at the moment. Hold in there for AMD/OpenCL support...
# create raw data and send to GPU
R = RawData(S1, cc_len, cc_step) |> gpu
R.x
72000×188 CUDA.CuArray{Float32,2,Nothing}
# send data back to the CPU
R = R |> cpu
R.x
72000×188 Array{Float32,2}All basic processing remains the same on the GPU. Here is a complete cross-correlation routine on the GPU:
# send data to GPU
R1 = RawData(S1, cc_len, cc_step) |> gpu
R2 = RawData(S2, cc_len, cc_step) |> gpu
R = [R1,R2]
# preprocess on the GPU
detrend!.(R)
taper!.(R)
bandpass!.(R,freqmin,freqmax,zerophase=true)
# Real FFT on GPU
FFT = rfft.(R)
whiten!.(FFT,freqmin,freqmax)
# compute correlation and send to cpu
C = correlate(FFT[1],FFT[2],maxlag) |> cpuProcessing times for a selection of routines on the GPU with Julia + GPU (white), Julia + CPU (black), and Python (grey). Currently these operations are implemented in SeisNoise on the GPU:
- Preprocessing:
detrend,demean,taper,onebit,smooth
- Filtering:
bandpass,bandstop,lowpass,highpass
- Fourier Domain:
whiten,rfft,irfft
- Cross-correlation:
correlate,cross-coherence,deconvolution
- Post-processing:
stack,filters, etc..
If you use SeisNoise in your work, please star the package and cite our work DOI: 10.1785/0220200192:
@article{SeisNoise.jl-2020,
author = {Clements, Timothy and Denolle, Marine A.},
title = {SeisNoise.jl: Ambient Seismic Noise Cross Correlation on the CPU and GPU in Julia},
journal = {Seismological Research Letters},
year = {2020},
month = {09},
issn = {0895-0695},
doi = {10.1785/0220200192},
url = {https://doi.org/10.1785/0220200192},
eprint = {https://pubs.geoscienceworld.org/srl/article-pdf/doi/10.1785/0220200192/5156069/srl-2020192.1.pdf},
}We welcome folks interested in contributing to SeisNoise. Please open an issue to let us know about bug reports, new methods/code, and or feature requests/usage cases. If you would like to submit a pull request (PR), please include accompanying tests.


