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

Filtern von Kraftsensordaten

 

LucasC
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2011, 10:11     Titel: Filtern von Kraftsensordaten
  Antworten mit Zitat      
Hallo!

Ich möchte die Daten eines Kraftsensors filtern, um das Rauschen loszuwerden. Diesbezüglich hab ich mir den "smooth" Filter angeschaut. Das Ergebnis von bereits aufgezeichneten Daten sieht sehr vielversprechend aus, jedoch nun die Frage an euch, liebe Forumuser: Kann ich den "smooth" Filter x_filter = smooth(data,windowSize,'lowess') auch als Echtzeit/Real time Filter verwenden. Dh. eingehende Sensordaten direkt und ohne großen Zeitverlust filtern?

Jetzt schon mal vielen Dank für die Antworten!
Private Nachricht senden Benutzer-Profile anzeigen


LucasC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2011, 10:13     Titel:
  Antworten mit Zitat      
Niemand eine Idee?

bzw. wie sieht es mit einem Savitzky-Golay FIR filter aus? kann dieser zur realtime auswertung herangezogen werden? oder ist auch dieser nur zur nachträglichen bearbeitung von daten zu gebrauchen?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.07.2011, 13:36     Titel:
  Antworten mit Zitat      
Hallo
ich kenne mich mit Curve Fitting Toolbox überhaupt nicht aus.

Da würde so eine spezifische Frage direkt an Mathworks richten,
die haben bestimmt schon einige Erfahrungswerte gesammelt.
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 15.07.2011, 13:37 Uhr von denny
Von Programmierung nach Toolboxen
 
LucasC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2011, 13:40     Titel:
  Antworten mit Zitat      
blöde frage, aber wie mach ich das? Wink bin ziemlich unerfahren was den umgang mit matlab betrifft
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.07.2011, 13:50     Titel:
  Antworten mit Zitat      
Schreib hier PN an Nutzer Andreas Goser, vielleicht kann er dich gleich an richtige Adresse weiterleiten
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: 15.07.2011, 14:06     Titel:
  Antworten mit Zitat      
So ist es auch geschehen. Hier die Kontaktinformationen:

http://www.mathworks.de/support/contact_us/index.html

Hier Hintergrundinformationen:

http://www.mathworks.com/matlabcent.....technical-support-and-how

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

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 15.07.2011, 16:49     Titel:
  Antworten mit Zitat      
Richtig echtzeitfähig sind diese Filter nicht, da du ja über die Segmentlänge (Windowsize) die Güte der Filterung bestimmst. Dieses Segment muss du ja aber erstmal mit Messwerten gefüllt haben. Ich habe das mal versucht zu testen. Kann natürlich sein, dass ich noch Fehler drin habe...aber bei der smooth() Funktion stimmt die "Realtime" Filterung mit der Offline Filterung bei Segmentlänge f = 3 noch überein. Ab 5 dann schon nicht mehr. Es kann aber sein, dass ich beim Zusammensetzen der Segmente einen Fehler mache. Da bin ich mir noch nicht sicher. Es könnte aber auch an der Initialisierung des Segements mit Nullen und dem ersten Messwert bei der Startsequenz liegen (was ja für Realtime erforderlich ist).

Ihr könnt es ja mal selber testen...einfach vor dem starten des m-file im Command Window "load mtlb" eingeben, damit ihr einen Datenvektor habt.

Code:


% Im Command Window eingeben: load mtlb;

% Filter init
k=3; % Apply the 3rd-order filter.
f=41; % Segmentlänge
% Filtertyp
% 1 = Savitzky-Golay filtering
% 2 = Smooth -> Methode = Lowess
typ = 2;

