1#ifndef __FFT_DECON_OPERATOR_H__
2#define __FFT_DECON_OPERATOR_H__
3#include "mspass/algorithms/TimeWindow.h"
4#include "mspass/algorithms/deconvolution/ComplexArray.h"
5#include "mspass/seismic/CoreTimeSeries.h"
6#include "mspass/seismic/PowerSpectrum.h"
7#include "mspass/utility/Metadata.h"
8#include <boost/archive/text_iarchive.hpp>
9#include <boost/archive/text_oarchive.hpp>
10#include <gsl/gsl_errno.h>
11#include <gsl/gsl_fft_complex.h>
13namespace mspass::algorithms::deconvolution {
76 double df(
const double dt) {
78 period =
static_cast<double>(
nfft) * dt;
91 const double t0parent);
106 friend boost::serialization::access;
107 template <
class Archive>
108 void save(Archive &ar,
const unsigned int version)
const {
115 template <
class Archive>
void load(Archive &ar,
const unsigned int version) {
122 this->wavetable = gsl_fft_complex_wavetable_alloc(this->nfft);
124 this->workspace = gsl_fft_complex_workspace_alloc(this->nfft);
127 BOOST_SERIALIZATION_SPLIT_MEMBER()
144std::vector<double> circular_shift(
const std::vector<double> &d,
const int i0);
153 const std::string &window_name,
154 const std::string &caller);
177void ValidatePowerSpectrumCoversDC(
179 const std::string &caller);
190std::vector<double> ExtractLagWindow(ComplexArray &fft_buffer,
191 const int output_length,
192 const int sample_shift);
199unsigned int nextPowerOf2(
unsigned int n);
Defines a time window.
Definition TimeWindow.h:12
Interfacing object to ease conversion between FORTRAN and C++ complex.
Definition ComplexArray.h:41
Object to hold components needed in all fft based decon algorithms.
Definition FFTDeconOperator.h:21
void changeparameter(const mspass::utility::Metadata &md)
Reconfigure the FFT operator from Metadata.
Definition FFTDeconOperator.cc:79
gsl_fft_complex_workspace * workspace
GSL scratch workspace allocated for nfft.
Definition FFTDeconOperator.h:101
FFTDeconOperator()
Construct an empty FFT operator shell.
Definition FFTDeconOperator.cc:13
mspass::seismic::CoreTimeSeries FourierInverse(const ComplexArray &winv, const ComplexArray &sw, const double dt, const double t0parent)
Return inverse wavelet for Fourier methods.
Definition FFTDeconOperator.cc:144
gsl_fft_complex_wavetable * wavetable
GSL factorization table allocated for nfft.
Definition FFTDeconOperator.h:99
void change_shift(const int shift)
Set the sample offset used to unwrap deconvolution lag windows.
Definition FFTDeconOperator.h:62
int operator_size()
Return the current FFT work-buffer length.
Definition FFTDeconOperator.h:68
~FFTDeconOperator()
Release allocated GSL FFT work objects.
Definition FFTDeconOperator.cc:63
ComplexArray winv
Frequency-domain inverse wavelet coefficients for derived operators.
Definition FFTDeconOperator.h:103
int operator_shift()
Return the current deconvolution lag-window sample shift.
Definition FFTDeconOperator.h:70
int sample_shift
Sample offset used to place zero lag in deconvolution outputs.
Definition FFTDeconOperator.h:97
int nfft
Current FFT work-buffer length in samples.
Definition FFTDeconOperator.h:95
int get_size()
Return the current FFT work-buffer length.
Definition FFTDeconOperator.h:64
int get_shift()
Return the current deconvolution lag-window sample shift.
Definition FFTDeconOperator.h:66
double df(const double dt)
Return frequency spacing for the current FFT length.
Definition FFTDeconOperator.h:76
FFTDeconOperator & operator=(const FFTDeconOperator &parent)
Assign FFT size and lag shift from another operator.
Definition FFTDeconOperator.cc:69
void change_size(const int nfft_new)
Change the FFT work-buffer length.
Definition FFTDeconOperator.cc:120
Scalar time series data object.
Definition CoreTimeSeries.h:17
Definition PowerSpectrum.h:11