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
Mittelwert über die letzten n Werte. Wenn um x% abweicht dann Wert verwerfen. n und x muss Du eh vernünftig wählen. Axel
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.
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
> 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
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.
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
Ein Ausreisser weist ueblicherweise auf mangelhafte Hardware, EMV, Stoerungen hin. Man sollte eigentliche diese Quellen eliminieren bevor man sich Gedanken ueber Medianfilterung macht.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.