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
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
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 ?
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.
> 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...
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.
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
... jeder dritte Wert eine Fehlmessung ? Da stimmt was nicht. Das koennt
sich auch verschlechtern. Und dann ist alles Fehlmessung ? Wie reagiert
das System dann ?