https://github.com/leonard-seydoux/arrayprocessing
Array processing
https://github.com/leonard-seydoux/arrayprocessing
coherence detection eigenvalues eigenvectors pca-analysis python3 seismology signal-processing spatial-data-analysis
Last synced: 10 months ago
JSON representation
Array processing
- Host: GitHub
- URL: https://github.com/leonard-seydoux/arrayprocessing
- Owner: leonard-seydoux
- Created: 2018-01-11T12:23:53.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-03-19T08:49:50.000Z (almost 8 years ago)
- Last Synced: 2025-01-22T13:26:18.794Z (12 months ago)
- Topics: coherence, detection, eigenvalues, eigenvectors, pca-analysis, python3, seismology, signal-processing, spatial-data-analysis
- Language: Python
- Size: 952 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Array processing
Analaysing seismic data with array processing tools.
## Get and pre-process seismic data
### Read
The package provides a top-level function `read` (module: `data.py`) based on the Obspy's read function. It returns a object of class `stream` with all the useful tools provided by Obspy. It can read almost all file formats (`.sac`, `.mseed`, ...).
```
import arrayprocessing as ap
stream = ap.read('/path/to/traces/*.sac')
```
### Pre-processing methods
In addition to the original methods attached to Obspy's `stream` class, some new methods are defined.
#### Trim the data without using `UTCDateTime` in the main code
This method simply allows not to import `obspy.UTCDateTime` in the main script in order to trim the data with the `trim` method. Additional kwargs to `starttime` and `endtime` are passed to the `trim` method of `obspy.core.stream.Stream` class.
```
import arrayprocessing as ap
stream = ap.read('/path/to/traces/*.sac')
stream.cut(starttime='2017-01-01 01:34', endtime='2017-01-01 01:34')
```
#### Binarize the traces in the temporal domain
Divides each trace by its envelope. In order not to divide by 0, a regularization kwarg `epsilon` is define by default to `1e-10`.
```
import arrayprocessing as ap
stream = ap.read('/path/to/traces/*.sac')
stream.binarize()
```
#### Stationarize in the temporal domain
Divides each trace by their smooth envelopes. The smoothing is calculated with the Savitzky-Golay algorithm. The `window` kwargs controls the length of smoothing window, and the `order` controls the order of the method. Defaults are `window=11, order=1`. As with the binarization methods, a default `epsilon` is defined to `1e-10`.
```
import arrayprocessing as ap
stream = ap.read('/path/to/traces/*.sac')
stream.binarize()
```
#### Whiten each trace in the frequency domain
Divides each trace spectrum with its amplitude. if the `method` kwarg is set to `onebit`, no smoothing is applied to the amplitude. Otherwise, the amplitude is smoothed with the Savitzky-Golay algorithm, with a window of length `smooth` and a order 1.
```
import arrayprocessing as ap
stream = ap.read('/path/to/traces/*.sac')
stream.whiten(method='smooth, smooth=11)
```
### Show data
You can use the methods provided by obspy in order to show the data. Also, a `show` method is defined, currently under tests.
## Calculate spectrograms
The spectrograms are calculated with the short-time Fourier transform function provided by Scipy (`scipy.stft`). This function is computationally efficient. The parameters are `segment_duration_sec` which defines the duration of the window in seconds onto which the spectra are calculated. The `bandwidth` kwarg is usedful to cut the spectra within a frequency band (in Hz), and therefore to reduce the memory usage.
Other keyword arguments are passed to the `scipy.stft` function. Default are:
- Sampling rate `fs` (obtained from the stream directly)
- Number of dots per segments `nperseg` (obtained from the stream directly)
- Overlapping between segments `noverlap`: by default 50%
- Number of frequency points for calculating the Fourier transform `nfft` (by default next power of two of the segments length)
- Window shape `window` (by default Hanning)
- Calculate one side of the spectra `return_onesided` (by default `true` because signals are real, we do not need both parts because of hermitian symmetry)
The function returns three variables: the spectrograms (`shape = [n_traces, n_frequencies, n_times]`), the frequncies in Hz, and the times in absolute `matplotlib.dates format`.
```
import arrayprocessing as ap
stream = ap.read('/path/to/traces/*.sac')
# some preprocessing
spectrogram, frequencies, times = stream.stft(segment_duration_sec=16, bandwidth=[3, 10])
```
### Show speectrograms
You can show the spectrograms with the `spectrogram` method. Doc will come soon.

## Show speectrograms
You can show the spectrograms with the `spectrogram` method. Doc will come soon.

## correlation.py

## antenna.py
## synthetic.py
# To-do list
- Create a `calculate_coherence()` method with a kwarg `shanon_index` or `spectral_width`
- Enrich the `get_eigenvectors()` method with datetime selection and frequency range selection
- Create `self.z` set to 0 when antenna is 2D, otherwise set to th values available in txt or csv file.
- Add a warning message in synthetic.spherical if none of the `xyz` or `llz` kwargs is set. Clarify `spheri al` function.