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

Signal glätten mit filter

 

t.b.
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2011, 14:36     Titel: Signal glätten mit filter
  Antworten mit Zitat      
hallo. ich hoffe ihr könnt mir nochmal helfen.

ich möchte den verlauf einer funktion glätten mit einem linearen glättungsfilter. habe auch gesehen, dass es da den gaussfilter gaussfir gibt. aber ich verstehe nicht, was die parameter genau bedeuten. habe dann mal einige werte ausprobiert und mir das ergebnis angesehen. leider habe ich nix von einer glättung gesehen.

vielleicht könnt ihr mir da weiterhelfen.


viele grüße
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.08.2011, 16:41     Titel:
  Antworten mit Zitat      
Was hast du denn für ein Signal (Daten oder Bild bitte) und wie soll es geglättet werden? Vermutlich kann auch ein anderes Filter als Gauss verwendet werden. Nur weil die Frage nach diesem Filter heute zufällig aufkam, muss es nicht zwingend auch bei deiner Anwendung das richtige Filter sein Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 18.08.2011, 16:48     Titel:
  Antworten mit Zitat      
Hi,

ich weiss nicht ob es dir hilft aber eine Glättung kannst du auch mit einem gleitenden Mittelwert erreichen:
Code:


Fs = 25; % sampling frequency
t = (0:1/Fs:10-1/Fs)';
f = 1; % Hz
WindowSize = 3;

y = 10*sin(2*pi*f*t); %signal
noise = 5*rand(length(y),1)-5/2; % noise
ynoisy = y+noise; %noisy signal

Yfiltered = conv(y,ones(WindowSize,1)./WindowSize,'same');

% Plots
plot(t,ynoisy)
hold on
plot(t,Yfiltered,'r')


 


Gruß,

lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2011, 17:08     Titel:
  Antworten mit Zitat      
Danke erstmal an euch beide.

Ich möchte ein Signal glätten und der Filter soll linear sein. Ich habe es so versucht:

Code:
x=[.....]%Datenvektor
gaussFilter = gausswin (20);
gaussFilter = gaussFilter / sum (gaussFilter);% normalisieren.
smoothedVector = conv (x, gaussFilter);


Das geglättete Signal ist dann aber irgendwie verschoben nach rechts. Kann das sein, oder habe ich was falsch gemacht?

Und das mit dem gleitenden Mittelwert macht doch die Funktion smooth, oder nicht? Ich will einfach die Ergebnisse der linearen Filter vergleichen und gucken, welcher am besten passt.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.08.2011, 17:31     Titel:
  Antworten mit Zitat      
Das Verschieben ist normal...das Filter muss sich ja erst mal einschwingen.

Es gibt noch andere lineare Filtertypen...warum muss es denn ein Gauss sein. Dieser wird vor allem bei der Impulsformung eingesetzt. Deshalb habe ich auch nach deinem Signal gefragt.

Am sinnvollsten ist es immer, sich das Frequenzspektrum des Signals anzuschauen und an Hand der auftretenden Frequenzanteile das Filter zu bestimmen. Das hier ist auch ein lineares Tiefpass Filter:

Code:

% n = Filterordnung
% Wn = normierte 3-dB Grenzfrequenz in [rad/s] = 2*Pi (fc/fn)
% fc ist die gewünschte Grenzfrequenz in Hz
% fn = Nyquistfrequenz = Abtastfrequenz/2
% Berechnung der Filterkoeffizienten
[b,a] = butter(n,Wn);
% Filterung
signal_filt = filter(b,a,signal);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b. (als Gast)

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2011, 17:39     Titel:
  Antworten mit Zitat      
Code:

% n = Filterordnung
% Wn = normierte 3-dB Grenzfrequenz in [rad/s] = 2*Pi (fc/fn)
% fc ist die gewünschte Grenzfrequenz in Hz
% fn = Nyquistfrequenz = Abtastfrequenz/2
% Berechnung der Filterkoeffizienten
[b,a] = butter(n,Wn);
% Filterung
signal_filt = filter(b,a,signal);
[/quote]

Was ist genau die Filterordnung? Mir wurde gesagt, ich soll es erstmal mit einem Gaussfilter versuchen. Deshalb dieser Filter. Gibt es denn die Möglichkeit, einen Filter zu benutzen ohne das sich eine Verschiebung ergibt?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.08.2011, 17:46     Titel:
  Antworten mit Zitat      
