Forum: Digitale Signalverarbeitung / DSP / Machine Learning Simple Moving Average in Reihe


von Manfred M. (bittbeisser)


Angehängte Dateien:

Lesenswert?

Ich frage mich gerade wie ich die Verzögerungszeit bekomme, wenn ich 2 
oder mehr einfache gleitende Mittelwerte (SMA=simple moving average) 
hintereinander schalte.
Eines meiner Ziele ist es, für eine Pegelregelung, eine möglichst gute 
Glättung der Eingangswerte zu erhalten. Ich vermute, das dafür ein 
Filter mit Gauß-Charakteristik geeignet wäre, welches bei größeren 
Längen aber einiges an Rechenzeit erfordern würde.
Der DSP-Guide Chapter 7 (s.136 unten) "The Central Limit Theorem"
http://www.dspguide.com/ch7/2.htm
lässt mich vermuten, das eine mehrfache Hintereinanderschaltung von SMA 
Filtern diesem mehr oder weniger nahe kommt.

Allerdings frage ich mich, wie dabei die resultierende Verzögerungszeit 
ist. Dazu finde ich keine Angaben.

Also eigentlich möchte ich das für eine automatische Pegelregelung 
verwenden. Da kämen dann noch weitere Anforderungen hinzu, wie schnelle 
Ansprechzeit und langsames Abklingen, aber ich befürchte, das ist mit 
einfachen Filtern nicht machbar.

Die Idee dahinter ist, das ein einfacher gleitender Mittelwert in 
optimierter Ausführung deutlich weniger System Ressourcen beansprucht, 
als ein echtes Gauß Filter.

Das angehängte Bild zeigt folgendes:
 1) rote Linie: Einfacher gleitender Mittelwert über 6000 Samples
 2) gelbe Linie: zwei gleitende Mittelwerte hintereinander über jeweils 
3000 Samples.

Die Darstellung bezieht sich auf eine Abtastfrequenz von 8kHz, jedes 
Pixel repräsentiert 40 Samples=5ms.
Man sieht, das die gelbe Linie eine deutlich bessere Glättung bringt, 
aber auch eine deutlich schlechtere Ansprechzeit hat.

Wie kann ich diese Werte erfassen und ggf. beeinflussen / verbessern?

von Nop (Gast)


Lesenswert?

Also schnelle Ansprechzeit heißt, daß steile Flanken des Eingangssignals 
auch im Ausgangssignal möglichst steil bleiben. Im Frequenzbereich heißt 
das, hohe Frequenzen dürfen nicht stark bedämpft werden. Dummerweise 
bedeutet "Glättung" aber einen Tiefpaß.

Das Filter kann ja nicht wissen, ob ein einsetzender Signalblock gleich 
wieder aufhört und daher weggeglättet werden soll, oder ob es 
weitergehen wird und daher durchschlagen soll. Dazu müßte es schon in 
die Zukunft sehen können.

Bessere Glättung heißt automatisch mehr Flankenverflachung, was sich als 
schlechtere Ansprechzeit äußert.

Da es aber nicht um Signalaufbereitung geht, sondern um eine Regelung, 
wären eventuell auch nichtlineare Filter eine Idee. Die würden zwar neue 
Frequenzen reinbringen, aber für eine Pegelregelung spielt ja nur das 
Zeitsignal eine Rolle.

Sowas wie z.B. maximale Differenz zweier aufeinanderfolgender Pegel, und 
wenn die zu sehr abweichen vom vorherigen Wert (evtl ein Mittelwert über 
vielleicht 200 Samples oder so), dann wird nur die maximal zulässige 
Änderung übernommen. Man könnte auch die Energie oder den Logarithmus 
(lookup-table) auswerten.

Kommt natürlich auch drauf an, was Dein Nutzsignal ist, also wie schnell 
sich das ändert, und wie schnell sich relativ dazu der Pegel ändert. 
Wenn die Pegeländerungen langsam sind im Verhältnis zum Nutzsignal, 
könnte das gehen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ja, wenn man mehrere Rechtecke miteinander faltet, kommt mit steigender 
Anzahl der Rechteckfaltungen was immer "gaussigeres" raus.
Ein einzelnes Moving Average Filter mit N Koeffizienten hat eine 
(konstante) Gruppenlaufzeit von (N-1)/2.
Beim in Kette schalten von mehreren Filtern addieren sich einfach die 
Gruppenlaufzeiten. Wenn du also 10 Filter von diesem Kaliber [1 1 1 1 
1]/5 in Kette schaltest, kannst du eine "Verzoegerung" von 10*2=20 
Takten erwarten.
Im Gegensatz zu einem "echten" Gaussfilter sparst du dir halt 
Multiplikationen ein, wenn nur mit moving average filtern gearbeitet 
wird. Dafuer ist's halt dann kein "echter" Gauss (hat z.B. noch Ripple 
im Sperrbereich).

Gruss
WK

von Meety (Gast)


Lesenswert?

Was ist denn hier jetzt der Vorteil von zwei Filern, statt einem 
einzigen mitdoppelter Länge?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Meety schrieb:
> Was ist denn hier jetzt der Vorteil von zwei Filern, statt einem
> einzigen mitdoppelter Länge?

Wenn alle Koeffizienten eines FIRs gleichgross sind, brauchst du nicht 
jedes Sample separat mit einem Koeffizienten zu multiplizieren. Das 
spart ein bisschen Rechenzeit/Ressourcen im FPGA.

Gruss
WK

von Manfred M. (bittbeisser)


Lesenswert?

> Da es aber nicht um Signalaufbereitung geht, sondern um eine Regelung,
> wären eventuell auch nichtlineare Filter eine Idee.
Ja, aber von Regelungstechnik habe ich so gut wie keine Ahnung. 
Tatsächlich will ich die Skalierung einer Anzeige an den Wertebereich 
anpassen.

> Was ist denn hier jetzt der Vorteil von zwei Filern, statt einem
> einzigen mitdoppelter Länge?
WK hat es bereits gesagt, je öfter man das macht umso Gauß ähnlicher 
wird es.

Und beim SMA Filter spart das nicht nur ein bischen Rechenzeit. Pro 
Arbeitstakt wird eine Addition, eine Subtraktion und eine Division 
benötigt, und das unabhängig von der Anzahl der Speicherstellen. Bei 
einem vollwertigen FIR Filter müssen für alle Taps Multiplikationen 
durchgeführt werden. Im Beispiel wären das für die rote Linie 6000.

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.