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

Signal filtern / Kilometerstand

 

Plotter
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 26.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2010, 14:28     Titel: Signal filtern / Kilometerstand
  Antworten mit Zitat      
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)

km = [999 999 999 999 999 50 51 51 52 52 52 53 53 53 54 55 56 57 58 59 60]

oder

km = [999 999 999 999 999 50 51 51 52 52 52 53 53 53 54 55 56 57 58 59 60 999 999 999 999 999]

oder

km = [999 999 999 999 999 50 51 51 52 52 52 53 53 999 999 999 999 53 54 55 56 57 58 59 60 999 999 999 999 999]

Die Länge des Vektors soll unverändert bleiben!

Hier hab ich einen kleinen Ansatz, hab schon alles mögliche ausprobiert, auch entlang des Vektors, es klappt aber nicht. Hat jemand eine Idee???

Code:

clc
clear all

km = [999 999 999 999 999 50 51 51 52 52 52 53 53 53 54 55 56 57 58 59 60];

%Gefahrene Strecke
km_a = find(km > 900)  
km_max = km;
km_max(km_a) = 0;                                                            
km_total = max(km_max)-min(km)


%Interpolieren
km_n = numel(km_a)
km_neu(1,1:km_n) = km(1, km_n + 1)
 
Private Nachricht senden Benutzer-Profile anzeigen


Plotter
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 26.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2010, 15:03     Titel:
  Antworten mit Zitat      
die Anfangswerte kann ich ersetzen, aber wie sieht es mit anderen Fällen aus???

Code:

km_neu = [];
    for x = 1:length(km)
        if km(1, x) > 900
           y = km(1, 5+1);
      else
           y = km(1, x);
    end
    km_neu = ([km_neu; y])
    end  
 
Private Nachricht senden Benutzer-Profile anzeigen
 
heph0013
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.03.08
Wohnort: ---
Version: 7.2.0.232 (R2006a)
     Beitrag Verfasst am: 09.06.2010, 17:06     Titel:
  Antworten mit Zitat      
So also nach langem Überlegen und hin und her bin ich auf folgendes gekommen:
Code:


%% Testvektor erstellen
km = [999 999 999 999 999 50 51 51 52 52 52 53 53 999 999 999 999 53 54 55 56 57 58 59 60 999 999 999 999 999]';
% 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
 


Das Ergebnis steht in der ersten Spalte von km

Bei Fragen einfach fragen - und ich kann mir gut vorstellen, dass es welche gibt Wink

Gruß heph0013
Private Nachricht senden Benutzer-Profile anzeigen
 
Plotter
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 26.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 08:22     Titel:
  Antworten mit Zitat      
Vielen Dank für Vorschlag!

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
heph0013
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 17.03.08
Wohnort: ---
Version: 7.2.0.232 (R2006a)
     Beitrag Verfasst am: 10.06.2010, 14:19     Titel:
  Antworten mit Zitat      
Dann reicht dir wohl das:
Code:

km = [999 999 999 999 999 50 51 51 52 52 52 53 53 999 999 999 999 53 54 55 56 57 58 59 60 999 999 999 999 999]';

Wo_schlecht=find ( km(:,1) > 900 );
Wo_gut=find ( km(:,1) < 900 );

if Wo_gut(1) > 1
    km(1:Wo_gut(1)-1,1)=km(Wo_gut(1),1);
end

Wo_schlecht=find ( km(:,1) > 900 );
for lauf=1:length(Wo_schlecht)
    km(Wo_schlecht(lauf),1)=km(Wo_schlecht(lauf)-1,1);
end
 


Wobei wenn die Fehler immer gehäuft auftreten kann man das auch noch schneller machen.

Gruß heph0013
Private Nachricht senden Benutzer-Profile anzeigen
 
Plotter
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 26.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 14:53     Titel:
  Antworten mit Zitat      
Echt super!!! Hätte ich nicht gedacht, dass es möglich ist!!! Spitze Exclamation
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.