Moving Average

Gast #1637560
Lesenswert?

Moin,

wird bei einem Moving Average der gefilterte Wert eigentlich zurück 
geschrieben?

Also
1
int16_t moving_average(int16_t const * const array, uint8_t n)
2
{
3
    int32_t sum = 0;
4
    uint8_t i;
5
    
6
    for(i = 0; i < n; ++i) {
7
        sum += array[i];
8
    }
9

10
    return sum/n;
11
}
oder
1
int16_t moving_average(int16_t * const array, uint8_t n)
2
{
3
    int32_t sum = 0;
4
    uint8_t i;
5
    
6
    for(i = 0; i < n; ++i) {
7
        sum += array[i];
8
    }
9

10
    array[n/2] = sum/n;
11

12
    return array[n/2];
13
}
?
Gast #1637786
Lesenswert?

Gerhard schrieb:
> Wohin schreibt der für n = 1 oder n=3 ... ???

n = 1 macht keinen Sinn. Den Durchschnitt von einem Wert...
n = 3 würde an array[1] schreiben, damit also kein Problem. Das Array 
ist natürlich ein FIFO.
#1638263
Lesenswert?

Wenn ich das richtig sehe, dann ist Dein erstes Codebeispiel einfach der 
arithmetische Mittelwert. Ein gleitender Mittelwert ist nicht dasselbe, 
wobei freilich ein Zusammenhang zwischen beiden besteht:

http://de.wikipedia.org/wiki/Gleitender_Mittelwert

Beim zweiten Beispiel ist mir nicht ganz klar was Du machen willst - ich 
glaube, Dir auch nicht ;-)
Bei einem FIR-Filter (auch Moving Average genannt :-) werden garantiert 
keine gefilterten Werte in die Ausgangswerte zurück geschrieben.
Gast #1638355
Lesenswert?

Im ersten Beispiel wird der Mittelwert des übergebenen Arrays gebildet. 
Wenn das Array ein FIFO ist, welches die letzten n Werte speichert, dann 
sollte das doch ein gleitender Mittelwert sein oder?

Meine eigentliche Frage war, ob hier eine Rückkopplung besteht, also ob 
der gefilterte Wert zurück geschrieben wird.

Mark Brandis schrieb:
> Bei einem FIR-Filter (auch Moving Average genannt :-) werden garantiert
> keine gefilterten Werte in die Ausgangswerte zurück geschrieben.

Damit ist meine eigentliche Frage beantwortet, thx.

Also ein FIR-Filter ist im grunde "nur" ein gewichtetes Moving Average 
Filter? In diesem "Spezialfall" mit überall gleichen Gewichtungen?
#1638760
Lesenswert?

Gleitender Mittelwert der Ordnung n kann realisiert werden durch ein 
FIR-Filter der Ordnung n-1, wenn ich mich nicht irre (da Ordnung des 
Filters = Anzahl der Speicherstellen im Filter = Anzahl der 
Filterkoeffizienten minus 1).
Ja und beim Moving Average hätten dann die Koeffizienten alle den 
gleichen Wert, also z.B. ein Drittel bei n=3.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren