mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Moving Average


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

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

Also
int16_t moving_average(int16_t const * const array, uint8_t n)
{
    int32_t sum = 0;
    uint8_t i;
    
    for(i = 0; i < n; ++i) {
        sum += array[i];
    }

    return sum/n;
}
oder
int16_t moving_average(int16_t * const array, uint8_t n)
{
    int32_t sum = 0;
    uint8_t i;
    
    for(i = 0; i < n; ++i) {
        sum += array[i];
    }

    array[n/2] = sum/n;

    return array[n/2];
}
?

: Verschoben durch Admin
Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

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

Gerhard

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.