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

Messwerte mit unterschiedlichen Abtastraten

 

Daniel_Z
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2012, 10:26     Titel: Messwerte mit unterschiedlichen Abtastraten
  Antworten mit Zitat      
Hallo Zusammen!

Im Rahmen meiner DA werte ich die Abstellposition [°KW] eines Verbrennungsmotors aus. Hierfür habe ich am Motorenprüfstand diverse Start Stopp Messungen (1 Messfile) gemacht die ich mittels Matlab auswerten möchte.
Bei abgestelltem Motor soll Matlab mir die Kurbelwellenposition des Zylinders geben der sich am nähesten vor OT befindet. Ebenso andere Werte.

Nun zu meinem Problem;
Um Matlab zu sagen dass der Motor steht, müssen folgende 2 Bedinungen erfüllt sein:
KW_Pos = konst
Motordrehzahl = 0 (KW_Pos wird nur unter einer gewissen Drehzahl gemessen, Alles drüber wird ebenso als konst. gemessen, deswegen die 2. Bedingung)

Wenn beide bedinungen zutreffen makiere mir den Bereich und nimm nur EINEN beliebigen Punkt (am besten mittig) heraus, von diesem gesuchten Punkt gib mir dann die geforderten Größen.
Soweit so klar?
Das Ganze funktioniert auch sehr gut. AUßER das KW Signal wird nicht wie die anderen mit 10ms sondern mit 100ms abgetastet.
Ist dies der Fall habe ich aus irgendeinem Grund Lücken in der Bedingung KW_Pos = konst und bekomme mehrere gesuchte Punkte pro Abgestelltem Motor.

Mein Lösungsansatz;
Mache mir aus dem 10ms Signal ein 100ms signal (Wäre für meine Berechnungen ausreichend)

Ich hoffe mein Problem ist einigermaßen klar und es kann mir jemand dabei helfen.

Zum angehängtem Bild:
Blau = Motordrehzahl
Grün = Kurbelwinkelpos
Turkies = Bedinungn Drehzahl = 0
Schwarz = Bedingung Kw_pos = konst
Lila = gesuchter Punkt pro Motorstillstand

Schöne Grüße !
Daniel

Forumhilfe_Kw_pos_zyl.gif
 Beschreibung:

Download
 Dateiname:  Forumhilfe_Kw_pos_zyl.gif
 Dateigröße:  4.39 KB
 Heruntergeladen:  1151 mal
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: 13.07.2012, 11:03     Titel:
  Antworten mit Zitat      
Die Abtastraten kannst du am Besten mit der Funktion

Code:


anpassen. Das ist mit einer Interpolation zu vergleichen. Zusätzlich hat diese Funktion aber noch ein Anti-Aliasing Filter, da durch die Interpolation Aliasfreq. auftreten.

Deshalb wäre es eigentlich besser das Signal mit Ts = 100ms auf die 10 ms der anderen Signale zu reduzieren. Dadurch entstehen keine Aliasfreq. Die Frage ist dann aber, ob das Abtasttheorem noch eingehalten wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2012, 11:53     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort!

Interpolieren kann ich meiner meinung nach nicht anwenden, da es entweder den Wert 150 gibt (schwarz, korrekt) oder stellenweise in einer Serie von 150gern den Wert 0 (Fehler in der Messung) hierdurch würde

Mein Array (Bedingung KW_pos = konst) sieht wie folgt aus: (150 bedingung erfüllt, 0 Bedingung nicht erfüllt)
...
150
150
150
...
150
0 <-Fehler! Kann ich diese 2 bis höchstens 3 x 0er mit 150 überschreiben?
0
150
150
150
150
...
150
150
0
0
0
0
0
0
0
...
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: 13.07.2012, 12:05     Titel:
  Antworten mit Zitat      
Machen kann man vieles...was hat das jetzt aber mit den unterschiedlichen Abtastraten zu tun? Die Frage ist hier doch dann eher, warum steht dort nicht das, was erwartet wird.


Edit:

Kann es sein, das bei der kleineren Abtastrate von 100ms das Abtasttheorem nicht eingehalten wird? Bei höherer Abtastung (10 ms) funktioniert es ja laut deiner Aussage.

Ich habe da vorhin auch Abtastrate mit Abtastfreq. verwechselt, in so fern ist dieser Satz falsch:

Zitat:

Deshalb wäre es eigentlich besser das Signal mit Ts = 100ms auf die 10 ms der anderen Signale zu reduzieren.


Muss natürlich genau umgekehrt sein...von 10 ms auf die 100 ms reduzieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2012, 12:36     Titel:
  Antworten mit Zitat      
