Ich habe ein Signal, das bei 100 Hz gemessen wird, und ich muss das Savitzky-Golay-Glättungsfilter auf dieses Signal anwenden. Bei näherer Betrachtung wird mein Signal jedoch nicht mit einer vollkommen konstanten Rate gemessen, das Delta zwischen den Messungen liegt zwischen 9,7 und 10,3 ms.
Gibt es eine Möglichkeit, den Savitzky-Golay-Filter für nicht gleichmäßig verteilte Daten zu verwenden? Gibt es andere Methoden, die ich anwenden könnte?
Antworten:
Eine Methode wäre, Ihre Daten so neu abzutasten, dass sie gleichmäßig verteilt sind, und dann können Sie jede beliebige Verarbeitung durchführen. Das bandbegrenzte Resampling mit linearer Filterung ist keine gute Option, da die Daten nicht gleichmäßig verteilt sind. Sie können daher eine lokale Polynominterpolation (z. B. kubische Splines) verwenden, um die Werte des zugrunde liegenden Signals auf "genau" zu schätzen. 10-Millisekunden-Intervalle.
quelle
Aufgrund der Art und Weise, wie das Savitzky-Golay-Filter abgeleitet wird (dh als lokale Polynomanpassungen der kleinsten Quadrate), gibt es eine natürliche Verallgemeinerung der ungleichmäßigen Abtastung - es ist nur viel rechenintensiver.
Savitzky-Golay-Filter im Allgemeinen
Für den Standardfilter besteht die Idee darin, ein Polynom an eine lokale Menge von Abtastwerten anzupassen [unter Verwendung der kleinsten Quadrate] und dann das mittlere Abtastwert durch den Wert des Polynoms am mittleren Index (dh bei 0) zu ersetzen. Das heißt, die Standard-SG-Filterkoeffizienten können durch Invertieren einer Vandermonde-Matrix von Abtastwertangaben erzeugt werden. Um beispielsweise eine lokale parabolische Anpassung über fünf Stichproben (mit lokalen Angaben -2, -1, 0 , 1, 2) zu erzeugen, wäre das System der Entwurfsgleichungen A c = y wie folgt:y0… Y4 A c = y
Oben sind die die unbekannten Koeffizienten des Polynoms der kleinsten Quadrate c 0 + c 1 x + c 2 x 2 . Da der Wert des Polynoms bei x = 0 gerade c 0 ist , ergibt die Berechnung der Pseudoinverse der Entwurfsmatrix (dh c = ( A T A ) - 1 A T y ) die SG-Filterkoeffizienten in der oberen Reihe. In diesem Fall wären siec0… C2 c0+ c1x + c2x2 x = 0 c0 c = ( ATA )- 1EINTy
Ungleichmäßige Probenahme
dann hat jede Entwurfsmatrix die folgende Form:
quelle
(Ableitung jemand?)
quelle
Ich habe herausgefunden, dass es zwei Möglichkeiten gibt, den Savitzky-Golay-Algorithmus in Matlab zu verwenden. Einmal als Filter und einmal als Glättungsfunktion, aber im Grunde sollten sie dasselbe tun.
quelle
Wenn es hilfreich ist, habe ich eine C-Implementierung der von datageist beschriebenen Methode durchgeführt. Die Benutzung erfolgt auf eigenes Risiko.
quelle