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