Nicht einfache Filterfrage :)

Jul 06, 2008 4 Replies

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


Hallo Rolf,

Rolf Mennekes schrieb:

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:

formatting link

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

Winfried Salomon schrieb:

Hallo Winfried,

danke für deine Antwort und den interessanten Link. Es geht hier darum, in einer Schaltung, durch geschickte Dimensionierung der unbedingt notwendiger Baugruppen (wie ADC, anti aliasing Filter usw.), weitere Bauteile einzusparen. Das Ganze wir eine ultra low power Geschichte. Nachdem ich die komplette! Datenerfassungskette mathematisch beschrieben habe (aus den 3 Parametern sind inzwischen 12! geworden), habe ich Abstand von einer durchgängigen analytischen Lösung genommen. Vor allem die unscharfen Optimierungsziele (wenn dass nicht optimal wird, kann man ja die Schaltung soundso ändern...) machen das Ganze sehr komplex. Durch Teillösungen und brachialer Rechenkraft :-) sowie dem biologischen Computer(Annahmen, Schätzungen, "Gefühl für das Verhalten", Versuch und Irrtum usw.) bin ich nun soweit, dass ich mich den idealen Kurvenabschnitten auf < 0,1dB angenähert habe. Nun muss sich noch zeigen, ob die Praxis mit der Theorie mithalten kann :-)) . Bin mal gespannt.

Gruß Rolf

Hallo Rolf,

Rolf Mennekes schrieb: [.....]

wobei ein analoges Filter der beschriebenen Art zur Kompensation aber auch wieder ein ziemlicher Aufwand ist. Vielleicht läßt sich das auch digital lösen? Allerdings würde man dann Multiplizierer brauchen, was beim sinc-Filter nicht der Fall ist.

Der Ansatz mit Zählerpolynom würde natürlich der Antialiasing-Wirkung entgegenwirken. Nur mit Nennerpolynom ist es schwer, eine konvergente Lösung zu finden. Aber wenn Du schon auf 0.1 dB dran bist, geht es ja vielleicht, viel Erfolg!

mfg. Winfried

Oder WDF in Betracht ziehen, wenn ein HW Multiplier zu teuer ist oder zuviel Energie abfackelt.

[...]
Gruesse, Joerg http://www.analogconsultants.com/ "gmail" domain blocked because of excessive spam. Use another domain or send PM.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required