Forum: Digitale Signalverarbeitung / DSP / Machine Learning ADC Data nach Simulink


von Maik R. (kiamur)


Lesenswert?

Hi,

ich habe ADC Daten mit Hilfe von Signal Tap (Altera/Quartus Tool) 
aufgezeichnet. Diese liegen mir nun als 12 bit breite Samples vor.

Ich möchte diese Daten als Input in einer Simulink Simulation benutzen. 
Die Daten kann ich sowohl als rohe Bitwerte (also z.B. 001100101110) 
oder als Integer Zahl (also z.B. 814) pro Sample zur Verfügung stellen.

Ich habe jetzt schon versucht die Daten per "From Workspace" Block ins 
Model zu bekommen. Dabei habe ich die erste Zeile von 0-64000 
durchnummeriert (Zeitstempel) und in der zweiten Zeile meine ADC Daten 
reingepackt.

Ich kann aber leider nicht herausfinden ob das so richtig ist, da mir 
Simulink da immer eine Out Of Memory Fehlermeldung um die Ohren haut 
ohne einen speziellen Grund für diese Fehlermeldung anzugeben.

Anschließend verabschiedet sich dann auch Matlab mit einem CTD (crash to 
desktop) (Matlab 2010b).

Sind denn 64000 Samples zu viel? Ist das überhaupt eine geignete Methode 
meine Daten nach Simulink zu bekommen? Wenn nein, wie sollte man es am 
Besten machen?

Danke und Gruß,
Maik

von Paulchen Panther (Gast)


Lesenswert?

Hi!

Wahrscheinlich liegt es daran, dass alle Daten in einer Zeile liegen. 
Versuch mal, pro Zeile nur ein Wert zu speichern. Die Timestamps kannst 
du weglassen, wenn die Daten in ein Array geschrieben werden. Der 
Arrayindex gibt dir den Zeitstempel vor (solange der Zeitstempel immer 
nur um 1 erhöht wird).

Gruß
PP

von Maik R. (kiamur)


Lesenswert?

Hi Paulchen,

danke für deine Antwort!

Du hast recht, es war wohl nicht richtig alles in eine Zeile zu 
schreiben. Da hatte mich eine Stelle in der Doku etwas verwirrt.

Zu den Zeitstempeln: Ich denke ich habe durch herumprobieren 
herausbekommen, dass die Zeitstempel nur ganze Zahlen sein dürfen.

Die Frage für mich ist, wie ich die Frequenz darstelle, mit der die 
Daten in Simulink ins Model gepumpt werden. Es gibt zwar in dem Block 
"from workspace" das Feld für die Samplefrequenz, aber trotzdem habe ich 
es bis jetzt nicht geschafft die Daten in Simulink so abzuspielen, dass 
das Signal wieder so aussieht, wie ich es ursprünglich aufgezeichnet 
habe (Also nicht nur die Form, sondern auch die Zeitauflösung).

Kannst du vielleicht einmal ein paar Beispieldaten Posten und 
Einstellungen der Blöcke verraten, damit ich das hinbekomme? 
(Samplefrequenz: 100KHz, Signal z.B. Sinus, 10KHz)

Gruß,
Maik

von Paulchen Panther (Gast)


Lesenswert?

Hi!

Werden die Daten zu schnell, zu langsam oder gar ungleichmäßig 
angezeigt. Idealerweise verwendest du als Testdaten erstmal ein 
Rechteck.

Ohne es probiert zu haben:
In den Optionen von Simulink kannst du die Timebase einstellen. Ich 
glaube, dass du dann auch nen anderen Solver verwenden musst. Die genaue 
Wahl spielt glaube ich bei sowas "einfachem" keine Rolle.

Gruß
PP

von Maik R. (kiamur)


Lesenswert?

Hi,

also, wenn ich die Daten mit einem Zeitstempelinkrement von '1' (also 
1,2,3,4,...) "abspiele", dann kam zwar mein Signal dabei raus, aber eben 
mit einer völlig falschen Zeitbasis. Jedes uSekunden-Sampel war dann 
also ein Sekunden-Sample. Ich musste also 1000 Sekunden abspielen um das 
Signal zu erhalten, welches normalerweise in einer Millisekunde da war.

Ich habe dann versucht die Zeitstempel entsprechend im us Bereich zu 
inkrementieren. Das hat aber gar nicht geklappt.

Ich werde mal versuchen die Zeitbasis in den Simulink Optionen 
einzustellen. Dort war ich zwar auch schon mal, aber ich habe es 
vielleicht übersehen.

Was ich nicht verstehe ist, dass es kein Beispiel für diesen Fall zu 
finden gibt. Ist denn das so etwas "exotisches", was ich hier vor habe?

Gruß,
Maik

von Maik R. (kiamur)


Lesenswert?

So,

ich habe es jetzt noch einmal probiert. Meine Vorgehensweise ist 
folgende:

Zuerst erstelle ich ein Timeseries Object in Matlab mit dem Timeseries 
Tool. Das heißt ich importiere meine Daten mit dem Tool in ein Object 
und gebe ihm auch die Zeitbasis an. Aus dem Tool heraus (oder aus dem 
Workspace) kann ich dieses Timeseries Object dann auch plotten. Dort 
sehen meine Daten und die Zeitbasis so aus, wie ich es erwarte.

Anschließend konvertiere ich die Matlab Timeseries in eine Simulink 
Timeseries, damit ich das ganze per "from Workspace" Block in Simulink 
benutzen kann. Ich bekomme auch keine Fehlermeldung. In dem "from 
Workspace" Block kann ich nun als Sampletime aber '0', '1', oder 
'1/1000000' einstellen, es ändert nichts an der Tatsache, dass die Daten 
auf dem Scope, dass ich direkt an den "from Workspace" Block 
angeschlossen habe, nichts mit den Daten zu tun hat, die in dem 
Timeseries Object sein sollten (und im Matlab Object ja nachweislich 
auch sind).

Ich habe auch schon Vorgehensweisen ohne Timeseries Object probiert. Das 
Ergebnis war aber immer das gleiche. Entweder geht es gar nicht, weil 
Simulink eine Fehlermeldung rausspuckt oder die Daten auf dem Scope 
passen nicht zu dem, was ich sehen will.

Gruß,
Maik

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.