Verfasst am: 09.06.2010, 14:34
Titel: Mittelwert einer Geschwindigkeitsmatrix über for schleife
Hallo.
Vorab möchte ich sagen, dass ich sehr wenig Erfahrung mit Matlab habe.
Ich habe in einem Experiment 1000 Bilder einer Strömung gemacht und diese Bilder wurden als .VC7 Dateien abgespeichert.
Die Dateien fangen mit "B00000.VC7" an und gehen bis "B01000.VC7".
Teilweise fehlen Bilder zwischendurch.
In diesen Dateien sind z.B. die Geschwindigkeiten in x-Richtung und y-Richtung in einer Geschwindigkeitsmatrix abgespeichert.
Über diese Funktion kann ich die Dateien einlesen:
% Geschwindigkeitskomponenten u,w im experimentellen Kosy einlesen
ue = double(imx.Data(1:zeilen,1:spalten)) .* imx.ScaleI(1);
we = double(imx.Data(1:zeilen,spalten+1:(2*spalten))) .* imx.ScaleI(1);
% Achsen x, z im experimentellen Koordinatensystem einlesen
xe = ([1:zeilen]-0.5)*imx.Grid*imx.ScaleX(1)+imx.ScaleX(2);
ze = ([1:spalten]-0.5)*imx.Grid*imx.ScaleY(1)+imx.ScaleY(2);
% Ersetzten der 'Nullen' im Vektorfeld durch NaN (Not a Number)
indices = find((ue+we)==0);
ue(indices) = NaN;
we(indices) = NaN;
% Transponieren, damit Daten aussehen wie Davis-Daten (wenn in Matlab-Figure Axen % 'reverse' gesetzt und damit gewünschtes KOS angezeigt wird)
ue = ue';
we = we';
%'Ränder' = 1. Spalte stromauf und letzte Spalte stromab abschneiden
index_links = min(find(max(~isnan(ue))==1));
index_rechts = max(find(max(~isnan(ue))==1));
% Koordinatentransformation experimentell (e) -> global
u = ue;
x = -xe;
w = -we; % Bei Geschwindigkeiten muss hier kein Vz-Wechsel hin, bei RMS wohl!
z = -ze;
% dimensionslos machen mit Durchmesser
X = x./Diameter;
Z = z./Diameter;
%% Interpolation auf gewünschtes x/y-Grid % die Koordinaten aus den PIV-Aufnahmen sind "krumm", daher wird auf das % vorgegebene X,Z-Grid interpoliert
Da teilweise Bilder fehlen brauch ich ne if-schleife die dann weiter macht falls ein oder mehrere Bilder fehlen.
Wenn ich von i=1:10 laufen lasse sieht der letzte name so aus:
filename =B000010.VC7
sollte aber filename =B00010.VC7 so aussehen. Dafür bräuchte ich noch ne if-schleife.
Jetzt möchte ich die ganzen Geschwindigkeitsfelder aufsummieren und dann durch die entsprechende Anzahl teilen damit ich meine mittlere Geschwindigkeitssfeld bekomme und diese auch graphisch darstellen.
sollte aber filename =B00010.VC7 so aussehen. Dafür bräuchte ich noch ne if-schleife.
if schleift nix, das wird einmal ausgeführt und das war es dann mit dem if. Statt der Abfrage, ob i (schlechte Wahl für den Namen einer Variable, weil i*i = -1) nun größer ist als 9, 99, 999, 9999, ... könntest Du sprintf benutzen:
Wie kann ich vorher nen Zielordner definieren wo meine ganzen Daten drin sind?
Ich müsste dann wohl noch definieren das er nur die '.VC7' Dateien nimmt.
Um alle Dateien in einem Verzeichnis aufgelistet zu bekommen, gibt es den dir-Befehl. Den kannst Du auch nach bestimmten Dateiendungen oder Namen filtern lassen.
Halte ich grundsätzlich für relativ ungeeignet, da man ja gerade bei Messergebnissen die meißt einzelnen files alle in einen Ordner packt und dann ausliest.
Also ich würde erstmal alle (relevanten) Dateien des Ordners einlesen - in etwa so:
Code:
directory='verzeichnisname\'
%relativ zum m-file oder komplette Pfadangabe
Es bringt mir ja nichts die Datei einfach so einzlesen zu mal ich dann ne Fehlermeldung kriege.
Ich möchte ja die Geschwindigkeitsfelder der Dateien aufaddieren und dann durch die Anzahl der eingelesenen Dateien teilen damit ich meine mittleres Geschwindigkeitsfeld bekomme.
Das geht soweit ich weiss über eine for-schleife.
Code:
for k=1:numel(Daten)% Beginn der for-Schleife die soviele Durchläufe hat, wie Datensätze vorhanden sind
Aber er speichert nur die letzte Matrix unter uneu.
Wie könnte ich die einzelnen Geschwindigkeitsfelder auslesen und addieren?
Wäre über Hilfe sehr dankbar.
Gruß, Becks.
Einstellungen und Berechtigungen
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.