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

Averaging / Smoothing einer Kurve

 

aha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 10:55     Titel:
  Antworten mit Zitat      
den moving average filter, kann man ja auch auch mit einem discrete-filter-block realisieren, indem man als nenner [1] und als zähler, [1 1 1 1 1] wählt ... die resultierende kurve ist die gleiche


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.06.2011, 11:18     Titel:
  Antworten mit Zitat      
Da kann man sich das Filter doch auch gleich sparen, wenn Eingangssignal = Aussgangssignal ist Wink

Bei einem gleitenden Mittelwert von 5 Messwerten, müsste jeder Koeffizient im Zähler 1/5 sein und nicht 1.

Zuletzt bearbeitet von DSP am 29.06.2011, 11:21, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
aha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 11:21     Titel:
  Antworten mit Zitat      
Eingangssignal ist aber nicht Ausgangssignal...!
 
aha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 11:25     Titel:
  Antworten mit Zitat      
Ob ich jeden koeffizient 1/5 wähle oder nachträglich durch 5 teile, ändert auch nichts am Ergebnis...
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.06.2011, 12:50     Titel:
  Antworten mit Zitat      
Das Ergbnis ändert sich nicht...aber lassen wir das Wink

Nicht schön, aber selten...und liefert das gleiche Ergebnis wie smooth()

Code:

 y = rand (100,1);
 yy = smooth (y); % so soll das ergebnis aussehen

 time = (1:100)';

 y_vec = [time y]; % from workspace(sample time 1)
 
 y_sim = filter(ones(5,1),5,y);
% Laut Matlab Doku berechnet smooth so der ersten und letzten beiden Werte. Mit einem Filter geht das so nicht, da es ja ein Ein- und Ausschwingverhalten hat, weshalb das MW-Filter bei diesen Werten etwas anderes liefert. Auch mit einer Initialisierung des Filters kommst du nicht auf das Signal von smooth an den Rändern, wenn du alle Werte von y_sim nutzt. Gleichzeitig verschiebe ich das Filtersignal, so dass der Delay von 3 Werten des Filters entfällt.
 y2(1) = y(1);
 y2(2) = (y(1) + y(2) + y(3))/3;
 y2(3:98) = y_sim(5:100);
 y2(99) = (y(98) + y(99) + y(100))/3;
 y2(100) = y(100);
 
 figure(1)
 clf
 plot(time, y, 'b.-', time, yy, 'r.-', time, y2, 'g--')
 xlim([0 max(time)])
 
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 29.06.2011, 13:15     Titel:
  Antworten mit Zitat      
hi,

vllt hab ich es nicht ganz verstanden was du möchtest aber ich glaube es geht darum dass die conv und filter funktionen am anfang und ende falsche ergebnisse liefern. das lässt sich bei conv so umgehen:

Code:


a = rand(10,1);
movavg= conv(a,ones(3,1)/3,'valid')

 


gruß,

lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
aha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 13:38     Titel:
  Antworten mit Zitat      
Die Mittelung soll in jedem Schritt stattfinden, also für jeden Wert, sodass sich die kurve nach und nach aufbaut und nicht nachträglich alles auf einmal.

Mit dem Einschwingen am Anfang kann ich mich noch abfinden, ist ja auch irgendwie logisch, nur warum von 0 und nicht vom 1. Wert aus? Und woher kommt die zeitliche Verschiebung der Werte? Diese stellt eigentlich das hauptproblem dar.

-> Also ich hätte gerne eine Kurve die sich aus a in smooth(a) einschwingt.

Gruß
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.06.2011, 13:53     Titel:
  Antworten mit Zitat      
aha hat Folgendes geschrieben:

Mit dem Einschwingen am Anfang kann ich mich noch abfinden, ist ja auch irgendwie logisch, nur warum von 0 und nicht vom 1. Wert aus? Und woher kommt die zeitliche Verschiebung der Werte? Diese stellt eigentlich das hauptproblem dar.


Das Einschwingen von 0 aus passiert, da in der Funktion filter() keine extra Initialisierung vorgenommen wurde. Deshalb sind zunächst fünf Nullen in dem Filter. Willst von 1 aus starten, musst du das Filter so laden:

Code:
y_sim = filter(ones(5,1),5,y,[1 1 1 1]);


Oder z.B. mit dem Mittelwert der ersten 5 Werte. Jedes Filter hat nun mal eine Einschwingzeit...es dauert doch, bis der erste Werte (gewichtet) am Ausgang des Filters erscheint. Das kannst du nur verhindern, wenn du den Delay durch Linksschieben des Ausgangssignals beseitigst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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 - 2024 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.