Hallo, ich hab vor einen Resampler mit rationalem Faktor zu Implementieren. Dies kann man ja als folgende Struktur realisieren: Interpolator - Tiefpass - Dezimator Ich benötige das Ganze so, dass der Interpolationsfaktor (bei mir 4) konstant ist und die Dezimationsrate von 10 - 50 variieren kann. Ablaufen soll das ganze auf einem FPGA mit einem Systemtakt von 100 MHz. Vor dem Interpolator hab ich eine Abtastfrequenz von 12,5 MHz und nach dem Interpolator folglich 50 MHz. Wie implementier ich das nun am Besten? Meine Idee wär den Tiefpass einfach als IIR-Filter zu realisieren und die Filterkoeffizienten aus einem ROM nach Bedarf nachladen zu lassen. Ich brauch das Ganze insgesamt 16 mal. Gibt ja auch Implementierungen mit Polyphasen FIR-Filtern, aber hilft mir das in diesem Fall weiter? CIC-Filter sind leider zu schmalbandig und verzerren mein Signal zu stark. Schonmal Danke für Tipps und Ratschläge!
Moin, Haste bei deinem IIR Filter Phasengang und Rechengenauigkeit/Overflow im Griff? Wieso sollen CIC Filter schmalbandig sein? Woher soll hier einer wissen, ob du Polyphasenfilter brauchen kannst? Wieso Interpolationsfaktor 4 (und nicht 8) - wieso ueberhaupt Interpolation und nicht gleich Tiefpass? Wie sieht denn das bei einer Dezimationsrate von zB. 49 aus - Mit 12.5MHz rein, dann rauf auf 50Mhz, und dann? Mit 1.0204081632MHz raus? Oder 48 Clocks disabled eine Clock enabled? Wieviel Aliasspektrum darf in das Signal; wie sieht die spektrale Verteilung deines Nutzsignals aus? Fragen ueber Fragen... Gruss WK
:
Bearbeitet durch User
Dergute W. schrieb: > Moin, > > Haste bei deinem IIR Filter Phasengang und Rechengenauigkeit/Overflow im > Griff? Ich werd den mit Maximally Flat dimensionieren. Ist dann denk ich ein guter Kompomiss. Mit im Griff haben muss ich mal schaun ;) Die Filter-Koeffizienten werden vorher skaliert, um Overflow unwahrscheinlicher werden zu lassen. Ich weiß das da FIR leichter zu handeln, aber schaltungstechnisch mit nem größeren Aufwand sind. > Wieso sollen CIC Filter schmalbandig sein? Woher soll hier einer > wissen, ob du Polyphasenfilter brauchen kannst? Ja gut, schmalbandig ist relativ. Habs mal simuliert, und da ist mein Signal am Ausgang zu rund (wegen Rechteck, s.u.). Naja, in jedem Lehrbuch wird über das mit Polyphasenfiltern berichtet ;) > Wieso > Interpolationsfaktor 4 (und nicht 8) - wieso ueberhaupt Interpolation > und nicht gleich Tiefpass? Ich muss so genau runterteilen können. Da reicht leider keine ganzzahlige Teilung von 12,5 MHz mehr aus. > Wie sieht denn das bei einer Dezimationsrate > von zB. 49 aus - Mit 12.5MHz rein, dann rauf auf 50Mhz, und dann? Mit > 1.0204081632MHz raus? Oder 48 Clocks disabled eine Clock enabled? > Wieviel Aliasspektrum darf in das Signal; wie sieht die spektrale > Verteilung deines Nutzsignals aus? Nutzsignal ist ein Rechteck (+Rauschen), bzw. Datenstrom. Genau, dann sollen die 1.0204081632 MHz rauskommen. Also der IIR-Filter rechnet mit 50 MHz. Es wird dann nur jedes 49. Sample des Filter-Ausgangssignals weiterverwendet. Passt das so?? Oder hab ich nen Denkfehler? > Fragen ueber Fragen... > > Gruss > WK
:
Bearbeitet durch User
Moin, Prinzipiell koennte das schon so funktionieren, wie ich denke, dass du das vorhast: Zwischen die Eingangssamples je 3x Null reinbauen; dann durch's entsprechend eingestellte Filter, dann nur jedes 10..50 Sample draus verwursten. "Unschoen" ist halt, dass das Filter "so schnell" laeuft, obwohl man am Ausgang nur viel weniger Daten braucht. Ist aber halt so beim IIR. Ich kenn' mich da nicht so besonders aus, vielleicht gibts da Tricks, aber ich kenn' sie nicht - und so seh' ich bei Polyphasenfiltern nicht so recht, wie man das gut an die variable Dezimationsrate anpassen kann. Fuer eine einzelne, feste Rate waeren die wahrscheinlich schon das Dingens der Wahl, auch weil man dann mit dem noetigen Takt so weit runterkaeme, dass man wahrscheinlich gleich deine 16 oder vielleicht 8 deiner Filter mit einer Hardware erschlagen koennte. Aber das Kernproblem beim IIR seh' ich in der Flankensteilheit, und eben dem numerischen Schweinskram. Insbesondere, wenn die Pole in die Naehe vom Einheitskreis kommen, sieht die Welt "in echt" doch immer anders aus als bei Matlab/Octave. Die Frage ist halt auch, welche Flankensteilheit/Sperrdaempfung du brauchst. Bei 1:50 Dezimation brauchst du dann eine Grenzfrequenz von 500kHz oder 0.01 Fabtast. Und da sollte jenseits der 500kHz nicht mehr viel durchkommen, denn das faltets dir durch die Dezimation gnadenlos runter in dein Nutzsignal. Und diesseits der 500kHz sollte nicht viel von deinem Nutzsignal weggedaemft werden... Probier mal, ob du so ein Filter mit der von dir gewuenschten Steilheit hinbringst. Das wird der Dreh- und Angelpunkt. Gruss WK
Das mit den Nullen reinhauen ist mir suspekt. Wie soll das funktionieren? Ich weiss aus der Signaltheorie, dass es richtig ist, aber praktisch erhalte ich völlig unterschiedliche Ergebnisse, wenn ich interpoliere und nicht interpolieren oder die Werte kopiere oder eben Nullen einfüge.
Der Trick dabei ist der nachgeschaltete Tiefpass. Der "glättet" sozusagen die Kurve und füllt die Stellen mit den Nullen auf. Oder anders: Der Tiefpass transferiert Signalenergie auf die Stellen, die Null sind. Daher ist auch nach der Interpolation nach Systemtheorie das Signal um 1/I abgeschwächt, falls I der Interpolationsfaktor ist. Und im Frequenzbereich: Durchs Nullen einfügen verändert sich das Spektrum nicht. Der Tiefpass filtert die sog. Spiegelspektren weg, damit das Spektrum so aussieht wie bei einer höheren Abtastrate (Spektren weiter auseinander).
Rolf S. schrieb: > Das mit den Nullen reinhauen ist mir suspekt. Wie soll das > funktionieren? Ich weiss aus der Signaltheorie, dass es richtig ist, > aber praktisch erhalte ich völlig unterschiedliche Ergebnisse, wenn ich > interpoliere und nicht interpolieren oder die Werte kopiere oder eben > Nullen einfüge. Das ist wie mit vielen Bereichen der digitalen Signalverarbeitung. In der digitalen Welt ist ein Mechanismus nicht zwangsweise auf die analoge Welt übertragbar und auch die Ergebnisse sind es nicht. Gerade beim Sampeln gibt es da etliche Missverständnisse. Während die einen immer noch die Treppen in der digitalen Welt sehen und lieber Analog machen, kommen die Digitalos mit Nyquist und behaupten, man könne ein Signal mit Faktor 2 Samplefrequenz komplett rekonstruieren, obwohl jeder Musiker, der Tonaufnahmen macht und ein Gehör hat, die Gegenbeweise auf der Platte hat.
Markus H. schrieb: > Der Trick dabei ist der nachgeschaltete Tiefpass. > Der "glättet" sozusagen die Kurve und füllt die Stellen mit den Nullen > auf. Soweit die Theorie, die ich so nicht unkommentiert stehen lassen kann: Durch das Hinzufügen von Nullinformation wird der Resampler in der Tat nicht mit falschen Informationen versorgt und ein idealer Interpolator kann das auch verarbeiten. Insofern ist das richtig. Allerdings gibt es keinen idealen Interpolator und schon gar nicht bei nichtganzzahligen Übersetzungsverhältnissen. Der müsste meistens unendlich lang sein, was er nie ist und eine unendlich dichte Tapzahl haben, damit er perfekt abgebildet wird, was es auch nicht gibt. Im Gegenteil bei BV und AV sind es oft kurze und damit sehr unvollständige Schaltungen, die interpolieren oder rekonstruieren und die nach Optimierung schreien. Und selbst bei ganzzahligen Verhältnissen ist es nicht Dasselbe, ob man eine einfache Abtastrate mit n Informationen oder eine k-fache Abtastrate mit n*k Informationen vorliegen hat, da das Ganze irgendwann mal wieder ins Analoge soll und da entstehen nämlich die Probleme, die sich in ungewollten Phasenverschiebungen, Schwebungen und Oberwellen darstellen. Und ja, die kann man sehen, messen und eben hören mit Bezug zu meinem Vorposting. Daher gibt es Überabtastung, Zwischeninterpolation, Dithering und Noiseshaping, um durch geschicktes Hinzufügen von falschen! Information zu effektiv besseren Ergebnissen zu kommen. Aktuellen Themen dazu haben wir ja, siehe: Beitrag "DDFS 30 MHz mit 100 MHz FPGA clock" Beitrag "Signalrekonstruktion" Das Hinzufügen von Nullinformation ist beim Audio und auch generell zudem nicht einfach dadurch getan, dass man wörtlich Nullen auffüllt. Dies gilt streng genommen nur bei symmetrischen Datenströmen. Bei Signalen mit einem Offset, z.B. Audio zwischen 0 und 65565 mit 32768 als Nulllage wären echte Nullen für den Interpolator fatal. Damit ergibt sich das Problem, dass man bei unsymmetrischen Daten die Nulllage wissen muss, um "keine Information" hinzuzufügen. Und wo liegt die bitte? Im konkreten Beispiel wäre ein 1:4 FIR-Filter, besser ein 2:8 Filter mit Überlappung zu empfehlen, je nach Kompromiss zwischen Trägheit, Auflösung und Präzision - bzw auch Kosten. Dessen Tiefpassverhalten muss auf die zu erwartende höchste Frequenz angepasst werden. Da entsteht der nächste Kompromiss: Exakt Nyquist liefert zu viele Oberwellen und der berühmte Faktor 10 an Bandbreitenoverhead bei Messungen wird zu träge sein. Schätzen wir also mal 40% (?). In der Bildverarbeitung ist das ein guter Wert. Beim Audio sind 20% besser. Wären 10kHz Grenzfrequenz bei einem schwachen Filterverhalten mit nur 8 Taps bei dem auch 30kHz noch relevant durchkommen. Wenn es besser sein soll: Eine 3:12 Interpolation über 3 primäre Daten, gfs mit einem CIC und dann ein FIR hinterher. Damit hätte man auch genug "Stützstellen" für eine asymmetrische Frequenzübersetzung mit einer X4-Gleichung. Habe das mal für Audio gemacht. Ging sogar über Taktdomänen hinweg. Den Unterschied zwischen einem manuell interpolierten und dann schwach gefilterten Signal mit 16.0 Hz Grenzfrequenz (wegen 48/3 und der dadurch einfachen Koeffizienten) und auf der anderen Seite einer klassischen Interpolation mit Nullen oder dem Gleichrichtmittelwert habe ich heute noch in den Ohren.
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.