Brief description of class still missing. More...
#include <LinearFKActiveStationSignals.h>
Public Member Functions | |
void | beginPreprocess (const TimeRange &range, double smoothingFactor) |
void | endPreprocess () |
LinearFKActiveStationSignals (const StationSignals *originalSignals) | |
void | normalize (const NormalizationParameters &p) |
void | taper (const TimeRangeParameters &range, const TaperParameters ¶m) |
Brief description of class still missing.
Full description of class still missing
LinearFKActiveStationSignals::LinearFKActiveStationSignals | ( | const StationSignals * | originalSignals | ) | [inline] |
: FKStationSignals(originalSignals) {}
void LinearFKActiveStationSignals::beginPreprocess | ( | const TimeRange & | range, |
double | smoothingFactor | ||
) |
User range might be enlarged to provide frequency smoothing.
References GeopsyCore::StationProcessSignals::copyOriginalSignal(), GeopsyCore::TimeRange::lengthSeconds(), GeopsyCore::StationProcessSignals::processed(), GeopsyCore::TimeRange::setEnd(), GeopsyCore::TimeRange::setStart(), GeopsyCore::TimeRange::start(), GeopsyCore::DoubleSignal::subtractValue(), and TRACE.
Referenced by LinearFKActiveArrayStations::beginPreprocess().
{ TRACE; ASSERT(smoothingFactor>=1.0); TimeRange smoothRange=range; smoothRange.setStart(smoothRange.start()); smoothRange.setEnd(smoothRange.start()+range.lengthSeconds()*smoothingFactor); copyOriginalSignal(0, smoothRange); processed(0)->subtractValue(); }
References GeopsyCore::DoubleSignal::fastFourierTransform(), GeopsyCore::StationProcessSignals::processed(), GeopsyCore::TaperParameters::setAlpha(), GeopsyCore::TaperParameters::setWindow(), GeopsyCore::DoubleSignal::taper(), and TRACE.
Referenced by LinearFKActiveArrayStations::endPreprocess().
{ TRACE; // Set a 10% taper in time domain TaperParameters param; param.setWindow(TaperParameters::Tukey); param.setAlpha(0.2); processed(0)->taper(TimeRange(0.0, processed(0)->duration()), param); // Switch to frequency domain processed(0)->fastFourierTransform(DoubleSignal::Spectrum); /*for(int i=0; i<nSamples/2;i++) printf("%lg %lg\n",(double)i*_signals[0].processed->duration(), _signals[0].processed->spectrumAmplitude(i));*/ }
void LinearFKActiveStationSignals::normalize | ( | const NormalizationParameters & | p | ) |
References QGpCoreTools::endl(), GeopsyCore::DoubleSignal::energy(), GeopsyCore::DoubleSignal::fastFourierTransform(), GeopsyCore::StationSignals::firstValidSignal(), GeopsyCore::DoubleSignal::maximumAmplitude(), GeopsyCore::NormalizationParameters::maximumFrequency(), GeopsyCore::NormalizationParameters::minimumFrequency(), GeopsyCore::SignalTemplate< sampleType >::multiply(), GeopsyCore::StationProcessSignals::originalSignals(), GeopsyCore::StationProcessSignals::processed(), SAFE_UNINITIALIZED, GeopsyCore::Signal::sourceReceiverDistance(), QGpCoreTools::sqrt(), QGpCoreTools::tr(), TRACE, and GeopsyCore::NormalizationParameters::type().
Referenced by LinearFKActiveArrayStations::normalize().
{ TRACE; Signal * sig=originalSignals()->firstValidSignal(); if(sig) { double fac; SAFE_UNINITIALIZED(fac,0); switch (p.type()) { case NormalizationParameters::None: fac =1.0; break; case NormalizationParameters::SurfaceAttenuation: fac=sqrt(sig->sourceReceiverDistance()); break; case NormalizationParameters::VolumeAttenuation: fac=sig->sourceReceiverDistance(); break; case NormalizationParameters::MaximumAmplitude: fac=processed(0)->maximumAmplitude(0, processed(0)->nSamples()-1); break; case NormalizationParameters::SpectrumEnergy: processed(0)->fastFourierTransform(DoubleSignal::Spectrum); fac=processed(0)->energy(p.minimumFrequency(), p.maximumFrequency()); processed(0)->fastFourierTransform(DoubleSignal::Waveform); break; } if(fac>0.0) { processed(0)->multiply(1.0/fac); } else { App::stream() << tr("Null factor for nomalization, skipped") << endl; } } else { App::stream() << tr("Cannot calculate normalization for an empty station") << endl; } }
void LinearFKActiveStationSignals::taper | ( | const TimeRangeParameters & | range, |
const TaperParameters & | param | ||
) |
User range might be enlarged to provide frequency smoothing.
References GeopsyCore::TimeRangeParameters::absoluteRange(), QGpCoreTools::endl(), GeopsyCore::StationSignals::firstValidSignal(), GeopsyCore::TimeRange::lengthSeconds(), GeopsyCore::StationProcessSignals::originalSignals(), GeopsyCore::StationProcessSignals::processed(), GeopsyCore::DoubleSignal::taper(), QGpCoreTools::tr(), and TRACE.
Referenced by LinearFKActiveArrayStations::taper().
{ TRACE; Signal * sig=originalSignals()->firstValidSignal(); if(sig) { TimeRange r=range.absoluteRange(sig); processed(0)->taper(TimeRange(0.0, r.lengthSeconds()), param); } else { App::stream() << tr("Cannot calculate window lenght for an empty station") << endl; } }