Nicht einfache Filterfrage :)

06/07/2008 - 23:33 von Rolf Mennekes | Report spam
Hallo,

ich habe hier einen Filter (sinc³) mit der Übertragungsfunktion
H(f)= (1/256 * sin(256*Pi*f/fM) / sin(Pi*f/fM))³
mit fM = 12.800Hz
Im Frequenzbereich f=0 bis fM/723 soll der Frequenzgang kompensiert
werden, also H(f) ~ const. Dazu steht ein analoger TP Filter 2. Ordnung
(max. 3. Ordnung) zur Verfügung.
Randbedingung:
Im Frequenzbereich von fM/815 bis fM/723 soll H(f) möglichst konstant sein.

Mit einem 5dB Chebyshev 2. Ordnung kommt man schon in die Nàhe. Nur die
Randbedingung wird gravierend verletzt.

Mein erster Ansatz wàre die brute force Methode. Frequenzgang mit den
Varianten der 3 Parameter berechnen und Fehlerrechnung abschnittsweise
gegen Konstante. Die Besten Ergebnisse dann auf Brauchbarkeit und
Stabilitàt prüfen.
(Glücklicherweise sind die heutigen PC schneller als der TRS80, mit dem
ich meinen ersten digitalen Filter mit dieser Methode auf
Rechengeschwindigkeit optimiert habe. Der benötigte damals anderthalb
Tage pro Optimierungsdurchlauf).

Ich denke, da müsste es doch eine elegantere Methode geben.

Gruß
Rolf
 

Lesen sie die antworten

#1 Winfried Salomon
12/07/2008 - 22:18 | Warnen spam
Hallo Rolf,

Rolf Mennekes schrieb:
Hallo,

ich habe hier einen Filter (sinc³) mit der Übertragungsfunktion
H(f)= (1/256 * sin(256*Pi*f/fM) / sin(Pi*f/fM))³
mit fM = 12.800Hz
Im Frequenzbereich f=0 bis fM/723 soll der Frequenzgang kompensiert
werden, also H(f) ~ const. Dazu steht ein analoger TP Filter 2. Ordnung
(max. 3. Ordnung) zur Verfügung.
Randbedingung:
Im Frequenzbereich von fM/815 bis fM/723 soll H(f) möglichst konstant sein.

Mit einem 5dB Chebyshev 2. Ordnung kommt man schon in die Nàhe. Nur die
Randbedingung wird gravierend verletzt.

Mein erster Ansatz wàre die brute force Methode. Frequenzgang mit den
Varianten der 3 Parameter berechnen und Fehlerrechnung abschnittsweise
gegen Konstante. Die Besten Ergebnisse dann auf Brauchbarkeit und
Stabilitàt prüfen.
(Glücklicherweise sind die heutigen PC schneller als der TRS80, mit dem
ich meinen ersten digitalen Filter mit dieser Methode auf
Rechengeschwindigkeit optimiert habe. Der benötigte damals anderthalb
Tage pro Optimierungsdurchlauf).

Ich denke, da müsste es doch eine elegantere Methode geben.

Gruß
Rolf



es handelt sich hier wohl um ein Dezimationsfilter? Ich finde die
Problemstellung interessant, da man bei Abtastsystemen allgemein auch
gerne die sin(x)/x-Verzerrung kompensieren möchte, was ja fast dasselbe
ist. Damit hatte HP glaube ich vor Jahren bei Oszilloskopen geworben.

Eine schnelle Möglichkeit der Abschàtzung wàre hiermit gegeben:
http://curveexpert.webhop.biz/

Mit diesem Programm (bei mir Vers. 1.31 (finde ich nicht mehr), obiger
Link 1.38) habe ich etwas gespielt und man findet schnell Lösungen. Für
fM=1 habe ich mal einige Beispielfits gemacht:


User-Defined Model: y=(a+b*x+c*x*x+d*x*x*x)/(e+f*x+g*x*x+h*x*x*x)
Coefficient Data:
a = 0.90318689
b = -122.87522
c = 96741.317
d = 1310759
e = 0.90318311
f = -122.54296
g = -197913.74
h = 48323944
User-Defined Model: y=1/(a+b*x+c*x*x+d*x*x*x)
Coefficient Data:
a = 0.99837932
b = 29.05399
c = -415145.24
d = 1.0572653e+008
User-Defined Model: y=(a+b*x+c*x*x)/(d+e*x+f*x*x)
Coefficient Data:
a = 0.9666052
b = -245.10116
c = 214575.44
d = 0.9675244
e = -264.66127
f = -30224.256
User-Defined Model: y=(((a-c*x^2+e*x^4)^2+(b*x-d*x^3)^2))^0.5
Coefficient Data:
a = 0.99336932
b = -154.8455
c = -407402.44
d = -4.8375498e+008
e = -5.2554473e+010
User-Defined Model: y=((a-c*x^2)^2+(b*x-d*x^3)^2)^0.5
Coefficient Data:
a = 0.99348389
b = -275.68174
c = -381873.47
d = -4.519119e+008
User-Defined Model: y=((a-c*x^2)^2+(b*x)^2)^0.5
Coefficient Data:
a = 0.90494467
b = -11.421596
c = -592773.58

x enstpricht hier f.
-


Dabei sind nur die letzten 3 für ein Filter relevant, da sie den Betrag
der komplexen Funktion darstellen. Der quadratische Fit ist etwas
ungenau, die 3. und 4. Ordnung jedoch sehr gut.

Um ein Zàhlerpolynom 3. Ordnung als Schaltung realisieren zu können,
müssen natürlich 3 Polstellen her. ich habe da mal testweise Butterworth
genommen, sieht gut aus, denn es muß ja die Dàmpfung bereitstellen.
Sicher wàre Tschebyscheff noch besser, aber das ist wellig und die
Gruppenlaufzeit noch schlechter.

Die User Defined Models kannst du direkt in das Programm kopieren und
die Koeffizienten berechnen lassen, falls die Anfangsbedingungen stimmen
und es konvergiert. Ich hab mir die Kurven noch logarithmisch darstellen
lassen, für die Grafik aber Matlab genommen.

Ob das Ganze realisierbar im Sinne einer Schaltung ist und Deine Wünsche
erfüllt, weiß ich jetzt aber nicht.

Hier ist noch die Tabelle der Ausgleichsfunktion, die ich für die Fits
genommen habe mit fM=1:

0 1.0
138.3125864e-6 1.006208555
276.6251728e-6 1.025097961
414.9377593e-6 1.057480744
553.2503458e-6 1.104784723
691.5629322e-6 1.169173526
829.8755187e-6 1.253737352
968.1881051e-6 1.362781185
1.106500692e-3 1.502254275
1.244813278e-3 1.68039107
1.383125864e-3 1.908677696
1.521438451e-3 2.203332176
1.659751037e-3 2.587616546
1.798063624e-3 3.095532427



mfg. Winfried

Ähnliche fragen