Moving Average Filter

Gast #252795
Lesenswert?
• ▲
▼
VHDL hab ich keines, kann aber erklären wie der funktioniert.

Angenommen für 16 Datenwerte:

Ein FIFO speichert kontinuierlich die letzten 16 Samples.
Über diese gibt es eine Summe, also ein 17.ter Wert der die additive
Summe über alle Werte im FIFO enthält.

Wenn jetzt das nächste Sample reinkommt so passiert folgendes:

1.) den Wert des ältesten Samples aus dem FIFO von Summe subtrahieren
2.) den Wert des neusten Samples auf Summe addieren
3.) den neuesten Sample im FIFO ablegen

Die Summe dividiert durch 16 ist der Durchschnitt.

Je größer das Window des moving AVG's sein soll desto größer muß also
der FIFO werden.

Ansich also ein "komplizierter" Name für eine einfache Sache.

Gruß Hagen
Gast #252796
Lesenswert?
• ▲
▼
Hallo Hagen

Lass mich ein Beispiel machen.
Das sind 16 Werte.

5, 7, 4, 6, 5, 5, 6, 4, 7, 9, 3, 4, 6, 5, 7, 1.

Ausummiert und durch 16 geteilt liefert: 84/16 = 5,25.
Der Wert 5,25 wird weitergegeben.

Jetzt kommt ein neuer Wert: 3.
Nun wird dieser neue Wert 3 zu 84 addiert und die 1 abgezogen, wobei
die 1 gleichzeitig rausfliegt. Also krieg ich 84 + 3 - 1 = 86.
Das teile ich durch 16 und kriege 5,375.
Der Wert 5,375 wird weitergegeben.

Jetzt kommt der nächste Wert: 2.
Nun wird dieser neue Wert 2 zu 86 addiert und die 7 abgezogen, wobei
die 7 gleichzeitig rausfliegt. Also krieg ich 86 + 2 - 7 = 82.
Das teile ich durch 16 und kriege 5,125.
Der Wert 5,125 wird weitergegeben.

Hagen, stimmt's bis hierher.
Jetzt eine Frage: Alle Werte kommen "überabgetastet". Wie erreiche
ich nun eine Dezimation? Kann einfach so Pi mal Daumen immer 7 Werte
weglassen und nur jeden 8. Werte weitergeben?

Gruss,
Matthias
Gast #252797
Lesenswert?
• ▲
▼
An sich ändert die Überabtastung nichts am Average selbst, da ja die
events gleich verteilt bleiben. Jetzt ist es eine Frage, um wieviel Du
überabgetastet hast; evtl. wird's schneller/einfacher, wenn Du einfach
über alles den average bildest oder wirklich Dezimation lt. Lehrbuch
betreibts, was aber auf jeden Fall mehr Resourcen benötigt (imo
sinnvoll bei > 30-facher Abtastung).

Viele Grüße
Olaf
Gast #252798
Lesenswert?
• ▲
▼
@Matthias
Bei der Dezimation nimmt man normalerweise einen Tiefpass
um hohe Frequenzanteile zu beseitigen und nach dem TP
wird nur noch jeder N-te Abtastwert genommen, die anderen
werden einfach ignoriert.

Wo liegt denn das Average-Filter im Signalweg ?
Gast #252799
Lesenswert?
• ▲
▼
Das stimmt so, zumindestens nach meinem Verständnis des moving AVGs.

Die Dezimation hängt von dir ab wie du sie machen möchtest.
In deinem Beispiel also eine 8 fach Dezimation. So wie du sie
durchführst gehen 7/8 tel der Samples verloren und haben keinen Einfluß
auf das Ergebnis mehr, du dezimierst also schon vorher.

Du könntest aber auch einen 8 fach AVG benutzen und so die Dezimation
von 8 Samples auf 1 Sample per Durchschnittsberechnung durchführen.

Würdest du das nun kaskadieren zb. 1 solcher 8 fach AVG's wobei dessen
Ausgabesample in einen 3 fach Moving AVG eingerechnet werden, dann
hättest du schon fast wieder eine Interpolation gesehem vom 2. Output
dieses 3 fach moving AVGs.

Du benötigst im Grunde nur ein Entity das eine neue Component eines
moving AVGs in VHDL implementiert.

Zum Downsampling allozierst du ein 8 fach moving AVG und dessen
Summenwert landet nach jeweils 8 Samples in einem 3 fach moving AVG.
Du hast also mit dem 8 fach AVG dezimiert = Samplerate reduziert, aber
"ohne Verluste". Mit dem anschließenden 3'er AVG glättest du diese
Eingabe nochmals. Falls du das benötigst.

Was willst du machen ? eventuell klärt diese Frage mehr.

Gruß Hagen
Gast #252803
Lesenswert?
• ▲
▼
Hagen, was das Teil genau machen soll, weiss ich auch nicht so genau, es
ging mir halt so um das Grundverständnis des digitalen Teils eines
Delta-Sigma-Wandlers und wie man anschliessend wieder zu einer
niedrigen Frequenz kommt.

Ich sage: DANKE !!

Falls du irgendwo einen lehrreichen beispielhaften VHDL-Code auftreiben
kannst, so wäre das mehr als genial.

Ich versuche jetzt, mich weiter in dieses Thema einzulesen.

Gruss,
M.

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