2

ここで見つけたホワイトペーパーからセンサー障害検出アルゴリズムを実装しようとしています: http://www.hindawi.com/journals/mpe/2013/712028/ref/ 私の数学のスキルはまともですが、この記事では得られませんすべてがどのように設定されているかについての詳細。

私の現在の実装は次のようになります。

/*******************************************************************************
How this algorithm works:
    1) There exists W historical windows which hold the distribution objects (mean, variance)
        for that window. Each window is of size m (the sliding window size)
    2) There exists a current window which changes every iteration by popping the 
        oldest value into the buffer window.
    3) There exists a buffer window which takes the oldest values from the current window
        each iteration. Once the buffer window reaches size m
        it then becomes the newest historical window.
*******************************************************************************/

int m = 10; //Statistics sliding window size
float outlierDetectionThreshold; // The outlier detection threshold for sensor s, also called epsilon
List<float> U; // Holds the last 10 windows mean
List<float> V; // Holds the last 10 windows variance
List<float> CurrentWindow; // Holds the last m values

procedure GFD()
    do
        get a value vi 
        Detection(vi)
    while not end
return

procedure Detection(vi)
    init outlierDetectionThreshold
    init U and V, loading last m distribution characteristics from DB
    init CurrentWindow loading the last m - 1 values

    Xi; // What is this?
    Tau; // What is this?

    Insert vi into CurrentWindow // CurrentWindow now has the m latest values 

    float CurrentWindowMean = Mean(CurrentWindow)
    float CurrentWindowVariance = Variance(CurrentWindow)

    if (IsStuck(CurrentWindowVariance) or IsSpikes(vi))
        return
    If (IsOutlier(vi) and not IsRatStatChagne(vi))
        return;
    IsRatStatChagne(vi);
    return

procedure IsStuck(variance)
    if (variance == 0)
        return true;
    return false;

procedure IsSpike(windowMean, windowVariance, historicalMeans, historicalVariances, xi, tau)
    if ( (mean / Mean(historicalMeans)) < xi)
        if ( (variance / Mean(historicalVariances)) > tau)
            return true;
    return false;

procedure IsOutlier(historicalMeans, historicalVariances, outlierDetectionThreshold)
    // use historicalMeans and historicalVariances to calculate theta
    if (theta > outlierDetectionThreshold)
        return true;

IsOutlier および IsRatStatChange 関数の実装が困難になっています。

  1. IsSpike では、xi と tau はどのように計算されますか、またはそれらは何を表していますか?
  2. IsOutlier 関数の場合、シータはどのように計算されますか?
  3. IsRatStatStange 関数については、まだ詳しく調べていないのですが、これをしっかりと把握している方はいらっしゃいますか?

あなたが輝く他の洞察は、最も高く評価されます。前もって感謝します。

4

0 に答える 0