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

Vektoren auf eine Länge bringen und M+-SD Plotten

 

KEH
Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 11.02.2015, 15:07     Titel: Vektoren auf eine Länge bringen und M+-SD Plotten
  Antworten mit Zitat      
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 Cool
- 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.

Hoffe die Infos Sind Ausreichend
Gruß
KEH
Private Nachricht senden Benutzer-Profile anzeigen


Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2015, 19:00     Titel:
  Antworten mit Zitat      
Hallo,

interpolieren geht mit

Code:


Zur Datenreduktion kann man einen Vektor auf eine Matrix aufteilen und den Mittelwert bilden:

Code:

A = 1:25;
B = zeros(5);
B(:) = A;
mean(B)
 


Hilft Dir das weiter?

Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 11.02.2015, 19:39     Titel:
  Antworten mit Zitat      
Ne leider Gar nicht

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

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2015, 22:56     Titel:
  Antworten mit Zitat      
Hallo,

dann ist interp1 Dein Freund

Code:

n = 1:max([length(A) length(B) length(C)]);
M(:,1) = interp1(1:length(A), A,n);
M(:,2) = interp1(1:length(B), B,n);
M(:,3) = interp1(1:length(C), C,n);
 


Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Winkow
Moderator

Moderator



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

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: 11.02.2015, 23:29     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2015, 23:37     Titel:
  Antworten mit Zitat      
Hoppla,

stimmt, da hab' ich zu schnell geschossen ;-)

Erfolgreich interpolieren könntest Du mit

Code:

n = max([length(A) length(B) length(C)]);
M(:,1)=interp1(1:length(A),A,linspace(1,length(A),n(end)));
M(:,2)=interp1(1:length(B),B,linspace(1,length(B),n(end)));
M(:,3)=interp1(1:length(C),C,linspace(1,length(C),n(end)));
 


Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 12.02.2015, 14:09     Titel:
  Antworten mit Zitat      
So im test klapt das super

jetz das problem Schleife

ich les die daten aus einer txt schreib was ich brauch in vektoren. <kein problem

jetzt bin ich beim test

Code:
for N = 3:3
    L=N-2;
%% Datei einlesen
...

%% Daten aus Matrix in Vektoren
X=A(:,1);
Y=A(:,2);
Z=A(:,3);
RAA_X=A(:,4);
RAA_Y=A(:,5);
RAA_Z=A(:,6);
...

%% Perdubations ausschnitt

% Berechnung der Perturbations Grenzen
...

X_Pert=X(PA:PE); % Ausschnitt der Perturbation aus der X-Koordinate des RHEE Markers
X_prePert=X(ZA:PE);
% Zuschnitt der WinkelVektoren
PRAA_X = RAA_X(PA:PE);
URAA_X = RAA_X(ZA:PA);  
PRAA_Y = RAA_Y(PA:PE);
URAA_Y = RAA_Y(ZA:PA);
PRAA_Z = RAA_Z(PA:PE);
URAA_Z = RAA_Z(ZA:PA);
A=% hier das Problem
B=
C=
n = max([length(A) length(B) length(C)]);
M(:,1)=interp1(1:length(A),A,linspace(1,length(A),n(end)));
M(:,2)=interp1(1:length(B),B,linspace(1,length(B),n(end)));
M(:,3)=interp1(1:length(C),C,linspace(1,length(C),n(end)));

...
end


So sieht es aus
Problem ich will das ja einzeln machen
fehler:
Code:
Subscripted assignment dimension mismatch.


idee
Code:
M1(:,L)=interp1(1:length(A),A,linspace(1,length(A),n(end)));
M2(:,L)=interp1(1:length(B),B,linspace(1,length(B),n(end)));
M3(:,L)=interp1(1:length(C),C,linspace(1,length(C),n(end)));


Gibts da was eleganteres? oder ist das so richtig gedacht?

edit: fehler bleibt erhalten:
Code:
Subscripted assignment dimension mismatch.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 14:43     Titel:
  Antworten mit Zitat      
Hallo,

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.

Was gibt Dir "size(A)" aus?

Mit

Code:

M1(:,L)=interp1(1:length(A),A,linspace(1,length(A),n(end)));
M2(:,L)=interp1(1:length(B),B,linspace(1,length(B),n(end)));
M3(:,L)=interp1(1:length(C),C,linspace(1,length(C),n(end)));
 


