# Moving average

Przetwarzanie

Oblicza bieżącą średnią z przychodzących wartości liczbowych za pomocą wybranego algorytmu (EMA lub CA)

Moving average
V
R
AVG

# Wejścia

IDSkrótNazwaTypDomyślnieOpis
valueVWartośćNUMBER0Wartość liczbowa do uwzględnienia w średniej
resetRResetBOOLEANfalseZbocze narastające resetuje średnią do aktualnej wartości wejściowej

# Wyjścia

IDSkrótNazwaTypDomyślnieOpis
averageAVGŚredniaNUMBER0Obliczona średnia krocząca

# Konfiguracja

IDNazwaTypDomyślnieJednostkaOpis
algorithmAlgorytmENUM0Algorytm uśredniania: EMA (wykładnicza średnia krocząca) lub CA (średnia kumulacyjna)

Szczegóły:

Wartości: EMA, CA
alphaAlfa (współczynnik wygładzania)NUMBER0.2Współczynnik wygładzania EMA (0-1). Wyższe wartości nadają większą wagę najnowszym wartościom

Szczegóły:

Widoczne gdyalgorithm = EMA
> 0
≤ 1

# Stan

IDNazwaTypDomyślnieJednostkaOpis
countLicznikNUMBER0Liczba otrzymanych wartości
prev_resetPoprzedni stan resetuBOOLEANfalsePoprzedni stan wejścia reset do detekcji zbocza

# Kod źródłowy

Pokaż kod Volang
channel = input::channel()
value = input::value()

if (channel == "reset") {
    prev_reset = state::get("prev_reset")
    if (value and !prev_reset) {
        current = input::get("value")
        state::set("count", 1)
        output::set("average", current)
    }
    state::set("prev_reset", value)
    return
}

if (channel == "value") {
    count = state::get("count")
    avg = output::get("average")

    if (count == 0) {
        state::set("count", 1)
        output::set("average", value)
        return
    }

    algorithm = config::get("algorithm")

    if (algorithm == 0) {
        alpha = config::get("alpha")
        new_avg = alpha * value + (1 - alpha) * avg
        output::set("average", new_avg)
    } else {
        count = count + 1
        state::set("count", count)
        new_avg = avg + (value - avg) / count
        output::set("average", new_avg)
    }
}
Oblicza bieżącą średnią z przychodzących wartości liczbowych za pomocą wybranego algorytmu (EMA lub CA)