Nein...dann musst du eben den Einschwingvorgang wegschneiden um so dein Signal wieder nach links zu schieben.

Die Filterordnung bestimmt vor allem das Dämpfungsverhalten (wie stark geglättet wird). Du erhältst dann n+1 Filterkoeffizenzen jeweils für a und b. Probier einfach mal für n = 10 und 100 aus...da solltest du dann schon deutliche Unterschiede sehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b. (als Gast)

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2011, 17:49     Titel:
  Antworten mit Zitat      
Ich werde das später ausprobieren. bin auf dem sprung. aber noch ne kurze frage. wenn ich den einschwung abschneide, mache ich das am anfang und am ende? und wieviel schneide ich ab?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.08.2011, 01:08     Titel:
  Antworten mit Zitat      
Hallo t.b.,

Schaue Dir mal FILTFILT an.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 19.08.2011, 02:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Das geglättete Signal ist dann aber irgendwie verschoben nach rechts. Kann das sein, oder habe ich was falsch gemacht?

Ich bin mir nicht ganz sicher ob das am Einschwingen liegt. Vielleicht liegt es auch einfach nur daran dass deine Daten bei der Faltung gepadded werden und dementsprechend sich natürlich auch die Indexe verschieben bzw. sich die Matrixgröße ändert. Ensprichen denn die Ergebnisse deinen Erwartungen wenn du die Matrixgröße nach der Faltung gleich belässt?
Code:

smoothedVector = conv (x, gaussFilter,'same');
 

Zitat:

Und das mit dem gleitenden Mittelwert macht doch die Funktion smooth, oder nicht? Ich will einfach die Ergebnisse der linearen Filter vergleichen und gucken, welcher am besten passt.

Lilovs Beispiel zeigt einen gleitenden Mittelwert mit variabler Filtergröße (WindowSize)!

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2011, 13:02     Titel:
  Antworten mit Zitat      
Könnt ihr viellciht noch sagen, warum man bei dem Code:

Code:
x=[.....]%Datenvektor
gaussFilter = gausswin (20);
gaussFilter = gaussFilter / sum (gaussFilter);% normalisieren.
smoothedVector = conv (x, gaussFilter);


normalisieren muss?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 26.08.2011, 13:24     Titel:
  Antworten mit Zitat      
Damit der Verstärkungsfaktor des Filters = 1 ist...ansonsten würde er das Signal verstärken.
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2011, 14:20     Titel:
  Antworten mit Zitat      
okay. danke erstmal für die antwort.

aber ich habe noch ne frage. in der matlab-hilfe zu gausswin steht, dass die Koeffizienten mit der Formel

[math] w(n)=e^{-0.5(\alpha \frac{n}{N/2} )^{2}} [\math]

berechnet wird, wobei n zwischen -N/2 und N/2 liegt.

Das verstehe ich irgendwie nicht. liegt n nicht zwischen 1 und N ???
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.08.2011, 20:07     Titel:
  Antworten mit Zitat      
Das Gaussfenster ist spiegelsymmetrisch an der y-Achse genau bei N/2, wobei N die Fensterlänge ist. In der Regel berechnet man daher nur die Häfte und spiegelt diesen Teil dann. Wichtig ist doch nur...N ist die Fensterlänge und alpha ein Formfaktor.

So wäre die Formel, wenn n von 0...N-1 geht Wink

Code:

N=64;
alpha=2.5;
for n=0:N-1
    w(n+1) = exp(-0.5 * (alpha* (n-((N-1)/2))/(N/2))^2 );
end
 


Damit kommt jetzt das gleich wie mit w=gausswin(N,alpha) raus.
Private Nachricht senden Benutzer-Profile anzeigen
 
t.b.
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 02.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2011, 10:34     Titel:
  Antworten mit Zitat      
Hallo DSP,

ich habe jetzt mal beides geplottet, also

1)
Code:
N=64;
alpha=2.5;
for n=0:N-1
    w(n+1) = exp(-0.5 * (alpha* (n-((N-1)/2))/(N/2))^2 );
end


2) v=gausswin(64,2.5)

Da kommt aber nicht das gleiche raus. Verstehe ich jetzt irgendwie nicht. Müsste es doch,oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.