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;
}
}