Hallo!
Ich ersuche gerade hinter die Funktionsweiße von FIR zu kommen.
Dazu habe ich hier schon eine fertige Funktion am Start.
Gebe ich ein Square-Signal rein, wird dieses durch das FIR verschliffen
wieder ausgegeben. Controller ist ein TI DSP TMS320C28xx.
Handelt es sich dabei also um einen Tiefpass?
Gibt es überhaupt Hochpass-, Tiefpass-, Bandpass- und Basndsperren FIR
oder denke ich verkehrt und FIR ist FIR?
Was müsste ich denn zum Beispiel in der FIR Funktion unten ändern, um
statt eines Tiefpasses einen Hochpass oder Bandpass dargestellt zu
haben.
Hier die gegebene Filter-Funktion und im Bild, dass was sie bei einem
2,8kHz Rechteck Signal ausspuckt:
Marco schrieb:
> Handelt es sich dabei also um einen Tiefpass?>> Gibt es überhaupt Hochpass-, Tiefpass-, Bandpass- und Basndsperren FIR> oder denke ich verkehrt und FIR ist FIR?>> Was müsste ich denn zum Beispiel in der FIR Funktion unten ändern, um> statt eines Tiefpasses einen Hochpass oder Bandpass dargestellt zu> haben.
Jup, ist ein Tiefpass.
FIR heißt nur, dass die Impulsantwort h(n) mit einer endlichen Anzahl
Koeffizienten 0<= n <=N beschrieben werden kann. Daraus lassen sich dann
weitere Eigenschaften ableiten, z.B. dass so ein Filter nur Nullstellen
und keine (nichttrivialen) Polstellen hat.
Um eine andere Charakteristik zu bekommen musst du die Koeffizienten
(=Impulsantwort) ändern. Dazu brauchst du i.d.R. einen Filterentwurf,
z.B. mit Matlab, octave, ...
Achso?
Gibt es keine Möglichkeit mit allgemeinen Regeln sich passende
Koeffizienten zusammen zu stellen?
Sprich eine folgen aufsteigender und wieder abfallender (wie im
Beispiel) Koeffizienten ist ein Tiefpass. Bei Hochpass ist es umgekehrt?
Welche Auswirkungen hat die Anzahl der Koeffizienten auf meinen Filter?
Hallo auch!
Marco L. schrieb:
> Gibt es keine Möglichkeit mit allgemeinen Regeln sich passende> Koeffizienten zusammen zu stellen?>> Sprich eine folgen aufsteigender und wieder abfallender (wie im> Beispiel) Koeffizienten ist ein Tiefpass. Bei Hochpass ist es umgekehrt?
Das ist i.d.R. nicht so einfach!
Naja, einen gewissen Zusammenhang gibt es schon, da je nach
(FIR-)Filtertyp entweder eine Punkt- oder Achsensymmetrische
Impulsantwort vorliegt, sind auch die Filterkoeffizienten Punkt- oder
Achsensymmetrisch.
Die Koeffizienten die Du oben angegeben hast (0.0625 0.25 0.375 0.25
0.0625) sind Achsensymmetrisch und sehen für mich aus, als ob sie zu
einem TP-Filter vom Typ 1 gehören.
Sieh Dir mal
http://de.wikipedia.org/wiki/Filter_mit_endlicher_Impulsantwort#Grundtypen
an. Die Koeffizienten sind einfach die "Höhen" der einzelnen "Peaks" der
Impulsantwort auf den kleinen Bildchen in der Mitte.
Aber die genauen Zahlenwerte der Koeffizienten müssen i.d.R durch ein
geeignetes Verfahren zum Filterentwurf ermittelt werden, wie ja bereits
von Michael gesagt wurde. Es gibt da endlos viele Möglichkeiten und
einige lassen sich (zum Üben) durchaus auf auf einem Blatt Papier
durchführen (Kenntnisse der Theorie vorausgesetzt).
> Welche Auswirkungen hat die Anzahl der Koeffizienten auf meinen Filter?
Mehr Koeffizienten führen vereinfacht gesagt zu einer steileren
Filtercharakteristik und einem höheren Signal-Rausch-Abstand, aber auch
zu einer höheren Gruppenlaufzeit (Zeit die Dein Signal durch den Filter
braucht) und einem höheren Rechenaufwand.
Grüsse
Loup
"FIR heißt nur, dass die Impulsantwort h(n) mit einer endlichen Anzahl
Koeffizienten 0<= n <=N beschrieben werden kann. Daraus lassen sich dann
weitere Eigenschaften ableiten, z.B. dass so ein Filter nur Nullstellen
und keine (nichttrivialen) Polstellen hat."
Sorry, aber das ist so falsch.
FIR - Finite Impulse Response
Nicht die Anzahl der Koeffizienten ist endlich sondern die Anzahl der
Output-Samples != 0 als Antwort auf einen Impuls (was auch logisch ist
da keine Rückkopplung existiert).
Die Anzahl der Koeffizienten ist endlich, weil man kein Filter
unendlicher Ordnung digital umsetzen kann/möchte. Also
ignoriert/vernachlässigt man sämtliche Koeffizienten welche nahe genug
an Null sind so dass keine wesentlichen Auswirkungen auf das
Berechnungsergebnis resultieren.
Alex schrieb:
> Sorry, aber das ist so falsch.>> FIR - Finite Impulse Response> Nicht die Anzahl der Koeffizienten ist endlich sondern die Anzahl der> Output-Samples != 0 als Antwort auf einen Impuls (was auch logisch ist> da keine Rückkopplung existiert).> Die Anzahl der Koeffizienten ist endlich, weil man kein Filter> unendlicher Ordnung digital umsetzen kann/möchte. Also> ignoriert/vernachlässigt man sämtliche Koeffizienten welche nahe genug> an Null sind so dass keine wesentlichen Auswirkungen auf das> Berechnungsergebnis resultieren.
Hm, da muss ich dir nun widersprechen :-)
Also zum einen widerlegst du meine Aussage nicht, dass die Anzahl der
Koeffizienten endlich ist für eine endliche Impulsantwort. Für einen
Impuls als Eingangssignal sind Ausgangssignal und Koeffizienten
identisch. (Bei der klassischen Art der Implementierung durch
Faltungssumme. Es gibt auch andere Strukturen.) Man kann also jedes
Filter mit endlicher Impulsantwort mit einer endliche Anzahl an
Koeffizienten realisieren. Beweis trivial.
Zum anderen nimmst du an, dass die Koeffizienten bzw. die Impulsantwort
aus einer Approximation einer unendlichen langen Impulsantwort gewonnen
werden. Also FIR-Filter als Approximation eines IIR-Filters. Das kann
man natürlich so machen, wird auch manchmal so gemacht (insbesondere in
adaptiven Anwendungen, Systemidentifikation etc.). Allerdings kannst du
in einem "echten FIR-Filterentwurf" auch andere Filter entwerfen, vor
allem linearphasige Filter, was ein IIR-Filter nicht kann und daher die
Approximation der IIR-Impulsantwort ebenfalls nicht haben wird. Die
Approximationsmethode ist also ziemlich limitiert.
Und zum Thema der Umsetzung eines Filters unendlicher Ordnung: Wenn man
schon eine unendlich lange Impulsantwort möchte, dann kann man doch ein
IIR-Filter einsetzen, das hat nämlich so eine. Und man braucht dafür
auch nicht unendlich viele Koeffizienten. Man kann auch ein IIR-Filter
so entwerfen, dass dessen Impulsantwort die gewünschte Impulsantwort
approximiert, falls die benötigte Ordnung zur exakten Darstellung zu
groß ist.
Aber dem Fragesteller ging es glaube ich nicht um solche Details,
sondern eher um die Basics.
Grüße Michael
Aktion handgebastelte FIR-Filter
================================
Zum praktischen Verständnis von FIR-Filter ist es hilfreich,
verschiedene Filtertypen ohne große Rechnung zu restellen.
Hier der Vorschlag:
1. Alle Koeefzienten auf 1 setzen ==> man erhällt einen gleitenden
Mittlwertfilter der die einfachste Form eines Tiefpass darstellt.
( Eine Aufgabe für euch Mitleser: sucht den Frequenzgang eines
gleitenden Mittelwertfilters als Bild und postet den Link hier zur
Diskussion )
2. Aus dem obigen Tiefpass einen Hochpass machen.. alle
Filterkoeffizienten mit der Folge +1 -1 multiplizieren.
3. Die eigenschaften des gleitenden Mittelwertfilter aus "1." mit
verschiedenen Fensterfunktionen multiplizieren und damit die
Tiefpasseigenschaft verbessern.
4, Aus "3." wieder einen Hochpass machen mit dem +1 -1 Verfahren aus
"2."
5. Mit der Funktion y=sin(a x)/(a x) Koeffizienten erzeugen ==>
Koeffizienten eines "idealen Tiefpass" entstehen. Filterfunktion
ausprobieren.
Hallo!
Franz Egon schrieb:
> 1. Alle Koeefzienten auf 1 setzen ==> man erhällt einen gleitenden> Mittlwertfilter der die einfachste Form eines Tiefpass darstellt.> ( Eine Aufgabe für euch Mitleser: sucht den Frequenzgang eines> gleitenden Mittelwertfilters als Bild und postet den Link hier zur> Diskussion )
Bitte sehr (das Bild ganz unten):
http://www.dspguide.com/ch15/3.htm> 2. Aus dem obigen Tiefpass einen Hochpass machen.. alle> Filterkoeffizienten mit der Folge +1 -1 multiplizieren.
Seitenbandumkehr!
Das wäre übrigens eine mögliche Antwort auf die Frage des OP nach der
Umwandlung seines TP in einen HP gewesen. Hatte ich in meiner Antwort
oben ganz vergessen ;)
> 3. Die eigenschaften des gleitenden Mittelwertfilter aus "1." mit> verschiedenen Fensterfunktionen multiplizieren und damit die> Tiefpasseigenschaft verbessern.
Fenster (und Beschreibung) zu finden unter (Mitte EQ 16-1):
http://www.dspguide.com/ch16/1.htm> 4, Aus "3." wieder einen Hochpass machen mit dem +1 -1 Verfahren aus> "2.">> 5. Mit der Funktion y=sin(a x)/(a x) Koeffizienten erzeugen ==>> Koeffizienten eines "idealen Tiefpass" entstehen. Filterfunktion> ausprobieren.
Ebenfalls in:
http://www.dspguide.com/ch16/1.htm
Grüsse
Loup
Du hast auch völlig recht, die Faktoren müssen statt "1" 1/N sein, sonst
ist die Amplitude zu groß ( genauer gesagt N-fach ). Der Einfachheit
halber habe ich es weggelassen, es würde das Verständnis erschweren.