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

Gleitender Mittelwert

 

Isabel_HH
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.12.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 15.12.2011, 15:40     Titel: Gleitender Mittelwert
  Antworten mit Zitat      
Hallo zusammen,

vielleicht hat jemand hier eine Idee. Ich habe eine Frage bezüglich der Berechnung des gleitenden Mittelwertes. Die filter-Funktion ist mir bekannt und klappt wunderbar, zumindest wenn ich über meinen Vektor diese Funktion mit einer bestimmten windowSize stinknormal laufen lasse.

Mein Problem ist nun, daß ich den Mittwelwert nicht gleitend um jede Zeile, sondern gleitend um 1200 Zeilen mit einer windowSize von 6000 laufen lassen möchte. Am Ende sollen 5-Minutenmittelwerte herauskommen, die gleitend um 1 Minute verschoben sind (1 Minute = 1200, 5 Minuten = 6000 Zeilen bzw. Elemente). Mein Vektor besteht aus 432000 Elementen.

Könnte man das auch filter machen? Bin gerade ziemlich ratlos.

Danke schon mal im Voraus! Smile
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: 15.12.2011, 18:25     Titel: Re: Gleitender Mittelwert
  Antworten mit Zitat      
Hallo Isabel_HH,

Ich verstehe die Frage nicht.

Was genau bedeutet "gleitend um 1200 Zeilen mit einer windowSize von 6000"?
Welche Dimension haben die Inputs, welche sollen die Outputs haben, wie ist das Fenster definiert?

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.12.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 15.12.2011, 18:59     Titel:
  Antworten mit Zitat      
Hallo Jan,

mein Vektor besteht aus 432000 Elementen, also eine Spalte mit 432000 Zeilen. Es handelt sich dabei um 20 Hz-Rohdaten, also 20 Werte pro Sekunde bzw. 1200 für 1 Minute, 6000 für 5 Minuten und insgesamt dann 432000 für 6 Stunden.

Beim "normalen" gleitenden Mittelwert, in diesem Falle als Bsp. ein Mittelungszyklus von 5 Minuten (= windowSize 6000) habe ich das mit der filter-Funktion gelöst, die ich in diesem Forum gefunden hatte, etwa:

gmw = filter(ones(1,windowSize)/windowSize,1,Vektor);

Dabei wurden gleitend, also immer um eine Zeile weiter bis zum Ende die Mittelwerte aus 6000 Werten berechnet. Am Ende bekam ich dann als Lösung einen Vektor aus 432000 Zeilen mit den gleitenden Mittelwerten, wobei die ersten 6000 Werte filterfunktionsbedingt Käse sind und herausgeschnitten werden.

Nun möchte ich (bzw. mein Prof...), daß gleitend statt um eine um 1200 Zeilen gleitend gemittelt werden soll, also alle 1200 Zeilen ein Mittelwert aus 6000 Werten.

Ich weiß selber nicht, ob das überhaupt möglich ist, gerade zum Ende des Vektors hin (vermutlich müßten dann zu den ersten 6000 auch die letzten 6000 Werte herausgeschnitten werden, wenn keine 6000 Werte zum Mitteln mehr da sind, oder er bricht dann ab).

Ich hoffe, ein bißchen Lichte ins Dunkel gebracht zu haben Wink

Gruß,
Isabel_HH
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: 16.12.2011, 00:25     Titel:
  Antworten mit Zitat      
Hallo Isabel_HH,

Das läßt sich nicht mit FILTER lösen. Ein kleine M-File schafft das aber:
Code:
function y = qq(x)
len = length(x);
y   = zeros(1, 358);
for i = 3000:1200:len-3000
   y(i) = sum(x(i-2999:i+3000)) / 6000;
end

Ich habe der Einfachheit halber erstmal alle Dimensionen hart codiert - für ein echtes Programm sollte das natürlich flexibel sein.
Aber es zeigt zumindest, dass die funktioniert. Mit 0.5 Sekunden Laufzeit ist das nicht wirklich schnittig. Aber mit PARFOR läßt sich das gut beschleunigen.
In C wäre das auch deutlich schneller, da in Matlab die Erzeugung der Untervektoren "x(i-2999:i+3000)" viel Zeit erfordert.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.12.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 16.12.2011, 08:00     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für Deine schnelle Hilfe! Smile

Irgenwie hatte ich mir auch schon gedacht, daß man dafür evtl. ein for-Schleifchen braucht... Daß es dadurch länger dauert, ist nicht schlimm.

Ich hoffe, ich komme heute noch dazu, es auszuprobieren (muß dafür in die Uni, bin aber noch wegen Erkältung etwas angeschlagen), sonst auf jeden Fall nä. Woche. Dann melde ich mich noch mal, wie es gelaufen ist!

Viele Grüße,

Isabel_HH
Private Nachricht senden Benutzer-Profile anzeigen
 
Isabel_HH
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.12.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 19.12.2011, 15:45     Titel:
  Antworten mit Zitat      
Hallo Jan,

habe heute mal Dein Programm ausprobiert, aber irgendwie steige ich da noch nicht ganz durch. Könntest Du mir bitte noch mal kurz erklären, was Dein Programm eigentlich genau macht, also vielleicht ein paar Worte zu den Zeilen Deines Codes (z.B. ist mir die Bedeutung von "zeros" nicht ganz klar, und steht das "function" für die Funktion "function"?)?
Wäre super! Smile

Danke und viele Grüße,

Isabel_HH
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: 19.12.2011, 22:56     Titel:
  Antworten mit Zitat      
Hallo Isabel_HH,

Um die absoluten Grundlagen von Matlab zu lernen, empfehle ich die "Getting Started" Kapitel der Dokumentation zu lesen. Eine so mächtige Sprache wie Matlab kann man ohne Studium der Manuals nicht erlernen oder sinnvoll benutzen.
Wenn Du danach zu bestimmten Befehlen Fragen hast, solltest Du wieder in der Dokumentation nachlesen, z.B. mit:
Code:

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.