【问题标题】:Mid point of cross correlate交叉相关的中点
【发布时间】:2012-08-30 09:12:19
【问题描述】:

我有两个数据集(x1,y1)(x2,y2),其中第一个数据集比第二个数据集长,这意味着x1[0]<x2[0]x1[-1]>x2[0]。但是第一个数据集到每一边的长度一般是不一样的。

我使用 scipy 交叉关联

ycorr = scipy.correlate(y1,y2,mode='valid')
xcorr = np.linspace( 0,len(ycorr)-1,len(ycorr) )

我的问题是我如何找到互相关的中点 = 如果两个数据集具有相同的长度和 mode='valid',则计算 ycorr 的点。 所以中点不是 xcorr[len(xcorr)/2]。

我的问题可能很难理解,所以如果有不清楚的地方,请询问。

编辑

要找到中点,我们必须查看端点的长度。那么最后x1x2 长多少。

中点由下式给出

for i in xrange( len(x1)-1 ):
    if x1[i]<x2[-1] and x1[i+1]>x2[-1]:
        I = i
        break

mid_point = (len(y1[I:-1])+len(y1[I+1:-1]))/2

【问题讨论】:

  • 问题:1/“第一个数据集比第一个数据集长的地方”:你的意思是“第二个”,对吗? 2/ 你将 y1 & y2 关联起来;但是在第一段中,您比较了 x1 和 x2? 3/ 我对 correlate() 不太熟悉,但是使用 mode='valid',它似乎只返回 y1 和 y2 重叠的值;但这仍然不会返回一个点(“一点”)。哪一点?最好的猜测是,您需要 x1 或 x2 中的一个点对应于输出相关性的中点,假设 y1 在长度上与 x1 匹配,并且对于 y2 和 x2 也是如此。对吗?
  • 1:是的。我已经更新了帖子。 2:我将 y1 和 y2 关联起来,因为这就是人们用来进行关联的方式。 3:没错。 mode='valid' 返回第一个和第二个数据集重叠的点。如果计算了互相关并且两个数据集具有相同的长度(len(x1)=len(x2)),我正在谈论的单点将是这一点。那是对的。 x1 和 y1 的长度相同(x2 和 y2 同上)。

标签: python scipy cross-correlation


【解决方案1】:

根据documentation,当你在'valid'模式下关联y1(长度N+1)和y2(长度M+1,与M&lt;=N)时,中间的N-M+1=(N+1)-(M+1)+1输出值返回,从M开始[在'full'模式下,值从0返回到N+M,在'same'模式下,N中间值从(M-1)/2开始返回]

所以,你应该有len(ycorr) = len(y1)-len(y2)+1=1,如果两个向量的大小相同)

对于range(len(ycorr)) 中的所有i,您还拥有ycorr[i] = np.correlate(y1[i:len(y2)+i], y2, "valid")

【讨论】:

  • 是的,我有len(ycorr)=len(y1)-len(y2)+1,但这并没有给我我正在寻找的中间点。
  • 您的中点不是取决于您从y1 开始的位置吗(cf 编辑)?
  • 没错!很难正确解释。我的中点取决于 y2 相对于 y1 的起点。
  • 我在编辑中给出的公式在哪些方面对您没有帮助?
  • 嗯,它没有给我中间点。或者我看不出更精确的中点是什么。
猜你喜欢
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多