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

Elemente eines Vektors vergleichen

 

Saskia_19

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2012, 16:50     Titel: Elemente eines Vektors vergleichen
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine *.csv Datei, von welcher ich mit

Code:

M = csvread('test.csv',0,0,[0 0 53 0]);
 


die erste Spalte in einen Vektor einlese.

Frage 1: Wie kann ich die erste Spalte einlesen, wenn ich nicht weiss wie lange diese ist? Im obigen Beispiel hatte diese 54 Zeilen.

Frage 2: Wie kann ich die einzelnen Elemente eines Vektors miteinander vergleichen? Vier Werte untereinander müssen immer gleich sein.

Beispiel:

100
100
100
100 --> 4 Paket erfolgreich angekommen
101 --> Fehler nur zwei Pakete erfolgreich angekommen und zwei fehlen
101 --> Fehler nur zwei Pakete erfolgreich angekommen und zwei fehlen
105 --> Fehler nur zwei Pakete erfolgreich angekommen und zwei fehlen
105 --> Fehler nur zwei Pakete erfolgreich angekommen und zwei fehlen
106
106
106
106 --> 4 Paket erfolgreich angekommen

Ziel ist es den Vektor in Simulink Elementweise abspielen zu lassen. Solange vier werte untereinander gleich sind, ist alles okay (kein Paketverlust). Wenn ein Fehler auftritt (Paketverlust), sollen die zuletzt gültigen Werte verwendet werden. Wie kann ich dies realisieren?

Vielen Dank und viele Grüße,
Saskia


Saskia_19

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2012, 17:09     Titel:
  Antworten mit Zitat      
Ergänzung:

Bei dem Vektor M handelt es sich um einen Zeitstempel, welcher innerhalb von Simulink als Quelle verwendet werden soll, um zu bestimmen, ob Datenpake verloren gegangen sind. Wenn vier Werte untereinander gleich sind, sind keine Pakete verloren. Falls Pakete verloren gegangen sind, wird solange mit den letzten gültigen Werten gerechnet, bis wieder vier Werte untereinander gleich sind. Bin leider vollkommen neu auf dem Gebiet und hoffe auf ein paar Denkanstöße.

Vielen Dank!
 
Saskia_19

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2012, 10:28     Titel:
  Antworten mit Zitat      
Hat keiner eine Idee oder Denkanstoß für mich?
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2012, 10:54     Titel:
  Antworten mit Zitat      
Hallo Saskia,

zu 1)
was spricht dagegen, mit
Code:
M=csvread('test,csv');

die gesamte Datei einzulesen?

zu 2)
Code:
idx=find(3*M(1:end-3,1)-M(2:end-2,1)-M(3:end-1,1)-M(4:end,1)==0)

findet jeweils den Index des ersten Elements einer Viererfolge.

Gruß
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Saskia_19

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2012, 13:24     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort!

Wie kann ich es nun bewerkstelligen, die einzelnen Zeitstempel in Simulink derart zu integrieren, dass solange kein Paketverlust stattfindet (vier Werte untereinander gleich), diese verwendet werden? Falls ein Paketverlust festgestellt wird, sollen solange die alten gültigen Werte verwendet werden, bis wieder gültige ankommen.
Bin mir noch nicht so recht der Verbindung von Matlab und Simulink bewusst, besser, wie ich in Simulink erstellt Modelle mit in Matlab erstellten Code anspreche bzw. erweitere.

Vielen Dank!
 
Saskia_19

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 13:49     Titel:
  Antworten mit Zitat      
Hallo zusammen,
bin ein klein wenig weiter gekommen. Bestimme zuerst die Zeilenanzahl der CSV-Datei. Falls diese größer als 620000 ist, soll diese auf 620000 beschränkt werden. Die Einschränkung muss ich aufgrund eines sonst geworfenen Speicher-Fehlers machen. Anschließend wird die erste Spalte der CSV ab Zeile 30 eingelesen und die Anzahl der Pakete bestimmt. Des Weiteren wird der Index der ersten von 4 aufeinanderfolgenden korrekten Pakete erzeugt.

Code:

fid = fopen('log-1.csv','rt');
data = fread(fid,inf,'*uchar');
fclose(fid);
Zeilen_csv = sum(data == sprintf('\n'));
if Zeilen_csv > 620000
    Zeilen_csv_korrigiert = 620000
else
    Zeilen_csv = Zeilen_csv_korrigiert
end
M = csvread('log-1.csv',30,0,[30 0 Zeilen_csv_korrigiert 0]);
Pakete_gesamt = size(M,1)
id_kein_Verlust = find(3*M(1:end-3,1)-M(2:end-2,1)-M(3:end-1,1)-M(4:end,1)==0);
Pakete_valide = size(id_kein_Verlust,1)*4
Pakete_Verlust = Pakete_gesamt - Pakete_valide
 


Frage: Wie kann man es in Erweiterung hierzu so realisieren, wenn kein Index ausgegeben wird, wieviel aufeinanderfolgende Pakete korrekt sind und wieviel nicht?

Bsp:
100 --> korrekt, kein Paket fehlt, da vier aufeinander gleich
100
100
100
101 --> 2 Pakete korrekt, 2 Pakete fehlen (für die 2 fehlenden Pakete sollte solange der Wert des letzten korrekten Paketes verwendet werden, bis neues korrektes Paket kommt)
101
102 --> 1 Paket korrekt, 3 Pakete fehlen
--> 8 Pakete fehlen
105 --> 1 Paket korrekt, 3 Pakete fehlen
106 --> korrekt, kein Paket fehlt, da vier aufeinander gleich
106
106
106

Vielen Dank für Ihre Hilfe!
 
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 - 2025 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.