Verfasst am: 09.06.2010, 14:28
Titel: Signal filtern / Kilometerstand
Hallo, ich steh wieder vor einem Ptoblem.
ich habe ein Kilometerstand, der kontinuirlich anstegt. Nun tretten im signal Fehler, die ich ausfiltern möchte (genau gesagt ersetzen durch gültige benachbarten Werte).
z.B. mögliche Fehler (hier 999 heiß sehr großer Wert)
So also nach langem Überlegen und hin und her bin ich auf folgendes gekommen:
Code:
%% Testvektor erstellen
km = [99999999999999950515152525253539999999999995354555657585960999999999999999]';
% Auf "echte" Kilometer bringen
km=km*1000+sortrows(round(rand(length(km),1)*1000));
% Zusätzliche Fehler einbauen
km(10)=km(10)-10000;
km(18)=km(18)-10000;
km(24)=km(24)-10000;
%% Einen Wert in der Mitte des km-Vektors finden von dem "sicher" ist das er stimmt % Die Differenz zu dem Oberen und dem Unteren Eintrag bilden
km(:,2)=[0;km(1:end-1,1)];
km(:,3)=[km(2:end,1);0];
km(:,4)=km(:,1)-km(:,2);
km(:,5)=km(:,1)-km(:,3);
Wo1(:,1)=find(km(:,1)<900000 & km(:,4)>0 & km(:,5)<0);
Wo1(:,2)=[0;Wo1(1:end-1,1)];
Wo1(:,3)=[Wo1(2:end,1);0];
Wo1(:,4)=Wo1(:,1)-Wo1(:,2);
Wo1(:,5)=Wo1(:,1)-Wo1(:,3);
Wo2=find(Wo1(:,4)==1 & Wo1(:,5)==-1)
%% Schleife zum ersetzten der "schlechten" Werte von Punkt in der Mitte nach Unten for lauf1=Wo1(Wo2(1),1)-1:-1:1 if ~(km(lauf1,1)<900000 && km(lauf1,5)<0)
km(lauf1,1)=km(lauf1+1,1);
end end
%% Schleife zum ersetzten der "schlechten" Werte von Punkt in der Mitte nach Oben for lauf1=Wo1(Wo2(1),1)+1:+1:length(km) if ~(km(lauf1,1)<900000 && km(lauf1,4)>0)
km(lauf1,1)=km(lauf1-1,1);
end end
Zu den zusätzlichen Fehler: es handelt sich immer wieder um denselben Wert, der ca. gegen 10^36 läuft, also es tretten sehr große Spitzen im Signal auf.
Eventuell könnte man den Code dadurch verkürzen. oder nicht?
Im Moment weiss ich gar nicht was der Code macht, da ich nur seit ein paar Wochen mit dem matlab arbeite, also hab noch Schwirigkeiten damit.
Und wie würde der Code aussehen, wenn man nicht auf "echte" km bringt und ohne zusätz. Fehler?
Echt super!!! Hätte ich nicht gedacht, dass es möglich ist!!! Spitze
Einstellungen und Berechtigungen
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
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.