|
|
Werte aus Buffer auslesen |
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.01.2016, 15:48
Titel: Werte aus Buffer auslesen
|
|
Hey Leute,
gibt es die Möglichkeit in Simulink einen Buffer an einer bestimmten Stelle auszulesen?
Dachte ich mache es einfach mit einem Matlab-function-Block in dem ich einfach in dem Buffer nach dem index zB. 5 suche.
Also wert=Buffer(5,1)
Irgendwie bekomme ich da aber immer Null
|
|
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 13:43
Titel:
|
|
|
|
|
Hey Leute,
bin immer noch nicht wirklich weiter gekommen. Versuche ein Simulink Einganssignal ab eines bestimmten Indexes zu kürzen und dann wieder durch die Simulation laufen zu lassen. Dazu wollte ich dieses buffern in einen Selector-Block mithilfe eines Indexes kürzen und dann wieder unbuffern, um den Rest wieder durch meine Simulation laufen zu lassen. Irgendwie kommen nach dem buffer und unbuffern erstmal Nullen raus und die letzten fünf Werte sind dann die des Eingangssignals.
Da ich nicht verstehe wie diese Buffer eigentlich arbeiten, dachte ich mir ich baue einfach einen eigenen in einem Matlab-function-Block. Weiß leider nicht genau wie ich das anstellen soll.
Als Eingänge habe ich mein Signal und meinen Index. Das Ausgangssignal wäre dementsprechend Ausgangssignal=Eingangssignal(index:end,1)
Dazwischen müssen die Werte irgendwie gebuffert werden und das bekomme ich nicht hin.
Ich hoffe ich konnte mein Problem gut erklären und freue mich über jede Hilfe.
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 11.01.2016, 13:57
Titel:
|
|
Hallo Sarah,
ich sehe eigentlich kein Problem, waurm es mit einem Matlab-Function Block nicht klappen sollte, höchstens irgendwas passt bei den Dimensionen nicht oder du hast Syntax-Fehler drin.
Am besten wär es, wenn du ein neues Test-SImulink-Modell erstellst, welches nur dein Problem enthält. Also beliebiges Eingangssignal, Bluffer-Funktion (Matlab) und Ausgangssignal enthält. Lad es dann hier hoch und ich schaue mal drüber.
VG
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 14:27
Titel:
|
|
Hey Vielen Dank Habe es mal versucht kurz in der angehängten Datei darzustellen.
Weiß wirklich nicht genau, wie es funktionieren soll. Danke für deine Hilfe.
Beschreibung: |
|
Download |
Dateiname: |
Buffer_test.slx |
Dateigröße: |
17.69 KB |
Heruntergeladen: |
398 mal |
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 11.01.2016, 14:34
Titel:
|
|
Du musst die Matlab-Function ebenfalls hochladen, du arbeist außerdem mit einer neuen Matlab-Version als ich, mal schauen ob es trotzdem klappt
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 14:36
Titel:
|
|
Die Matlab function sieht so aus:
function y = fcn(u1,u2)
Index=u2;
Eingang_gebuffert = buffer(u1,10);
kurzesSignal = Eingang_gebuffert(Index:end,1);
Ausgangssignal=unbuffer(kurzesSignal); %%% müssen ungebuffert weiter genutzt werden
y=Eingang_gebuffert;
Danke für deine Hilfe!
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 11.01.2016, 14:51
Titel:
|
|
Ok, ich verstehe was du möchtest, leider ist Simulink für deine AUfgabe relativ ungeeignet, besser wäre es wenn du Matlab benutzt.
Simulink ist eine Simulationsumgebung, die das erstellte Modell zu bestimmten Zeitpunkten abtastet. Auf dein Bsp. bezogen, bekommst du aus dem Sinusblock zu jedem Zeitpunkt immer nur einen Wert geliefert, die Dimension ist also ein Skalar.
Du erwartest für deine Matlab-Funktion aber einen Vektor mit mehreren Einträgen, ich meine u1. Du musst also erstmal eine Logik/Routine vor deine FUnction schalten, die die Werte aus dem Eingangssignal speichert und dann weitergibt. Kann sien dass ich mich irre, aber momentan sehe ich keinen anderen Weg, das wird realtiv eklig sein zu erstellen, wie gesagt Matlab würde sich für deine Aufgabe deutlich besser eignen.
Vllt. meldet sich hier ja noch jemand der eine gute Idee hat, womit es schnell und einfach geht.
Gruß
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 14:55
Titel:
|
|
Vielen Dank für deine Antwort. Leider muss ich es in Simulink machen, da ich mein komplettes Modell darauf basiert. Ich werde es mal mit der Logik/Routine versuchen. Danke für deine Hilfe!
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 11.01.2016, 15:03
Titel:
|
|
STelle mir das ungefähr so vor,
In Speicher überschreibst du dann einfach den ersten Wert im Vektor mit dem neuen Wert aus der Sinusschwingung. Wahrs. doch einfach als Gedacht zu lösen
Gruß
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 15:13
Titel:
|
|
Ok, was nehme ich dann am besten für eine Speicher den Buffer? Und lade ich das ganze in die Matlab-function und kürze den Vektor auf den entsprechenden Index? so etwa?
Beschreibung: |
|
Download |
Dateiname: |
Buffer_test.slx |
Dateigröße: |
17.13 KB |
Heruntergeladen: |
392 mal |
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 11.01.2016, 15:18
Titel:
|
|
Du kannst entweder 2 Matlab Functionen verwenden, einen für Speicher und einen für Buffer, kannst abre auch direkt 1 Function verwenden und beides reinnehmen, je nachdem was für dich übersichtlicher/logischer ist.
Poste einfach nur die Matlab Function hier, das Simulink-Modell brauch i net
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 15:26
Titel:
|
|
Also für den Speicher hätte ich das so geschrieben:
function y = fcn(u1)
coder.extrinsic('buffer')
y= buffer(u1,10);
Bekomme noch eine Fehlermeldung:Function output 'y' cannot be an mxArray in this context. Consider preinitializing the output variable with a known type.
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 11.01.2016, 16:12
Titel:
|
|
Hier mal eine mögliche Lösung für den Speicher, vor dem Scope würde jetzt dein Buffer-Block kommen. Die Besonderheit ist hier das w jetzt beispielhaft ein 1x2 Vektor ist, den man nun buffern kann. Der Switch + Clock ist eine Notlösung, da es sonst zu einem algebraic Loop kommt, stell dir vor das er die Anfangsbed. für w darstellt. Du hast im ersten Abtastschritt ja nur ein Wert von u zur verfügung, aber der FUnction-Block braucht als Input v einen Vektor.
Matlab-Function sieht folgendermaßen aus
Gruß
Beschreibung: |
|
Download |
Dateiname: |
test.slx |
Dateigröße: |
15.45 KB |
Heruntergeladen: |
388 mal |
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2016, 16:44
Titel: rom
|
|
Ok, versuche das gerade zu verstehen. Dauert bei mir immer etwas Dann muss ich nur noch meine Vektor w an meinen gewünschten Indizies auslesen und schon ist der Drops gelutscht.
|
|
|
Sarah90 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.01.2016, 13:44
Titel:
|
|
Hallo,
ich bin leider immer noch nicht weiter gekommen. Ich habe einmal ein Bild angehangen, damit ihr versteht was ich so meine. Es soll vom workspace Werte eingelesen werden, die doert als Matrix gespeichert sind.
Im nächsten Schritt sollen diese gebuffert werden und dann mittels eines Selector Blocks die Werte ausgegeben werden ab einem bestimmten Startindex. Für die Berechnung müssen die Werte wieder ungebuffert sein.
Die Berechnung gibt dann den neuen Sartindex aus und der Spaß beginnt von vorne bis der Startindex gleich der letzte Index ist.
Hat jemand eine Idee? Gerne darf das auch mit einer Matlab Function probiert werden.
Beschreibung: |
|
Download |
Dateiname: |
Bild_simulink.jpg |
Dateigröße: |
810.94 KB |
Heruntergeladen: |
423 mal |
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|