Forum: Digitale Signalverarbeitung / DSP Tiefpassfilter 1. Ordnung; Abtastrate / Grenzfrequenz


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

Ich möchte einen einfachen Tiefpassfilter 1. Ordnung mit
   result = ((n - 1) * result + neuerWert) / n
programmieren.

Gibt es eine einfache Möglichkeit n anhand der Samplerate und der 
Grenzfrequenz zu bestimmen?

Vielen Dank im Voraus.

von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
result = ((n - 1) * result + neuerWert) / n

a=1/n

y(i) = (1-a)*y(-1) + a*x(i)

https://en.wikipedia.org/wiki/Low-pass_filter

Ts = Abtastperiodenzeit
fs = 1/Ts  Abtastfrequenz

Grenzfrequenz fc

fc = a/((1-a)*2*pi*Ts)

fc = fs * a/((1-a)*2*pi)

Dämpfung bei der halben Abtastfrequenz
G(fs/2) = a/(2-a)

: Bearbeitet durch User
von Jaroslaw (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Helmut S. schrieb:
> (...) Grenzfrequenz fc = a/((1-a)*2*pi*Ts) (...)

Hallo,
ich bin zu einer anderen Formel gekommen:
fc = 1/(2*PI*Ts) * arccos{1-a*a/[2(1-a)]}
Und daraus:
a = sqrt[B*(B+2)] - B    wo B = 1-cos(2*PI*fc*Ts)

von Wolfgang (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Jaroslaw schrieb:
> ich bin zu einer anderen Formel gekommen:
> fc = 1/(2*PI*Ts) * arccos{1-a*a/[2(1-a)]}

Dann rechne mal arccos{1-a*a/[2(1-a)]} für kleine a aus ;-)

von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
Jaroslaw schrieb:
> Helmut S. schrieb:
>> (...) Grenzfrequenz fc = a/((1-a)*2*pi*Ts) (...)
>
> Hallo,
> ich bin zu einer anderen Formel gekommen:
> fc = 1/(2*PI*Ts) * arccos{1-a*a/[2(1-a)]}
> Und daraus:
> a = sqrt[B*(B+2)] - B    wo B = 1-cos(2*PI*fc*Ts)

Hello Jaroslaw,
vielen Dank für deine Formel.
Ich hatte mich schon gewundert warum ich im Frequenzgang und in der 
Sprungantwort in meinem Beispiel um 4% daneben lag. (wc=1000/s, 
Ts=100us)
Mit deiner Formel für "a" passt das perfekt.

wc = 2*pi*fc
fc = fs/(2*pi) * acos(1-a^2/(2*(1-a)))
wc/fs = acos(1-a^2/(2*(1-a)))
cos(wc/fs) = 1-a^2/(2*(1-a))
b = cos(wc/fs)
b = 1-a^2/(2*(1-a))
a = b-1+sqrt((b-1)^2+2-2*b)
B = 1 -cos(wc/fs)
a = sqrt[B*(B+2)] - B

Beispiel: wc=1000 fs=10000
a = 0.0951

Mit meiner alten Formel kam da a=0.09091 heraus.

Gruß
Helmut

: Bearbeitet durch User
von Jan K. (jan_k)


Bewertung
3 lesenswert
nicht lesenswert
Da noch keiner den Rechenweg hingschrieben hat mache ich das mal ;). War 
etwas rumrechnerei, kennt jemand einen schnelleren Weg?

k ist der diskrete Zeitschritt.
y ist das Ausgangssignal im Zeitbereich
x ist das Eingangssignal im Zeitbereich
Y resp. X sind die Z-Transformierten ebenjener Signale.
H(z) ist die diskrete Übertragunsfunktion

Der Frequenzgang ist die Übertragungsfunktion auf der komplexen Achse 
ausgewertet. Der Zusammenhang lautet
. Der Frequenzgang ist der Betrag der Übetragungsfunktion:
Da kann man jetzt noch etwas rumrechnen und cos^2 + sin^2 = 1 usw 
benutzen. Die cutoff Frequenz ist da, wo sich die Leistung halbiert, 
also im Falle unserer Übertragungsfunktion (das sind Amplituden, keine 
Leistungen):

Einsetzen, ich betrachte ab jetzt nur noch den Nenner!
Die quadratische Gleichung lösen, dann kommt mit
 folgendes für n heraus:
Ich komme da mit
auf n = 10.517, was eurem a = 0.095087 entspricht.

Kennt wer einfachere Möglichkeiten?

Schöne Grüße,
Jan

von Martin K. (mkmannheim) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Sollte man bei den heutigen Möglichkeiten von MCUs den Rechenaufwand 
nicht direkt auf ein TPF zweiter Ordnung lenken?

von Jan K. (jan_k)


Bewertung
0 lesenswert
nicht lesenswert
Martin K. schrieb:
> Sollte man bei den heutigen Möglichkeiten von MCUs den Rechenaufwand
> nicht direkt auf ein TPF zweiter Ordnung lenken?

Kommt drauf an was du brauchst ;) Das genannte Filter ist halt fix und 
einfach implementiert. Wenn du ein bisschen was glätten möchtest ohne 
viel rechnen passt du halt heuristisch an und gut ist..

Filter höherer Ordnung muss man halt irgendwie eine Funktion für 
schreiben oder eine Lib nehmen. Da muss man dann aber auch die 
Koeffizienten berechnen usw.

Manchmal lohnt das, manchmal nicht. Von der Rechenleistung ist das 
natürlich sehr häufig gar kein Problem mehr.

von Jürgen S. (engineer) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Naja, für Filterauslegung für 2.Ordnung ist jetzt auch nicht so schwer. 
entweder man zieht die GF weit auseinander, in Anpassung an z.B. eine 
Dezimation oder man legt sie auf dieselbe Frequenz, um  es steilflankig 
zu machen. Die einzige Abweichung, die ich sonst noch kenne ist die 
Auslegung von den ladder filter, wenn man Oktave-weise einen 
zusätzlichen Knick braucht. Alles andere drum herum ist Optimierung für 
den Rechenaufwand.

von Helmut S. (helmuts)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch eine Verbesserung für das Filter 1. Ordnung.
Wenn man die Übertragungsfunktion 1/(1+jwT) mit der bilinearen 
Transformation in den z-Bereich transformiert, dann geht die Dämpfung 
vorteilhaft in Richtung unendlich bei der halben Abtastfrequenz. Siehe 
die rote Kennlinie.

y(n) = (x(n) +x(n-1) +y(n)*c1)*c2

Die grüne Kennlinie ist das bisher diskutierte Filter 1. Ordnung.

y(n) = x(n)*a +y(n)*(1-a)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.