Falsches Vorzeichen rausfiltern

Gast #1631448
Lesenswert?

Hallo,

ich lese eine Reihe von Werten ein, welche positiv als auch negativ sein 
können. Das Vorzeichen kann sich auch im Betrieb ändern. Nun kommt es 
allerdings vor, dass in Situationen in denen definitiv ein positiver 
Wert kommen müsste, ein oder mehrere negative Werte eingelesen werden.

Um diese herauszufiltern speichere ich mir die Werte (falls ungleich 0) 
in einem FIFO von n (n = ungerade) Werten. Als "Arbeitswert" nehme ich 
immer den Mittleren. Um nun zu gucken, welches Vorzeichen nun "gültig" 
ist zähle ich die positiven und die negativen Werte im FIFO. Sind mehr 
positive als negative und ist der "Arbeitswert" negativ, so 
interpretiere ich diesen als ungültig und setze ihn 0. In der anderen 
Richtung genauso. Falls mehr negative als positive Werte im FIFO stehen 
und der "Arbeitswert" positiv ist, so wird er genullt.

Fällt jemanden etwas sinnvolleres/effektiveres/genaueres ein um diesem 
Problem entgegen zu wirken?
Gast #1631463
Lesenswert?

>Nun kommt es
>allerdings vor, dass in Situationen in denen definitiv ein positiver
>Wert kommen müsste, ein oder mehrere negative Werte eingelesen werden.

Dann finde heraus WARUM da negative Werte kommen;)
Gast #1631478
Lesenswert?

Am einfachsten ohne weitere Prüfung alle Werte auf 0 setzten. Dann 
kannst du dir auch gleich das Einlesen sparen ;-)

Ernsthaft, aus deiner Beschreibung bin ich nicht schlau geworden.

Ob du alleine aus der Anzahl der bisher angekommenen positiven und 
negativen Werte die Gültigleit neu angekommener Werte ableiten kannst, 
kann dir hier niemand sagen.

Problematisch wird dein Vorgehen auf jeden Fall, wenn schon fehlerhafte 
Werte erkannt und auf 0 gesetzt wurden. Dann stimmt deine vorhandene 
Vorzeichenanzahl nicht mehr mit dem, was eigentlich sein sollte, 
überein.

Oliver
Gast #1631520
Lesenswert?

Tom schrieb:
> Ja, die eigentliche Fehlerursache suchen/finden/beheben.

holger schrieb:
> Dann finde heraus WARUM da negative Werte kommen;)

Dazu müsste ich ein Gerät aufbrechen und das Innere analysieren und 
herausfinden wie genau die Verarbeitung dort stattfindet und gucken ob 
ich mich dort irgendwo einklinken kann um den Fehler von vorne herein zu 
umgehen. Mit anderen Worten: Ich habe keinen Einfluss auf die Erzeugung 
der Werte. Ich muss mit diesen Werten leben.

Oliver schrieb:
> Ob du alleine aus der Anzahl der bisher angekommenen positiven und
> negativen Werte die Gültigleit neu angekommener Werte ableiten kannst,
> kann dir hier niemand sagen.

Das sehe ich auch so. Allerdings habe ich keinen Einfluss auf die 
Erzeugung dieser Werte. Ich muss lediglich mit ihnen weiter arbeiten.

Oliver schrieb:
> Problematisch wird dein Vorgehen auf jeden Fall, wenn schon fehlerhafte
> Werte erkannt und auf 0 gesetzt wurden. Dann stimmt deine vorhandene
> Vorzeichenanzahl nicht mehr mit dem, was eigentlich sein sollte,
> überein.

Hab vergessen zu erwähnen, dass ich den genullten Wert nicht wieder ins 
FIFO schreibe, sondern nur mit diesem weiter arbeite. Die Anzahl der 
Vorzeichen wird daher nicht beeinflusst.
Gast #1631528
Lesenswert?

Oliver schrieb:
>> Ob du alleine aus der Anzahl der bisher angekommenen positiven und
>> negativen Werte die Gültigleit neu angekommener Werte ableiten kannst,
>> kann dir hier niemand sagen.
>
> Das sehe ich auch so. Allerdings habe ich keinen Einfluss auf die
> Erzeugung dieser Werte. Ich muss lediglich mit ihnen weiter arbeiten.

In diesem Fall spar dir die ganze Einleserei, nimm einen 
Zufallsgenerator, und erzeug dir die Werte selber. Alles andere ist 
sinnlos.

Oliver
Gast #1631532
Lesenswert?

Oliver schrieb:
> In diesem Fall spar dir die ganze Einleserei, nimm einen
> Zufallsgenerator, und erzeug dir die Werte selber. Alles andere ist
> sinnlos.

So schlimm ist das mit den falschen Werten nun auch wieder nicht. Zu 
einem großen teil kann ich ziemlich gut mit den Werten arbeiten.
#1631813
Lesenswert?

