WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zero Padding bei filter() vermeiden

 

AndiBar
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 16:54     Titel: Zero Padding bei filter() vermeiden
  Antworten mit Zitat      
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:

Code:

fenster = 5   %Fensterlänge für den Mittelwert, in der Funktion dann normiert auf Länge
X_filt = filter(ones(1,fenster)/fenster,1,X);
 


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?
Private Nachricht senden Benutzer-Profile anzeigen


Fourier1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2010, 06:49     Titel: ....
  Antworten mit Zitat      
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

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2010, 09:08     Titel:
  Antworten mit Zitat      
Beispiel: Du hast eine Signalfolge s und einen filterkern h

Code:
s = [5 7 8 4 7 9 12 10 8 16]
h = 1/5 [1 1 1 1 1]
 


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.

Code:


[5 7 8 4 7 9 12 10 8 16]
  [1 1 1 1 1]
 


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
Private Nachricht senden Benutzer-Profile anzeigen
 
AndiBar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2010, 09:15     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 18.06.2010, 10:42     Titel:
  Antworten mit Zitat      
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:
Code:


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:
Code:

[5 7 8 4 7 9 12 10 8 16]
[1 1 1 1 1]
 


und so enden soll:
Code:

[5 7 8 4 7 9 12 10 8 16]
             [1 1 1 1 1]
 


soweit ich dich richtig verstanden habe

gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
AndiBar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 24.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2010, 15:24     Titel:
  Antworten mit Zitat      
"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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.