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

einen Trigger in eine Tabelle einfügen und bearbeiten

 

ml-beginner
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 22:37     Titel: einen Trigger in eine Tabelle einfügen und bearbeiten
  Antworten mit Zitat      
Hallo, bin erste seit ein paar Tagen bei Matlab!

Mein Problem:

Ich habe Werte x, y, z und einen Referenzsignal, wenn das Referenzsignal den wert 50 übersteigt, dann soll in der Ursprungstabelle eine 1 stehen in einer neuen Zeile und die 100 Werte vor der 1 und 200 werte nach der 1 sollen in eine neue Tabelle kopiert werden (als Block, weil es einen zeitlichen Verlauf hat) . Es können immer wenn das Referenzsignal überschritten wird eine neue Tabelle angelegt werden oder aber auch nur eine Tabelle und die Werte kommen alle untereinander.

Die Syntax für datei öffnen und tabelle erzeugen ist bekannt, aber wie kann ich den Code für finde alle über 50 und setzte 1 und kopiere 100 vor und 200 nach der 1???
Das ist mein Problem!

Ich danke schon mal jetzt für Eure Antworten!


Mfg
[/code]
Private Nachricht senden Benutzer-Profile anzeigen


ml-beginner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2009, 08:00     Titel:
  Antworten mit Zitat      
OK, wenn es zu komplex ist, dann eine vielleicht einfachere Frage:

Wenn ich in einer Spalte einen Wert gefunden habe, wie kann ich einen Programm schreiben das mir 100 Werte vor diesem Wert und 200 Werte nach diesem Wert als ein Block kopiert und diese mir in eine neue Spalte oder Tabelle einfügt?

Den rest bastelle ich mir schon zusammen... Wink

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.01.2009, 11:23     Titel:
  Antworten mit Zitat      
Hallo ml-beginner,

hier mal ein kleines Beispiel:

Code:
% Gegeben
ref = [45:60,45:60,45:60];
x = rand(size(ref))

% Vorbereitung
eins = zeros(size(ref))
stelle = 50;
vor = 2;  % bei Dir 100
nach = 4; % bei Dir 200

% Wo wird die stelle (50) überschritten (ref monoton)?
ind = find(ref>=stelle,1,'first');
% Mit 1 markieren
eins(ind) = 1;
% ausschneiden
x_ausschnitt = x(ind-vor:ind+nach);

% ODER:
% Wo wird die stelle überschritten (ref nicht monoton)?
ind_all = find(ref>=stelle)
ind_neu = find(diff(ind_all)>1)
ind = ind_all([1 ind_neu+1])
% Mit 1 markieren
eins(ind) = 1;
% ausschneiden
x_ausschnitt = zeros(length(ind),length(x));
for k = 1:length(ind)
    x_ausschnitt(k,:) = x(ind(k)-vor:ind(k)+nach);
end
x_ausschnitt


Wenn es nicht allzu oft vorkommt, dass die 50 überschritten wird, geht es ganz gut mit der for-Schleife. Sonst kann man das auch noch vektorisieren. Wenn die 50 nur einmal überschritten wird (-> ref monoton), reicht der obere Abschnitt ohne die Schleife.

Herzliche Grüße
Bijick

PS: Fragen mit Beispielcode werden im Allgemeinen schneller bearbeitet. Smile
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Strauße
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 07.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2009, 11:29     Titel:
  Antworten mit Zitat      
Puh komme mit deiner Fragestellung nicht so ganz klar, hier mal ein kleines Beispiel:

Code:

A=1:200; %Vektor mit den Einträgen 1 - 200 monoton steigend
ALIVE=1;
for i=1:length(A)
if A(i)>=50 & ALIVE==1
B=[A(1:i-1),A(i+1:length(A))];
C=i;
ALIVE=0;
end
end

Das müsste eigentlich funktionieren, wenn es das ist was du suchst
Private Nachricht senden Benutzer-Profile anzeigen
 
Strauße
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 07.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2009, 11:31     Titel:
  Antworten mit Zitat      
zu langsam... Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2009, 21:55     Titel:
  Antworten mit Zitat      
Erstmal vielen dank für Eure Antworten!!!

Richtig coole Lösungen.

@Strauße: Komme gerade mit Deine Lösung nicht zu recht, muß mal eine Nacht drüber schlafen.

@Bijick: Genau so habe ich es mir vorgestellt, danke! Muß noch etwas daran herumschrauben, aber schon sehr cool.
Aber an den Richtigen Datensätzen komme ich erst morgen wieder dran, und dort habe ich leider keinen Intenetzugriff, daher ausdrucken und dort ausprobieren!