erzeugst Du drei verschiedene Matrizen M1, M2, M3.

Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 12.02.2015, 15:38     Titel:
  Antworten mit Zitat      
Derfehler bezieht sich auf die zeile mit M1

Size(A) = 1355

ich will am ende meinen winkel in x y z in jeweils eine Matrix schreiben
und in spalte 1 den schritt spalte 2 den zwiten schritt ....
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: 12.02.2015, 15:40     Titel:
  Antworten mit Zitat      
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.
_________________

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: 13.02.2015, 09:41     Titel:
  Antworten mit Zitat      
Twisted Evil

In meiner for schleife steht folgendes

Code:

for n=3:7
l=n-2
...
PRAA_X = RAA_X(PA:PE);
URAA_X = RAA_X(ZA:PA);  
PRAA_Y = RAA_Y(PA:PE);
URAA_Y = RAA_Y(ZA:PA);
PRAA_Z = RAA_Z(PA:PE);
URAA_Z = RAA_Z(ZA:PA);
n = max([size(PRAA_X) size(URAA_X) size(PRAA_Y)]);
M(:,L)=interp1(1:size(PRAA_X),PRAA_X,linspace(1,size(PRAA_X),n(end)));
M(:,L)=interp1(1:size(URAA_X),URAA_X,linspace(1,size(URAA_X),n(end)));
M(:,L)=interp1(1:size(PRAA_Y),PRAA_Y,linspace(1,size(PRAA_Y),n(end))); ....
end
 


Fehlermeldung
Code:
Error using  .*
Matrix dimensions must agree.

Error in linspace (line 30)
    y = d1 + (0:n1).*(d2 - d1)/n1;

Error in SS_Grafikoutput (line 67)
M(:,L)=interp1(1:size(PRAA_X),PRAA_X,linspace(1,size(PRAA_X),n(end)));


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 Sad

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.
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: 13.02.2015, 13:14     Titel:
  Antworten mit Zitat      
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
Code:
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 Wink
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.
_________________

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: 16.02.2015, 10:23     Titel:
  Antworten mit Zitat      
so jetzt noch mal eine alter nativ variante die aber noch nicht ganz funktioniert.

Code:
clear all
close all
clc

%% 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+500RazzA+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);
         
end
end

%% Das mit den If abfragen funktioniert jetzt

n = max([size(X1) size(X2) size(X3) size(X4) size(X5)]); % hier kommt der Fehler X2 nicht vorhanden
M(:,1)=interp1(1:size(X1),PRAA_X,linspace(1,size(X1)));
M(:,2)=interp1(1:size(X2),URAA_X,linspace(1,size(X2)));
M(:,3)=interp1(1:size(X3),PRAA_Y,linspace(1,size(X3)));
M(:,4)=interp1(1:size(X4),PRAA_Y,linspace(1,size(X4)));
M(:,5)=interp1(1:size(X5),PRAA_Y,linspace(1,size(X5)));
% Hier soll alles auf eine länge gebracht werden

plot(M(:,1 bis 5) % hier sollen die 5Spalten geplotet werden
 


gut soweit so gut fehlermeldung ist
Code:
Error using  .*
Matrix dimensions must agree.

Error in linspace (line 30)
    y = d1 + (0:n1).*(d2 - d1)/n1;

Error in SS_Grafikoutput (line 161)
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



ich hab das mal auf ein vektor gekürzt aber zu jedem X gehören weitere spalten , also die Matrizen sind im Schnitt 6000x18

schon mal danke
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: 16.02.2015, 11:27     Titel:
  Antworten mit Zitat      
Code:
M(:,1)=interp1(1:size(X1),PRAA_X,linspace(1,size(X1)));
M(:,2)=interp1(1:size(X2),URAA_X,linspace(1,size(X2)));
M(:,3)=interp1(1:size(X3),PRAA_Y,linspace(1,size(X3)));
M(:,4)=interp1(1:size(X4),PRAA_Y,linspace(1,size(X4)));
M(:,5)=interp1(1:size(X5),PRAA_Y,linspace(1,size(X5)));


gut tauche size gegen length dann läufts

sorry für die verwirrenden Beiträge =D

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