Verfasst am: 04.12.2019, 16:42
Titel: Offline tiefpassfiltern eines periodischen Signals
Hallo zusammen,
ich brauche eure Hilfe bezüglich des Tiefpassfilterns eines Signals, da mein Problem meine Fähigkeiten deutlich übersteigt. Von Hause aus bringe ich leider kein Wissen zur digitalen Filterung mit.
Zum Problem:
Eine geschlossene Kurve ist in Polarkoordinaten definiert, also habe ich einen Radius (r) als Funktion des Winkels (beta). Definiert ist beta für dem Intervall [0 360[ Grad.
Was ich nun machen möchte ist prinzipiell eine "einfache" Tiefpassfilterung des Radius, also die Anteile kurzer Wellenlänge aus der Kurve entfernen. Dazu verwende ich in meinem Code die Variable nCutoff. Sie beschreibt die praktisch den n-ten Fourierkoeffizienten ab dem die Filterung einsetzen soll, wenn man eine Fourierreihenzerlegung durchführt.
Meine Anforderung sind:
- Im Durchlassbereich möglichst eine Verstärkung von 1
- Negative Werte für den Radius r sind nicht zulässig, da nichtphysikalisch
- Ein möglicher Phasenverzug muss kompensiert werden. Sollte durchführbar sein, da ich die Daten offline verarbeiten möchte
Was ich bereits probiert habe:
- Fourierkoeffizienten bestimmen (manuelles berechnen der Fourierreihe) und zu Nullsetzen aller Koeffizienten die zur höheren Ordnungen gehören. Mittlweile weiß ich, dass das nicht funktionert, da ich damit einen "Brick Filter" implementiert habe, vgl. Gibbs'sche Phänomen.
- Verwenden von Fensterfunktionen. Hier habe ich leider keine Ahnung, wie ich meine Amplituden im Bereich hoher Wellenlängen (niederfrequenten Bereich) beeinflusse.
- Butterworth Tiefpass mittles filtfilt zum kompensieren der Phase. Hier habe ich das Problem, dass die gefilterte Funktion negative Werte für den Radius aufweist.
- Centered moving average (movmean). Hier scheint die Amplitude im Bereich langer Wellenlängen deutlich reduziert zu werden, was meiner Anforderung widerspricht.
Habt ihr eine Idee, wie ich mein Problem am Besten in den Griff bekomme? Oder sind meine Anforderung nicht alle Gleichzeitig umzusetzen?
Mein Code mit den verschiedenen Methoden sieht bisland so aus:
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.