Forum: Mikrocontroller und Digitale Elektronik Ausfiltern von falschen Werten in einer Messung (kein Tiefpass!)


von Robert B. (robertb)


Lesenswert?

Hallo!

Ich steh gerade ein wenig auf dem Schlauch und hoffe auf Eure Hilfe.

Ich messe die Periode einer (vergleichsweise langsam) wechselnden 
Frequenz mit einem Timer (per ISR). Leider erhalte ich durch 
Fehltriggerung auch einmal falsche Werte. Anbei einmal eine 
beispielhafte Sequenz mit Fehlern:
1
15194,    223
2
15307,    113
3
15662,    355
4
15830,    168
5
 6790,  -9040 ---
6
 9221,   2431 +++
7
16230,   7009 +++
8
16468,    238
9
16669,    201
10
   11, -16658 ---
11
17050,  17039 +++
12
17257,    207
13
17519,    262
14
17798,    279
15
   10, -17788 ---
16
18373,  18363 +++
17
18812,    439
18
 8179, -10633 ---
19
10821,   2642 +++
20
19527,   8706 +++
21
19746,    219
22
20000,    254
23
20450,    450
24
20779,    329

Der erste Wert ist die Periode, der zweite die Differenz zum vorherigen 
Wert, dahinter ein Marker wo die Änderung unplausibel ist (wird durch 
75%-125% Schwellen erkannt).

In einem einfachen Ansatz könnte man jetzt die kleinen Werte (<30) per 
se ausfiltern. Leider habe ich aber auch Fehlauslösungen die zu 
plausiblen Werten führen. Diese durch die Änderung zum letzten 
akzeptierten Messwert auszufiltern wäre ok, aber falls aus welchem Grund 
auch immer wirklich mal ein größerer Sprung drin war bleibe ich dann auf 
einmal "Kleben". Eine "gepfuschte" Lösung wäre die Anzahl der 
verworfenen Ergebnisse zu begrenzen und dann einen neuen Wert zu 
nehmen...

Gibt es hierzu mehr oder minder gängige Ansätze?

Ich möchte KEINE Tiefpassfilterung (zumindest an dieser Stelle) 
vornehmen!

Grüße
Robert

von Benedikt K. (benedikt)


Lesenswert?

Ein Medianfilter sollte das sein was du suchst.

von spess53 (Gast)


Lesenswert?

Hi

Wenn ca. 30% deiner 'Messwerte' falsch sind, hast du ein anderes 
Problem.

MfG Spess

von heinz (Gast)


Lesenswert?


von Christian -. (kakuijin)


Lesenswert?

Für mich schaut das so aus als würdest du nicht lang genug warten bis 
der Messwert komplett in der Hardware steht.


Ein paar schnipsel von deinem Code wäre hilfsreich.

lg

von Purzel H. (hacky)


Lesenswert?

Ich denk auch man sollte sich die Ursache anschauen, denn jeder 3 
Messwert in die Tonne ist nicht wirklich zuverlaessig. Was ist, wenn in 
einer anderen Umgebung, ein anderes Netzteil die Sache sich 
verschlechtert ? zB alle Werte fuer die Tonne sind ?

von Ulrich (Gast)


Lesenswert?

Man sollte sehen die Fehlauslösungen zu vermeiden. Bei 30% Ausreißern 
ist das nicht einfach die richtigen werte zu finden.

@Heinz:
Der Kalmanfilter wird hier nicht weiterhelfen. Der geht von annähernd 
normalverteilten Werten aus, was hier gerade nicht der Fall ist. Im 
Endefekt wird da auch nur eine Art Tiefpaß rauskommen.

Was man hier bräuchte ist ein rbouster Schätzer, so wie der oben 
erwähnte Median.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ich messe die Periode einer (vergleichsweise langsam) wechselnden
> Frequenz mit einem Timer (per ISR).
Hast du für "vergleichsweise langsam" auch Zahlen zur Hand?
Der Ansatz, mit einem langsamen Signal auf einen Interrupt zu gehen, ist 
falsch. Du solltest nämlich vor der Auswertung dein Signal 
aufbereiten, nicht nach der Auswertung an Sypmtomen herumbasteln...

von Anja (Gast)


Lesenswert?

Hallo,

sieht für mich so aus als entweder in der Software die Register in der 
falschen Reihenfolge ausgelesen werden, oder Überläufe "65536" nicht 
richtig berechnet werden.
Ansonsten sollte eine Periodendauer immer erst Tiefpaßgefiltert und dann 
mit einem Schmitt-Trigger mit ausreichender Hysterese aufbereitet werden 
bevor man auf einen Prozessor-Pin geht.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

üblich (und mathematisch abgesichert) ist eine 3-Sigma-Filterung. Bei 
Normalverteilung kommen Werte ausserhalb +- 3 Sigma praktisch nicht vor, 
also kann man sie als Fehlmessung eliminieren ohne Rückwirkung auf die 
normalverteilte Messreihe. Da in den übrigen Messwerten wieder 
Ausreisser auftreten können (die Standardabweichung muss ja ohne die 
elminierten Werte neu berechnet werden), kann man das Verfahren 
wiederholen, ev. solange bis keine Werte mehr zu eliminieren sind.

Gruss Reinhard

von Ralph (Gast)


Lesenswert?

Bring erst mal die externe Beschaltung in Ordnung, dann wird die Anzahl 
der Fehltriggerungen sehr reduziert, eventuell dein Problem komplett 
beseitigt

von Purzel H. (hacky)


Lesenswert?

... jeder dritte Wert eine Fehlmessung ? Da stimmt was nicht. Das koennt 
sich auch verschlechtern. Und dann ist alles Fehlmessung ? Wie reagiert 
das System dann ?

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.