Moving Average

Gast #1637560
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
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.
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
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?
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.