mikrocontroller.net

Forum: FPGA, VHDL & Co. Analogdaten effektiv Resampeln


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: unwissender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie hoch ist die maximal vorkommende Frequenz des Signals?

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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).

Autor: Harald D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 (?)

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Bildverarbeitung gibt es bei der Skalierung von Bildern ähnliche 
Probleme. Da gibt es verschiedene Verfahren, darunter die "b-spline 
approximation".

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.