ich finde den winkel besser als als die x und y kooridnaten zu vergleichen.
Wieso meinst du? Überseh ich dabei die Vorteile?
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 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....
Versteh ich das jetzt richtig, dass bei dem Beispielprogramm dass ich kurz hier erzeugt hab wäre dein Lösungsvorschlag nicht möglich oder?
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!
_________________
naja du kannst zb nach dem vorzeichenwechsel von + nach - suchen oder so mit
signdiff
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.
_________________
Sooo, erstmal vielen Dank für diesen Wertvollen Tipp!
Ich glaub so nah dran war ich noch nie!!
Nun stimmt der Endpunkt der Periode noch nicht ganz....
Code:
%% Programm bereinigen----------------------------------------------------- closeall clc clearall
%% 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
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!
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:
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:
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?!
_________________
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.
_________________
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
Vielen Dank schonmal!!!
Ohne dich wär ich vermutlich noch lang nicht so weit....
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
Verfasst am: 29.10.2015, 18:02
Titel: Doch noch nicht ganz gelöst
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?
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
_________________
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.