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
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?
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.
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. ;)
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ß
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...
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.
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.
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: