3. Correlations

3. Correlations#

[1]:
from pathlib import Path
from pickle import load

import covseisnet as csn

Read covariance#

[2]:
# Save
with open("../data/undervolc_covariance.pickle", "rb") as file:
    data = load(file)
    times = data["times"]
    frequencies = data["frequencies"]
    covariances = data["covariances"]


Plot correlation#

[3]:
import matplotlib.pyplot as plt

frequency_band = 0.2, 1

# Calculate cross-correlation
lags, pairs, cross_correlation = csn.calculate_cross_correlation_matrix(
    covariances
)

# Get inter-station distance
distances = csn.pairwise_great_circle_distances_from_stats(
    cross_correlation.stats
)

# Bandpass filter
# cross_correlation = cross_correlation.mean(axis=1)
cross_correlation = cross_correlation[:, 0]
cross_correlation = cross_correlation.bandpass(frequency_band)
cross_correlation = cross_correlation.taper()

# Plot
fig, ax = plt.subplots()
for i_pair, pair in enumerate(pairs):
    cc = cross_correlation[i_pair] / abs(cross_correlation[i_pair]).max() * 0.5
    ax.plot(lags, cc + distances[i_pair], color="C0", alpha=0.8)

# Plot some velocity
v = 3.2
ax.axline((0, 0), slope=v, color="C1", label=f"{v} km/s", ls="--")
ax.axline((0, 0), slope=-v, color="C1", ls="--")

ax.legend(loc="lower left")
ax.grid()
periods = list(sorted(int(1 / f) for f in frequency_band))
ax.set_title(
    f"Cross-correlation functions between {periods[0]} and {periods[1]} seconds"
)
ax.set_xlabel("Lag time (s)")
ax.set_ylabel("Pairwise distance (km)")
[3]:
Text(0, 0.5, 'Pairwise distance (km)')
../_images/tutorials_03_correlation_5_1.png