PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vergleich von Signalen



Koertis
10.02.2012, 09:19
Hallo, ich habe eine oder mehrere Fragen. Worum es geht:
Ich habe ein Inverses Pendel gebaut und muss nun alle Parameter des
neuen Modells bestimmen, sodass die Simulation der Realität entspricht.
Jetzt habe ich versucht ein Matlab Programm zu schreiben womit alle
Parameter mittels for-Schleifen erhöht werden. Somit erhalte ich sehr sehr sehr
viele Signale, aus denen ich die beste Konstellation heraussuchen muss.
Ich dachte mir das könnte ich mit einer Kreuzkorrelation machen, jedoch
kann ich diese nicht richtig deuten, denn zwei total unterschiedliche
Signale bilden beide eine Dreiecksfunktion, nur um einen Wert
verschoben.
Ich brauche aber, dass Phasenlage und Amplitude identisch ist.
Habt ihr eine Idee wie ich das bestmöglichst Lösen kann?

Lg Kurt

ePyx
10.02.2012, 10:27
Naja du kannst mit der KKF eine Phasenverschiebung ausgleichen/"messen" in dem du guckst wo der Korrelationsfaktor sein Maximum hat. Dann kannst du sie hinsichtlich des Betrages vergleichen.

Positionen im Vektor kann man mit Index ( Bedingung ) herausfinden. Dann Signale zu einander verschieben und vergleichen. (Maximalwert, Mittelwert oder Differenz etc nutzen)

Koertis
10.02.2012, 11:11
Hallo Daniel,
danke für deine schnelle Antwort.

Das heißt wenn die Phasenlage identisch ist, muss das Maximum genau bei der länge des Ursprungssingnals sein?
Denn length(KKF)=2*l-1

In meinem Fall hat mein Signal die länge 1395, beim Vergleich zum Simulierten Signal liegt das Maximum bei 1399. Ich finde aber das sich die Phase deutlich unterscheidet(im Bild).
Deshalb kommt mir der Wert von der Verschiebung 4 ein bisschen wenig vor.

Ich könnte die Differenz der beiden Signale bilden und schauen ob der Betrag des resultierenden Signals kleiner als mein gewünschter Fehler ist?
Was hällst du davon?
2145921460

ePyx
10.02.2012, 11:51
Das heißt wenn die Phasenlage identisch ist, muss das Maximum genau bei der länge des Ursprungssingnals sein?
Denn length(KKF)=2*l-1


Die Länge des Ergebnisses ist immer 2*N-1 Da das eine Signal A von links nach rechts über das andere Signal B geschoben wird.



Deshalb kommt mir der Wert von der Verschiebung 4 ein bisschen wenig vor.


Kommt auf die Zeitbasis an, also wie groß die Schrittweite zwischen 2 Punkten ist. bei 10ms wäre das immerhin 4*10ms=40ms Phasenverschiebung.

Da zwei exponentiell-gedämpfte Sinusfunktionen hast, würde ich für die KKF die Signale in ihrer Amplitude angleichen.


clear; close all;
%Mittelwertbefreiung
A = A-mean(A);
B = B-mean(B);
alpha = max(A);
A_1 = A./max(A)*max(B);
KK = xcorr(A_1, B);
offset = round(find ( KK == max(KK)) - length(KK)/2)
%minimale zeitliche Verschiebung finden
%und Signale entsprechend zuschneiden
for N = 1:length(A)-offset
Xdiff(N) = A_1(N + offset) - B(N);
end

Koertis
13.02.2012, 07:18
A_1 = A./max(A)*max(B);
KK = xcorr(A_1, B);


warum dividierst du hier durch die Multiplikation der Maxima und bildest dann die KK?

ePyx
13.02.2012, 08:00
Damit die Signale gleich groß sind. Schließlich hat der Betrag auch einen Einfluss auf die KK. Außerdem befreie ich es vorher noch vom Mittelwert (DC-Offset).

Koertis
13.02.2012, 13:39
ok super, danke! Dann werd ich das Programm mal die ganze Nacht durchlaufen lassen und hoffe das ich ein Ergebniss bekomme.
Dabei speichert und plottet mir Matlab die Werte welche ein Offset = 0 und ein max(abs(X_diff))<0.1 haben.

lg Kurt