Ausfiltern von falschen Werten in einer Messung (kein Tiefpass!)

OP #1442596
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
Gast #1442855
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.
Moderator (Firma: Titel) Persönliche Seite #1442917
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...
Gast #1443526
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.
Gast #1443764
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

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