Hier nochmal das Problem:

Es wurden Schwingungen gemessen, d.h. Sinuswellen.
Messtabelle hat a, b, c werte und ref wert, da acuh viel Rauschen gemessen wurde, muß man das erstmal alles los werden.
Daher, wenn ref über 50 geht, weil dann ist es ein definierter Impuls, dass ich zum auswerten brauche. Und da ich das abklingen und aufsteigen Brauche, daher die werte 100 vor ref und nach ref.
Also, wenn über 50, dann alle werte "a, b, c und ref" kopieren und in eine neue Tabelle einfügen.

Es ist ein Datensatz vom 0.5 Mio werten mal 4 Reihen, daher
1. schaft es Matlab überhaupt, wenn nicht dann muß ich zerstückeln
2. Vielleicht doch mit Vektoren arbeiten, oder?

So, jetzt mein neues Problem:

Ich habe die Daten als .dat, Origin oder als text dateien, wie kann ich es in eine Tabelle in Matlab einfügen oder in eine Matrix oder Stuktur, was wäre besser und wie geht es, bei der großen Menge?


Meine Ideen:

abstand ';';
newData=importdata(num2str(ort/name-der Datei), abstand);

obwohl ich beim Exportieren von Origin die Spalten dürch ";" getrennt habe, fügt Matlab die Werte als text in die Tabelle ein!
Sollte ich viellecht mit "textscan" arbeiten?
Wenn mit textscan, dann ein Bsp für eine Text datei die in eine <400x5 double> Matrix oder Tabelle eingefügt weden soll! Auch die Textdate besteht aus 5 Spalten die durch ";" getrennt sind und aus komma werte!


Ich danke euch für Eure Antworten!!!

Gruß
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 29.01.2009, 11:30     Titel:
  Antworten mit Zitat      
Hallo ml-beginner,

für die genauere Hilfe brauchen wir auch genauere Daten. Bitte poste mal einen kleinen Auschnitt aus der .dat- oder Textdatei. Davon hängt ab, wie man das einlesen muss. importdata ist für leichtere Fälle besser, für komplexere tendiere ich zu textscan.

Eine halbe Million Werte je Vektor sind erst mal kein Problem, es kommt noch darauf an, wie Du damit weiterarbeiten musst. Das sehen wir ja dann.

Dann wäre noch wichtig, wie oft circa die 50 überschritten wird. Eher 30 Mal oder eher 10000 Mal? Kann es vorkommen, dass sich die Bereiche überschneiden, die Du ausschneiden willst (d.h. Abstand der 50er in ref kleiner als 100 Werte)?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ml-beginner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2009, 21:42     Titel:
  Antworten mit Zitat      
Hallo Bijick!

Leider hab ich kein Exambel von der Datei hier.
Also
1. die kleinste Datei ist 913MB groß, hab heute gemerkt das Matlab nicht mehr als 400 MB schaft, daher hab ich die Datei gesplittet mit Unix...hab den Rechner laufen lassen und bin nach hause!

So, hier ein beispiel der .dat Datei


TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
TEXT TEXT TEST TEST TEXT
a/um b/um c/um ref 1Khz
0.234 3.0978 0.1233 23.0443 987
-0.7875 0.1232 -0.76543 80.34222 789
....

d.h auch die nachkomma stellen sind nicht immer gleich groß
-negative und positive werte sind durchmischt

und das ref signal wird 46 mal min überschritten, so viele Impulse muß es geben, aber das Problem habe ich mit einer IF-Scheife gelöst...
das grundgerüßt steht, vielleicht nicht schön Programmiert, aber dafür das es mein 5.Tag mit Matlab ist, finde ich es ganz gut.

So, jetzt schaffe ich leider nicht die Datei zu laden....

Wenn das noch steht dann läuft das ganze...

Danke!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
ml-beginner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2009, 09:25     Titel:
  Antworten mit Zitat      
Sorry, aber leider kann ich die genaue Datei hier nicht reinstellen...

Darf ich garnicht!!!

Aber, ist schon ok! Habe eine Lösung gefunden, auch wenn es nicht so obtimal Programmiert ist und auch mit for schleifen was eine weile dauert, ist es doch recht gut gelungen, dafür das es "mein erstes Matlab-Programm" ist Cool Very Happy Very Happy Very Happy Cool Cool

Danke, für Eure Hilfe, es war schon Richtungsweisend!!!

Gruß
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.