Ich habe da immer noch ein Problem mit FIR Filtern. Irgendwie stimmt die Gain da nicht. Also bei Tiefpässen ist das ja kein Problem, da kann man ja einfach einen Korrekturfaktor ermitteln und dann auf die Filter Koeffizienten anwenden. Aber wie muss ich da vorgehen, wenn es sich um Hochpässe oder Bandpässe handelt? Da soll die Summe der Koeffizienten ja 0 sein. Da dann einen Korrekturfaktor zu ermitteln geht irgendwie nicht, da der ja auch die negativen Koeffizienten so verändert, dass die Verhältnisse gleich bleiben. Also an der eigentliche Funktion der Filter ändert dieser Gain Fehler erstmal nichts, aber wenn man die Reaktion auf die Sprungantwort oder eine Impulsfolge betrachtet, sieht man eine deutliche Abweichung von der erwarteten Ruhelage, die darauf hindeutet, das die Summe der Koeffizienten ungleich 0.0 ist, wie es für diese Filter richtig währe. Ich verwende u.a. einen Algorithmus von http://www.cardinalpeak.com/blog/a-c-class-to-implement-low-pass-high-pass-and-band-pass-filters/ . Die beiden Anhängsel zeigen den Frequenzverlauf und die Signalantwort. Also eigentlich sollte die Ruhelage zwischen 4 und 6 ms auf der Null-Linie liegen, was sie aber wegen des Gain Fehlers nicht tut. Was kan ich tun, um das zu vermeiden?
Moin, Gain stimmt schon von deinem Filter, im Durchlassbereich wackelt das ja schoen um die 0 dB Linie. Der kleine Offset, den du im Zeitbereich z.B. zwischen 4..6ms siehst, kommt von der Sperrdaempfung bei der Frequenz 0 - die ist ja nicht unendlich (wie's schoen waere), sondern nur bei ca. -25 dB - das sind dann halt 0.056 als Ausgang. Wenn du das weghaben willst, brauchst du ein Filter, das bei 0 Hz auch eine Nullstelle in der Uebertragungsfunktion hat. Bei Band/Hochpaessen wird das zB. dann der Fall sein, wenn sie eine gerade Anzahl von Taps haben. Gruss WK
Danke für die Erklärung. So habe ich das bisher noch nicht gesehen. Tatsächlich ist die Summe der Koeffizienten -0.0617 was dann etwa -24.2 dB entspricht und durch Anwendung einer Fensterfunktion, kann ich diese Abweichung auch verringern. Aber das mit der Nullstelle bei f=0 konnte ich jetzt nur beim Hochpass testen. Möglicherweise liegt das aber an der Erstellungsmethode (siehe Link im vorigen Post), die wohl einige Einschränkungen hat.
Was war das für eine Fensterfunktion? Diese ist ja mit ein Limiter für die untere Frequenz. Den Gain kannst Du entsprechend einstellen, wenn Du die gefensterten Koeffizienten summierst. Interessant sind dabei die Betrachtungen des jeweils erreichbaren Spitzenpegels.
Als Fensterfunktionen habe ich die üblichen Verdächtigen realisiert, soweit ich deren Realisierung nachvollziehen konnte. Also: Von Hann, Hamming, Blackman, Lanczos, Cosinus und Gauß. Mir ist klar, dass man damit die Sperrdämpfung verbessern kann, wenn man die Nebenwirkung akzeptiert. > Den Gain kannst Du entsprechend einstellen, wenn Du die gefensterten > Koeffizienten summierst. Das scheint nur beim Tiefpass zu gehen oder wenn es nur positive Koeffizienten gibt. Im Übrigen ist der Korrekturfaktor für die meisten Fensterfunktionen bekannt, jedenfalls soweit sie auf irgendwelchen cos-Ausdrücken basieren. Allerdings brauchte ich die bei normalen FIR Filtern nicht anwenden, sondern nur den Eingangsdaten einer FFT. Wegen der Eingangs erwähnten Abweichung, bin ich aber davon ausgegangen, dass ich da in irgendeiner Weise nachbessern muss.
Manfred M. schrieb: > Das scheint nur beim Tiefpass zu gehen oder wenn es nur positive > Koeffizienten gibt. Nein, das geht immer. Man muss eben die Ansteuerung berücksichtigen. Für eine kontinuierliche normierte "1" = Gleichspannung ist die Verstärkung zu berechnen. Der Rest ist Frequenzgang. Auch wenn negative Koeffizienten vorliegen, die auf die höheren Frequenzen vorliegen, ist der daraus resultierende maximale Aussteuerung zu berechnen - eben nach Massgabe des maximal eintreffenden Eingangssignals, theoretisch si, dass bei negativen Koeffizienten der Wert negativ ist, also die betragsmässige Addition derselben wirkt.
Moin, Vielleicht schadet's nicht, wenn man sich ueberlegt, was eigentlich passiert, wenn man alle Koeffizienten eines FIR-Filters aufaddiert: Man berechnet ein Sample einer Faltung der Filterkoeffizienten mit einem Eingangssignal (das aus lauter Einsen besteht, also fuer das FIR-Filter so aussieht, als ware es "reine Gleichspannung" (zumindest fuer den Moment), also 0Hz). Genauso kann man auch mit einem anderen Signal machen, dem Signal mit der hoechsten Frequenz, die in zeitdiskreten Systemen vorkommen kann, Fsample/2. Das Signal sieht so aus 1,-1,1,-1,1,-1,... Das bedeutet: Wenn man gucken will, wie ein Filter auf hohe Frequenzen reagiert (also speziell die hoechste, die's da geben kann), dann kann man das so machen: bei jedem 2. Koeffizienten des Filters das Vorzeichen wechseln, und dann alle Koeffizienten aufaddieren. Beispiel: Ein ganz simples Filter mit diesen Koeffizienten: [1,0,-1] Wie siehts bei den ganz tiefen Frequenzen aus: 1+0+(-1)=0 -> laesst also nix durch. Bei ganz hohen Frequenzen: 1+(-0)+(-1)=0 -> laesst auch nix durch; testhalber mal den Vorzeichenwechsel bei jeweils "den anderen" Koeffizienten: -1+0+1=0 -> logischerweise, denn sonst waere es nicht linear. Also muss dieses Filter mindestens ein Bandpass sein - was der fuer eine Verstaerkung bei seiner Mittenfrequenz hat, und wo die Mittenfrequenz sitzt, das ist dann fuer den allg. Fall nicht mehr so ganz simpel mit "Fingerzaehl-Mathematik" auszurechnen. Gruss WK
Sorry für die Verspätung, aber die Telekom hatte mich ganze 26h komplett von der Außenwelt abgekoppelt und danach hatte ich noch anderen Nachholbedarf... Die tiefere Bedeutung der letzten beiden Beiträge muss ich erst noch erarbeiten. Ich bin ja auf diesem Gebiet ja nur ein Hobbyforscher und mein mathematisches Hintergrundrauschen ist in den letzten 20 Jahren etwas verblasst (aber ich arbeite daran). > Also muss dieses Filter mindestens ein Bandpass sein - was der fuer eine > Verstaerkung bei seiner Mittenfrequenz hat, und wo die Mittenfrequenz > sitzt, das ist dann fuer den allg. Fall nicht mehr so ganz simpel mit > "Fingerzaehl-Mathematik" auszurechnen. Ausrechnen kann ich das auch nicht, aber mein primitives Testprogramm kann das einfach ausprobieren. Dass die Mittenfrequenz dann bei Fs/4 liegt überrascht mich auch nicht wirklich, hätte ich aber auch (leider) nicht vorhersagen können. Mein Programm ist eindeutig der Meinung, das die Verstärkung bei der Mittenfrequenz bei +6dB liegt (siehe Anhang). Da ich noch keine manuelle Eingabe der Koeffizienten habe, hatte ich für diesen Test einfach einen anderen Menüpunkt "entführt", daher stimmt die Angabe "FIR_NOTCH" nicht. In der analogen Skalierung, auf deren Umfang ich nicht vorbereitet war, sieht der Frequenzgang übrigens wie eine Sinus-Kurve aus.
:
Bearbeitet durch User
Dort sind nur 3 TAPs verwendet? Das müsste sich aber anhand der Koeffizienten direkt im Kopf machen lassen, welches Ansteuersignal die maximal auslastet und welcher Wert sich ergibt?
Manfred M. schrieb: > Dass die Mittenfrequenz dann bei Fs/4 > liegt überrascht mich auch nicht wirklich, hätte ich aber auch (leider) > nicht vorhersagen können. > > Mein Programm ist eindeutig der Meinung, das die Verstärkung bei der > Mittenfrequenz bei +6dB liegt (siehe Anhang). Ich probiers mal auf dem analogen Weg. Gegeben sind die Filterkoeffizienten 1 0 -1 Das Filter lässt sich durch die Funktion
beschreiben. Die Fourier-Transformierte davon ist
Die maximale Verstärkung ist also 2 (6,206 db) bei
Mit
Passt! :-)
Mensch, wenn ich gewusst hätte, dass man das so einfach über Fourier berechnen kann ... C Programmierer schrieb: > Gegeben sind die Filterkoeffizienten 1 0 -1 Ich hätte das jetzt ganz altertümlich mit Gain = Betrag (1) + Betrag (0) + Betrag (-1) gemacht. :D
Jürgen Schuhmacher schrieb: > Ich hätte das jetzt ganz altertümlich mit Gain = Betrag (1) + Betrag (0) > + Betrag (-1) gemacht. Das blöde an dieser Formel ist, dass sie falsch ist und in diesem Fall nur zufällig das Richtige rauskommt. Ein Filter mit den Koeffizienten 1 1 -1 hat keine maximale Verstärkung von 3.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.