Smile
Das obige BSP soll nur zeigen wie es in meinem Bedingungsarray aussieht.
Warum hier die Bedingung nicht erfüllt ist, weiss ich leider nicht. Wenn ich mir die Messung mit entsprechenden Auswertprogrammen ansehen sieht die Kurve gut aus, ohne Lücken.
Ich denke eben dass es daran liegt, dass ich Signale mit 10ms Abtastrate mit Signalen mit 100ms vergleichen will. Rein rechnerisch geht das vielleicht auf, allerdings gibt es immer wiedr todzeiten. So erkläre ich mir zumindest das Nichterfüllen der Bedingung.

Die Frage ist jetzt nur;
Versuche ich das Signal sauber zu bekommen , z.B. alles auf 100ms Raster oder schreibe ich eine Funktion in Matlab die mir mein Bedingungsarray "repariert". Die schönere Variante ist definitiv das Eingangssignal zu modifizieren.
Was meint ihr?
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: 13.07.2012, 12:54     Titel:
  Antworten mit Zitat      
Wenn du alles auf 100 ms bringen willst, wäre das ja eine Abtastratenreduzierung (downsampling). Hier würde dann nur jeder 10 Werte des ursprünglichen Signals verwendet. Das geht aber nur, wenn dabei das Abtasttheorem nicht verletzt wird. Das kann ich ohne weitere Kenntnisse nicht beantworten.

Sicherlich kannst du auch dein Signal wie erwähnt abändern. Dazu benötigst du aber eine Regel, wann geändert werden darf. Es könnte doch auch sein, dass die Nullen nicht auf Grund eines Fehlers entstanden sind, sondern tatsächlich dem Zustand entsprechen.

Zitat:

Wenn ich mir die Messung mit entsprechenden Auswertprogrammen ansehen sieht die Kurve gut aus, ohne Lücken.


Das hört sich aber wiederum so an, als wäre dann der Alg. für das setzen der Zustände (150 oder Null) das Problem. Wie gesagt...ohne weitere Infos bzw. Daten ist das hier wohl mehr Raterei.
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2012, 11:14     Titel:
  Antworten mit Zitat      
Hallo
erstmal danke für die Tipps! Und Sry dass ich mich jetzt erst wieder melde.

Bezüglich dem Abtasttheorem kann ich leider keine Auskünfte geben.
Ich probiere es mit Downsampling, befürchte jedoch dass ich das selbe Ergebnis erzielen werde !

Die 0er in meiner Messung sind definitiv Fehler und kein Ist Stand.
BSP. eine Bedingung lautet Motordrehzahl = 0, wenndiese 0 dann markiere mir den Bereich mit dem Wert 100. Hätte ich in dem Markierungsaaray zwischen einer Reihe von 100 2 bis 3 mal die 0 stehen, müsste der Motor während er steht von selbst andrehen. -> Fehler
(Es gibt zwar eine Möglichkeit auf Grund von Über und Unterdrücken in den Zylindern bei geschlossenen Ventilen, allerdings findet ein evtl. Rückdrehen nur direkt nach Motorstopp statt udn nicht 10 sec später)

Wenn es mit Downsampling nicht funktioniert werde ich versuchen die Fehler im Markierungsarray zu eleminieren.

Falls noch jemand weitere Ideen hat, immer her damit !!

Danke

Daniel !
Private Nachricht senden Benutzer-Profile anzeigen
 
bimmel
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2012, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

ich habe das ganze jetzt auch einmal gelesen und verstehe das Grundproblem noch nicht ganz.

Es gibt doch jetzt n-Kanäle die Messdaten mit 10ms schreiben und einen der mit 100ms Messdaten in der Datei speichert.

D.h. wenn 1 sec gemessen wird haben die n-Kanäle 100 Werte geschrieben, wobei der Kanal mit 100 ms nur 10 Werte hat.
Jetzt sind die beiden Felder ungleich groß und müssen doch nur angepasst werden. Da kann man doch jetzt entweder alles passend auf den mit 100 ms anpassen, was heißen würde man nimmt nur jeden 10 Wert aus den anderen Kanälen, oder man dupliziert den Wert des Kanals mit 100 ms, sodass er in ein gleiches Array passt für die restlichen Kanäle.

Wäre das nicht auch eine Lösung für dein Problem?

Grüße

bimmel
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2012, 07:59     Titel:
  Antworten mit Zitat      
Hallo zusammen
Ich habe nun das Eingangssignal genauer unter die Lupe genommen. Dieses ist für sich Punkt für Punkt stetig! (kw = Blaue Linie, auch im Array selbst)
Dennoch erkennt er eine unstetigkeit (rote Dots).
Der Fehler muss an meiner Abfrage liegen ! Vielleicht übersehe ich irgendwas bei den 4 Zeilen. ^^
Ich bin nicht so fit in Matlab und gehe komplett logisch vor.
Wenn jmd. eine elegantere Lösung als eine Schleife hat, bitte bescheid geben. Mit Der Funktion diff() sollte es auch irgendwie gehen.

