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

Luecken fuellen in Messpunkten

 

victor
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 07.10.2010, 10:56     Titel: Luecken fuellen in Messpunkten
  Antworten mit Zitat      
Hallo Leute,

vielleicht kann mir jemand bei meinem Problem helfen:

Ich plotte eine Reihe von Messpunkten. Anschliessend definiere ich eine Regressionsgerade die durch die Punkte geht und gleichzeitig definiere ich einen Bereich oberhalb und unterhalb der Regressionsgerade (Bild1).

Die punkte die ausserhalb meines definierten Bereichs liegen hau ich weg in dem ich diese Punkte als NaN setze. Danach bekomme ich Messdaten mit Luecken (s. Bild2).

Nun moechte ich diese Luecken fuellen (mit Punkten die aber innerhalb meines definierten Bereichs liegen). Mit Interpolation (Largrage) habe ich es probiert, ich bekomme aber die Positionen wieder die ich weg gehauen habe!!!

Ich moechte eigentlich nur die Luecken fuellen so dass ich innerhalb meines definierten Bereichs eine kont. Funktion bekomme.

Danke im voraus

Bild2.jpg
 Beschreibung:

Download
 Dateiname:  Bild2.jpg
 Dateigröße:  24.04 KB
 Heruntergeladen:  607 mal
Bild1.jpg
 Beschreibung:

Download
 Dateiname:  Bild1.jpg
 Dateigröße:  39.56 KB
 Heruntergeladen:  521 mal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.10.2010, 11:05     Titel:
  Antworten mit Zitat      
Hallo

Interpolieren ist schon richtig an dieser Stelle.
Poste deine Code dazu.
Private Nachricht senden Benutzer-Profile anzeigen
 
victor
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 07.10.2010, 11:14     Titel:
  Antworten mit Zitat      
Also um meine "outliers" weg zu hauen mach ich folgendes:
Code:

for b = 1:num_sig
    if (mean_pos_right_1D(b) > least_squares_up(b) ||    mean_pos_right_1D(b) < least_squares_down(b))
        mean_pos_right_1D(b) = NaN;
    end
end
 


meine Daten sehen dann so aus:

420.6667 423.0000 421.6667 422.0000 428.6667 424.0000 424.3333 423.6667 424.0000 424.0000 425.6667 425.0000 425.3333 426.3333 NaN 425.3333 426.0000 426.6667 NaN NaN 430.3333 428.0000 425.6667 425.0000 426.6667 428.3333

um zu interpolieren mache ich folgendes:
Code:

function v = polyinterp(x,y,u)
n = length(x);
v = zeros(size(u));
for k = 1:n
    w = ones(size(u));
    for j = [1:k-1 k+1:n]
        w = (u-x(j))./(x(k)-x(j)).*w;
    end
    v = v + w*y(k);
end
 


wobei mein x so aussieht:
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

mein u muesste die gleiche groesse haben wie mein x, da ich den NaN Positionen neue Werte haben moechte...
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: 07.10.2010, 11:20     Titel: Re: Luecken fuellen in Messpunkten
  Antworten mit Zitat      
Hallo Victor,

wissenschaftlich am ehrlichsten wäre es, die Punkte mit dem maximal zulässigen Wert des akzeptierten Bereichs zu füllen. Also alle Punkte, die unterhalb der unteren Schranke liegen auf die untere Schranke zu setzen.
Etwas willkürlicher wäre eine lineare Interpolation:
Code:

t = 1:0.01:8;
x = sin(x);
x(rand(size(x)) < 0.05) = NaN;  % Test data

miss = isnan(x);
tt = t(not(miss));
xx = x(not(miss));
xx(miss) = interp1(tt, xx, find(miss), 'linear');
 

Jetzt sind NaNs durch die gemittelten Werte der benachbarten Punkte ersetzt worden. Dafür gibt es aber keine wirkliche physikalische Motivation, oder?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 07.10.2010, 11:34     Titel:
  Antworten mit Zitat      
Hallo Jan,

Ah OK ich versteh, ich glaub so muesste es auch gehen.
Naja...physikalische Motivation? Ich versuch eigntlich die ermittlten Positionen (x,y Werte) einer Arterienwand in einem Ultraschallbild zu definieren und die "Ausreisser" zu kompensieren. Hab mal ein Bild hochgeladen falls es dich interessiert.

Bild3.jpg
 Beschreibung:

