2017-11-30 23 views
1

Ich habe zwei Sätze von Daten aus Experimenten, und sie sehen sehr ähnlich aus, außer dass es einen horizontalen Versatz zwischen ihnen gibt, was meiner Meinung nach auf einige Fehler in der Instrumenteneinstellung zurückzuführen ist. Angenommen, sie haben die Form y1=f(x1) und y2=f(x2)= f(x1+c), was ist der beste Weg, c zu bestimmen, so dass ich den Offset berücksichtigen kann, um zwei Datensätze zu überlagern, um ein Datensatz zu werden?Wie findet man eine Verzögerung zwischen zwei Datensätzen in Matlab?

Edit: sie meine Datensätze sagen (Index 1 und 2) hat die Form:

x1 = 0:0.2:10; 
y1 = sin(x1) 
x2 = 0:0.3:10; 
y2 = sin(x2+0.5) 

Natürlich werden die realen Daten etwas Lärm, aber sagen, dass die beste Lösung Funktionen, die oben Formen haben . Wie finde ich den Offset c=0.5? Ich habe mir die Kreuzkorrelation angesehen, bin mir aber nicht sicher, ob sie zwei Datensätze mit unterschiedlicher Anzahl von Daten (und unterschiedlichen Schrittgrößen) verarbeiten können. Was ist, wenn die Offset-Werte tatsächlich zwischen zwei Datenpunkten liegen? Kreuzkorrelation gibt nur den Index der Daten im Array zurück, nicht etwas dazwischen, wenn ich es richtig verstehe.

+0

Ich würde 'xcorr' oder' conv' verwenden und den Index des Maximums finden. Lieber ein kleines Beispiel mit aktuellen Daten posten, um genauere Hilfe zu bekommen. –

+0

Dieses Problem ist gelöst [HIER] (https://www.mathworks.com/help/signal/ref/xcorr.html?requestedDomain=www.mathworks. com). – jsanalytics

+0

_... nicht sicher, ob sie zwei Datensätze mit unterschiedlicher Anzahl von Daten verarbeiten können ..._ => Korrelationsberechnung ist abhängig von einer bestimmten Abtastrate. Wenn Sie unterschiedliche Abtastraten haben, sollten Sie für diese Berechnung den höchsten auswählen. – jsanalytics

Antwort

1

Dieser Matlab Skript berechnet die zufällige Versatz von -pi/2 bis + pi/2 zwischen zwei Sinuswellen:

clear; 
C= pi*(rand-0.5); % should be between -pi/2 and +pi/2 
N=200; % should be large enough for acceptable sampling rate 
N1=20; % fraction for Ts1 
N2=30; % fraction for Ts2 
Ts1=abs(C*N1/N); % fraction of C for accuracy 
Ts2=abs(C*N2/N); % fraction of C for accuracy 
Ts=min(Ts1,Ts2); % select highest sampling rate (smaller period) 
fs=1/Ts; 
P=4; % number of periods should be large enough for well defined correlation plot 

x1 = 0:Ts:P*2*pi; 
y1 = sin(x1); 
x2 = 0:Ts:P*2*pi; 
y2 = sin(x2+C); 

subplot(3,1,1) 
plot(x1,y1); 
subplot(3,1,2); 
plot(x2,y2); 

[cor,lag]=xcorr(y1,y2); 
subplot(3,1,3); 
plot(lag,cor); 

[~,I] = max(abs(cor)); 
lagdiff = lag(I); 
timediff=lagdiff/fs; 

Im besonderen Fall unten C = timediff = 0.5615:

enter image description here

enter image description here

1

schreiben Sie eine Funktion, die die Zeit nimmt e Verschiebung als Eingabe und berechnet Effektivwerte zwischen überlappenden Teilen der beiden Datensätze. Dann finden Sie das Minimum dieser Funktion unter Verwendung der Optimierung (fminbnd)

Verwandte Themen