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

Ändern der Skalierung der Daten verzerrt sie als Kreis

 

TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 20.07.2015, 19:12     Titel: Ändern der Skalierung der Daten verzerrt sie als Kreis
  Antworten mit Zitat      
Hallo zusammen,

ich stehe vor einem Problem und bin mir nicht sicher, woran es liegen kann.
Ich habe Datensätze von Rundheitsmessungen.

Ich würde die Datensätze gern im kartesischen Koordinatensystem als Kreise darstellen. Da die Abweichungen der Oberfläche nicht all zu groß sind, sieht man leider die Details nicht so gut, wenn man es als Kreis darstellt.
Also habe ich mal den Hintergrund abgezogen, um so die Skalierung zu ändern (siehe angehängte Beispielbilder).
Wenn ich das tue kommt jedoch ein Problem auf, dass die Daten nicht als Kreis dargestellt werden, sondern verzerrt als Zacken dargestellt werden.
Zur Umwandlung habe ich sowohl die pol2cart Funktion als auch selbst mit sin und cos umgerechnet. Ergibt immer das gleiche Bild.
Den Hintergrund ziehe ich wie folgt ab:
Code:
y1 = y1 - min(y1)


Hat jemand eine Idee, woher das kommt? Vielleicht bin ich ja nicht der Erste, der vor diesem Problem steht. Oder ist es ein bekanntes Problem in der Berechnung o.Ä.?
Ich wäre für jeden Hinweis dankbar.

Beispiel2.png
 Beschreibung:

Download
 Dateiname:  Beispiel2.png
 Dateigröße:  855.93 KB
 Heruntergeladen:  376 mal
Beispiel1.png
 Beschreibung:

Download
 Dateiname:  Beispiel1.png
 Dateigröße:  780.02 KB
 Heruntergeladen:  413 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.07.2015, 08:27     Titel:
  Antworten mit Zitat      
Hallo,

du verschiebst die Daten ja nicht nur, sondern veränderst auch die Darstellung (hier wäre interessant, wie die Darstellung überhaupt erzeugt wird).
Es ist gut möglich, dass die Abweichungen in der Darstellung einfach nur daran liegen, dass du quasi hineinzoomst. Wenn du in der zweiten Darstellung die Skala änderst, sieht es vermutlich wieder besser aus.

Grüße,
Harald
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: 21.07.2015, 10:44     Titel: Re: Ändern der Skalierung der Daten verzerrt sie als Kreis
  Antworten mit Zitat      
Hallo TurboUlli,

An den Diagrammen fehlen Beschriftungen. Damit könnten sie auch eine Riesenschalnge darstellen, die einen Elefanten verschlungen hat. Alleine aus einem Diagramm kann man unmöglich herausfinden, wie die Daten erzeugt wurden und was zur Darstellung verwendet wurde. Deshalb kann man auch noch nicht sagen, wieso das Abziehen des Minimal-Wertes die beobachteten Veränderungen erzeugt.

Bitte poste den Code, der die Darstellungen reproduziert.
Der bisherige code macht genau das, was die Befehle vorschreiben. Wieso Du möchtest, dass die Zacken in einen andere Richtung verlaufen, musst Du also noch dazu erklären.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 21.07.2015, 13:40     Titel:
  Antworten mit Zitat      
Entschuldigt bitte die Unvollständigkeit. Ich versuche es mal weiter auszuführen Smile

Mein Code aufs Wesentliche herunter gebrochen sieht wie folgt aus:

Code:
% Daten ausgelesen
% c = Öffnungswinkel in Grad
% u = gemessener Wert (Abstand in µm)

c1 = data1(:, 4);
u1 = data1(:, 5);

% Etwas leeren Bereich wegschneiden, um eine bessere Skalierung zu haben
u1 = u1 - min(u1);

% Messwerte für ein kartesisches Koordinatensystem für eine Kreisform anpassen
% Grad von c1 in rad umrechnen nicht vergessen
[xk1, yk1] = pol2cart(c1.*(pi/180), u1);

plot(xk1, yk1)



Ich habe mal die Achsen im Bild beschriftet und das erste Beispiel noch mal hier angehängt.
Die y-Achse ist ein gemessener Abstandswert und die x-Achse ist der Öffnungswinkel des Tisches, der sich während der Messung dreht.

@Harald
Genau um die Darstellung geht es mir hier auch. Da die Variation im gemessenen Profil sehr klein ist, wollte ich quasi reinzoomen um die Feinheiten viel besser zu sehen. Dabei passiert es aber eben, dass es in der Kreisdarstellung verzerrt dargestellt wird, während es in der normalen Darstellung als Graph nicht verzerrt ist. Mit den unbeschnittenen Rohdaten passiert das ja nicht. Auch nicht, wenn ich sehr weit reinzoome. Der Fehler muss also irgendwo in der Berechnung liegen Sad

Beispiel11.png
 Beschreibung:

Download
 Dateiname:  Beispiel11.png
 Dateigröße:  479.93 KB
 Heruntergeladen:  325 mal
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: 21.07.2015, 14:47     Titel:
  Antworten mit Zitat      
Hallo TurboUlli,

Das ist der Code mit dem die vier Grafiken erzeugt wurden?
Das ist nur eine Grafik.
Wieso sieht man unten rechts ein Polar-Diagramm, obwohl die Daten per pol2cart in X/Y-Koordinaten transformiert wurden?
In diesem Polar-Diagramm ist eindeutig der Winkel nicht monoton. In dem gezeigten Code wird aber der Winkelverlauf nicht geändert, sondern nur der Radius.

So weit ich es sehe, erzeugt der gepostete Code nicht die Diagramme. Du hast eine Frage zum Code, den Du mit den Diagrammen erklären möchtest. Aber wenn beides nicht zusammen passt, ist eine Antwort nicht möglich.

