Nach Mittelwertfilter noch ein "Medianfilter" sinnvoll?

OP #6518427
Lesenswert?

Hallo,

ich habe eine Frage (realisiert auf einem STM32F4-Mikrocontroller):
Ich erhalte nach jeder Messung ein Array aus 1024 Spektralwerten (40 
Messungen pro Sekunde), das ich nach jeder Messung einer rekursiven 
Mittelung zuführe (quasi wie ein simpler IIR-Filter).

Aus diesem gemittelten Spektrum wird mit einem speziellen Algorithmus 
der höchste Peak gesucht und mit dieser Mittelung ergibt sich ein 
quasi-stabiler daraus abgeleiteter Ausgabewert, mit dem ich schon 
ziemlich zufrieden bin.

Nun habe ich mir gedacht, zwecks doch sporadisch auftretender möglicher 
Ausreißer, die den Ausgabewert kurz mal in eine Richtung "ziehen" können 
(sei es auch nur minimal), zur Erhöhung der Robustheit einen 
Median"filter" nachzuschalten (sozusagen nur auf z.B. letzten 5 
Ausgabewerte des gemittelten Arrays losgelassen, und nicht als Ersatz 
für den Mittelwertfilter
- das wäre mit der Sortierung der großen Felder ein zu hoher 
Rechenaufwand - das Sortieren alleine dauert überschlagen im Worst Case 
mit Bubble-Sort [OK, ist nicht die ressourcenschonendste Variante] für 
mehrere Felder schon einige Millisekunden).

Zu viel bzw. "zu lange" möchte bzw. kann ich auch nicht mitteln oder 
"medianisieren", da es aufgrunddessen zu einer Verzögerung kommt.

Ist das eine akzeptable Option oder gibt es dazu andere/bessere Ideen?
#6518622
Lesenswert?

Wenn der Medianfilter dahinter kommt, sind die Störungen ja schon 
gemittelt - nicht ideal. Versuch doch den Median vorher und schmeiß die 
Ausreiser weg (Nalimov wird mit 1024 Werten wahrscheinlich zu langsam 
auf dem F4 ???). Du kannst noch oberen und unteren Abstand verändern. 
Damit hatte ich bei einigen versauten Messungen schon recht gute Erfolge 
vor der Mittelung.
OP #6518784
Lesenswert?

OK, ich würde dann mal versuchen einen Medianfilter vorzuschalten.

Dazu würde ich die letzten 5 Spektren heranziehen, das heißt ich brauche 
einen Ringbuffer mit 5 x 1024 Elementen, wo 1024 Mal ein Median aus den 
letzten 5 Spektralwerten pro Durchlauf bestimmt wird und das daraus 
erhaltene Spektrum dem Mittelwertfilter zugeführt wird (ich weiß noch 
nicht, ob das 40x pro Sekunde klappen wird, ggf. nur 3 Elemente).

Kann mann dieses Problem sonst irgendwie optimieren?

Sven B. schrieb:
> Worin besteht denn das Problem? Rauscht der Peak ein bisschen hin
> und
> her? Evtl. bietet es sich auch an, eine Parabel an den höchsten Punkt
> und 3-5 umliegende Werte zu fitten, statt einfach nur den höchsten Punkt
> zu finden.

Das ist ein Radarsystem, die Peak Detection erkennt manchmal kurzzeitig 
einfach ein "falsches Ziel" (bzw. es fliegt etwas durch den 
Radarstrahl), dann steuert der Ausgabewert geringfügig aus.
Ich mache bereits anschließend eine parabolische Interpolation.
OP #6519793
Lesenswert?

Sven B. schrieb:
> Das traurige ist, dass der Medianfilter das Rauschen nicht so gut
> reduziert wie ein Mittelwert. Vielleicht ist es besser, von 5 Werten pro
> Kanal den höchsten und den niedrigste wegzulassen (order für deine
> Anwendung nur den höchsten), und die übrigen 3 zu mitteln?

Kein Vorteil ohne Nachteil!
-- wäre ja zu schön, wenns anders wäre

So auch hier:
Ich mittle aktuell mit N=10 rekursiv, mit diesem Vorschlag würde ich 
z.B. einen 10x 1024 Buffer verwenden, und den Vorteil einer rekursiven 
Mittelung müsste ich dann kübeln, denn ich müsste nun jeweils die acht 
Mittigen erst suchen und pro Kanal mitteln.

Aber die Idee gefällt mir.

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