This site is best viewed in a browser that conforms to web standards.

Button
Button
Button
Button
Button

Button
Button
Button
Button

Turmsegler

Zurück zum Artikel

Berechnung

Die meisten Implementierungen verwenden die Konstruktion eines triangulären Fensters über der Zeitreihe, wobei ganzzahlige Faktoren verwendet werden.

Eine effektiver zu berechnende und genauere Variante ist die Konstruktion eines Bartlett-Fensters über der Datenreihe, das ebenfalls eine trianguläre Form aufweist, jedoch auf Fliesskomma-Artithmetik basiert.

Experimentelle Zeitreihe

Echte Zeitreihe

C++-Source



inline double W_BARTLETT(double n, double k, double d = 1.0)
{
    return (n == 0) ? 0 : (d * (1 - fabs((k - 0.5 * n) / (0.5 * n))));
}

BOOL ivorix_tma (
          vector<double>& ivec,     // input  vector
          vector<double>& ovec,     // output vector
          unsigned long   span)     // time period or span of embedding
{
    ULONG   x     = 0;
    ULONG   y     = 0;
    ULONG   p     = 0;
    ULONG   e     = ivec.size();
    double  sum   = 0;
    double  div   = 0;

    if ( span == 0 || span >= e )
        return false;

    ovec.resize(ivec.size());

    ovec[0] = ivec[0];

    for ( x = 1; x < e; x++ )
    {
        sum = 0;
        p   = min(x, span);

        if ( p <= span )
        {
            div = 0;

            for ( y = 1; y <= p; y++ )
                div += W_BARTLETT(p+1, y, p);
        }

        for ( y = 1; y <= p; y++ )
            sum += ivec[x-y+1] * W_BARTLETT(p+1, y, p);

        ovec[x] = sum / div;
    }

    return true;
}

Zurück zum Artikel