Verfasst am: 17.04.2015, 20:56
Titel: vektor erfullt Grenzwertbedingung diesen teil in array
Hallo zusammen
Ich Habe ein Matrix
eine Spalte von dieser überschreitet 3bis 5 mal einen Grenzwert
Ich möchte gern sagen
Zelle{i} = VEKTOR(Vektor> Grenzwert) & VEKTOR länger als 15000
wenn VEKTOR kürzer soll die unterschreitung ignoriert werden und bis zur nächsten gewartet werden.
hat einer evtl eine Schöne Idee? ich versuch schon verschiedene Verschachtlungen aber komm nicht weit.
das sieht nach einem guten Ansatz aus.
In der Fragestellung vermisse ich nun die Information, was der Code genau machen soll bzw. inwiefern er nicht das macht, was er soll.
Die Länge eines Vektors kann mit numel oder length bestimmt werden, aber das ist wohl nicht das Problem?
Ich hab eine länge von 120.000 werten inerhalb komt es 3 bis 5 mal für etwa 15.000 werten zu einer grenzwert überschreitung.
ErgebnissErgebnis soll nun sein
cellarray= {[n x a] [n x b] [n x c] [nx d] }
Problem ist es funktioniert genau solange bis der gw 2mal hinter nander gegreuzt wird oder ich nich 4 matrizen Bekomme, daher die Idee mit dem zählen aber hier fèhlt mir der Funke.
Zur zeit ermittel ich die Flanken und sag wenn die differenz zugering ist kick diese raus, aber wenn nun nicht mit einer positiven angefangen wird sondern mit der negativen ist alles kaputt.
Ich denke, so etwas in der Art könnte gemeint sein:
Code:
x = (0:0.01:4*pi)';
v = sin(x); % Beispielvektor
gw = 0.5; % Grenzwert
log_v = v > gw; % logischer Vektor: 1 für Werte in v, die gw überschreiten; sonst 0
dv = diff(log_v);
start_idx = [1; find(dv==-1)+1];
end_idx = [find(dv==1); size(v,1)];
sz = size(start_idx, 1);
c = cell(1,sz); % pre-allocate for ii = 1:sz
c{1,ii} = v(start_idx(ii):end_idx(ii)); % Cell-Array mit den Werten, die gw einhalten end
naja n und a bis d sind variaben
n ist in jeder konstant und a bis d soll heisen dass alle unterschiedlich lang sein können.
Ich hab mal ein bild Ran gesetzt da Seht ihr 3 Spalten geplottet ich will nun 4 weile haben, start wenn 85% von blau erreicht sind stopp nach 15000 Frames
wenn aber nur 2 oder 3 plateaus da sind sol es ebenfalls funktionieren
Danke für eure mühen
KEH
FZ0.jpg
Beschreibung:
blau = Der vektor der das Zuschneiden bestimmt und zwar wenn 85% seines (max erreicht sind) grün u rot sollen dann mit zugeschnitten werden
ifmax(size(idx_Steigend)) < max(size(idx_Fallend))
start_idx=[201, idx_Steigend(1:end)];
else
start_idx=idx_Steigend;
end
end_idx=idx_Fallend;
for ii = 1:1:length(idx_Fallend)
Matrix_cut1{iFile,ii} = Matrix(1:6,start_idx(ii)-100:end_idx(ii)+200); % Cell-Array mit den Werten, die gw einhalten end
sowas ist eigentlich was für den debugger.
was ist denn iFile? das kommt bei dir nicht vor. solange das beispiel nicht lauffähig ist kann ich da nur raten.
_________________
Folder1 ='C:\HSA_Projekte\ZSA\Rohdaten';
File = dir(Folder1);
FileName = {File.name};
FileName(strncmp(FileName, '.', 1)) = []; % Remove files with leading .
Matrix_cut1 = cell(length(FileName),10);
for iFile=1:length(FileName)
%% Dateneinlesen % Initialize variables.
filename = ['C:\HSA_Projekte\ZSA\Rohdaten\' FileName{iFile}];
delimiter = ',';
% Format string for each line of text:
formatSpec = '%f%f%f%f%f%f%[^\n\r]';
% Open the text file.
fileID = fopen(filename,'r');
% Read columns of data according to format string.
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'EmptyValue' ,NaN, 'ReturnOnError', false);
% Close the text file. fclose(fileID);
% Allocate imported array to column variable names % FX0 FY0 FZ0 MX0 MY0 MZ0 for i= 1:6
Matrix(i,:) = dataArray{:, i};
end
ifmax(size(idx_Steigend)) < max(size(idx_Fallend))
start_idx=[201, idx_Steigend(1:end)];
else
start_idx=idx_Steigend;
end
end_idx=idx_Fallend;
for ii = 1:1:length(idx_Fallend)
Matrix_cut1{iFile,ii} = Matrix(1:6,start_idx(ii)-100:end_idx(ii)+200); % Cell-Array mit den Werten, die gw einhalten end
ok das ist schonmal lauffähig. reproduziert den fehler aber nicht
dein cell array hat ja dann die diemension von anzahl der files x anzahl von idx fallend. irgendwas davon muss also groß werden in deinen daten. die anzahl der files steht ja fest also würde ich mal auf das andere tippen.
falls du da an speicher probelme kommst kann man vieleicht gleich nur die matriten speichern die deinen anforderungen genügen anstatt alle und dann später zu sortieren. das kann aber dann langsamer werden vielleicht. das müsste man ausprobieren.
die mittlere forschleife kann man auch ersetzen durch
im dir befehl kann man auch datei endungen mit angeben das er nur txt dateien laden soll. (*.txt) kannst ja mal in der doc gucken. dann muss man nicht die punkte entfernen. die cell vorher anzulegen ist zwar nett gemeint spaart aber ja nicht wirklich was wenn du sie nicht gleich in der richtigen größe anlegst.
grüße winkow
_________________
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
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.