www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Digitaler Filter


Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich lese Zahlenwerte ein (8 Bit 2er Komplement). Es handelt sich dabei 
um Messwerte. Ich lese diese Werte durchgehend mit in einem variablem 
(aber bekanntem) Zeitfenster ein.

Da die Messerte öfters mal Ausreißer haben, würde ich diese gerne 
filtern.

Leider habe ich sogut wie keine Ahnung von digitalen Filtern. Überall 
liest man nur etwas Allgemeines und mit irgendwelchen Frequenzen.

Gibt es irgendwo eine Übersicht über bekannte Implementierungen von 
digitalen Filtern und wie sich diese Verhalten? Was für ein Filter wäre 
angebracht um Ausreißer in Messwerten zu eleminieren?

: Verschoben durch Admin
Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mittelwert über die letzten n Werte. Wenn um x% abweicht dann Wert 
verwerfen.


n und x muss Du eh vernünftig wählen.


Axel

Autor: scriptkiddy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausreißer bekommt man gut mit einem Medianfilter Weg.
Das heißt im Klartext ne Ungerade Zahl an Werten so schnell wie es geht 
hintereinander einlesen; am besten in ein Aray. Das Array dann sortieren 
und den Wert aus der Mitte des Arrays nehmen. Das ist dein gefilterter 
Wert zum jeweiligen Zeitpunkt.
Die Berechnung ist aber aufgrund des Sortieralorithmus aber sehr 
aufwendig.

Autor: Tec Nologic (tecnologic) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Warum nicht ein einfacher Tiefpass? IIR Filter 1. Ordnung danach kannst 
vllt auch googlen.

dann machst du nichts weiter als ((n-1)*9 + n)/10, wäre ein digitaler 
Tiefpass 1. Ordnung, mit einer Grenzfrequenz die dem 10fachen deiner 
Sample Rate entspricht.

Ist schnell, verbraucht wenig Speicher und lässt sich beliebig 
aufblasen, dazu kannst du dir dann Bessel oder Tchebychef (oder wie der 
geschrieben wird) Koeffizienten angucken. Gibts alles bei Wikipedia 
meines erachtens.

Mfg

Tec

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Leider habe ich sogut wie keine Ahnung von digitalen Filtern. Überall
> liest man nur etwas Allgemeines und mit irgendwelchen Frequenzen.

Das liegt wohl daran das es zu dieser Thematik das schoene Studium
der Nachrichtentechnik gibt und das der Sacherverhalt etwas 
komplizierter ist.

> Ich lese diese Werte durchgehend mit in einem variablem
> (aber bekanntem) Zeitfenster ein.

Mit anderen Worten die Abstastzeit ist nicht konstant? Das duerfte die 
Sache nochmal komplizieren.

> Was für ein Filter wäre angebracht um Ausreißer in Messwerten zu
> eleminieren?

Das haengt davon ab wie du Ausreisser definierst! Ein echter Ausreisser 
bei Messwerten hat normalerweise keinen Bezug zur Messung. Nimm als 
Beispiel deine Aufgabe waere es eine Kiste mit 500Stueck 1kOhm 
Widerstaenden zu messen. Dann sollten die alle innerhalb von 10% 
Abweichung liegen.
Was passierst jetzt wenn du darin einen findest mit 100kOhm? Wenn er als 
1k beschriftet ist dann ist bei der Produktion was schiefgelaufen und du 
musst dir Gedanken um die Qualitaet aller widerstaende machen. Ist der 
aber mit 100k beschriftet hat ihn jemand versehentlich in die Kiste 
geworfen.

Echte Ausreisser werden deshalb nicht gefiltert sondern mit einem 
statistischen Verfahren gefunden und dann einfach ignoriert. Vielleicht 
noch mit einem Hinweiss damit jemanden den Typ der da immer 100k 
Widerstaende reinwirft in den Hintern tritt. :-)

http://de.wikipedia.org/wiki/Ausreißertest_nach_Grubbs

