Verfasst am: 11.02.2015, 15:07
Titel: Vektoren auf eine Länge bringen und M+-SD Plotten
Hallo Zusammen
Ich habe 5Messwert Vektoren die Unterschiedliche längen aufweisen (1400 bis 1700 Messwerte (1000Hz Aufnahmen)) Diese muss ich nun der Längenach normalisieren (von 0 bis 100 Prozent der Zeit) und am Ende ein Plot raus werfen der den Mittelwert und die Standartabweichung zeigt.
Idee
- Intrpolieren
-Matrix mit 5 Spalten
-Mean und SD für jede zeile
Problem
- Interpolieren, macht für mich keinen Sinn noch mehr werte zu erstellen? oder gibt es eine alternative mit werten raushauen?
Bsp
- A( 1 2 3 4 5 6)
- B( 2 1 0 9
- C( 3 2 1 0 4 3 2 1)
interpolieren auf die länge 10, wie mach ich das bei 8 werten?
Ideen zur Kürzung auf 5 werte? ( in Bezug auf meine 1400 werte macht das wohl mehr sinn)
Matrix = (A B C)
Mean und SD bekomm ich dann wohl hin.
ich will tatsächlich die Vektoren:
A = [1x1400]
B = [1x1500]
C = [1x1430]
in eine Matrix
M = [3x1000]
schreiben OHNE etwas abzuschneiden also in Prinzip normieren aber nicht die Werte in der Matrix sondern die Länge der Vektoren
interp1 kann nicht extrapolieren. du bekommst dann nur lauter nan wenn du mit der maximal länge arbeitest. ich hab noch nicht ganz verstanden was bei dir die interpolations grundlage ist KEH. wenn du über den index interpolierst bleibt schneidest du entweder ab oder aber versuchst zu extrapoliren was aber nicht mit interp1 geht.
oben hast du irgendwas mit 100 % gesagt. ich würde dann vorschlagen mittels linspace eine gleiche grundlage der grenzen zu bilden für die zuordnung und dann mit der gewünschten anzahl der elemente zu arbeiten.
_________________
Ja interpolieren würde ich nehmen aus dem grund das ich indem fall menschen laufen lasse und mir die schritte anschaue, diese aber verschieden lange dauern.
Also der start und end wert eines jeden vektors die grenzen beschreiben.
Linspace klingt ganz interessant, kenn ich noch nicht, versuche ich morgen mal.
100% soll heißen egal wieviel Einträge der vektor hat es sind immer 100% die ich darstellen will
es wird nicht so richtig klar, an welcher Stelle der Fehler auftaucht. "Subscripted assignment dimension mismatch." heißt, dass die Größe der übergebenen Variablen nicht zusammenpasst.
kleine anmerkung: ich würde immer mit size arbeiten und der dimensions angabe und nicht mit length. length gibt immer die größte dimension aus. das ist aber nicht immer das gewünschte ergebniss.
_________________
Liegt es evtl daran das ich alles in einer schleife mache?
gibt es eine alter nativ variante wo ich die vektoren erst aus den daten sätzen auslese und dann die länge an passe (auserhalb der schleife) ???
wie setze ich es um aus den 5datein je 3 Vektoren auszulesen und extra variablen zu vergeben?
geht das alla [M num2str L]
bitte um Hilfeeeee
edit: Liegt es evtl daran das M sich in jedem loop ändert und Matlab damit Probleme zeigt? und ich das somit außerhalb der Schleife regeln muss.
wo ich wieder bei dr letzten frage der Umsetzung wäre.
ich finde das ganze sehr verwirrend. es ist schwer den fehler zu finden wenn dein programm nicht lauffähig ist.
oben hast du geschrieben das A die dimension 1x1400 hat
trotzdem kommen bezeichnungen wie
vor.
außerdem sollte size(A) nicht nur eine zahl zurück geben wie du in einem post geschrieben hast sondern 2. also entweder hast du die size funktion überschrieben oder das ergebniss nicht vollständig gepostet
einfächer wäre es wirklich wenn du ein lauffähiges beispiel postest das den fehler reproduziert. es müssen ja nicht deine daten sein. es reicht auch ein beispieldatensatz mit zufallswerten.
_________________
%% Filenamen aus dem Ordner in Vektor lesen
filesName = dir('C:\Users\Hannes Kaplick\Desktop\Stolper_Studie\Zugeschnittene_Daten\Auslese Daten');
nameName = {filesName.name};
for N=3:7
%% Datei einlesen
T = readtable([nameName{N}], 'Delimiter', '\t');
A = table2array(T);
% Leerzeilen finden ... [z, s] = size(A);
hlp = NaN(1, s);
log = false(z, 1); % pre-allocate for ii = 1:z
log(ii) = isequaln(A(ii,:), hlp);
end
idx = find(log);
% ... und entfernen
A(idx,:) = [];
X=A(:,1);
% Berechnung der Perturbations Grenzen [Min, ZA] = min(X(1:600)); % suche erstes Minima [Min, PA] = min(X(ZA+500:ZA+1400)); % suche nach dem ersten Minima das zweite
PA = PA + ZA + 500; % Entspricht´ Perturbation Anfang [Min, PE]=min(X(PA+500A+1600)); % Suche drittes minima
PE = PE + PA + 500; % Entspricht Perturbation Ende
A_Pert=X(PA:PE,:); % Ausschnitt der Perturbation aus der X-Koordinate des RHEE Markers
A_prePert=A(ZA:PE,:);
if N==3
A=A;
X1=A(PA:PE,1);
end if N==4
B=A;
X2=B(PA:PE,1);
end if N==5
C=A;
X3=C(PA:PE,1);
end if N==6
D=A;
X4=D(PA:PE,1);
end if N==7
E=A;
X5=E(PA:PE,1);
Error in SS_Grafikoutput (line161)
M(:,1)=interp1(1:size(X1),X1,linspace(1,size(X1),n(end)));
%% mir ist klar das das nicht die selbe länge ist da ich das ja alles auf eine länge bringen will
würde mich trotzdem über Vorschläge für eleganter Lösungen freuen speziell zum einlesen der Daten in der for / if schleife
Gruß und habt dank
KEH
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
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.