mikrocontroller.net

Forum: FPGA, VHDL & Co. FPGA und ADC


Autor: Julio (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich bin verzweifelt nach der Suche nach einer Lösung für meinen Problem.

Es soll für meinen Uni-Projekt Echosignale aufgenommen und zum PC 
gesendet werden. Dafür soll einen Xylo-L Board , FX2 mit 48Mhz und einen 
ADC (Flashy) mit 125 MHz verwendet werden.

Meinen Ansatz lautet, die Daten in einer RAM-Speicher füttern bis die 
RAM voll ist, dann Aufnahme Stoppen und Daten via USB zum PC senden.

Aber, ich könnte die Daten nur bis 15 MHz ohne Probleme senden. Ab 
dieser Frequenz werden die Daten nicht richtig gezeigt!! Ein 
Sinus-Signal ist kein Sinus mehr!!

Anbei sind 2 Messungen mit 18 MHz und 30Mhz.

Gruß
Julio

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber was erwartest Du denn wenn du ein Sinussignal mit einer 
Frequenz vom 30 MHz mit einem  Takt von 125 MHz samplest? Vier 
Abtastungen pro Vollwelle! Soll da etwas herauskommen, das ohne 
aufwändige Interpolation (unter Berücksichtigung der Grenzfrequenz) 
schön aussieht?

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist deine Abtastrate?

Wie sieht deine Schaltung aus? Besonders der Teil vor dem AD-Wandler.

Olaf

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schon gesagt wurde, die Abtastrate ist des Rätsels Lösung. 30 
MHz-Signal mit 125 MHz abtasten bedeutet dass man ca. 4 Abtastpunkte pro 
Periode hat. Um hier schon sicher sagen zu können, wie das Signal 
wirklich ausschaut muss man zumindest die Signalform kennen. Wenn selbst 
die unbekannt ist ist es einfach unmöglich das Signal korrekt 
darzustellen. Ich glaub als Regel galt bei unbekannter Signalform mit 
mindestens 10-facher Frequenz abzutasten, d.h. nur Signalformen mit bis 
zu 12.5 MHz kannst du vernüftig darstellen.

Wenn es sich um ein Sinus-förmiges Signal handelt empfiehlt sich hier 
das Nyquistkriterium zu erfüllen womit du also bis 62.5 MHz Signale 
korrekt erfassen könntest...natürlich nicht ohne ein wenig mathematisch 
zu werden, du musst also aus den Abtastpunkten das Signal errechnen, 
liniear zu interpolieren hilft da nicht was du bei den Bildern nur 
gemacht hast.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Meine Zahlen beruhen darauf, dass die Taktrate des ADC auch der 
Abtastrate entspricht, was ja nicht unbedingt sein muss. Das Datenblatt 
des ADCs hilft hier weiter. ;)

Autor: Julio (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten ^^

Michael schrieb:
> Wenn es sich um ein Sinus-förmiges Signal handelt empfiehlt sich hier
> das Nyquistkriterium zu erfüllen womit du also bis 62.5 MHz Signale
> korrekt erfassen könntest...natürlich nicht ohne ein wenig mathematisch
> zu werden, du musst also aus den Abtastpunkten das Signal errechnen,

Ich werde diesen Ansatz weiter verfolgen

Gruß

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das Nyquistkriterium ist doch eine rein theoretische Sache aus der 
Systemtheorie. In der Realität kann man das nicht so machen. Die 
Abtastzeitpunkte kommen ja nicht synchron zum Signal. Du kannst nur bis 
etwa 10MHz sinnvoll messen, vor allem bei unbekannten Signalen. Bekannte 
Signale müsste man ja auch nicht zu messen :)
Du siehst ja schon am 18MHz Signal, dass es kein sauberer Sinus mehr 
ist. Selbst bei einem 10Mhz Signal hätte ein Sinus nur noch 12 Punkte 
pro Periode als Stützsetllen...

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian R. schrieb:
> Naja, das Nyquistkriterium ist doch eine rein theoretische Sache aus der
> Systemtheorie. In der Realität kann man das nicht so machen. Die
> Abtastzeitpunkte kommen ja nicht synchron zum Signal

Muss man beim Nyquistkriterium ja auch nicht. Es muss nur die Signalform 
bekannt sein, dann kann man aus den Abtastwerten das Signal wieder 
errechnen.

Autor: Julio (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann bellasse ich es bei 10MHz ^^
Danke für die Wertvollen Infos

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst bist etwa ein Drittel der Frequenz sehr gut messen, was auf 
etwa 40 MHz hinausläuft, wenn Du einen sehr steilen Filter einsetzt, der 
bei 50MHz einsetzt und dann rasch abfällt.

Die Samples sind dann sehr exakt auf der Sinuswelle, die ja die maximale 
Frequenz darstellt, die Du sehen kannst. Damit die Signale aber stimmen, 
musst Du im FPGA ein digitales Filter mitlaufen lassen, daß ebenfalls 
mit höchstens 50MHz Grenzfrequenz läuft und die Werte interpoliert. Dann 
hast du einen sauberen Zeitverlauf.

Das Interplationsfilter muss aber oversampeln, was bei 125MHz 
Grundfrequenz wenig Spielraum lässt. Für eine entsprechende Genauigkeit 
von 1% braucht man mindestens 256fach oversampling, für Deine Zwecke 
reichen sicher 5% der Oberwelle = Faktor 40!  -> 400 MHz im FPGA-> 10 
MHz perfekte Oberwelle.

Autor: Julio (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das mit dem Filter getestet und hat gut geklappt. Vielen dank 
Oli ^^

Ich habe noch eine andere Frage und zwar:
Momentan sende ich mit dem BulkOut verfahren die Daten an Matlab. Gibt 
es eine andere Möglichkeit die Daten irgendwie als live stream zu 
senden?

Das ist Hier mein C++ Code für einen 65535 großen Paket:
void mexFunction(int nlhs, mxArray *phls[], int nrhs, const mxArray *prhs[])
{
CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL, GUID_KNJN_FX2);
    mxArray *xData;
    double *xValues;
  double *dataOut;
    
  xData = (mxArray*)prhs[0];
  xValues = mxGetPr(xData);
        Long len = 65535;
  unsigned int i=0;
  double max=65535;;
  unsigned char bufin[65535]; 
  
  
  phls[0] = mxCreateDoubleMatrix(1, max, mxREAL);// Hier erstelle ich einen Array für die Ausgabe der Daten
  dataOut = mxGetPr(phls[0]);
  
    for(i=0;i<max;i++)
  {  
    if(j==0)BulkInPipe4->XferData(bufin, len);
    dataOut[i]= bufin[i];
    
  }
delete USBDevice;
}
Gruß

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.