Eigentlich sagt der Titel schon was ich suche: ich habe einen digitalen Regler (Spannungsregler eines Buck Wandlers) in einem FPGA und meine Spannungsmessung ist total gestört. Jetzt möchte ich diese Störungen aus dem Messsignal rausfiltern, habe jedoch das Problem, dass ich auch eine gute Dyanmik erreichen möchte und daher den Phasenverlust für die Messung klein halten möchte. Ganz allgemein kam daher die Frage auf: was für einen Filtertyp nimmt man in so einem Fall? Ich habe mich bisher leider zu wenig mit digitalen Filtern auseinandergesetzt und kann daher nicht wirklich exakte Anforderungen nennen. Was mir so ca. vorschwebt: - Die Störungen liegen bei ca. 500 kHz und darüber. Ca. -40 dB (besser -60 dB) für f > 500 kHz würde ich anpeilen. - Eine Grenzfrequenz von 50 kHz wäre akzeptabel, mit weniger als -45° Phase bei dieser Frequenz - Sampling Frequenz ist 50 MHz, Resourcen sind erheblich vorhanden (fast leeres Zynq FPGA) Ist mein Vorhaben überhaupt realistisch? Einfach realisierbar oder nicht zu schaffen? Welche Filterordnung, Typ (IIR, FIR,...?) würdet ihr für sowas empfehlen?
Das Stichwort heisst "Minimalphasenfilter". Aber es wird nicht viel nuetzen.
DrowninginNoise schrieb: > Phasenverlust Sowas wie einen Phasen-VERLUST gibt es gar nicht. Was du vermutlich meinst, ist das Ansteigen der Verzögerungszeit in der Regelschleife, das dadurch bewirkt wird, daß ein einigermaßen symmetrisches Filter immer zugleich eine Verzögerung darstellt. Bedenke mal, daß für ein symmetrisches Filterverhalten das Filter gleiche Anzahl von Samples in der Vergangenheit und Zukunft braucht. Mit der Vergangenheit hat man ja kein Problem, aber um auch Samples in der Zukunft zu haben, braucht es einen Vorlauf voon soviel Abtastperioden, wie du Samples in der Zukunft haben willst. Jetzt weiß ich nicht, ob du mit asymmetrischem Filterkernel arbeiten bzw. experimentieren willst. Also z.B. mit 10 Samples in der Vergangenheit, einem aktuellen und einem in der Zukunft. Das würde nur eine Verzögerung um eine Abtastperiode ausmachen, aber ich wage da keine Prognose, ob dir das den erhofften Effekt oder nur Ärger einbringt. W.S.
So schwer ist die Anforderung nicht, Butterworth 5er Ordnung mit Grenzfrequenz 200kHz@50Ms/s kriegt das hin. Phase bei 50kHz ~ -45°, Amplitude bei 500kHz -40dB. Implementierung in integer ist etwas tricky, weil die Pole so nahe am Einheitskreis liegen, 16x16Bit reichen da nicht. [fb,fa]=butter(5,200e3/25e6,'low'); H=freqz(fb,fa,25000); fa = 1.000000000000000 -4.918669365405449 9.677974987219251 -9.521826441504182 4.684406647007157 -0.921885817686204 fb = 1.0e-08 * 0.030095542724595 0.150477713622976 0.300955427245952 0.300955427245952 0.150477713622976 0.030095542724595 Cheers Detlef PS: wenn ich den Faktor 1e-8 sehe wird das sehr tricky.
:
Bearbeitet durch User
So, über die Feiertage kam ich endlich dazu, mich mit dem Thema ein bisschen mehr auseinander zu setzen. So einfach wie ich mir das vorgestellt hatte dürfte das wieder einmal nicht werden. Zudem haben sich die Anforderungen auch noch zu geändert, vor allem die Samplerate soll auf 150 MS/s hochgehen (damit wir es auch noch in einem anderen Projekt einsetzen können). -https://www.xilinx.com/support/documentation/white_papers/wp330.pdf habe ich gelesen. Das Dokument wird immer wieder zitiert, scheint ein "Standardwerk" zu sein. - Als erstes habe ich mit dem Filter Designer von Matlab herumgespielt. Das Tool ist an sich eigentlich recht interessant und hat mir mit ein bisschen Probieren gleich ganz passable Ergebnisse ausgespuckt. Ich habe dann das Filter quantisiert, war zwar ab der vielen Optionen einigermassen überfordert, aber für den Anfang reichts. Anschliessend habe ich den VHDL Code aus Matlab heraus generieren lassen. - Die Simulation des VHDL Codes in Vivado funktioniert ganz gut, also bin ich anschliessend zur Synthese + Implementierung übergegangen. Hier stiess ich anschliessend auf das Problem, dass ich keine Chance hatte das Timing zu erfüllen (mit riesigem Slack von ca. 17 ns auf einigen Pfaden). - Dass ich das Timing nicht einhalten konnte wunderte mich eigentlich überhaupt nicht. Ich habe zwar das Filter in SOS zerlegen lassen und Pipeline Register zwischen den Sections platziert, die Daten müssen aber immer noch durch einige Addierer und Multiplizierer durch. - Es stellt sich für mich nun die Frage, was ich gegen das Timing Problem unternehmen kann. Beim ersten naiven Versuch hatte ich einen Clock von 250 MHz auf einem Artix FPGA (Speedgrade 1) eingestellt. Das finale Design wird auf einem Kintex (Speedgrade 3) mit nur 150 MHz implementiert -> etwas Luft nach oben dürfte es geben, aber vermutlich nicht genug, um 17 ns negative Slack rauszuholen. - Da es sich um ein IIR Filter handelt gestaltet sich Pipeling (bedingt durch den Rückkoppelpfad) offenbar als eher schwierig. Im obigen Whitepaper von Xilinx ist eine Möglichkeit drin, bei der zusätzliche Pole platziert werden, die dann durch zusätzliche Nullstellen kompensiert werden ("Scattered Lookahead"). Ich habe das Prinzip zwar verstanden, allerdings (zumindest habe ich nichts entsprechendes gefunden) unterstützt der Filter Designer von Matlab diese Option nicht. Somit müsste ich diese zusätzlichen Pole und Nullstellen von Hand platzieren und alle nachfolgenden Schritte (insbesondere die Quantiesierung + Beschreibung in VHDL) von Hand durchführen. Das traue ich mir ob der vielen Optionen (verschiedene Arten von Rundung, Overflow, Bitbreiten der internen Grössen) nicht so ganz zu. Bei meiner Suche im Internet habe ich erstaunlich wenig gefunden. Ich dachte eigentlich, vor einem Standardproblem zu sitzen für das es bereits dutzende Lösungen und vor allem fertige Tools gibt, dem scheint aber nicht so. Wie geht ein Profi hier also vernünftig (also vor allem zeiteffizient) vor? Ich hatte eigentlich gehofft, um Dinge die Wahl der Bitbreiten für Koeffizienten, Handling von Overflows, Quantisierung und Stabilitätsanalyse etc. herumzukommen. Den VHDL Code zu schreiben wär mit diesen Daten dann eher weniger ein Problem.
Beitrag #6530498 wurde von einem Moderator gelöscht.
DrowninginNoise schrieb: > Wie geht ein Profi hier ... vor? Auch wenn es weder mir noch dir schmecken mag: Die Leute, die mit sowas umgehen und ihre Brötchen damit verdienen, die schweigen sich aus und publizieren nichts. Es könnte ja Konkurrenz aufkommen. Und das, was man im Inet so findet, sind akademische Publikationen, die deshalb geschrieben und im Inet veröffentlicht werden, damit man kein Geld an die einschlägigen Zeitschriften zahlen muß und seinen Veröffentlichungspflichten nachkommen kann. Inhalt eigentlich immer unbrauchbar. Tja, so ist das Leben in der Informationsgesellschaft. W.S.
W.S. schrieb: > Die Leute, die mit sowas > umgehen und ihre Brötchen damit verdienen, die schweigen sich aus und > publizieren nichts. > > Es könnte ja Konkurrenz aufkommen. Bullshit. Die Leute, die damit ihre Brötchen verdienen haben schlicht keine Zeit, etwas zu publizieren... W.S. schrieb: > Inhalt eigentlich immer unbrauchbar. Ja, leider. An der Stelle in der Laufbahn fehlt den Akademikern oft noch die Erfahrung.
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.