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

vektor erfullt Grenzwertbedingung diesen teil in array

 

KEH
Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 17.04.2015, 20:56     Titel: vektor erfullt Grenzwertbedingung diesen teil in array
  Antworten mit Zitat      
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.

Danke
KEH
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.04.2015, 22:12     Titel:
  Antworten mit Zitat      
Hallo,

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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 17.04.2015, 22:36     Titel:
  Antworten mit Zitat      
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.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.04.2015, 22:50     Titel:
  Antworten mit Zitat      
Hallo,

und was sollen n und a-d sein? Das wären dann ja auch nur die Dimensionen der Matrizen. Welche Werte sollen sie denn haben?

Leider ist mir die weitere Beschreibung auch nicht verständlich.

Vielleicht wäre ein (kleineres) Beispiel hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 18.04.2015, 01:37     Titel:
  Antworten mit Zitat      
Hallo zusammen,

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

Edit: Aus c kann man dann die Vektoren mit weniger als 15000 (zusammenhängenden) Werten löschen.

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 20.04.2015, 07:53     Titel:
  Antworten mit Zitat      
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

Download
 Dateiname:  FZ0.jpg
 Dateigröße:  20.57 KB
 Heruntergeladen:  266 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 20.04.2015, 08:21     Titel:
  Antworten mit Zitat      
@ seban

Dein Ansatz ist gut
Problem ist wenn der grenzwert nach dem ersten erreichen noch mal flackert (unterschritten wird) soll die Aufzeichnung weiter gehn
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 20.04.2015, 13:06     Titel:
  Antworten mit Zitat      
ok ich hab fast was =)

kann mir noch einer verraten wie ich ein CellArray kürze
Bedingung soll sein:
lösche alle Zellen die eine matrix kleiner als 15000x6 beinhalten

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.04.2015, 13:39     Titel:
  Antworten mit Zitat      
Hallo KEH,

Code:
remove = cellfun('size', C, 1) < 15000 | cellfun('size', C, 2) < 6;
C(remove) = [];

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 20.04.2015, 14:00     Titel:
  Antworten mit Zitat      
Code:
FZ0 = Matrix(3,:);
log_Z0 = FZ0 > 100;
idx_Steigend = find(diff(log_Z0)>0)+1;
idx_Fallend = find(diff(log_Z0)<0)+1;

if max(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

remove = cellfun('size', Matrix_cut1, 1) < 15000 | cellfun('size', Matrix_cut1, 2) < 6;
C(remove) = [];


wenn ich das laufen lasse explodiert meine Matrix_cut1 sie bekommt 38mio zellen
sieht einer aus dem aus schnitt was?
der ausschnit läuft 70mal durch
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.04.2015, 14:08     Titel:
  Antworten mit Zitat      
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.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 20.04.2015, 14:53     Titel:
  Antworten mit Zitat      
lauffähig:
Code:
Z0 = 0.04065; %höhe der Platte 40,65mm

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

% Clear temporary variables
clearvars filename formatSpec fileID dataArray ans;

%%
FZ0 = Matrix(3,:);
log_Z0 = FZ0 > 100;
idx_Steigend = find(diff(log_Z0)>0)+1;
idx_Fallend = find(diff(log_Z0)<0)+1;

if max(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

remove = cellfun('size', Matrix_cut1, 1) < 15000 | cellfun('size', Matrix_cut1, 2) < 6;
C(remove) = [];


end



und 2 test daten aller dings multipriziert sich der fehler bei mehr daten

MHPZA00037M11.txt
 Beschreibung:

Download
 Dateiname:  MHPZA00037M11.txt
 Dateigröße:  6.98 MB
 Heruntergeladen:  344 mal
MHPZA00014M11.txt
 Beschreibung:

Download
 Dateiname:  MHPZA00014M11.txt
 Dateigröße:  7.02 MB
 Heruntergeladen:  294 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.04.2015, 15:25     Titel:
  Antworten mit Zitat      
ok das ist schonmal lauffähig. reproduziert den fehler aber nicht Smile
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
Code:
Matrix = cell2mat(dataArray(1:6))';

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
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 20.04.2015, 15:38     Titel:
  Antworten mit Zitat      
abgefahren jetzt ging alles

mhh ich versuchs morgen noch mal
auf in die sonne Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 21.04.2015, 07:53     Titel:
  Antworten mit Zitat      
gut doch noch was
zu den zeilen
Code:
remove = cellfun('size', Matrix_cut1, 1) < 15000 | cellfun('size', Matrix_cut1, 2) < 6;
C(remove) = [];


ich glaube die löschen die zellen wenn das array größer wird als 6x15000

ich will aber in der zelle die matrix abfragen und löschen wenn sie kleine wird als 6x15000

gibt es also eine art MatrxFun ??? ich habs leider nicht raus bekommen
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.