www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Falsches Vorzeichen rausfiltern


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder gleich schätzen, das könnte genauer sein.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;)

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fällt keinem etwas ein?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Grrrr (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gastlich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.