Hast du dagegen Schwankungen bei der Messung weil das im Verfahren 
begruendet liegt, dann kannst du filtern. Nimm z.B mal an du misst 
denselben Widerstand 100mal mit deinem Multimeter. Dann sollte da ja 
eigentlich immer das gleiche rauskommen. Da das Multimeter aber einen 
Fehler hat wird vielleicht immer die letzte Stelle schwanken. Dafuer ist 
dann ein Filter angebracht. Der liefert dir dann eine Art Mittelwert.
das Erklaert auch warum es wichtig ist zu unterscheiden. Produzierst du
an dieser Stelle wieder einen Ausreisser weil sich z.B die Messpitzen 
beruehren, so wuerde dieser Fehler sich auf mehrere Messungen verteilen 
wenn er gefiltert wird.

Und ueber Filtertheorie gibt es wieder hunderte von Buechern. Als 
einfacher Einstieg kann vielleicht der Tietze und Schenk gelten.

> Gibt es irgendwo eine Übersicht über bekannte Implementierungen von
> digitalen Filtern und wie sich diese Verhalten?

In obigen Buch kannst du dann lernen warum es Filter verschiedener 
Ordnung gibt, und was der Unterschied in ihren Auslegungen als 
Butterworth, Tschebyscheff usw. angeht. Lass dich dabei nicht davon 
verwirren das dieses Buch erstmal analoge Filter behandelt. In der 
Praxis benutzt man dazu in Mikrocontrollern dann andere Filter (z.B 
FIR). Man kann aber die Koeffizienten umrechnen.

Fuer Leute die nicht aus der Etechnik sondern aus der Mathematischen 
Ecke kommen gibt es vermutlich andere Buecher als T&S, aber das sollen 
dir mal andere empfehlen. Ich bin mir ziemlich sicher das es auch 
Buecher ueber Filtertheorie fuer Informatiker gibt die nur der Autor 
selber versteht. :-)

Olaf

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Düsendieb schrieb:
> Mittelwert über die letzten n Werte. Wenn um x% abweicht dann Wert
> verwerfen.

Also die Werte in ein FIFO und von diesem FIFO dann immer den Mittelwert 
benutzen? Wäre eine Möglichkeit. Allerdings stell ich mir das relativ 
träge vor wenn sich der "Erwartungswert" schnell ändert oder sich auch 
das Vorzeichen ändert.

scriptkiddy schrieb:
> Ausreißer bekommt man gut mit einem Medianfilter Weg.
> Das heißt im Klartext ne Ungerade Zahl an Werten so schnell wie es geht
> hintereinander einlesen; am besten in ein Aray. Das Array dann sortieren
> und den Wert aus der Mitte des Arrays nehmen. Das ist dein gefilterter
> Wert zum jeweiligen Zeitpunkt.
> Die Berechnung ist aber aufgrund des Sortieralorithmus aber sehr
> aufwendig.

Also ein Array als FIFO. In jedem Durchlauf ein neuen Wert ins FIFO, 
FIFO sortieren und den Wert fifo[length/2] nehmen? Wäre wohl möglich. 
Aber wie würde sich das Verhalten, wenn plötzlich größere "erlaubte" 
Sprünge vorkommen?

Olaf schrieb:
> Das liegt wohl daran das es zu dieser Thematik das schoene Studium
> der Nachrichtentechnik gibt und das der Sacherverhalt etwas
> komplizierter ist.

Yup aber leider habe ich keine 6 Semester Zeit um mich mit dem Thema zu 
befassen.

Olaf schrieb:
> Mit anderen Worten die Abstastzeit ist nicht konstant? Das duerfte die
> Sache nochmal komplizieren.

Die Abtastzeit ist verändert sich, aber ist zu jedem Zeitpunkt bekannt. 
Allerdings glaube ich grade dass man die Abtastzeit doch konstant machen 
könnte.

Olaf schrieb:
> Das haengt davon ab wie du Ausreisser definierst!