Schöne Grüße
Daniel


index2=zeros(length(kw),1);

% 2. Bedingung; Kurbelwinkel konst
for i=1:length(index2)
if kw(i)==kw(i+1)
index2(i)=100;
end
end

index2_Fehler_1.gif
 Beschreibung:

Download
 Dateiname:  index2_Fehler_1.gif
 Dateigröße:  11.18 KB
 Heruntergeladen:  1074 mal
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: 20.07.2012, 09:20     Titel:
  Antworten mit Zitat      
Dann würde ich mal vermuten, dass zwei aufeinanderfolgende Werte doch nicht immer EXAKT gleich sein...und sei es die 4. Stelle hinter dem Komma. Somit liefert der Vergleich == eben nicht immer dein erwartetes Ergebnis.

Mit diesem Befehl kannst du die Darstellungsgenauigkeit erhöhen..
Code:


Du hast nun zwei Möglichkeiten:

- die Daten runden oder Nachkomma abschneiden
- statt einen Vergleich == einen Intervall max-min RPM bzw. ein Delta festlegen, innerhalb dann der Zustand definiert und gesetzt wird

Code:

delta = ... % z.B. innerhalb von 10 RPM

for i=1:length(index2) - 1 % es muss hier -1 heißen, da auf kw(i+1) zugegriffen wird. Im letzten Durchlauf wird ansonsten auf das Element kw(length(kw) + 1) zugegriffen, was nicht vorhanden ist. Wundert mich, dass dies bisher funktioniert hat. Eigentlich müsste index2 = zeros(length(kw)-1,1) definiert werden, da ansonsten der letzte Wert immer Null ist, da nie gesetzt wird. In dem Fall könnte man dann auch das -1 weglassen.

     if diff(kw(i:i+1) <= delta
        index2(i) = 100;
     end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2012, 11:36     Titel:
  Antworten mit Zitat      
Hi,
jop Tschuldigung, die -1 hatte ich eigentlich dabei. Habe ich wohl bei meinem letzten Experiment vergessen wieder hin zu machen.
Ich habe meine Messwerte auch bereits mittels "floor" gerundet sodass im Array definitiv die gleichen Werte stehen.
Einfache Abfrage Wert gleich nächster Wert führt zum selben Ergebnis.

Es kann sich hier auch niemand erklären wo der Fehler liegt...
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: 20.07.2012, 11:46     Titel:
  Antworten mit Zitat      
Kannst du nicht mal einen Datensatz des Kurbelwinkels anhängen, der für diese Funktion genutzt wird?

Hast du die Werte auch wirklich mal mit
Code:
dargestellt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2012, 12:04     Titel:
  Antworten mit Zitat      
Hallo
format long ergibt das gleiche Ergebnis.... Identische Werte !

Bin schon fast verzweifelt. Für mich ist dieser Fehler einfach unlogisch !!!!

Die Messdatei kann ich leider nicht hochladen. Die Werte sind streng vertraulich.

Grüße

Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel_Z
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2012, 12:34     Titel:
  Antworten mit Zitat      
Hallo zusammen !

Bin jetzt alles Schritt für Schritt nochmal durchgegangen...
Ich habe ein vorgefeertigtes Uigetfile Programm vom Kollegen bekommen. Dieses macht Mist!!! Probiere ich es mit einem Importmanager aus dem Internet (Inca2Matlab) dann funktioniert alles einwandfrei !!

Bei dem Programm Inca2Matlab kann man alles Mögliche einstellen und genau auswählen welche Messgrößen man braucht usw. Allerdings benötige ich das alles nicht. Mir reicht es wenn er die Messdatei.dat öffnet und bestimmte Variablen in den Workspace läd. Ähnlich wie das angehängte Programm. habt ihr eine alternative Lösung??

Vielen Dank im Voraus !!!

Daniel

if ~exist( 'com.itk.util.JMUtil', 'class' )
javaPath = fullfile( matlabroot, 'toolbox', 'Automat_M', 'Automat', 'BasLib', 'uitools', 'JMLibrary.jar' );
javaaddpath( javaPath );
addpath( genpath( fullfile( matlabroot, 'toolbox', 'Automat_M', 'Automat' ) ) );
addpath 'C:\Programme\MATLAB_v720_r06aPl\toolbox\AutoMAT_P\AutoMAT\BasLib\uitools'
getIcons();
end


finfo = uigetfile_kfr( 'filter', '*.dat', 'title', 'Messdatei laden' );
if isempty( finfo ), return; end

labels = {'Nkw_msa','Kw_pos','Kw_pos_zyl','Akt_zyl_abst'};
fname = [finfo.name];
dat = DatImportClass(finfo.fullname);
val = dat.getValue(labels,'style',dat.STRUCT);
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.