互相关后持续时移

问题描述 投票:0回答:1

我有两个数据集,每个数据集包含对象的 x 和 y 位置数据。使用不同的传感器对数据进行采样。其中一组数据的采样频率为 125 Hz,另一组的采样频率为 500 Hz。我已将 125Hz 数据重新采样为 500Hz,并且希望对齐数据。第一张图显示了时间对齐之前的数据(插值125Hz->500Hz之后) No time shift 第二个显示了根据互相关计算出的时移之后的情况(x 顶部图,y 底部图): Time shift after cross correlation

原始数据:https://drive.google.com/drive/folders/1shiw8HZmcDydLYanR0nlvoy3iKYt7Ij9?usp=sharing

这就是我计算相关性和时移的方法。 (属于较大班级的一部分,所以我只是发布了内容 - 不介意,例如“i in range(3)”)

from scipy.signal import correlate

    def cross_correlation(self):
        cross_cor_vec = [
            correlate(
                self.tar500.iloc[:, i],
                self.act125.iloc[:, i],
                mode="full",
            )
            for i in range(3)
        ]
        return cross_cor_vec


    def get_time_shift(self):
        cross_cor_vec = self.cross_correlation()
        normalization_factors = [
            np.sqrt(
                np.sum(self.tar500.iloc[:, i] ** 2)
                * np.sum(self.act125.iloc[:, i] ** 2)
            )
            for i in range(3)
        ]
        correlation_coefficients = [
            cross_cor_vec[i] / normalization_factors[i] for i in range(3)
        ]
        # Find the max correlation among the correlation coefficients.
        corr_dict = {
            np.argmax(correlation_coefficients[i]): np.max(correlation_coefficients[i])
            for i in range(3)
        }
        index_max_corr = max(zip(corr_dict.values(), corr_dict.keys()))[1]
        time_shift = index_max_corr - len(self.act125.x - 1)
        self.tar500.drop(
            self.tar500.index[:time_shift], inplace=True
        )
        self.tar500.reset_index(drop=True, inplace=True)
        self.tar500.drop(
            self.tar500.index[len(self.act125) :], inplace=True
        )

从图中可以看出,即使在互相关之后,仍然存在明显的时移。 我还针对动态时间扭曲检查了数据 - 从纯粹的视觉检查来看,它可以更好地对齐数据。

我在这里缺少什么?

尝试使用 scipy.signal 关联并使用 np.argmax() 进行时移

python pandas scipy signal-processing correlation
1个回答
0
投票

您的信号具有较大的直流偏移,因此您不会关联两个小正弦波段,而是关联大(负)基座上的两个小正弦波段。

为了获得所需的相关性,您需要去除直流分量。您通常会应用支持有限的高通滤波器,在开始/结束时切断过滤信号中混乱的部分,然后应用相关性。

不幸的是,您没有足够的信号来应用足够长的高通滤波器来通过感兴趣的部分。如果您无法在开始和结束时获得更多样本,那么您可以通过复制前几个/最后几个样本的平均值来扩展它。

© www.soinside.com 2019 - 2024. All rights reserved.