25 lines
1006 B
Python
25 lines
1006 B
Python
import numpy as np
|
|
|
|
|
|
def sp_jk(freq_bins, amp_spectra):
|
|
# Calculate source parameters using J and K Snoke's integrals
|
|
# with correction for the limited frequency band. The routine
|
|
# ignores quality factor in calculations (ideally, the spectrum
|
|
# should be corrected for attenuation before).
|
|
|
|
# For each waveform, calculate the J and K integrals and source parameters.
|
|
|
|
Av = amp_spectra * 2 * np.pi * freq_bins
|
|
|
|
jf = (2 * np.trapz(Av ** 2, x=freq_bins) + 2 / 3 * (amp_spectra[0] * 2 * np.pi * freq_bins[0]) ** 2 *
|
|
freq_bins[0] + 2 * (amp_spectra[-1] * 2 * np.pi * freq_bins[-1]) ** 2 * freq_bins[-1])
|
|
|
|
kf = (2 * np.trapz(amp_spectra ** 2, x=freq_bins) + 2 * amp_spectra[0] ** 2 * freq_bins[0] +
|
|
2 / 3 * amp_spectra[-1] ** 2 * freq_bins[-1])
|
|
|
|
# Calculation of spectral level and corner frequency
|
|
mo = 2 * (kf ** 3 / jf) ** 0.25 # spectral level from Snoke's integrals
|
|
fo = np.sqrt(jf / kf) / (2 * np.pi) # corner frequency
|
|
|
|
return mo, fo
|