WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Diskrete Werte in Array speichern um Array zu analysieren

 

Aptup
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 05.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 11:37     Titel: Diskrete Werte in Array speichern um Array zu analysieren
  Antworten mit Zitat      
Hallo Zusammen,

nach langem suchen im Internet und in der Matlab Hilfe komme ich immer noch nicht weiter. Vielleicht kann mir jemand von euch weiterhelfen.
Mein Problem ist folgendes:

Ich habe ein Simulink-Modell, dass mir im 1ms-Takt Messwerte liefert (z.B. aktuelle Geschwindigkeit). Ich möchte diese Werte 10s lang in einem Vektor schreiben (also insgesammt 1000 Werte), so dass ich dann einen Vektor habe, der die Messwerte der letzten 10s enthält. Nach 10s möchte ich diesen Vektor auslesen und in einem Embedded Matlab Function-Block weiter verwenden. Das ganze soll kontinuierlich durchlaufen. Also, wenn ich einen "10s-Vektor" ausgelesen habe, soll dieser immer wieder neu befüllt werden.

Zuerst dachte ich an einen "To Workspace"-Block. Dieser speichert alle eingehenden Werte in einen Vektor mit vorher festgeleger Länge. Allerdings wird dieser Vektor im Workspace gespeichert, so dass man erst am Ende der Simulation auf ihn zugreifen kann. Ich muss die Werte aus dem Vektor allerdings bereits während der Simulation verwenden können.

Danach dachte ich an einen "Data Store Memory"-Block mit den dazugehörigen Read- und Write-Blöcken. Dazu muss ich im "Initial Value" einen Start-Wert vorgeben. Mit diesem Startwert wird jedoch auch festgelegt welche Dimension die Eingangsvariable hat (also ob Vektoren oder einzelne Werte gespeichert werden). Das Problem dabei ist, dass die Eingangswerte in meinem Fall einzelne Werte sind, diese aber nacheinander in einem Vektor gespeichert werden sollen. D.h. Eingangs- und Ausgangsvariable haben unterschiedliche Dimensionen.

Im Prinzip bräuchte ich einen Block, der wie der "To Workspace"-Block arbeitet, die aufgezeichneten Werte allerdings nicht im Workspace ablegt, sondern diese auch schon während der Simulation zur Verfügung stellt.

Ich hoffe, das war jetzt einigermaßen verständlich.

Hatte schon mal jemand ein ähnliches Problem oder kennt eine Möglichkeit, Werte während einer Simulation in einem Vektor zu speichern?

Ich bin für jede Hilfe dankbar! Vielen Dank schon mal in Voraus für eure Hilfe!

Viele Grüße,
Aptup
Private Nachricht senden Benutzer-Profile anzeigen


Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 14:18     Titel:
  Antworten mit Zitat      
Vielleicht kann Dir der "Vector Concatenate"-Block in der MathOperations-Lib helfen...

Was macht denn die embedded-Function...vielleicht gibt es da einen praktikabelen Workaround...
Private Nachricht senden Benutzer-Profile anzeigen
 
Aptup
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 05.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 14:55     Titel:
  Antworten mit Zitat      
Hi,

vielen Dank für die Antwort.

Die Embedded Function ist nicht das Problem solange der richtige Vektor als Eingangsgröße kommt. Die Embedded Function generiert aus dem Eingangsvektor (in meinem Fall soll das ein Geschwindigkeitsverlauf sein) bestimmte Kennwerte wie Längsbeschleunigung, Maximalgeschwindigkeit, usw.. Das habe ich offline auch bereits ausprobiert indem ich der Function einen Vektor manuell übergeben habe. Jetz soll das Modell allerdings online laufen. D.h. ich bekomme im 1ms-Takt aktuelle Geschwindigkeitswerte, muss diese eine Zeit lang "aufzeichnen" um dann den aufgezeichneten Verlauf der Embedded Function zu übergeben. Ich bräuchte also eine Art Ringspeicher, der immer wieder überschrieben wird nachdem die Werte ausgelesen wurden.

Habe mir jetzt auch mal den "Vector Concatenate"-Block angeschaut. Der macht auch nicht genau das was ich brauche. Der verbindet ja zwei (oder mehrere) Vektoren und fügt diese zu einem zusammen. Ich möchte aber zeitlich aufeinaderfolgende Werte in einen Vektor schreiben.

Kennt jemand eine Möglichkeit einen Ringspeicher mit Simulink zu erstellen?

Viele Grüße,
Aptup
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 15:26     Titel:
  Antworten mit Zitat      
Okay...ich denke dann sollte der Tapped Delay Block dir weiterhelfen...

Der hat einen Skalar als Input und nen Vektor aller Verzögerten Signale als Output...einzig um die Anfangsbedingungen musst Du dir evtl. Gedanken machen...


Das sollte es eigentlich sein
Private Nachricht senden Benutzer-Profile anzeigen
 
Aptup
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 05.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 16:28     Titel:
  Antworten mit Zitat      
Vielen Dank!

Ich glaube, damit könnte es hinhauen. Habe das jetzt mal mit einem einfachen Sinussignal als Eingangsgröße simuliert und das Ergebnis sieht soweit ganz gut aus. Werde jetzt mal versuchen, die Lösung in meinem Modell zu integrieren.

Wenn das funktioniert, werde ich selbstverständlich die Lösung posten.

Danke für die schnelle Hilfe!

Grüße,
Aptup
Private Nachricht senden Benutzer-Profile anzeigen
 
flyflo
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 15:41     Titel:
  Antworten mit Zitat      
Hallo,

ich bin im Rahmen meiner Studienarbeit mit einem ähnlichen Problem konfrontiert. Und zwar möchte ich während einer Simulink-Simulation einen Teil eines Vektors in einem neuen Vektor speichern. Die Größe des Vektors ist je nach Eingangsdaten immer unterschiedlich.
Nun dachte ich, dass die Lösung mit dem "Tapped Delay" Block funktionieren könnte. Jedoch besteht eben das Problem, dass sich die Größe des Vektors mit jedem neuen Vektor ändert, und nicht wie im obigen Beispiel "10s" entspricht.

Weiß jemand Rat? Bin gerade richtig am verzweifeln...Sad

Besten Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.