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

Vergleich der nachfolgenden Perioden mit der ersten Periode

 

Spoony0987
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.10.15
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 19.10.2015, 21:58     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:

ich finde den winkel besser als als die x und y kooridnaten zu vergleichen.

Wieso meinst du? Überseh ich dabei die Vorteile? Shocked

Winkow hat Folgendes geschrieben:
dein beispiel mit der schlange verstehe ich nicht. deine angehängten daten sehen nicht aus wie eine schlange.
ich sehe hier nur probleme wenn dein graph aus winkelsicht zwischenzeitlich rückwärts läuft.


Das meinte ich eigentlich auch Very Happy sorry, das war vielleicht bisschen doof beschrieben.
Aber da das Programm auch für beliebig andere Konturen laufen soll kann ich es mir leider nicht so einfach machen.... Sad
Versteh ich das jetzt richtig, dass bei dem Beispielprogramm dass ich kurz hier erzeugt hab wäre dein Lösungsvorschlag nicht möglich oder?

Code:
subplot(1,2,1)
K=(rand(10,2)).*10;
K(10,1)=K(1,1);
K(10,2)=K(1,2);
plot(K(:,1),K(:,2),K(1,1),K(2,1),'r--+');

X=K(:,1);
Y=K(:,2);

xm=mean(X);
ym=mean(Y);
r=sqrt((Y-ym).^2+(X-xm).^2);
alpha=atan2(Y-ym,X-xm);
% plot(1:numel(alpha),alpha)

theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);

subplot(1,2,2);
polar(alpha,r)


Was mich natürlich auch noch schwer intressieren würde, wie lese ich denn die Zeilennummer aus wenn die Kontur einmal rum ist? (Unter Berücksichtigung dass die Koordinaten nicht genau gleich sind sondern nur sehr nah beieinander)
Vorallem das ganze auch noch bei einer zweispalten Matrix?

Danke dir und mal noch ein schönen Abend!
_________________

Cheers Patrick
B. Eng.
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.10.2015, 00:19     Titel:
  Antworten mit Zitat      
naja du kannst zb nach dem vorzeichenwechsel von + nach - suchen oder so mit sign diff und find
sign und diff darum damit du nur von + nach - und nicht von - nach + suchst. und jedes mal wo das auftritt bist du einmal rum
darum finde ich den winkel besser weil man damit einfacher sagen kann ob man nur in der nähe ist oder wann man drüber ist. das ganze funktioniert auch mit anderen geometriene. solange es eine stelle giebt an der vom mittelpunkt aus gesehen die kurve nicht 2 mal beim selben winkel hintereinander liegt. dann ist diese stelle halt der punkt an dem du einmal rum bist. und ich denke so eine stelle lässt sich ja bei vielen konturen finden vor allem da ja der "mittelpunkt" nur irgendwo innheralb der kontur liegen muss.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Spoony0987
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.10.15
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 20.10.2015, 13:18     Titel:
  Antworten mit Zitat      
Sooo, erstmal vielen Dank für diesen Wertvollen Tipp!
Ich glaub so nah dran war ich noch nie!! Very Happy

Nun stimmt der Endpunkt der Periode noch nicht ganz....
Code:
%% Programm bereinigen-----------------------------------------------------
close all
clc
clear all

%% Datenpunkte laden
load('XY_550_5_2D')
%% Vektorerstellung bzw. Matrixaufsplittung
x = abs(PosFbk(:,1));           % Erstellung eines Vektors der
                                % absoluten Positionsfeedback der X-Achse
                               
y = abs(PosFbk(:,2));           % Erstellung eines Vektors der
                                % absoluten Positionfeedback der Y-Achse
                               
%% Startpunkt SP der ersten Periode

SPtheox = PosFbk(1,1);          % Theoretische Startpunkte
SPtheoy = PosFbk(1,2);

    I1=find(y>SPtheoy,1);       % Möglicher Startpunkt
    I2=find(x>SPtheox,1);       % Möglicher Startpunkt
    if   I1<=I2;
         I =I2;
    else
         I =I1;                 % Startpunkt der Periode
    end

ZeitSP= Time(I-1,1);            % in Sec (Zu welcher Zeit die Periode anfängt)
SP=PosFbk(I-1,:);               % Ein Punkt Bevor Anlage los fährt als Vektor

%% Bereinigung der Messdaten

PosFbk=PosFbk(I:end,:);             % Matrix beschneiden

%% Vektor überschreiben
x = abs(PosFbk(:,1));           % Erstellung eines Vektors der
                                % absoluten Positionsfeedback der X-Achse
                               
y = abs(PosFbk(:,2));           % Erstellung eines Vektors der
                                % absoluten Positionfeedback der Y-Achse
                               

%% Endpunkt EP der ersten Periode

% Umrechnen in Polarkoordinaten

subplot(1,2,2)
X=x(I:end);
Y=y(I:end);
plot(X,Y)

subplot(2,2,1);
xm=mean(X);
ym=mean(Y);
r=sqrt((Y-ym).^2+(X-xm).^2);
alpha=atan2(Y-ym,X-xm);

