Ich muss Daten, die mit 10Bit und 61.5kHz bzw 6/5 davon -> 73.8kHz
reinkommen, auf 175kHz hochsampeln. Das annehmen der Daten ist kein
Problem (FIFOS), aber die Daten sind ursprünglich kontinuierlich und
müssen auch kontinuierlich ausgegeben werden. Ich bekomme kein
vernüftiges Teilerverhältnis hin, muss also resampeln.
Wie macht man das?
Ich will eine quadratische Gleichung verwenden, die die 3 letzen Punkte
benutzt, um Zwischenwerte zu erzeugen, damit ich einfach abtasten kann.
Wie stellt man die auf? Was gibt es hinsichtlich Aliasing zu beachten?
Wäre was anderes besser?
Das Lösen ist kein Problem, ich habe genug Latenz "frei", um die Daten
zu berechnen und verzögert auszugeben. 2 Samples = 2/175kHz wären kein
Problem. Schwer wird eher die Genauigkeit von 1/2 digit.
Leider brauche ich das Ganze auch nochmal rückwärts. (Aufwärts und
Abwärtskompatibilität von 2 Hardwareeinheiten).
Du brauchst ein Resampling-Filter, welches in einem Zwischenschritt
sozusagen "Analogdaten" erzeugt, die dann wiederum neu gesampelt werden.
Daher auch die Frage nach der max Frequenz. Darauf muss das AA-Filter
abgestimmt werden.
>Ich bekomme kein vernüftiges Teilerverhältnis hin, muss also resampeln.
Nun ja, das gilt nur, wenn die Frequenzen von aussen kommen und jittern.
Wenn Du beide Takte intern erzeugen kannst, oder wenigstens die eine
Frequenz aus der anderen ableiten darfst, kannst Du so vorgehen, daß Du
mit einer PLL im FPGA beide Takte erzeugst, den Gebertakt einsampelst
und mit einem Zähler einen Offset (als Zeit) ausrechnest, mit dem Du
dann den zweiten verzögerst.
Hier ist eine Taktableitung (händisch erzeugt).
Ausgangsfrequenzen durch 100:
61500 73800 175000
615 738 1750
Vereinigung von 1+2
*6 *5
3690 3690
/10
369 369 * 175 = 64575 (x 1000)
OSC : 64575000 = 64.5xx MHz
1.) Teiler 369 -> 175000 kHz
dann 64575000 über PLL *6 /35 -> 11070000
2a) 11070000 / 150 = 73800
2b) 11070000 / 180 = 61500
oder so ähnlich...
Wenn beide Takte zwar jittern, sangfristig aber streng genau sind,
hängst Du FIFOs davor.
>Darauf muss das AA-Filter abgestimmt werden.
Aha und wie macht man das? Einfach ein Filter mit der benötigten
Grenzfrequenz?
>Hier ist eine Taktableitung
Abgesehen dvon, daß mir nicht klar ist, wie man auf sowas kommt:
Ich verstehe noch nicht, wie ich diese Takte einsetzen soll. Ich bekomme
ja von der Eingangsseite einen Takt mit der Phase des Sendesystems. Klar
kann ich es einsampeln, aber es soll ja mit dem Takt ausgegeben werden,
der dem Empfangssystem entspricht. Der kommt aus einem anderen
Schaltungsteil, und ...
... kann nach letzter Information auch noch variieren. (187.5kHz).
Kommt es bei völlig unkorrellierten Takten nicht zu
Übernahmeverzerrungen?
Wenn die Takte nicht ganzzahlig zusammenpassen, muss doch eingesampelt
werden und dann gibt es Sprünge (?)
In der Bildverarbeitung gibt es bei der Skalierung von Bildern ähnliche
Probleme. Da gibt es verschiedene Verfahren, darunter die "b-spline
approximation".
@OP: Ja, du must neu sampeln.
@Harald: Der Sinn des Resampeln ist es ja gerade, diese Sprünge zu
verhindern. Zwischen den beiden Takten, die du hast, besteht zwar keine
Kontinuität, wohl aber ein zeitlicher Zusammenhang. Der zweite Takt
nimmt sich einfach eine interpolierte Gleichung, die einen Wert für den
aktuellen Bereich liefern kann (Spline oder X2), setzt die Zeit ein und
erhält den Wert. Im Falle des Taktüberganges gibt es u.U. 2 Gleichungen,
die parallel einen Wert liefern können.
Für einfache Fälle reicht eine Geradengleichung.