匹配两组具有不同记录开始时间和结束时间的测量数据

时间:2013-11-07 04:47:06

标签: matlab optimization matching sample-rate

问题

我有两个阵列( Xa Xb ),其中包含相同物理信号的测量值,但它们是在处获取的不同的采样率。最后, Xa 数据的物理日志记录在与 Xb 相同的时间开始。数据记录也会在不同时间停止。

(以下只是重要陈述的摘要,而不是代码。)

sampleRatea > sampleRateb % Resolution of Xa is greater than that of Xb
t0a ~= t0b % Start times are not equal
t1a ~= t1b % End times are not equal

目的

找出必要的指数转换,以便最好地排列这些数据集。

方法

使用 fmincon 查找最小化版本 Xa Xb 均方误差(MSE)的索引>被编辑为具有相同的采样率(可能使用插值函数)。

我试图这样做,但似乎我总是有太多的自由度。是否有人可以对可能促进这一过程的过程有所了解?

2 个答案:

答案 0 :(得分:1)

假设您有两个频率恒定的样本,问题就变得非常简单了:

查找scalelocation,以便:

Xa,在与其索引对应的时间戳上,与Xb + location *其索引对应的timstamp与scale进行最佳匹配。

如果您同意这一点,您可以看到只留下两个自由度,如果您知道采样率的比率,它甚至会降低到只有1个自由度。


我相信现在困难的部分已经完成,但仍有一些工作要做:

  1. 判断时间戳和值匹配的两个样本有多好(
  2. 找到您的位置和比例参数的最佳组合
  3. 请注意,假设您正确完成了这两个步骤,解决方案应该是找到最佳时间戳的最佳选择。当您正在寻找(整数)索引的转换时,将这些时间戳转换回索引可能不会产生真正的最佳值,但它应该非常接近。

答案 1 :(得分:0)

这是一个快速而肮脏的解决方案,应该足以让您入门。鉴于您分别在XaXb采样的输入信号sampleRateasampleRateb

g = gcd(sampleRatea,sampleRateb);
Ya = interp(Xa,sampleRateb/g);
Yb = interp(Xb,sampleRatea/g);
Yfs = sampleRatea*sampleRateb/g;

[acor,lag] = xcorr(Ya,Yb);
time_shift = lag(acor == max(acor))/Yfs;

变量time_shift将告诉您从A开始到B开始之间经过的时间。如果B先开始,结果将是负数。

如果你的抽样率相对较高,这将是非常低效的。如果一个是另一个的整数倍,或者它们具有相对大的GCD,那将会好得多。