beta=sign(alpha);
gamma=diff(beta);
delta=find(gamma==2,5);

plot(1:numel(alpha),alpha)
subplot (2,2,3);
polar(alpha,r)

IP1=delta(1,1);
P1=PosFbk(IP1,:);
IP2=delta(2,1);
P2=PosFbk(IP2,:);

T=IP2-IP1;
EPI=I+T;

EP=PosFbk(EPI,:)
 


EP sollte nun gleich SP sein ist er aber leider nicht und ich komm nicht drauf warum....
wobei ich eigentlich das sign und diff usw sehr schlüssig finde und denke auch dass das funktionieren sollte! Sad

Grüße
_________________

Cheers Patrick
B. Eng.
Private Nachricht senden Benutzer-Profile anzeigen
 
Spoony0987
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.10.15
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 20.10.2015, 14:39     Titel:
  Antworten mit Zitat      
Muss ich vielleicht den Endpunkt der Periode aus den Polarkoordinaten lesen und die diesen dann erst in Koordinaten umrechnen?!
_________________

Cheers Patrick
B. Eng.
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.10.2015, 15:27     Titel:
  Antworten mit Zitat      
hallo
was mir aufgefallen ist:
Code:
PosFbk=PosFbk(I:end,:);  

hier schneidest du die ersten elemente weg
Code:
X=x(I:end);
Y=y(I:end);

hier schneidest du nochmal so viele elemente weg.
Code:
EPI=I+T;
EP=PosFbk(EPI,:)

und noch einmal.
das ist glaube ich falsch.
zu deinem problem. am anfang deiner messung sind dei werte ein wenig komisch. wenn du nicht den ersten punkt nimmst sondern punkte weiter hinten stimmt deine messung.
bsp:
Code:

T=IP2-IP1;
PosFbk(200:T:200+5*T,:)
 

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Spoony0987
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.10.15
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 21.10.2015, 12:34     Titel:
  Antworten mit Zitat      
Hey Winkow,

Winkow hat Folgendes geschrieben:

zu deinem problem. am anfang deiner messung sind dei werte ein wenig komisch. wenn du nicht den ersten punkt nimmst sondern punkte weiter hinten stimmt deine messung.
bsp:
Code:

T=IP2-IP1;
PosFbk(200:T:200+5*T,:)
 


Also mit dem wegschneiden, das ist mir bereits selber aufgefallen, danke
Code:
PosFbk(200:T:200+5*T,:)

was möchtest du mir damit genau sagen? ich bekomme dadurch 6 XY-Werte,
welche sich alle sehr ähnlich sind, da ja wenn ich das richtig versteh ab dem Punkt 200 die Periode 5 weitere male durchläuft, richtig?

Verstehe ich dich also richtig dass du mit "Punkte weiter hinten", meinst du statt den Punkt SP soll ich zum Beispiel SP+z wobei z irgendein beliebiger Wert ist nehmen?!
_________________

Cheers Patrick
B. Eng.
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: 21.10.2015, 12:39     Titel:
  Antworten mit Zitat      
ich wollte darauf hinweisen das die periode stimmt. bei deinen daten ist das immer so 1075 rum. aber anscheinend sind die ersten paar werte ein wenig komisch. stell es dir so vor das der typ erstmal auf die rennbahn läuft und dann erst nach ein paar metern in der richtigen spur ist. .... so veranschauliche ich mir das jedenfalls. du schneidest ja am anfang den teil weg wo er sich nicht bewegt. aber anscheinend ist er da auch noch nicht in der richtigen spur und brauch noch ein paar elemente bis er in der richtigen spur ist. ab da kannst du dann die perioden auch vergleichen. vorher kommt irgendwie murks raus. warum das so ist ist aber ehr eine frage wie die messung abgelaufen ist und so weiter. das ist kein mathematisches problem.... glaube ich jedenfalls.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Spoony0987
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.10.15
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 21.10.2015, 14:19     Titel:
  Antworten mit Zitat      
Ja ich habe es nochmal ein wenig umkonstruiert:
Code:

u=20;                              % Verschiebung um spätere Messwerte zu nehmen
delta=find(gamma==2,5);
TA=diff(delta);                  % Die Periodendauer der Perioden
T=max(TA);                     % gefällt mir noch nicht ganz da ich nicht weiß ob das bei allen Messdaten der Fall ist
PG=PosFbk(u:T:end,:);     % Startpunkt der ersten und Endpunkte aller Perioden
PEz=PG(2:end-1,:);          % Startpunkt der ersten Periode und letzter Punkt weggeschnitten
EP=PG(1,1);                    % Endpunkt der Ersten Periode
diff(PG)                           % Zur Kontrolle wie genau bzw ob es die richtige Periodendauer ist


Durch das Diff konnte ich schauen wie Genau und ob es die richtige Periodendauer ist. Das hab ich gemacht in dem ich einfach bei PG ein T+1 oder T-1 gemacht hab(rumprobiert), sind die diff-Werte größer geworden --> ist die Periodendauer ungenauer...

