Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frequenzgang Mittelwertfilter mit diversen Ergebnisfeldern plotten


von Signalverarbeiter (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute,

ich bräuchte für meine Diplomarbeit eine weitere Darstellung des 
Phasengangs eines Mittelwertfilters in Matlab. Das angehängte Bild habe 
ich in Matlab generiert. Darauf ist der Frequenzgang eines 3er und 5er 
Mittelwertfilters zu sehen. Die Phasenverschiebung fällt von Anfang an 
kontinuierlich ab. Dies kommt dadurch zustande, dass das Ergebnisfeld 
auf der rechten Seite liegt.
Also bei einem Mittelwertfilter 5. Ordnung multipliziert man alle Werte 
mit 1/5 und addiert diese. Das Ergebnis kommt dann im Bild an die Stelle 
wo das rechte Feld des Filters gerade steht.

Um diese weglaufende Phase zu vermeiden habe ich in Matlab meinen 
Mittelwertfilter einfach selbst gemacht und lege das Ergbnisfeld einfach 
in die Mitte. So bleibt die Phase stabil so lange der Filter kleiner als 
eine Periode des Signals ist. Dieses Verhalten würde ich gerne plotten 
lassen. Kann mir da jemand weiterhelfen?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Signalverarbeiter schrieb:
> und lege das Ergbnisfeld einfach in die Mitte

Du hast die Impulsantwort um 2 nach links verschoben und hast damit ein 
akausales Filter. Im z-Bereich entspricht diese Verschiebung einer 
Multiplikation der Übertragungsfunktion mit z^2. Das kannst du "von 
Hand" auswerten und plotten, oder einfacher mit freqz:
1
freqz([1 1 1 1 1]/5,[0 0 1])

Allerdings ist es normalerweise völlig ausreichend zu sagen dass ein 
Filter eine lineare Phase und damit nur eine Zeitverzögerung hat. Dass 
man diese durch ein nichtkausales Filter ausgleichen kann ist keine 
Erkenntnis die einen eigenen Plot verdient.

von Signalverarbeiter (Gast)


Lesenswert?

Diese lineare Phase will ich aber nicht haben. Daher muss ich das so 
machen. Wieso reicht es aus wenn ich die Impulsantwort verschiebe? 
Dadurch rückt das Ergebnisfeld ja nicht in die Mitte? Und den Code kann 
ich auch nicht verwenden, da dies kein richtiges Mittelwertfilter mehr 
ist:

freqz([1 1 1 1 1]/5,[1 0 0 0 0]) sollte es im Normalfall heißen.

Wenn ich ein 5er Filter mit z^2 multipliziere dann sollte ich:

freqz([1 1 1 1 1]/5,[0 0 1 0 0]) nehmen, liege ich da richtig?

Danke für deine Antwort, hoffe Du meldet Dich nochmal :-)

von Signalverarbeiter (Gast)


Lesenswert?

Ich habe mich vertan...

Deine Funktion: freqz([1 1 1 1 1]/5,[0 0 1]) stimmt so. 
0*z^2+0*z^1+1*z^0 Ich hab was verdreht. Muss die Rechnung aber nochmal 
von Hand machen. Hab noch nicht ganz begriffen, weshalb durch das nicht 
kausale Filter das Ergebnisfeld in die Mitte rutscht. Danke für deine 
Hilfe

von Signalverarbeiter (Gast)


Lesenswert?

Hi,

von der Realisierung habe ich das ganze nun verstanden, jedoch habe ich 
ein kleines Problem mit der Verwendung des nicht kausalen Filters. Ich 
hab in der Vorlesung gelernt, man könne die nicht verwenden, weil diese 
ja Werte aus der Zukunft benötigen. Klar es funktioniert wenn ich mir 
meine Auswertung anschaue, aber ich möchte das ganze theoretisch für 
meine Ausarbeitung erfassen. Ich hoffe Ihr meldet euch nochmal.

Gruß Sigi

von Signalverarbeiter (Gast)


Lesenswert?

Hat niemand ne Ahnung?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Bei einer offline-Verarbeitung, d.h. wenn du das Signal aufgenommen und 
komplett zur Verfügung hast, kannst du ein akausales Filter anwenden. 
Wenn du es in Echtzeit machst nicht.

von Signalverarbeiter (Gast)


Lesenswert?

Na wenn das schon alles war, dann mal vielen Dank :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.