Verfasst am: 31.10.2014, 13:01
Titel: Bestimmte Anzahl an Spaltenvektoren mitteln
Hallo,
ich bin Anfänger was das Programmieren angeht, soll jetzt aber ein Programm erstellen und komme an einer bestimmten Stelle nicht weiter. Ich möchte bei der Datei Daten_gefiltert aller 5 Werte den Mittelwert bilden. Sozusagen soll es dann die kompletten 5 Spalten Zeilenweise mitteln und dann die nächsten 5. Hintergrund ist eben, dass ich wie unter der ersten Schleife dann die gemittelten Werte in einen plot schreiben möchte.
Code:
% Das komplette Programm sind dann folgendermaßen aus: clc; clear; closeall cd('C:\Users\Snowboarder\Documents\MATLAB\BeLL\Jung')
liste = dir('.'); %einlesen aller Daten
files = {liste.name};%Namen der Daten werden übernommen
files (1:2)=[];
z=linspace(0,1100,1100)';
for k=1:numel(files) %Wieviele Elemente sind im Ordner
cd('C:\Users\Snowboarder\Documents\MATLAB\BeLL\Jung')
Daten(:,k)=dlmread(files{k},'\t',[22411214]);%Daten von Probanden in jeweilige Zeile (Proband 1 ersten 5 etc.) [z0,z1] = butter(3,0.1,'low');
Daten_gefiltert = filter(z0,z1,Daten);
plot(z,Daten_gefiltert(:,k)) hold on
line([01100],[00],'color','k')
name=strtok(files{k},'.');%Dateiname wird bis punkt eingelesen
cd('C:\Users\Snowboarder\Documents\MATLAB\BeLL\Test') saveas(gcf,name,'jpeg');
closeall end
for h=1:5:length(Daten_gefiltert(1,:))%jeweils 5
MW(h) = mean(Daten_gefiltert(:,h:h+4));
Ich hoffe, dass ich mein Problem verständlich ausdrücken konnte. Bei den bisherigen Versuchen, ging die Schleife nicht bzw. er hat mir immer nur 5 Werte angezeigt.
Ich hoffe, dass mir jemand helfen kann, da ich bei der Suchfunktion leider nicht fündig geworden bin. Die Datei habe ich txt angehängt, aus welcher die Daten gemittelt werden soll.
Vielen Dank =)
Bei den bisherigen Versuchen, ging die Schleife nicht bzw. er hat mir immer nur 5 Werte angezeigt.
Du hast mit mean den Mittelwert pro Spalte bestimmt. Um diesen zeilenweise zu berechnen, musst du die Dimension 2 angeben.
Dann muss man noch die Dimensionen von
MW und Daten_gefiltert(:,h:h+4)
anpassen und es sollte klappen.
Ich hoffe, dass ich mein Problem verständlich ausdrücken konnte.
Ja, es sei denn ich habe dich missverstanden. Als Hinweis: An Code hättest du sparen können. Am besten ist immer ein Beispiel, das lauffähig ist und nach Möglichkeit minimal. Alles vor deiner zweiten Schleife ist für das behandelte Problem ja im Grunde nicht relevant und lauffähig aufgrund fehlender Daten ist es auch nicht. Da du 'Daten_gefiltert' angehängt hast, hätte ein load gefolgt von der zweiten Schleife gereicht plus Beschreibung des Problems.
Dann wird dir ggf. schneller geholfen und der Helfenden braucht sich nicht mit dem irrelevanten Part beschäftigen.
_________________
Ist es wirklich sinnvoll, dass ein Programm alle anderen Fenster schließt? In einem kleinen Beispiel mag das sinnvoll sein, aber wenn man später mal mehrere GUIs gleichzeitig öffnen will, sind solche Code-Schnipsel immer ein echter Ärger. Ich habe z.B. ein (meist unsichtbares) GUI zur Abreitszeit-Erfassung mitlaufen. Wenn ich Deinen Code testweise laufen lassen würde, hätte es mir das GUI gleich zerschossen (wenn ich nicht zusätzliche Sicherungen in der CloseRequestFcn eingebaut hätte).
"clear" ist aber schon mal eine gute Idee: Viel besser als "clear all" :-)
Zitat:
files (1:2)=[];
Es ist nicht dokumentiert, dass '.' und '..' tatsächlich die beiden ersten Strings in der Liste sind. Das ist zwar bei allen Bestriebssystemen der Fall, bei denen ich es ausprobiert habe, es bleibt aber eine Fehlerquelle sich sowas anzugewöhnen.
Das Wechseln von Verzeichnissen ist nicht sicher. Ein GUI- oder Timer-Callback könnte dazwischen funken und das Verzeichnis wieder ändern. Besser ist die Verwendung absoluter Filenamen:
Dazu wird explizit der Vektor Daten_gefiltert(1,:) erzeugt und seine Größe gemessen. Das ist aber Zeitverschwendung. Besser ist es, man liest die Dimension direkt aus: size(Daten_gefiltert, 2)
Die Schleife ist aber sowieso nicht effizient hier. Besser:
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.