Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frage zu Resampler


von Markus H. (markushehn)


Lesenswert?

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!

von Dergute W. (derguteweka)


Lesenswert?

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
von Markus H. (markushehn)


Lesenswert?

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
von Dergute W. (derguteweka)


Lesenswert?

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

von Rolf S. (audiorolf)


Lesenswert?

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.

von Markus H. (markushehn)


Lesenswert?

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).

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.