Forum: Mikrocontroller und Digitale Elektronik Falsches Vorzeichen rausfiltern


von Matthias (Gast)


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?

von Tom (Gast)


Lesenswert?

> Fällt jemanden etwas sinnvolleres/effektiveres/genaueres ein um diesem
> Problem entgegen zu wirken?

Ja, die eigentliche Fehlerursache suchen/finden/beheben. Immer dieses 
Gefrickel.

von Klaus W. (mfgkw)


Lesenswert?

oder gleich schätzen, das könnte genauer sein.

von holger (Gast)


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;)

von Oliver (Gast)


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

von Matthias (Gast)


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.

von Oliver (Gast)


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

von Matthias (Gast)


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.

von Matthias (Gast)


Lesenswert?

Fällt keinem etwas ein?

von Karl H. (kbuchegg)


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.

von Matthias (Gast)


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.

von Route_66 (Gast)


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)?

von Matthias (Gast)


Lesenswert?

Route_66 schrieb:
> Sollten die Zahlen unsigned sein (also z.B. 0...255) und Du
> interpretierst sie als signed (-128...0...127)?

8-Bit Zweierkomplement bekomme ich.

von Karl H. (kbuchegg)


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?

von Oliver (Gast)


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

von Grrrr (Gast)


Lesenswert?

Ja, ja. Hat die Zeitmaschine erfunden, aber der blöde Klopapierhalter 
tuts nicht. :-)

von Matthias (Gast)


Lesenswert?

Es sind Positionsveränderungen. Wenn ich mich nur in positiver Richtung 
bewege, dann ist eine negative Positionsveränderung falsch.

von spess53 (Gast)


Lesenswert?

Hi

>Es sind Positionsveränderungen. Wenn ich mich nur in positiver Richtung
>bewege, dann ist eine negative Positionsveränderung falsch.

Hoffentlich nicht von einem GPS.

MfG Spess

von gastlich (Gast)


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

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
Noch kein Account? Hier anmelden.