1

问题

我有两个数组(XaXb),它们包含相同物理信号的测量值,但它们是以不同的采样率进行的。最后,Xa数据的物理记录开始于与Xb不同的时间。数据的记录也会在不同的时间停止。

IE

(以下只是重要语句的总结,不是代码。)

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查找最小化版本XaXb之间的均方误差 (MSE)的索引,这些版本被编辑为具有相同的采样率(可能使用插值函数)。

我曾尝试过这样做,但似乎我总是有太多的自由度。有没有人可以阐明可能促进该过程的过程?

4

2 回答 2

1

假设您有两个具有恒定频率的样本,问题就简化为非常简单的问题:

找到scalelocation这样:

XaXb,在与其索引对应的时间戳处,与在location+ scale* 其索引对应 的时间戳处进行最佳匹配。

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


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

  1. 判断具有时间戳和值的两个样本的匹配程度
  2. 找到您的位置和比例参数的最佳组合

请注意,假设您正确完成了这两个步骤,则解决方案应该是找到最佳时间戳的最佳解决方案。当您正在寻找(整数)索引的变化时,将这些时间戳转换回索引可能不会导致真正的最佳值,但它应该非常接近。

于 2013-11-07T13:28:09.510 回答
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 比较大,那会好很多。

于 2013-11-07T18:48:07.973 回答