' schrieb:Ich möchte die Übertragungsfunktion des Preemphasefilters per frequency sampling möglichst gut approximieren. (hätte ich wohl früher sagen soll/müssen). Laut meinem Vorgänger an diesem Projekt ist diese Approximation mit 21 Koeffizienten recht gut.
Hallo Xaran,
bitte bei dem Entwurf Deines Systems nicht vergessen, dass alle Frequenzen oberhalb 15kHz mit einem STEILflankigen Tiefpassfilter unterdrückt werden müssen, um den Pilotton bei 19kHz zu schützen und damit die Erzeugung von L+R und L-R-Signalen zur Stereoübertragung richtig funktioniert.
Den Bereich unter 20Hz bitte auch mit einem Hochpass unterdrücken, da die Empfänger-PLL sonst Probleme bekommen kann.
Wenn Du kein System bauen willst, dass den strengen Rundfunknormen genügt,
dann würde ich ein Preemphase-Filter entwerfen, dass den Bereich zwischen 20Hz und 10kHz möglichst genau approximiert.
Der Frequenzbereich über 10kHz ist meiner Meinung nach nicht so wichtig, da Radiohören nicht High-end-hören ist.
Das ist meine persönliche Meinung, ich will hier keine Diskussion in diese Richtung starten.
Zum Thema FrequenzgangSIMULATION:
Bei den heutigen PC-Geschwindigkeiten kannst Du auch mit den Originaldifferenzengleichungen rechnen:
allgemeiner Fall = IIR-Filter:
H(z) = FIR(z)/Nenner(z) mit z = e^j(2pi*f/fsample)
H(z) = (b0 + b1*z + b2*z^2 + ...)/(a0 + a1*z + a2*z^2 + ...)
FIR-Filter: Nenner(z) = 1
Für die Filterkoeffizienten nimmst Du Arrays, die Du z.B. mit dem Hornerschema ausmultiplizierst.
Lass einfach einen Graphen mit ein paar Tausend Punkten errechnen.
Für den Entwurf würde ich auch Ausprobieren empfehlen, da die Filter-Standardentwurfsverfahren
nicht dafür ausgelegt sind und z.B. die bilineare Transformation von analogen Filterkoeffizienten
auch nur für 1 Frequenz exakt stimmt (Stichwort: Verzerrung der Frequenzachse): meist die 3dB-Frequenz
Für das optische Optimieren empfehle ich einen Graphen,
in dem die Amplituden in dB und die Frequenzachse logarithmisch ist (z.B. 10Hz bis 20kHz).
Der Graph sollte folgende Kurven anzeigen:
1) Preemphase in dB
2) Betrag des Filter-Frequenzgangs in dB
3) dB-Differenz zwischen beiden Kurven
Dann fange bei 300kHz Abtastrate z.B. mit folgendem Koeffizienten an:
b0 = 1, b1 = -0,9
Als erstes siehst Du, dass Filterkurve bei 0Hz nicht 0dB aufweist:
das ist aber kein Beinbruch, du musst nur alle Deine Koeffizienten durch
den LINEAREN Betrag des Filter-Frequenzgangs bei f=0Hz teilen.
Die so errechneten Koeffizienten sind dann auch die für die Online-Filterung in Deiner Anwendung.
Anmerkung: z = e^j(2pi*0) = 1 -> H(1) = (b0 + b1 + b2 + ...)/(a0 + a1 + a2 + ...)
H(f=0) = Quotient der Koeffizientensumme
Jetzt kannst Du b1 solange ändern bis der Fehler nach Deinem Geschmack optimal ist.
Wenn Du doch mehr Koeffizienten zulassen willst, dann kannst Du z.B. noch mit b3 experimentieren:
starte doch mit b3=0,002
Viel Erfolg, RoLi