Verfasst am: 06.05.2013, 13:52
Titel: Fehlersuche: Bearbeitung von Messwerten
Hallo,
ich habe ein Spannungssignal, das mehrere Maxima aufweist. Dabei gibt das Signal von Maximum zu Maximum die Dauer einer Umdrehung an. Mithilfe von diesem Signal möchte ich die Signale der anderen Messwerte periodisieren.
Ein Ausschnitt des Spannungssignals:
0,684003115
0,790118834
5,073302251
4,98425191
4,944960291
4,998100601
5,011788262
0,735531227
0,754371196
Alle Maxima liegen zwischen 4 & 6.
Bis jetzt habe ich geschafft, dass mir alle Maxima aus diesem Vektor angezeigt werden. Nun möchte ich den neuen Vektor (Sample, Amplitude) so bearbeiten, dass ich pro Abschnitt der hohen Messwerte nur EINEN in dem Vektor behalte. Mein Ziel ist es einen Vektor zu bekommen, indem ich von Eintrag zu Eintrag exakt eine Umdrehung darstellen kann.
Achso dazu ist noch zu sagne, dass so ein hoher Bereich ca alle 515 Samples auftritt.
Was ich bis jetzt habe:
Code:
A = X1; % X1 ist Spannungssignal-Signal
n1 = 0;
for k=2:1:length(A)-1 %k ist sample
if A(k)>4 & A(k)<6 if A(k-1)<A(k) & A(k)>A(k+1) %Überprüfung auf Hochpunkt
n1 = n1 + 1;
C(n1,1) = k; % Speichern der Koordinaten der
C(n1,2) = A(k); % Hochpunkte in Matrix C end end end
for n1=1:1:length(C)-1 if C(n1+1,1)-C(n1,1) < 400% Sicherstellen, dass in dem Bereich
E(n1,1) = C(n1+1,1); % des Peaks nur EIN lokales Max. betrachtet
n1 = n1+1; % wird else
E(n1,1) = C(n1,1);
end
D(n1,1) = C(n1,1); % Speichern in neuer Matrix D
D(n1,2) = C(n1,2);
end
D = D(D~=0); % eliminiert die "Null-Einträge" in D => jeder Eintrag in D steht % jetzt für EINE Umdrehung
Hallo Stephi,
ich habe noch nicht ganz herausgelesen, was Du als Ergebnis haben willst. Aber wie es aussieht, ist das Signal ja relativ stabil, so dass Du mit einem einfachen Schwellwert schon relativ weit kommst:
mit dem C(n1,1)=C(n1,1) also statt E(was ich erst nachträglich zur Überprüfung der Zwischenschritte eingeführt hatte) wollte ich eine "Umsortierung" des Vektors C erreichen.
Das Problem, das ich damit umgehen möchte ist, dass ich nach der Suche der Maxima mehrere (pro hohen Bereich) z.B. für den Ausschnitt von oben 5,073 und 5,011 mit den dazugehörigen Samples bekomme. Ich möchte einen Vektor aufstellen, in dem jeder hohe Bereich mit nur EINEM Wert (Anzahl Samples bis dahin, sprich 1.Spalte aus C) steht, weil die Abstände von dem einen hohen Bereich zum nächsten genau EINER Umdrehung entsprechen. Auf diese eine Umdrehung bzw. später 2,3,4....Umdrehungen möchte ich meine anderen Signale beziehen. D.h. ich benötige beispielsweise einen Wert aus dem 1.hohen Bereich 89(Sample) und einen Wert aus dem 2.hohen Bereich 602(Sample) um dann die anderen Signale von Sample 89 bis Sample 602 laufen zu lassen (später auch weiter zu bearbeiten und speichern).
ich habe versucht es noch einmal besser zu beschreiben. Leider verstehe ich nicht was der Befehl von dir machen würde. Ich habe die Funktionen nachgeschaut, bekomme aber irgendwie keinen Zusammenhang rein. Kannst du mir bitte kurz erläutern was dieser Code macht?
Das ist das erste Mal das ich mit Matlab arbeite, daher kenne ich mich noch nicht gut aus.
schwelle = 4; % selbst festgelegt
C>schwelle; % ist ein logischer Ausdruck, der 0 oder 1 liefert. 1 = wenn C> schwelle ist
% Ergebnisvektor: 0 0 1 1 1 1 1 0 0
diff(C>schwelle)% Berechnet die Differenz vom Ergebnisvektor % Ergebnis: 0 1 0 0 0 0 -1 0
zeitpunkte = find(diff(C>schwelle)>0); % jetzt wird nach dem Index des Vektor [0 1 0 0 0 0 -1 0] gesucht, an dem ein Wert > 0 vorliegt
% Das Ergebnis ist somit: zeitpunkte = 2, denn hier beginnen die Werte über die Schwelle zu steigen, während sie bei C(7) wieder unter die Schwelle gefallen sind.
Ich habe es ausprobiert und es funktioniert soweit sehr gut. Allerdings bekomme ich als Ergebnis nicht die Werte, die ich benötige, sondern immer den vorherigen Eintrag.
Liegt das an dem diff Befehl? Kann ich das irgendwie umgehen?
Ich habe es schon selbst mit "zeitpunkte=zeitpunkte+1" gelöst. Vielleicht nicht die eleganteste Lösung, aber jetzt passt es.
Vielen Dank nochmal :-)
Stephi
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.