|
|
Zero Padding bei filter() vermeiden |
|
AndiBar |
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 24.11.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.06.2010, 16:54
Titel: Zero Padding bei filter() vermeiden
|
|
Hallo,
ich habe hier Bildzeilen, die ich aufgrund von rauschen etc gerne filtern möchte. Dazu benutze ich einen gleitenden Mittelwert über die filter-Funktion:
Nun taucht das gefilterte signal jedoch immer aus der 0 hoch, da die filter-Funktion für die ersten Werte anscheinend Zero-Padding betreibt. Ich würde das gerne vermeiden, am besten auch mit der FIlter-Funktion, sonst müsst ich mir eine eigene Funktion schreiben.
Ist das irgendwie möglich?
Grüße, Andi
[edit]
ich könnte natürlich die ersten, durch Zero-Padding beeinflussten Werte, durch den ersten Wert ersetzen, bei dem das Filter komplett auf real vorliegenden Punkten liegt. Bissel unelegant, aber in meinen Augen momentan besser als diese krasse Verfälschung der ersten Werte durch die Nullen. Andere Vorschläge?
|
|
|
|
|
Fourier1 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2010, 06:49
Titel: ....
|
|
kannst du das problem bisschen näher beschrieben, was meinst du mit das gefilterte signal taucht aus der 0 hoch, wo sollte er tauchen, bzw was erwartest du?
ich möchte nur das problem besser verstehen bevor ich hier einen vorschlag mache.
gruss
|
|
|
AndiBar |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 24.11.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2010, 09:08
Titel:
|
|
|
|
|
Beispiel: Du hast eine Signalfolge s und einen filterkern h
Diesen Filterkern schiebst du von links über das Signal und berechnest jeden neuen Wert aus einer mittellung der 5 Werte, die unter dem Filter liegen.
Wenn das Filter zum Beispiel zentral auf der ersten 4 im Signal liegt würde es die Teilfolge
[7 8 4 7 9] mitteln und als Ergebnis 7 auf die Stelle setzen.
Wenn das Filter jedoch am Anfang von links in das Signal rutscht, erfasst es für die erste Stelle nur die erste fünf und setzt für die restlichen stellen 0 ein: Zero padding halt. Als Ergebnis kommt also lediglich 1/5 raus.
Zweite Stelle (0+0+0+5+7)/5, dritte Stelle (0+0+5+7+8)/5. Erst ab der fünften Stelle (Filterlänge!) liegt das Filter komplett über dem Signal und generiert korrekte Werte.
Diesen Effekt würde ich gern vermeiden. Ich habe mich fürs erste mit der in meinem erten Post genannten Variante zufrieden gegeben, die immer noch "richtiger" ist, als das rumgemurkse mit den falschen Nullen. Andere Vorschläge sind natürlich trotzdem immer wilkommen
|
|
|
AndiBar |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 24.11.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2010, 09:15
Titel:
|
|
Was mir grade einfällt, ich arbeite mit Ausschnitten von Bildzeilen. Die könnte ich evtl bewusst länger wählen und die durch zero-padding verfälschten Werte einfach abschneiden. So käme ich dann auch auf meine angepeilte gefilterte Länge.
|
|
|
Fourier |
Forum-Guru
|
|
Beiträge: 329
|
|
|
|
Anmeldedatum: 05.04.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 18.06.2010, 10:42
Titel:
|
|
hallo,
erstens, du weiss doch dass filterung eine faltung ist, und ein signal muss gespiegelt werden, verschieben ...multip....summe.
das ist die formel der faltungsumme, und so funktioniert die funktion 'filter'
also falsche werte sind sie 100% nicht. es sei denn du wünschst dir was anderes das die funktion 'filter' nicht anbietet.
zweites:
die signale x und y haben die gleiche länge. und wenn auf dein beispiel eingehe . dein signal hat die länge 10. und laut deinem wunsch muss das gefilterte signal die länge 5 haben. wenn es so anfangen soll:
und so enden soll:
soweit ich dich richtig verstanden habe
gruss
_________________
Ein schlechter General ist besser als zwei gute.
|
|
|
AndiBar |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 24.11.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2010, 15:24
Titel:
|
|
"falsch" ist in diesem Fall vielleicht besser mit "unerwünscht" zu übersetzen. Letztenende geht es mir darum, Randartefakte der Faltung zu vermeiden.
http://upload.wikimedia.org/wikiped.....aettung_durch_Faltung.png
Dieses Bild drückt ganz gut aus, was ich _nicht_ will: diese Randverschmierungen der blauen Kurve.
So wie ich das jetzt sehe muss ich entweder mit einer Signalkürzung leben oder den Rand entsprechend aufweiten.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|