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

Messdaten laufend mitteln

 

Boromir05
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 08.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2016, 13:29     Titel: Messdaten laufend mitteln
  Antworten mit Zitat      
Hallo zusammen,

Ich weiß nicht genau, wie ich mein Problem kurz beschreiben soll, deshalb konnte ich auch die Suchfunktion nicht nutzen Rolling Eyes

Folgendes:
Ich habe mehrere Messreihen, die mit 1 Hz aufgezeichnet wurden.
Das Plotten direkt über der Zeit ist aber leider nicht sonderlich aussagekräftig, da ich zwei Wertereihen miteinander vergleichen will. Beide Messdaten sind sehr dynamisch, die eine Reihe schwankt sehr stark.

Ich möchte gern eine Funktion schreiben, die mir zu jeder Sekunde einen gemittelten Wert ausgibt. Die Funktion müsste also für jede Sekunde z.B. über die letzten 10 Sekunden den Mittelwert bilden.

Ich hoffe das ist verständlich Question
Wenn nicht: Gerne nachfragen, was unklar ist.
Wenn ja, dann kann mir hoffentlich jemand helfen.

Danke!
Johannes
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 08.08.2016, 16:27     Titel:
  Antworten mit Zitat      
Würde sagen wenn die Messung mit der Data Acquisition Toolbox auf 1 Hz läuft, dann ist da auf jeden Fall genug Zeit für. Ab dem 10. Messwert kann man dann z.B. den FILTER Befehl nutzen. Sie Doku für FILTER, gleich das erste Beispiel "Moving average filter of vector data".

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Boromir05
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 08.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2016, 17:13     Titel:
  Antworten mit Zitat      
Hallo Andreas,
Erstmal danke für denke Antwort!
Was du mit Data Acquisition Toolbox meinst, weiß ich nicht. Die Messung ist außerhalb von Matlab entstanden und die Messwerte dann nur als Variablen eingelesen.

Die Filterfunktion habe ich zwar nicht ganz verstanden, habe sie aber äquivalent zum Beispiel angewandt. Funktioniert super! Danke dafür!
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 09.08.2016, 09:08     Titel:
  Antworten mit Zitat      
Ich habe "werden" gelesen statt "wurden" und nahm an, dass die Daten mit MATLAB aufgezeichnet werden, nicht nur das Post-Processing gemacht wird. Es ist halt generell einfacher alles in einem Tool zu machen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Boromir05
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 08.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2016, 08:37     Titel:
  Antworten mit Zitat      
Das glaube ich. Die Messdaten sind aber nunmal schon vorhanden...

Kann man den Prozess auch andersherum laufen lassen?
Also dass der Filter nicht die 10 letzten Werte, sondern die 10 auf den Messwert folgenden Werte bei der Mittelung mit einbezieht?



Da ich in meinem Fall über mehr Werte mittlere:
Wie kann man z.B.
Code:
b=[1/5 1/5 1/5 1/5 1/5]

einfacher beschreiben? Bei 5 geht es ja noch problemlos. Bei 500 ist das dann aber schon eine ziemlich lange Zeile Laughing
Das sind bestimmt grundlegende Dinge bei der Arbeit mit MatLab... Ich bin aber im Programmieren quasi vollkommen unerfahren und nutze MatLab deshalb wahrscheinlich meist nur auf eine sehr primitive Weise. Inklusive ständigem Einsatz von Google^^

Zuletzt bearbeitet von Boromir05 am 10.08.2016, 10:30, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.08.2016, 08:50     Titel:
  Antworten mit Zitat      
Also für grössere n würde das z.B. so gehen:

Code:

n=10;
f=repmat(1/n,[1,n])
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.08.2016, 08:58     Titel:
  Antworten mit Zitat      
Für

Zitat:

Also dass der Filter nicht die 10 letzten Werte, sondern die 10 auf den Messwert folgenden Werte bei der Mittelung mit einbezieht?


Nun, die Fortune Telling Toolbox ist noch nicht erfunden Very Happy . Aber hier handelt es sich ja um Post-Processing... Einfach den Index um 10 Schritte verschieben.

Code:

a=rand(1,30); % Dummy Werte
a(1:1:10)
a(10:1:20)
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Boromir05
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 08.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2016, 09:24     Titel:
  Antworten mit Zitat      
Moin Andreas,
Das mit "repmat" läuft, danke!

Zu der anderen Sache: Ja, das bezieht sich auf das Post-Processing.^^
Den Code verstehe ich aber leider nicht Rolling Eyes
Code:
a=rand(1,30); % Dummy Werte
a(1:1:10)
a(10:1:20)

Bzw ich denke schon, dass ich verstehe, dass die erste Zeile 30 Zufallswerte erzeugt und die anderen beiden Zeilen jeweils 10 Werte davon ausgeben.
Aber wie hilft mir das Question

Grüße
Johannes
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.08.2016, 10:31     Titel:
  Antworten mit Zitat      
Damit will ich nur zeigen, wie man auf verschiedene Abschnitte eines Vektors / einer Zeitreihe zugreifen kann. Wenn man den gleitenden Mittelwert auf diese Werte loslässt

Code:

a(1:1:10)
 


berechnet man den gleitenden Mittelwert auf die Nummer 1 zusammen mit den nächsten 9 Werten. Bei

Zitat:

a(10:1:20)


wäre das der Ausschnitt des Vektors für Messwert Nummer 10 plus die nächsten 9.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Boromir05
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 08.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2016, 11:58     Titel:
  Antworten mit Zitat      
Ja, dass man so an die Werte an den speziellen Stellen des Vektors kommt, ist mir bewusst... Aber leider weiß ich nicht, wie ich das auf den Filter übertragen soll.
Code:

a = 1;
b = repmat ( 1/10 , [1:10] );
x_filt = filter ( b , a , x )
 
gibt mir für jede Sekunde einen Mittelwert über die jeweils letzten 10 Sekunden aus.

Was ich jetzt gemacht habe und was wahrscheinlich zum selben Ergebnis führt wie das Mittelwert-Bilden über die folgenden 10 Elemente:
Code:

a=1;
b= repmat( 1/10 , [1:10] );
x_filt = flipud ( filter( b , a , flipud(x) ) );
 

Ich drehe mit flipud den urpsrünglichen Vektor um, lasse ihn filtern und drehe ihn danach wieder um Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Boromir05
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 08.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2016, 12:47     Titel:
  Antworten mit Zitat      
Das Problem bei der Filterfunktion ist, dass sich durch die Mittelung über viele Messwerte ein Delay ergibt.
Das fällt vor allem auf, wenn man den "vorwärts" und "rückwärts" gefilterten Wert miteinander vergleicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.08.2016, 14:55     Titel:
  Antworten mit Zitat      
Das lässt sich kaum verhindern.

Wegen FILTER: Denn habe ich angegeben, weil ich diesen Ansatz kenne. Man kann natürlic auch ganz simpel all n Werte aufaddieren und dann durch n teilen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.