FPGA und ADC

Gast #1792517
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
Angehängte Dateien:
Gast #1792536
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?
Gast #1792558
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.
Gast #1792561
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. ;)
Gast #1792608
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ß
#1792694
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...
Gast #1792715
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.
Gast #1798330
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.
Gast #1803555
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:
1
void mexFunction(int nlhs, mxArray *phls[], int nrhs, const mxArray *prhs[])
2
{
3
CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL, GUID_KNJN_FX2);
4
    mxArray *xData;
5
    double *xValues;
6
  double *dataOut;
7
    
8
  xData = (mxArray*)prhs[0];
9
  xValues = mxGetPr(xData);
10
        Long len = 65535;
11
  unsigned int i=0;
12
  double max=65535;;
13
  unsigned char bufin[65535]; 
14
  
15
  
16
  phls[0] = mxCreateDoubleMatrix(1, max, mxREAL);// Hier erstelle ich einen Array für die Ausgabe der Daten
17
  dataOut = mxGetPr(phls[0]);
18
  
19
    for(i=0;i<max;i++)
20
  {  
21
    if(j==0)BulkInPipe4->XferData(bufin, len);
22
    dataOut[i]= bufin[i];
23
    
24
  }
25
delete USBDevice;
26
}
Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.