如何在Matlab中找到两组数据之间的延迟?

How to find delay between two sets of data in Matlab?

我有两组实验数据,它们看起来非常相似,除了它们之间有一个水平偏移,我认为这是由于仪器设置中的一些错误。假设它们有y1=f(x1)y2=f(x2)= f(x1+c)的形式,确定c的最佳方法是什么,这样我就可以考虑偏移量将两个数据集叠加成为一个数据集?

编辑: 假设我的数据集(索引 1 和 2)具有以下形式:

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

当然,真实的数据会有一些噪音,但是说最适合的函数有上面的形式。如何找到偏移量 c=0.5?我研究了互相关,但我不确定它们是否可以处理具有不同数据量(和不同步长)的两个数据集。另外,如果偏移值实际上落在两个数据点之间怎么办?仅互相关 returns 数组中数据的索引,如果我理解正确,则不会介于两者之间。

这个Matlab脚本计算两个正弦波之间从-pi/2到+pi/2的随机偏移:

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;

在下面的特定情况下,C = timediff = 0.5615

编写一个函数,将时移作为输入并计算两个数据集重叠部分之间的均方根。然后使用优化 (fminbnd)

找到这个函数的最小值