Bitte poste den Code, der die gezeigten Diagramme produziert. Erst dann kann man das Problem finden. Bisher vermute ich, dass das obere Diagram einfach mit anderen Werten erstellt wurde.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 22.07.2015, 21:09     Titel:
  Antworten mit Zitat      
Hallo Jan,

entschuldige, ich wollte nicht zu viel unnötigen Code posten und habe es deshalb aufs Wesentliche beschränkt.
Was ich noch mache ist ein wenig formatieren und manuell mit einer selbst geschriebenen Funktion gestrichelte Kreise und Striche zu zeichnen, damit es mehr wie ein polar Diagramm aussieht.

Hier ist mal der gesamte Code:

Code:

% Daten auslesen
% z = const während der Messung
% c = Öffnungswinkel
% u = gemessener Wert

[dateiname, pfad] = uigetfile({'*.txt'}, 'Bitte Messdaten der ersten Messung auswählen');
data1 = dlmread([pfad, dateiname], '\t');  % EDITED, Jan: datei1 -> dateiname

z1 = data1(:, 3);
c1 = data1(:, 4);
u1 = data1(:, 5);

% Da die Messung 420° gedreht hat: c-Achse auf 360° beschneiden
c1 = c1 - min(c1);
puffer1 = find(c1 < 30, 1, 'last');
puffer2 = find(c1 > 390, 1, 'first');
z1 = z1(puffer1+1:puffer2);
c1 = c1(puffer1+1:puffer2);
u1 = u1(puffer1+1:puffer2);

% Etwas leeren Bereich wegschneiden, um eine schönere Skalierung zu haben
offset = 0.001;        % Offset, damit alle Daten über 0 liegen
u1 = u1 - (min(u1) - offset);

% Messwerte für ein kartesisches Koordinatensystem für eine Kreisform anpassen
% Grad von c1 in rad umrechnen nicht vergessen
[xk1, yk1] = pol2cart(c1.*(pi/180), u1);

% LSC (least squares circle) fitten
% das ist der blaue Referenzkreis bei der Kreisdarstellung der beschnittenen Daten
% an den Messdaten wird hier nichts verändert
% cp: Mittelpunkt, r1: Radius des Kreises
[cp1, r1] = fitcircle([xk1'; yk1']);  

% Kreise zentrieren
xk1 = xk1 - cp1(1);
yk1 = yk1 - cp1(2);

% LSC als Refkreise berechnen
winkel = 0 : 0.01 : 2*pi;
xlsc1 = (r1 * cos(winkel))';
ylsc1 = (r1 * sin(winkel))';

% Plot
% Rundheitsprofil - Kartesisches Koordinatensystem
plot(xk1, yk1, 'k', xlsc1, ylsc1, 'b')
% etwas Formatierung der Grafik
Grenze = 0.04;
% Funktion, um graue gestrichelte Kreise zu zeichnen
GridKreiseZeichnen(Grenze, 0.01);
axis([-Grenze, Grenze, -Grenze, Grenze]);

% Messdaten als normalen Graphen plotten
figure
plot(c1, u1)
grid on


Falls es jemand reproduzieren möchte und es sich näher anschauen möchte, habe ich im Anhang mal einen Datensatz hochgeladen. In meinen Beispielbildern vom Anfang habe ich ja zwei weitere Bilder, diese sind einfach von einem anderen Datensatz.

Rundheit_Messung1.txt
 Beschreibung:

Download
 Dateiname:  Rundheit_Messung1.txt
 Dateigröße:  2.59 MB
 Heruntergeladen:  417 mal
GridKreiseZeichnen.m
 Beschreibung:

Download
 Dateiname:  GridKreiseZeichnen.m
 Dateigröße:  723 Bytes
 Heruntergeladen:  315 mal
fitcircle.m
 Beschreibung:

Download
 Dateiname:  fitcircle.m
 Dateigröße:  7.48 KB
 Heruntergeladen:  302 mal
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: 24.07.2015, 07:35     Titel:
  Antworten mit Zitat      
Hallo TurboUlli,

Ich habe mir die Daten mal angeschaut.
Sie sehen auch ohne Abziehen des Minimal-Wertes für den Radius merkwürdig aus. Auch dann gibt es Zacken, die nicht in Richtung Mittelpunkt weisen. Darum glaube ich, dass es hier kein Matlab-Problem ist, sondern an der Messmethode prinzipiell etwas anders läuft als gedacht.

Hm, schon merkwürdig. Ich habe die Rechenschritte angeschaut und es kann gar nicht so sein, dass die Zacken nicht zum Mittelpunkt weisen. Also tun sie es auch nicht. Es sieht nur so aus! Der Mittelpunkt liegt nicht in der Mittel des Kreises, sondern sa, wo die Zacken hinweisen. Due siehst an der Kurve, bei der Du x gegen y aufzeichnest, dass sich der Radius ähnliche wie eine Sinuskurve verhält, wenn man ihn gegen den Öffnungswinkel aufträgt. Das bedeutet, dass dies ein sehr exzentrischer Kreis ist. Und dann stimmt alles wieder. Die Grafik ist also realistisch und sieht nur unerwartet aus.

Zitat:
entschuldige, ich wollte nicht zu viel unnötigen Code posten und habe es deshalb aufs Wesentliche beschränkt.

Alles okay! Es ist ja Deine Frage und es ist nur für Dich ein Problem, wenn es keine Antwort gibt. Es ist auch ganz üblich, dass man Nachfragen im Forum stellt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 24.07.2015, 07:48     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke schön für die Unterstützung!
Dann habe ich tatsächlich an der falschen Stelle angesetzt um das Problem zu erkennen. Smile

Schönen Gruß
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.