使用光谱相干性计算时间序列数据之间的相似性

信息处理 连贯性
2022-02-01 09:07:12

我对信号处理一无所知。我需要找到两个一维时间序列之间的相似性。我在某处读到光谱相干性可用于查找两个时间序列之间的相似性。但我无法解决如何使用它。有人可以告诉我如何使用它来计算时间序列之间的相似性。

1个回答

检查时间序列之间相似性的一种方法是使用互相关: 其中的平均值,的标准差。

ρxy(τ)=1σxσyE[(x[n]μx)(y[n]μy)]
μx,yxyσx,yxy

这给了我们一个介于 -1(完全反相关)和 +1(完全相关)之间的值。

有时,这并不像我们希望的那样工作,因为有一些与两个时间序列相关的过滤操作,所以虽然两个时间序列之间有很强的关系,但互相关不是很接近 1。

因此,有时会使用光谱相干性: 其中之间的交叉谱密度

Cxy(f)=|Gxy(f)|2Gxx(f)Gyy(f)
Gkmkm

现在这是频率的函数,在给定频率下它越接近 1,这两个信号的相关性越密切。

我整理了一个简单的例子R,说明了互相关和(光谱)相干之间的区别。

上图显示了两个时间序列。中图显示互相关小于 1。下图显示频谱相干性作为频率的函数。

在此处输入图像描述

您可以看到,时间序列在较高频率下的相似性与在低频下的相似。

有时,这些值的积分会在有限的带宽上使用,以便得到一个相似度数。


下面的R代码

  #15466

  x1 <- rnorm(1000)

  h <- c(1,3,2,1)/7
  x2 <- filter(x1,h, circular=TRUE) + rnorm(1000)/10

  par(mfrow=c(3,1))

  plot(x1,type="l",col="blue")
  lines(x2, col="green",lwd=5)
  title("Original and filtered noise signals")

  ccf(x1,x2)

  Ixy <- spectrum(cbind(x1,x2), plot=FALSE,spans=c(5,7))

  plot(Ixy$coh)h)