Načtení seismického signálu



Tohle je jen pro hezčí zobrazování:

In [1]:
%pylab inline
from __future__ import print_function
import matplotlib.pylab as plt
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = 12, 8
import warnings
warnings.filterwarnings("ignore")
Populating the interactive namespace from numpy and matplotlib

Z modulu ObsPy nám stačí nahrát jen některé funkce/objekty:

In [2]:
from obspy.core import read, UTCDateTime

Pomocí read můžeme načíst signály uložené v různých formátech, vše se pak převede do jednotného formátu objektu Stream.

Podporované formáty: MSEED, SAC, GSE2, SEISAN, SACXY, GSE1, Q, SH_ASC, SLIST, TSPAIR, Y, PICKLE, SEGY, SU, SEG2, WAV, DATAMARK, CSS, AH, PDAS, KINEMETRICS_EVT

In [3]:
st  = read('KHC_Z.mseed')  # MSEED
st += read('KHC_N.SAC')    # SAC
st += read('KHC_E.asc')    # ASCII from Seismic Handler
st += read('B16.QHD')      # Q by Seismic Handler
st += read('B29.gse2')     # GSE2
In [4]:
print(st)
9 Trace(s) in Stream:
CZ.KHC..HHZ | 2002-03-31T07:00:00.000000Z - 2002-03-31T08:00:00.000000Z | 100.0 Hz, 360001 samples
CZ.KHC..BHN | 2002-03-31T07:00:00.000000Z - 2002-03-31T08:00:00.000000Z | 20.0 Hz, 72001 samples
.KHC..BHE   | 2002-03-31T07:00:00.000000Z - 2002-03-31T08:00:00.000000Z | 20.0 Hz, 72001 samples
.B16..BHE   | 2002-03-31T06:52:55.464000Z - 2002-03-31T07:52:55.414000Z | 20.0 Hz, 72000 samples
.B16..BHN   | 2002-03-31T06:52:55.464000Z - 2002-03-31T07:52:55.414000Z | 20.0 Hz, 72000 samples
.B16..BHZ   | 2002-03-31T06:52:55.464000Z - 2002-03-31T07:52:55.414000Z | 20.0 Hz, 72000 samples
ZV.B29..SHE | 2002-03-31T06:52:53.683000Z - 2002-03-31T07:52:51.983000Z | 20.0 Hz, 71967 samples
ZV.B29..SHN | 2002-03-31T06:52:53.683000Z - 2002-03-31T07:52:51.983000Z | 20.0 Hz, 71967 samples
ZV.B29..SHZ | 2002-03-31T06:52:53.683000Z - 2002-03-31T07:52:51.983000Z | 20.0 Hz, 71967 samples

Stream je kontejner na jednotlivé objekty Trace, k tomu jsou navíc předdefinované funkce jako například decimate, detrend, filter, integrate, interpolate, merge, normalize, remove_response, rotate, simulate, spectrogram, taper, trigger, write, ... a plot.

stream

In [5]:
st.plot(equal_scale=False, size=(1200, 800))

Objekt Trace má v Trace.stats uložené metadata, samotný signál se nachází v Trace.data.

In [6]:
print(st[0].stats)
print('-----------------------------------')
print(st[1].stats)
print('-----------------------------------')
print(st[4].stats)
         network: CZ
         station: KHC
        location: 
         channel: HHZ
       starttime: 2002-03-31T07:00:00.000000Z
         endtime: 2002-03-31T08:00:00.000000Z
   sampling_rate: 100.0
           delta: 0.01
            npts: 360001
           calib: 1.0
         _format: MSEED
           mseed: AttribDict({u'record_length': 4096, u'encoding': u'STEIM1', 'filesize': 393216, u'dataquality': u'D', u'number_of_records': 96L, u'byteorder': u'>'})
-----------------------------------
         network: CZ
         station: KHC
        location: 
         channel: BHN
       starttime: 2002-03-31T07:00:00.000000Z
         endtime: 2002-03-31T08:00:00.000000Z
   sampling_rate: 20.0
           delta: 0.05
            npts: 72001
           calib: 1.0
         _format: SAC
             sac: AttribDict({u'cmpaz': 0.0, u'nzyear': 2002, u'nzjday': 90, u'khole': u'        ', u'knetwk': u'CZ      ', u'lcalda': 1, u'idep': 5, u'stdp': 0.0, u'iftype': 1, u'nvhdr': 6, u'nevid': 0, u'unused23': 0, u'internal0': 2.0, u'kcmpnm': u'BHN     ', u'nzsec': 0, u'kevnm': u'        ', u'stel': 700.0, u'cmpinc': 90.0, u'delta': 0.05, u'stla': 49.1309, u'norid': 0, u'nzmsec': 0, u'lpspol': 0, u'b': 0.0, u'e': 3600.0, u'leven': 1, u'stlo': 13.5782, u'kstnm': u'KHC     ', u'nzmin': 0, u'npts': 72001, u'nzhour': 7})
-----------------------------------
         network: 
         station: B16
        location: 
         channel: BHN
       starttime: 2002-03-31T06:52:55.464000Z
         endtime: 2002-03-31T07:52:55.414000Z
   sampling_rate: 20.0
           delta: 0.05
            npts: 72000
           calib: 1.0
         _format: Q
              sh: AttribDict({u'OPINFO': u'2.009305e+00', u'RECNO': 2, u'FROMQ': True, u'FILE': 'B16', u'C012': u'N', u'C013': u'N', u'C010': u'N', u'C011': u'N'})

Jednotlivé funkce můžeme řetězit, na objekt působí postupně zleva doprava.

In [7]:
t = UTCDateTime('2002-03-31T07:00:00')

st.copy().select(channel="*Z").trim(t, t+15*60).detrend('linear').normalize().plot(size=(1200, 400))