www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Datenreihe filtern, aber wie?


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe in einem Mikrocontroller ein Array, indem die empfangenen 
Datenwerte gespeichert sind. Nun möchte ich mittels eines Filter (IIR 
oder FIR) die Datenwerte mitteln. Damit möchte ich die Ausreißer 
herausfiltern.
Ich habe mir dabei gedacht, ich mache eine Filterung, indem ich 10 mal 
die Datenwerte im Mikrocontroller erfasse und dann einen Filterung 
durchführe.
Ein IIR Filter wäre denke ich besser dafür geeignet, da dieses Filter 
weniger Koeffizienten hat und die Berechnung schneller erfolgt wie bei 
einem FIR Filter. Was meinst ihr dazu? Wie könnte man sowas in Ansi C 
realisieren?
Für jeden Ratschlag bin ich sehr dankbar

Autor: Michael Lenz (hochbett)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hi, ich habe in einem Mikrocontroller ein Array, indem die empfangenen
> Datenwerte gespeichert sind. Nun möchte ich mittels eines Filter (IIR
> oder FIR) die Datenwerte mitteln. Damit möchte ich die Ausreißer
> herausfiltern.
> Ich habe mir dabei gedacht, ich mache eine Filterung, indem ich 10 mal
> die Datenwerte im Mikrocontroller erfasse und dann einen Filterung
> durchführe.
> Ein IIR Filter wäre denke ich besser dafür geeignet, da dieses Filter
> weniger Koeffizienten hat und die Berechnung schneller erfolgt wie bei
> einem FIR Filter. Was meinst ihr dazu? Wie könnte man sowas in Ansi C
> realisieren?
> Für jeden Ratschlag bin ich sehr dankbar
Die grundlegende Frage lautet ja, welche Art von Filterung Du 
durchführen willst. Erst danach stellt sich die Frage, wie das im µC 
realisiert werden kann.

Das einfachste Filter zum Auslöschen von Ausreißern ist das 
Medianfilter.
Dabei sortierst Du die Werte aus der Umgebung von x(n), d. h. 
beispielsweise, Du sortierst die Zahlen [ x(n-5) ... x(n) ... x(n+5) ] 
und ersetzt x(n) durch den mittleren der Werte, also


Du kannst natürlich auch ein gewöhnliches FIR-Tiefpaßfilter nehmen. Die 
Filterkoeffizienten und den Algorithmus würde ich zunächst in Matlab/GNU 
Octave austesten.

Gruß,
  Michael

Autor: Anon Nymous (fuechslein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst nicht unbeding sortieren um den Median herauszufinden. Google 
nach Quickselect.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Hilfe. Ich hab mir das so gedacht:
10 Messreihen ermitteln und über diese Messreihen eine art Statistik 
erstellen. Dabei dachte ich mir dies geht mit einem Filter (z.B. IIR) 
mit dem ich so zusagen eine Mittellung durchführe.

Autor: Anon Nymous (fuechslein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kopfschuettel. Das hast du doch schon in deinem ersten Post 
geschrieben und wir haben dir gesagt dass man das so nicht macht sondern 
mit einem Median Filter. Ich mein, selbst wenn deine Methode 
funktioniert... Elegant ist sie nicht und wenn du das irgendjemand 
anderem zeigst dann hat der dich gleich unter Nullpeiler abgestempelt.

Autor: Michael Lenz (hochbett)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

> Danke für eure Hilfe. Ich hab mir das so gedacht:
> 10 Messreihen ermitteln und über diese Messreihen eine art Statistik
> erstellen. Dabei dachte ich mir dies geht mit einem Filter (z.B. IIR)
> mit dem ich so zusagen eine Mittellung durchführe.

wenn Du immer den gleichen Wert oder den gleichen Verlauf erwartest, 
kannst Du eine Statistik erstellen. In diesem Fall bietet es sich an, 
das sogenannte Scharmittel (bzw. den Scharmedian) zu bilden. Das 
bedeutet, daß Du über die Wiederholung mittelst.

Wenn Du einen komplizierten Verlauf erwartest, der in dieser Form nur 
einmal auftritt, mußt Du zeitlich mitteln, wobei das Medianfilter 
tendenziell besser ist als die arithmetische Mittelung.

Es wäre hilfreich, wenn Du die Daten und Dein Konzept an einem Beispiel 
darstellen würdest. Denn nur am konkreten Beispiel läßt sich eine 
optimale Lösung finden.

Über FIR/IIR oder sonstwas können wir uns dann unterhalten.


Gruß,
  Michael

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.