我有两个阵列( 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)的索引>被编辑为具有相同的采样率(可能使用插值函数)。
我试图这样做,但似乎我总是有太多的自由度。是否有人可以对可能促进这一过程的过程有所了解?
答案 0 :(得分:1)
假设您有两个频率恒定的样本,问题就变得非常简单了:
查找scale
,location
,以便:
Xa
,在与其索引对应的时间戳上,与Xb
+ location
*其索引对应的timstamp与scale
进行最佳匹配。
如果您同意这一点,您可以看到只留下两个自由度,如果您知道采样率的比率,它甚至会降低到只有1个自由度。
我相信现在困难的部分已经完成,但仍有一些工作要做:
请注意,假设您正确完成了这两个步骤,解决方案应该是找到最佳时间戳的最佳选择。当您正在寻找(整数)索引的转换时,将这些时间戳转换回索引可能不会产生真正的最佳值,但它应该非常接近。
答案 1 :(得分:0)
这是一个快速而肮脏的解决方案,应该足以让您入门。鉴于您分别在Xa
和Xb
采样的输入信号sampleRatea
和sampleRateb
:
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,那将会好得多。