Ein Ausreißer wäre bei mir ein Messwert der aufgrund des Versuchsaufbau 
nicht möglich ist. Wenn bei einem Versuchsaufbau mein theoretischer 
Erwartungswert zwischen 1 und 2 liegt, dann würde ich auch gerne "nur" 1 
und 2 als Werte einlesen. Durch Schwankungen wären auch noch 0 und 3 OK 
aber weitere Werte sind ganz einfach falsch. Das Problem dabei ist dann 
noch dass mein "Erwartungswert" sich über die Zeit ändert. Daher ist ein 
trivialer Filter wie "if(x > max) x = max; if(x < min) x = min;" nicht 
angebracht.

Zudem wäre generell eine Übersicht über verschiedene 
Filtermplementierungen nützlich, da man so vergleichen könnte und 
dadurch dann auch Entscheidungen für eine bestimtme Filtertechnik 
begründen könnte.

Olaf schrieb:
> Echte Ausreisser werden deshalb nicht gefiltert sondern mit einem
> statistischen Verfahren gefunden und dann einfach ignoriert.

Ich werde mir den Link mal angucken.

Olaf schrieb:
> Ich bin mir ziemlich sicher das es auch
> Buecher ueber Filtertheorie fuer Informatiker gibt

Sowas wär praktisch.

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat noch einer ne Idee, ein Link oder eine Literaturempfehlung?

Autor: Udo R. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt der grosse Filterexperte zu sein.
Du kannst nur dann digital filtern, wenn Du entsprechendes Oversampling 
hast.
Wenn dein zu messendes Signal sich in 4 Abtastschritten komplett 
verändert, kannst Du nicht über 11 Abtastschritte filtern.
Ausserdem ist digitales Filtern kein Allheilmittel. Du musst immer 
sicherstellen, daß die maximale Signalfrequenz < halbe Abtastfrequenz 
ist, sonst misst Du nur noch Mist. Und das geht nur mit einem guten 
alten analogen Filter vor dem AD Wandler.
Siehe auch
http://de.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem

Merke: Wer misst misst Misst, wer hirnlos misst misst mehr Mist

Autor: Udo R. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist, verschrieben :-)

Autor: Zacc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Ausreisser weist ueblicherweise auf mangelhafte Hardware, EMV, 
Stoerungen hin. Man sollte eigentliche diese Quellen eliminieren bevor 
man sich Gedanken ueber Medianfilterung macht.

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einzige was ich hab und was ich beeinflussen könnte sind die 
Messwerte die nach der Messung rauskommen. Also quasi das Ergbnis der 
Messung als 8-Bit 2er Komplement Wert. Ich habe auch nicht irgendwelche 
Frequenzen oder so (zumindest nicht das ich wüsste). Das verwirrt mich 
auch immer wenn ich etwas über Filter lese. Es wird immer von 
irgendwelchen Frequenzen gesprochen aber ich hab keine Ahnung wo die 
herkommen.

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh das Ganze jetzt unter DSP, dabei läuft das doch auf nem µC :P

Autor: Anon Nymous (fuechslein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du nur ein paar sample hast dann sind Sortier-Netzwerke nicht 
gerade langsam. Und wenn du ne Menge samples hast dann nimm Quickselect 
was ein linearer algorithmus is im Gegensatz zu nlogn von Sortieralg.

Autor: simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey
du musst einen tiefpassfilter verwenden, also solltest du den 
vergangenen messpunkten eine sehr viel höhere priorität geben als dem 
aktuellen.
z.B.
yi= aktueller auszurechnender wert
xi=aktueller messwert
a und b = variablen zur wertigkeitsvergabe
yi= b*y(i-1)+xi*a  <--- einfachste wahl

wenn du jetzt b=0.8 definierst und a=0,2 ist es ein starker filter und 
die spitzen werden heraus gefiltert

wenn du hingegen b=0,3 und a=0,7 definierst filtert er nur schwach und 
die spitzen bleiben vorhanden.

gruesse simon

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.