Forum: Digitale Signalverarbeitung / DSP / Machine Learning Moving Average


von Martin (Gast)


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
}
?

: Verschoben durch Admin
von Gerhard (Gast)


Lesenswert?

Hi

"array[n/2] = sum/n;"

was wird das denn ?
Wohin schreibt der für n = 1 oder n=3 ... ???

Gerhard

von Martin (Gast)


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.

von Mark B. (markbrandis)


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.

von Martin (Gast)


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?

von Mark B. (markbrandis)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.