Hallo Leute,
ich benötige die Filter eigenschaften eines FIR Filters.
ich habe die Koeffizienten und die Abtastrate.
Wie kann aus denn Koeffizienten die Grenzfrequenz bestimmen?
Habe natürlich auch ein Beispiel leider nur in Pascal:
filter wird in einem 2mSec Interrupt aufgerufen
1
pmax_filter : fdaten = (n: 1;
2
a:(0.2 , 0, 0, 0, 0);
3
b:( 1, -0.8, 0, 0, 0);
4
x:( 0, 0, 0, 0, 0);
5
y:( 0, 0, 0, 0, 0));
6
7
function filter(var f : fdaten; inp: single) : single;
Moin,
Aus den Koeffizienten und der Verschaltung des Filters oder der Software
musst du die Uebertragungsfunktion H(z) bestimmen.
Grenzfrequenz bei Filtern ist so ne Sache. Das ist nicht ganz eindeutig.
Oft ist's die Frequenz, bei der der Amplitudengang von H(z) gegenueber
dem Amplitudengang bei der Frequenz 0, pi/2 oder sonstirgendeiner
Referenzfrequenz auf irgendeinen Bruchteil (oft -3dB, aber manchmal auch
-6dB) zurueckgegangen ist.
Such' dir eine dir genehme Definition aus und loese dann H(z) danach
auf.
Kann aber unangenehme, nicht analytisch loesbare Gleichungen ergeben.
Alternativ kannst du auch durch deine Software einen Diracimpuls laufen
lassen und das Ergebnis fouriertransformieren. Das ergibt zumindest in
der Theorie auch den Frequenzgang.
Gruss
WK
Aus der Differenzengleichung die Übertragungsfunktion H(z) bestimmen.
Die Grenzfrequenz liegt bei -3dB ( 1/sqrt(2) )
Tip: http://www.dspguide.com/pdfbook.htm
Kapitel33 zeigt wie es geht.
Moin,
Kollege von oben schrieb:> Aber ich bin nicht so das mathe Ass.... :-(..
Und ich hab keinen Pascalcompiler da... Unn nu?
Geb' mal einen Dirac drauf und poste die Impulsantwort. Oder zumindest
den Anfang.
Gruss
WK
Moin,
Du kannsts auch noch auf Java, Python, Postscript oder Assembler umbauen
- es wird nicht wirklich weiterhelfen.
Die Impulsantwort ist das Mittel zur Filteranalyse, nicht die
Programmiersprache.
Kollege von oben schrieb:> Könntest du mir weiterhelfen
Ungern, so wie's aussieht.
Gruss
WK
Nachtrag:
ist ein IIR Filter, kein FIR, weil rekursiv
-- von vorangegangenen Ausgangswerten abhängig --
Sollte ein schmaler Bandpass sein,
mit den Eckfrequenzen 70Hz und 85Hz.
Reinhard M. schrieb:> Nachtrag:> ist ein IIR Filter, kein FIR, weil rekursiv> -- von vorangegangenen Ausgangswerten abhängig --
Wirklich?
Wenn nur a0 <> Null mit x(n) multipliziert wird gibt es kein Feedback
und damit auch keinen "infinite response". (Normalerweise würde man a0
dann eher mit b0 bezeichnen).
In der Schleife
1
for i:=1 to n do
2
y[0]:=y[0] + a[i] * x[i] - b[i] * y[i];
3
filter:=y[0];
mit (nur a0 <> Null):
1
pmax_filter : fdaten = (n: 1;
2
a:(0.2 , 0, 0, 0, 0);
3
...
ist das Glied (a[i] * x[i]) = 0 und könnte somit auch weggelassen
werden.
Kollege von oben schrieb:> ich habe die Koeffizienten und die Abtastrate.
Ach so.
Es wäre durchaus hilfreich, eben diese Koeffizienten mal zu posten.
Aus deinem seltsamen Stück Pascal kann ich nicht erkennen, was da
eigentlich wie gefiltert werden soll.
Also, poste mal deinen Filterkernel in normaler Form, dann kann ich dir
das mal simulieren, aber so wird das nix. Ich häng dir mal ne Textdatei
und das Wobbelergebnis dran, wo du ein SSB-Filter sehen kannst. Kommt
auf diesem PC bissel mies, da das Programm noch mit D6 gemacht wurde und
unter Win7 nicht gut skaliert. Aber wie Filtertaps so aussehen, kannst
du draus entnehmen - und wenn du den Zinnober in Excel o.ä. importierst,
kannst du dir auch den Filterkernel mal grafisch angucken.
W.S.
Burkhard K. schrieb:> Wirklich?>> Wenn nur a0 <> Null mit x(n) multipliziert wird gibt es kein Feedback> und damit auch keinen "infinite response". (Normalerweise würde man a0> dann eher mit b0 bezeichnen).
Ja, wirklich
y[0]:=a[0] * x[0]; // aktueller Ausgang = a0 * aktuellem Eingang
for i:=1 to n do
y[0]:=y[0] + a[i] * x[i] - b[i] * y[i];
// ^ ^ ^
| | |______ b[i] * alte y- werte
| REKURSIVTEIL (IIR) !
|
|_________ NICHT REKURSIVER (FIR) TEIL
kann in diesem Fall weggelassen werden
weil alle a[i] mit i>0 gleich null
sind
filter:=y[0];
Du hast recht, hier gibt es (ausschliesslich) einen Feedback-Anteil -
ich hab mich von den vertauschten Koeffizientenbezeichnern a vs. b
verwirren lassen.
Worauf ich ursprünglich hinweisen wollte: eine rekursive Struktur allein
ist noch kein hinreichendes Merkmal für einen IIR-Filter, es gibt
durchaus FIR-Filter mit rekursiver Struktur, z.B. Moving Averager, CIC-
oder Frequency-Sampling-Filter.
Ausgabe:
Filter Value 0,2
Filter Value 0,16
Filter Value 0,128
Filter Value 0,1024
Filter Value 0,08192001
Filter Value 0,06553601
Filter Value 0,05242881
Filter Value 0,04194305
Filter Value 0,03355444
Filter Value 0,02684355
Filter Value 0,02147484
Filter Value 0,01717987
Filter Value 0,0137439
Filter Value 0,01099512
Filter Value 0,008796096
Filter Value 0,007036877