Dass die ersten Punkte Murks sind liegt vermutlich schwer an der Beschleunigung des Systems bis es in Schwung kommt --> Da das System geregelt ist kommt es dann irgendwann zu vernünftigen Werten.
Darüber muss ich dann wohl mal noch Diskutieren... Aber Danke schonmal für den Tipp.

Wenn ich nun alle weiteren Perioden auslesen möchte, um diese mit der Ersten zu vergleichen, wie geh ich da vor?
Ich wollte es mir einfach machen und hab folgendens programmiert:
Code:

Periode1=PosFbk(u:T,:); % Meine erste Konturfahrt

for i=u:T:length(PosFbk)
Periode(i+1)=PosFbk(i+1:T,:); % Alle weiteren Konturfahrten ab der zweiten
end


Aber es scheint als wäre es doch nicht so einfach...
erstens Kommt der Fehler dass A(I)=B nur geht wenn B und I gleich groß von der Elementenzahl sein muss und dann kommt noch ein Wiederholbarkeitsfehler...

Wie mach ich das also dass ich als neue Vektoren:
Periode1
Periode2
Periode3
.
.
.
Periodei
bekomme?
Oder muss ich die garnicht zwingen auslesen um diese mit der ersten Periode zu vergleichen??

Also so langsam kannst du fast schon Geld verlangen Very Happy
Vielen Dank schonmal!!!
Ohne dich wär ich vermutlich noch lang nicht so weit....

Gruß
_________________

Cheers Patrick
B. Eng.
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: 21.10.2015, 14:54     Titel:
  Antworten mit Zitat      
wo deine perioden anfangen hast du schon in delta gespeichert.
Zitat:
Wie mach ich das also dass ich als neue Vektoren:
Periode1
Periode2
Periode3

sowas ist sehr schlecht und ich würde stark davon abraten. du versucht da einen index im namen zu verstecken. ein index sollte aber immer als index benutzt werden.
Zitat:
Code:
for i=u:T:length(PosFbk)
Periode(i+1)=PosFbk(i+1:T,:); % Alle weiteren Konturfahrten ab der zweiten
end

das ist schon fast richtig. allerdings versucht du hier wie in der fehlermeldung zu sehen einem element aus periode mehrere elemente zuzuordnen. das geht natürlich nicht.

sowas hier in der art müsste aber gehen
Code:
for k=1:numel(delta)-1
Periode{k}=PosFbk(delta(k):delta(k+1)-1,:)
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Spoony0987
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.10.15
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 29.10.2015, 18:02     Titel: Doch noch nicht ganz gelöst
  Antworten mit Zitat      
Hallo,

ich dachte soweit wäre jetzt mein Programm fertig, aber ich habe da ein kleines Problemchen...
Um dieses Problem zu lösen muss ich unbedingt genaustens verstehen was es mit den Polarkoordinaten auf sich hat....

Ich habe ein Alpha Vektor, der fängt bei -pi/2 größer, läuft über die 0 drübert bis zu +pi
direkt danach gibt es ein Vorzeichenwechsel von +pi auf -pi und dann läuft er danach wieder hoch über 0 bis +pi
Warum ist das so und warum fängt es bei -pi/2 an?

Warum ich das wissen will?
Ich bin bis lang her gegangen und habe meine Periodendauer T (gemittelt und gerundet aus der Summe aller Perioden) einfach in einer Schleife benutzt um von einem Startpunkt im Positionsvektor immer einzelne neue Vektoren mit der länge T raus geschnitten....
Problem dabei ist aber, dass bei manchen Konturfahrten zum Beispiel statt T=1075 1076 Messpunkte gemacht wurde.... Das heißt ich vergleiche früher oder später die Falschen Messpunkte!

Meine Idee zur Problemlösung wäre jetzt ich schneide immer ab dem Punkt bei der die neue Periode startet 1075 raus, damit habe ich die Garantie dass ich immer die gleichen Messpunkte miteinander vergleich, lediglich wird bei der ein oder anderen Konturfahrt der letzte Messpunkt rausgeschmissen.

Wie realisier ich dass jetzt jedoch dass ich immer an dem Punkt wo die Kontur neu startet bzw. periode neu startet T rausschneide?

Überlegt habe ich mir das erst folgendermaßen:

Code:

xm=mean(x)
ym=mean(y)
r=sqrt((y-ym).^2+(x-xm).^2);
alpha=atan2(y-ym,x-xm);
beta=sign(alpha);
gamma=diff(beta);
delta=find(gamma==-2, length(PosFbk));

for k=1:numel(delta) %Vektor in dem Steht in welcher Zeile ein Vorzeichenwechsel stattfindet
 if k<numel(delta)
     Periode{k}=PosFbk(delta(k,:):end,:);
 else
     Periode{k}=PosFbk(delta(k,:):delta(k+1,:)-1,:);
 end
end
 


Mein Problem dabei ist jedoch jetzt dass wenn ich die Werte aus delta nehme dann ist dass ja nicht die nähe von meinem Startpunkt...?
Vermutlich hab ich auch ein rießen Knoten gerade im Kopf aber das reicht und führt dazu dass ich gerade nicht weiter komme...



Vielen Dank schonmal für Hilfe
Grüße
_________________

Cheers Patrick
B. Eng.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.