% Messwerte
Data = [zeros(1,f-1),mtlb'];
%Data = mtlb';
% Ergebnisvektor -> init
Data_filt = [zeros(length(Data),1)]';

% Zeitvektor
%Ts=1/Fs;
%T = 0:Ts:(length(Data)-1)*Ts;

% Fifo mit der Länge f
% Initialisierung mit Nullen und 1. Messwert
Fifo = fliplr(Data(1:f));
%Fifo = Data(1:f);

% "Realtime" Filterung
for i=1:length(Data)-f
    % Segment in Fifo filtern
    if (typ == 1)
        % Savitzky-Golay filtering
        smtlb(1:f) = sgolayfilt(Fifo,k,f);
    else
        % Smooth -> Methode = Lowess
        smtlb(1:f) = smooth(Fifo,f,'lowess');
    end
    % aktuelle Werte um eine Position nach rechts schieben
    % f. Element fällt raus
    Fifo(end:-1:2)=Fifo(end-1:-1:1);
    % neuen Messwert an Position 1 laden
    Fifo(1) = Data(f+i);
    % gefiltertes Segment speichern  
    Data_filt(i:i+f-1)=smtlb(1:f);
end

% Offline Filterung
clear smtlb;
if (typ == 1)
    % Savitzky-Golay filtering
    smtlb = sgolayfilt(mtlb,k,f);
else
    % Smooth -> Methode = Lowess
    smtlb = smooth(mtlb,f,'lowess');
end

% Ausgabe
subplot(2,1,1)
plot(Data); axis([0 4000 -4 4]);
title('Messdaten'); grid;
subplot(2,1,2)
plot(Data_filt);
hold on; plot(smtlb,'r--');
%hold on; plot(T,Data,'g--');
axis([0 4000 -4 4]);
title('Filterung'); grid;
legend('realtime filt','offline filt');
 


Ich bin ja mal gespannt, was mathworks dazu sagt Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.07.2011, 12:24     Titel:
  Antworten mit Zitat      
Ich habe es nun zumindest geschafft bei der Savitzky-Golay Filterung 1. Ordnung (k=1) das gleiche Ergebnis bei Realtime und Offline Filterung zu bekommen. Man darf nicht einfach das gefilterte Segment abspeichern, sondern muss den Mittelwert davon bilden. Es gibt lediglich ein Filterdelay bei der Realtimefilterung. Es macht auch keinen Unterschied ,ob das Fifo mit Nullen und dem ersten Messwert, oder nur mit dem ersten Messwert initialisiert wird.

Allerdings glaube ich dennoch nicht, dass das Filter echtzeitfähig ist, da ja immer komplette Segmente berechnet werden. Bei einem IIR oder FIR Filter erhalte ich ja immer nur einen gefilterten Wert pro Abtastzeit. Die Frage ist eben auch, ob die Matlab Funktion überhaupt innerhalb der Abtastzeit ein Ergebnis liefert. Sollte das nicht der Fall sein, ist ohnehin alles hinfällig. Ich weiß zwar, dass diese Funktionen immenses Filterpotential haben, wenn die Segmentlänge aber nicht zu lang gewählt wird, kann man sicherlich das gleiche Ergebnis auch mit einem herkömmlichen Tiefpassfilter schaffen.



Code:

% "Realtime" Filterung
for i=1:length(Data)-f
    % Segment in Fifo filtern
    if (typ == 1)
        % Savitzky-Golay filtering
        smtlb(1:f) = sgolayfilt(Fifo,k,f);
    else
        % Smooth -> Methode = Lowess
        smtlb(1:f) = smooth(Fifo,f,'lowess');
    end
    % aktuelle Werte um eine Position nach rechts schieben
    % f. Element fällt raus
    Fifo(end:-1:2)=Fifo(end-1:-1:1);
    % neuen Messwert an Position 1 laden
    Fifo(1) = Data(f+i);
    % Mittelwert über gefiltertes Segment bilden und speichern  
    Data_filt(i)=mean(smtlb(1:f));
end
 


smooth_filterung.GIF
 Beschreibung:

Download
 Dateiname:  smooth_filterung.GIF
 Dateigröße:  33.82 KB
 Heruntergeladen:  890 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
LucasC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2011, 12:34     Titel:
  Antworten mit Zitat      
wow, vielen dank für deine bemühungen. ich werde deine antworten am montag dann analysieren.
ich denke dann werd ich wohl ein butterworth TP nehmen, um realtime fähig zu sein. bzw. chebychev liefert auch ganz passable ergebnisse.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.07.2011, 13:32     Titel:
  Antworten mit Zitat      
Nix zu danken...das war nicht so viel Arbeit Wink

Versuch das mit dem Tiefpassfilter mal. Kleiner Tip...falls das Filter nicht die gewünschte Dämfung erreicht, kann man das Filter auch kaskadieren (z.B. einzelnes FIR mit 64 Tabs -> 2 x 32 Tabs in Reihe) Dadurch steigt zwar die Eckfrequenz etwas, im Sperrbereich habe ich dann aber annähernd die doppelte Dämpfung gegenüber dem Einzelfilter. Die Einschwingzeit bleibt dennoch gleich.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 27.07.2011, 12:47     Titel:
  Antworten mit Zitat      
Was ist eigentlich bei der Anfrage bzgl. Savitzky-Golay- und Smooth-Filter auf Echtzeitfähigkeit rausgekommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
LucasC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2011, 13:19     Titel:
  Antworten mit Zitat      
sarvitzky und smooth grundsätzlich nein, abhängig von der fenstergröße der zu filternden daten.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.07.2011, 09:39     Titel:
  Antworten mit Zitat      
Ok...danke für die Info!

Bist du denn jetzt mit einem herkömmlichen Tiefpassfilter zu einem zufriedenstellendem Ergebnis gelangt?
Private Nachricht senden Benutzer-Profile anzeigen
 
LucasC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2011, 09:51     Titel:
  Antworten mit Zitat      
ich bin bei einem butterworth tiefpass filter 2. ordnung geblieben. liefert passable ergebnisse, welche ich gut in meinem regler wiederverwenden kann.
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 - 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.