Na ja, was erwartest du?

Wie sehen die Werte aus?
Gibt es irgendwelche Zusammenhänge?
Ändern sich die Werte normalerweise nur langsam?

Vielleicht wäre es einfacher, wenn du erst mal erzählst, was das für 
Werte sind und wie so ein Datensatz typischerweise aussieht.

Aber Fehlerbehebung ist hinten nach schwer. Information die weg ist, ist 
weg. Da kann man rechnen so viel man will. Da helfen dann nur noch 
Heuristiken wie: Temperaturen ändern sich nicht sprunghaft innerhalb 
1/10 Sekunde, eine Temperatur die um mehr als 10 Grad vom Wert davor und 
danach abweicht ist unglaubwürdig und wird durch den Mittelwert der 
beiden Nachbarwerte ersetzt, etc. Aber sowas muss man immer an die 
tatsächliche konkrete Aufgabenstellung anpassen.
Gast #1631966
Lesenswert?

Das ich zu große Sprünge abfange ist klar. Wenn ich Werte bekomme wie

1 1 1 2 3 1 2 -1 -2 -1 -1 1 2 1 3 3 1 2 1 -60 -128 -128 -40 1 1 2 ...

Ich weiss das die negativen Werte falsch sind. Beim zweiten Auftreten 
der negativen Werte ist das ja einfach zu erkennen, da der Sprung sehr 
groß ist und ein solch großer Sprung nicht zulässig ist. Beim ersten 
Auftreten der negativen Werte ist aber kein so großer Sprung vorhanden. 
Es wäre theoretisch (aber nicht in der aktuellen Messung) möglich, dass 
ein solcher Sprung von 1 auf -2 vorkommt.
Gast #1632047
Lesenswert?

Hallo!
Bei Vorzeichenproblemen würde ich immer stutzig werden. Da ich die 
Zahlenreihe und auch den Ursprung nicht kennne, kann ich nur raten.
Kann es sein daß hier ein Typ-Problem vorliegt?
Sollten die Zahlen unsigned sein (also z.B. 0...255) und Du 
interpretierst sie als signed (-128...0...127)?
#1632107
Lesenswert?

Matthias schrieb:
> Das ich zu große Sprünge abfange ist klar. Wenn ich Werte bekomme wie
>
> 1 1 1 2 3 1 2 -1 -2 -1 -1 1 2 1 3 3 1 2 1 -60 -128 -128 -40 1 1 2 ...
>
> Ich weiss das die negativen Werte falsch sind.

Woher weißt du das?

> Es wäre theoretisch (aber nicht in der aktuellen Messung) möglich, dass
> ein solcher Sprung von 1 auf -2 vorkommt.

Warum ist das in der aktuellen Messung nicht möglich?


Mit solchen Fragen musst du anfangen. Warum ist etwas so? Wieso weiß ich 
etwas? Woher nehme ich das Wissen?
Dann kann man darüber nachdenken, diese Erkentnisse in Code zu giessen.

Die Antwort "Ich weiß es einfach" gilt allerdings nicht. Da muss sofort 
die Gegenfrage kommen: Hellseherei, Eingebung oder gibt es dafür einen 
rationalen Grund?
Gast #1632110
Lesenswert?

42

Ganz spontan fallen mir da ein paar Fragen ein:

Was sind das für Messwerte? Wo kommen die her? Was repräsentieren die? 
Woran kann man fehlerhafte Werte erkennen? Kann man überhaupt 
fehlerhafte Werte erkennen? Wie lässt sich die Erkennung fehlerhafter 
Werte in Regeln abbilden?

Wodurch werden die Fehler hervorgerufen? Messfehler? Übertragungsfehler? 
Rechenfehler?

Was hätten fehlerhafte Werte für eine Auswirkung auf das Ergebnis, was 
du ermittelst? Was haben fehlende Werte für eine Auswirkung auf das 
Ergebnis, was du ermittelst? Was machst du überhaupt mit den Daten? Was 
macht dein System überhaupt? Was ist das Ziel der ganzen Übung? Ist es 
nachts kälter als draussen?

Woher soll irgend jemand in der großen weiten Welt ohne jegliche weitere 
Informationen diese und noch viel mehr Fragen beantworten können, wenn 
du, der du alles Informationen vorliegen hast, er schon nicht kannst?

Oliver
Gast #1632177
Lesenswert?

Das nennt man dan wohl rauschen. wo das rauschen entsteht ist egal, 
wenns mal auf dem signal ist, muss mann damit leben.

filtern ist der richtige ansatz.

allerdings sind die wertebereiche nicht so toll, wenns um null herum 
rauscht ...

was willst du denn erreichen?
nur eine signalisation ob vorwärts oder rückwerts bewegt wird, oder mit 
dem signal sogar einen regler bauen ???

schau dir mal folgenden themen an im netz:

- fir-filter
- quantisieren

gruss Claudio

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren