Der Filter sieht (ohne den Zussammenhang jetzt genauer zu kennen) aus wie eine arithmetische Mittelwertsbildung. Wenn du ihn nach jeder Messung aufrufst verhält er sich wie eine Halbwertszeit über t. Ist also recht sensibel auf apruppte neue Eingangsgrößen und wird dir daher auch in deine Regelkreise einschlagen als Istwert-Sprung bei einer Sensorwert-Spitze.Zitat von Willa
Der (Glättungs)Filter von mir basiert auf einer Tiefpassfilterung, das heißt es wird eine digitale Filterung aufgrund eines Frequenzspektrums (0Hz bis Samplingfrequenz) vorgenommen. Sinn ist schlicht und einfach das "hochfrequente" Anteile (hoher Differentialsprung dg/dt) aus dem nützlichen "tieffrequenten" Anteil sicher und definiert entfernt werden. Die Qualität ist eine Frage wie weit man die digitalen Filter ausreizt und was der Ziel-Prozessor an Resorcen zur Samplingfrequenz hergibt.
Hier habe ich eben noch eine kleine Grafik zur Veranschaulichung gezeichnet wie das System grundlegend funktioniert:
Bild hier
Hat irgendwas von Sudoku, nur bissel aufwändiger...
Noch ein kleiner Nachtrag, habe den Code von dir einmal einfach umgestellt auf eine einfache Darstellung:
NeuenWertRechnen
{
Wert = NeuerWert * 31
Wert = Wert + NeuerWert
Wert = Wert / 32
}
Wobei Wert 'Static' ist, also nicht bei jedem Aufruf neu initialisiert wird, sondern seinen Wert beibehält bis zum nächsten Aufruf.
Das Verhalten ist eine (Laufzeitverbesserte) arithmetische Mittelwertsbildung auf einer Dimension (Array[n]). Heißt du schiebst einen neuen Wert in das Array unter Beachtung von 31 (weil ja eines rausfliegt bei neuem Wert) verbleibenden Messpunkten und fügst den 32sten hinzu um ihn über den gesamten Bereich von 32 Samples wieder zu dividieren. Das erspart die unnützen Shiftoperationen beim Eingang eines neuen Samples über alle 32 Arrayelemente in der Form:
For n = 30 To 0 Step -1
Buffer(n) = Buffer(n + 1)
Next n
Buffer(31) = NeuerWert
Ist im Grunde das hier:
Wert = Summe{Buffer[n]} / 32
Wobei n einen Buffer über n Elemente (in deinem Fall 32) darstellt.
Habe das bei meiner Software anstatt FIR-Filter AMW-Filter (arithmetisches Mittelwertfilter) genannt. Da sieht man das ein Mittelwertsfilter "träge" reagiert, mit einem FIR dafür subitl und schnell. Hängt daran, das auf der Frequenz selektiert wird (dem speziellen eben frequenz-selektiven Differenzial aufgrund y=dx/dt), nicht auf einem Mittelwert.
Grüße Wolfgang
Lesezeichen