Commit 5241d409 authored by thomas.forbriger's avatar thomas.forbriger
Browse files

[FEATURE] (libtfsxx): implement new filter GaussianNoise

The filter GaussianNoise is provided in tidofi through keyword noi.
It adds white Gaussian Noise of a given rms amplitude (specified through
filter parameter) to each time series.

The filter is implemented in libtsxx. tidofi is additionally linked against
libgsl to provide random number generator.
parent adc184bb
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *
* \author Thomas Forbriger * \author Thomas Forbriger
* \date 31/07/2015 * \date 19/03/2016
* *
* some time series filter classes (implementation) * some time series filter classes (implementation)
* *
* Copyright (c) 2005, 2015 by Thomas Forbriger (BFO Schiltach) * Copyright (c) 2005, 2015, 2016 by Thomas Forbriger (BFO Schiltach)
* *
* ---- * ----
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -51,15 +51,18 @@ ...@@ -51,15 +51,18 @@
* - take usage text from text file * - take usage text from text file
* - 31/07/2015 V1.10 * - 31/07/2015 V1.10
* - add filter Powerof * - add filter Powerof
* - 19/03/2016 V1.11
* - add filter GaussianNoise
* *
* ============================================================================ * ============================================================================
*/ */
#define TF_FILTER_CC_VERSION \ #define TF_FILTER_CC_VERSION \
"TF_FILTER_CC V1.10" "TF_FILTER_CC V1.11"
#include <cmath> #include <cmath>
#include <sstream> #include <sstream>
#include <algorithm> #include <algorithm>
#include <tsxx/random.h>
#include <tsxx/filter.h> #include <tsxx/filter.h>
#include <tsxx/filter_usage_text.h> #include <tsxx/filter_usage_text.h>
#include <aff/functions/avg.h> #include <aff/functions/avg.h>
...@@ -195,6 +198,18 @@ namespace ts { ...@@ -195,6 +198,18 @@ namespace ts {
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
//! add Gaussian noise
Ttimeseries GaussianNoise::operator()(const Ttimeseries& s,
const bool& debug) const
{
Tseries x=s;
Tseries n=ts::rnd::dugauss(x.size())*Ma;
x += n;
return s;
}
/*----------------------------------------------------------------------*/
//! rectification //! rectification
Ttimeseries Rectifier::operator()(const Ttimeseries& s, Ttimeseries Rectifier::operator()(const Ttimeseries& s,
const bool& debug) const const bool& debug) const
...@@ -434,6 +449,9 @@ namespace ts { ...@@ -434,6 +449,9 @@ namespace ts {
} else if (ID=="del") { } else if (ID=="del") {
is >> v; is >> v;
fh=Tfh(new Delay(v)); fh=Tfh(new Delay(v));
} else if (ID=="noi") {
is >> v;
fh=Tfh(new GaussianNoise(v));
} else if (ID=="nrm") { } else if (ID=="nrm") {
is >> v; is >> v;
fh=Tfh(new Normalize(v)); fh=Tfh(new Normalize(v));
......
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *
* \author Thomas Forbriger * \author Thomas Forbriger
* \date 31/07/2015 * \date 19/03/2016
* *
* some time series filter classes (prototypes) * some time series filter classes (prototypes)
* *
* Copyright (c) 2005, 2015 by Thomas Forbriger (BFO Schiltach) * Copyright (c) 2005, 2015, 2016 by Thomas Forbriger (BFO Schiltach)
* *
* ---- * ----
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -43,6 +43,8 @@ ...@@ -43,6 +43,8 @@
* - added cumsum * - added cumsum
* - 31/07/2015 V1.7 * - 31/07/2015 V1.7
* - add filter Powerof * - add filter Powerof
* - 19/03/2016 V1.8
* - add filter GaussianNoise
* *
* ============================================================================ * ============================================================================
*/ */
...@@ -51,7 +53,7 @@ ...@@ -51,7 +53,7 @@
#ifndef TF_FILTER_H_VERSION #ifndef TF_FILTER_H_VERSION
#define TF_FILTER_H_VERSION \ #define TF_FILTER_H_VERSION \
"TF_FILTER_H V1.7" "TF_FILTER_H V1.8"
#include<tsxx/filterbase.h> #include<tsxx/filterbase.h>
...@@ -306,6 +308,22 @@ namespace ts { ...@@ -306,6 +308,22 @@ namespace ts {
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
/*! \brief Add random Gaussian noise.
* \ingroup filter
*
* \param a rms amplitude of noise to be added
*/
class GaussianNoise: public ts::filter::BasicFilter {
public:
GaussianNoise(const double& a): Ma(a) { }
Ttimeseries operator()(const Ttimeseries& s,
const bool& debug=false) const;
private:
double Ma;
}; // class GaussianNoise
/*----------------------------------------------------------------------*/
/*! create a filter /*! create a filter
* \ingroup filter * \ingroup filter
*/ */
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
# description of filters provided in namespace ts::filter # description of filters provided in namespace ts::filter
# as provided through filter.h and defined in filter.cc # as provided through filter.h and defined in filter.cc
# #
available filters (version 2015/07/31): available filters (version 2016/03/19):
tre n remove trend found in first n samples tre n remove trend found in first n samples
(n=0: use all samples) (n=0: use all samples)
avg n remove average found in first n samples avg n remove average found in first n samples
...@@ -31,5 +31,6 @@ rec rectify signal ...@@ -31,5 +31,6 @@ rec rectify signal
cus calculate cumulative sum cus calculate cumulative sum
iset n1,n2,v iset n1,n2,v
set samples n1-n2 to value v set samples n1-n2 to value v
noi a add Gaussian random noise of rms amplitude a
# #
# ----- END OF filter_usage_text.txt ----- # ----- END OF filter_usage_text.txt -----
# this is <Makefile> # this is <Makefile>
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# $Id$
# #
# Copyright (c) 2005 by Thomas Forbriger (BFO Schiltach) # Copyright (c) 2005 by Thomas Forbriger (BFO Schiltach)
# #
...@@ -48,6 +47,7 @@ ...@@ -48,6 +47,7 @@
# 02/01/2014 V1.11 removed signal generators, added tisli suspect # 02/01/2014 V1.11 removed signal generators, added tisli suspect
# 01/02/2014 thof: rewrite all linker rules with libraries in # 01/02/2014 thof: rewrite all linker rules with libraries in
# proper order # proper order
# 19/03/2016 thof: tidofi requires libgsl for filter GaussianNoise
# #
# ============================================================================ # ============================================================================
...@@ -202,7 +202,7 @@ sigval sigscale geophone gatherdiff cross autocorr: \ ...@@ -202,7 +202,7 @@ sigval sigscale geophone gatherdiff cross autocorr: \
tidofi: \ tidofi: \
%: %.o %: %.o
$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@ \ $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@ \
-ltsxx -lcseife $(LIBDATRWXX) -ltfxx -ltsxx -lcseife $(LIBDATRWXX) -ltfxx -lgsl -lgslcblas
fidasexx: \ fidasexx: \
%: %.o %: %.o
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment