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

Bestimmte Anzahl an Spaltenvektoren mitteln

 

Sub_Zero
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 30.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2014, 13:01     Titel: Bestimmte Anzahl an Spaltenvektoren mitteln
  Antworten mit Zitat      
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; close all
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',[22 4 1121 4]);%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([0 1100],[0 0],'color','k')
   name=strtok(files{k},'.');%Dateiname wird bis punkt eingelesen
   cd('C:\Users\Snowboarder\Documents\MATLAB\BeLL\Test')
  saveas(gcf,name,'jpeg');
  close all
end

for h=1:5:length(Daten_gefiltert(1,:))%jeweils 5
  MW(h) = mean(Daten_gefiltert(:,h:h+4));
   
end

 


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 =)

Daten_gefiltert.txt
 Beschreibung:

Download
 Dateiname:  Daten_gefiltert.txt
 Dateigröße:  1.06 MB
 Heruntergeladen:  333 mal
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 31.10.2014, 14:09     Titel: Re: Bestimmte Anzahl an Spaltenvektoren mitteln
  Antworten mit Zitat      
Hallo,

Sub_Zero hat Folgendes geschrieben:
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.

Code:
load('Daten_gefiltert.mat');

[z, s] = size(Daten_gefiltert);
idx = 1;
MW = zeros(z, s/5);
for h=1:5:s
    MW(:,idx) = mean(Daten_gefiltert(:,h:h+4), 2);
    idx = idx+1;
end


Grüße,
Seban

Edit:
Sub_Zero hat Folgendes geschrieben:
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.
_________________

Richtig fragen
Debugging
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: 01.11.2014, 14:56     Titel: Re: Bestimmte Anzahl an Spaltenvektoren mitteln
  Antworten mit Zitat      
Hallo Sub_Zero,

Ein paar Kommentare zum Code:

Code:

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.

Code:
cd('C:\Users\Snowboarder\Documents\MATLAB\BeLL\Jung')
Daten(:,k)=dlmread(files{k},'\t',[22 4 1121 4]);

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:
Code:
file = fullfile('C:\Users\Snowboarder\Documents\MATLAB\BeLL\Jung', files{k});
Daten(:,k) = dlmread(file, '\t', [22 4 1121 4]);

Das gleiche beim SAVEAS-Befehl.

Code:
for h=1:5:length(Daten_gefiltert(1,:))

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:
Code:
siz = size(Daten_gefiltert)
MW = mean(reshape(Daten_gefiltert, [siz(1), 5, siz(2) / 5]), 2);

Gruß, Jan
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.