Download
 Dateiname:  Bild3.jpg
 Dateigröße:  58.4 KB
 Heruntergeladen:  541 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: 07.10.2010, 11:39     Titel:
  Antworten mit Zitat      
Hallo Victor,

das ist eine hinreichend gute physikalische Motivation. Die Wände eine nicht arg zu pathologischen Aterie sind mathematisch gesehen glatt, also sollte jeder Punkt der Wand in erster Näherung der mittelwert der benachbarten Punkte sein.

Wenn Du aber pathologisch sehr auffällige Fälle betrachtest, kann Dir gerade diese Annahme der Glattheit einen großen Nachtteil einbringen, nämlich die pathologischen Details einfach heraus filtern.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 07.10.2010, 12:02     Titel:
  Antworten mit Zitat      
Hi Jan,

Danke fuer dein Code. Aber kann es sein dass sich der Vektor xx nach der Rechnung verkuertzt?
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: 07.10.2010, 22:04     Titel:
  Antworten mit Zitat      
Hallo Victor,

ja, ein Bug.
Code:
t = 1:0.01:8;
x = sin(x);
x(rand(size(x)) < 0.05) = NaN;  % Test data

valid = isfinite(x);
tt = t(valid);
xx(valid) = x(valid);   % FIXED: not xx=x(valid)
xx(~valid) = interp1(tt, xx, find(~valid), 'linear');
 

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 08.10.2010, 08:54     Titel:
  Antworten mit Zitat      
Ich galub da stimmt noch etwas nicht...

Code:
xx(~valid) = interp1(tt, xx, find(~valid), 'linear');


xx und tt haben nicht die gleiche Laenge Sad
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: 09.10.2010, 00:44     Titel:
  Antworten mit Zitat      
Hallo Victor,

und hast Du auch versucht, das Problem zu lösen? Oder wartest Du, bis ich das mache?

Nächster Versuch:
Code:
t = 1:0.01:8;
x = sin(x);
x(rand(size(x)) < 0.05) = NaN;  % Test data

valid = isfinite(x);
xfilled = x;
xfilled(~valid) = interp1(t(valid), x(valid), find(~valid), 'linear');
 

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 09.10.2010, 10:23     Titel:
  Antworten mit Zitat      
Hallo Jan, ich hab es schon probiert aber nicht geschafft...du bist doch der "Forum-Meister" Rolling Eyes

Übrigens dein Code funktioniert noch immer nicht, ich galube es heißt:
Code:
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: 11.10.2010, 22:16     Titel:
  Antworten mit Zitat      
Hallo Victor,

Ich habe keine Ahnung, wieso unter meinem Namen "Forum-Meister" steht. Das hat wohl nur mit der Anzahl der Posts zu tun. Wenn man aber miteinrechnet, wieviel falsche Berichtigungen ich in diesem Thread veröffentlich habe...

Zitat:
Übrigens dein Code funktioniert noch immer nicht, ich galube es heißt:
Code:

Leider habe ich Matlab nicht auf meinem Internetrechner laufen, so dass es immer einen gewissen Aufwand bedeutet, den geposteten Code zu testen. Sorry. Dies lief aber nun zumindest bei mir:
Code:
t = 1:0.01:8;
x = sin(t);
x(rand(size(x)) < 0.1) = NaN;  % Test data

valid = isfinite(x);
xfilled = x;
xfilled(~valid) = interp1(t(valid), x(valid), t(~valid), 'linear');

Und dann noch eine Erklärung des INTERP1-Befehls (damit ihn auch jeder selbst verbessern kann, falls es immer noch nicht stimmt):

Die validen Daten x(valid) liegen zu den Zeiten t(valid) vor. Interpoliere nun linear zu den Zeitpunkten mit nicht-validen Werten t(~valid) und ersetze diese Werte in xfilled.

Klappts nun besser? Wenn nicht, schreibe doch bitte die Fehlermeldung und dazugehörige Zeile.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 12.10.2010, 08:51     Titel:
  Antworten mit Zitat      
Moin Jan,

jetzt klappt es besser...Danke dir Very Happy
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: 12.10.2010, 23:21     Titel:
  Antworten mit Zitat      
Hallo Victor,

Klappt's nun "besser" oder sogar "gut"?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 13.10.2010, 08:43     Titel:
  Antworten mit Zitat      
Es klappt sogar sehr gut herr Forum-Meister Laughing

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