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
Didn't find your answer? Ask the community — no account required.
W
Winfried Salomon
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:
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
W
Winfried Salomon
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
J
Joerg
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
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.